o
    jB                  	   @  s  U d dl mZ d dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ g d
ZdOddZeeeeee f ge f Z!e	d Z"	 ddhZ#h dZ$G dd de%Z&G dd de%Z'G dd de%Z(G dd deZ)dPddZ*dQd!d"Z+	#dRdSd)d*Z,d+d, d-d, d.d, ej-ej-ej.ej-d/d, d0Z/d1e0d2< dTd:d;Z1dUd=d>Z2dVdBdCZ3dWdFdGZ4dXdHdIZ5G dJdK dKZ6dYdMdNZ7dS )Z    )annotationsN)AbstractSetCallableLiteralMapping	TypedDictUnioncast   )
MarkerAtom
MarkerListOpValueVariable)parse_marker)ParserSyntaxError)InvalidSpecifier	Specifiercanonicalize_name)EnvironmentEvaluateContextInvalidMarkerMarkerUndefinedComparisonUndefinedEnvironmentNamedefault_environmentreturn	list[str]c                   C  s   t S N)__all__ r!   r!   R/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/packaging/markers.py__dir__   s   r#   )metadata	lock_filerequirementextrasdependency_groups>   python_full_versionplatform_releasepython_versionimplementation_versionc                   @     e Zd ZdZdS )r   zRaised when attempting to create a :class:`Marker` from invalid input.

    This error indicates that the given marker string does not conform to the
    :ref:`specification of dependency specifiers <pypug:dependency-specifiers>`.
    N__name__
__module____qualname____doc__r!   r!   r!   r"   r   6       r   c                   @  r-   )r   zRaised when evaluating an unsupported marker comparison.

    This can happen when marker values are compared as versions but do not
    conform to the :ref:`specification of version specifiers
    <pypug:version-specifiers>`.
    Nr.   r!   r!   r!   r"   r   >   r3   r   c                   @  r-   )r   zJRaised when evaluating a marker that references a missing environment key.Nr.   r!   r!   r!   r"   r   G   r3   r   c                   @  s~   e Zd ZU dZded< 	 ded< 	 ded< 	 ded< 	 ded< 	 ded< 	 ded	< 	 ded
< 	 ded< 	 ded< 	 ded< dS )r   z
    A dictionary that represents a Python environment as captured by
    :func:`default_environment`. All fields are required.
    strimplementation_namer,   os_nameplatform_machiner*   platform_systemplatform_versionr)   platform_python_implementationr+   sys_platformN)r/   r0   r1   r2   __annotations__r!   r!   r!   r"   r   K   s0   
 r   resultMarkerList | MarkerAtom | strc                 C  sp   t | ts| S | \}}}t |tr |jdkr t|j}t|}nt |tr3|jdkr3t|j}t|}|||fS )Nextra)
isinstancetupler   valuer   r   )r=   lhsoprhsZnormalized_extrar!   r!   r"   _normalize_extras   s   





rF   resultsr   c                 C  s   dd | D S )z!
    Normalize extra values.
    c                 S  s   g | ]}t |qS r!   )rF   ).0rr!   r!   r"   
<listcomp>       z+_normalize_extra_values.<locals>.<listcomp>r!   )rG   r!   r!   r"   _normalize_extra_values   s   rL   Tmarkerlist[str] | MarkerAtom | strfirstbool | Noner4   c                 C  s   t | tttfs
J t | tr$t| dkr$t | d ttfr$t| d S t | tr@dd | D }|r7d|S dd| d S t | trOddd	 | D S | S )
Nr
   r   c                 s  s    | ]	}t |d dV  qdS )F)rO   N)_format_markerrH   mr!   r!   r"   	<genexpr>   s    z!_format_marker.<locals>.<genexpr> ()c                 S  s   g | ]}|  qS r!   )	serializerR   r!   r!   r"   rJ      rK   z"_format_marker.<locals>.<listcomp>)r@   listrA   r4   lenrQ   join)rM   rO   innerr!   r!   r"   rQ      s   


rQ   c                 C  s   | |v S r   r!   rC   rE   r!   r!   r"   <lambda>       r^   c                 C  s   | |vS r   r!   r]   r!   r!   r"   r^      r_   c                 C     dS NFr!   Z_lhsZ_rhsr!   r!   r"   r^          c                 C  r`   ra   r!   rb   r!   r!   r"   r^      rc   )inznot in<z<=z==z!=z>=>zdict[str, Operator]
_operatorsrC   rD   r   rE   str | AbstractSet[str]keyboolc                C  s~   |  }|tv r#z
t| | }W n	 ty   Y nw |j| ddS t|}|d u r:td|d| d|d|| |S )NT)prereleasesz
Undefined z on z and .)rX   MARKERS_REQUIRING_VERSIONr   r   containsrg   getr   )rC   rD   rE   ri   Zop_strspecoperr!   r!   r"   _eval_op   s   

rr   "tuple[str, str | AbstractSet[str]]c                 C  sb   |dkrt |tsJ d| |fS |tv r-t |tr"t| t|fS t| dd |D fS | |fS )Nr?   zextra value must be a stringc                 S  s   h | ]}t |qS r!   r   )rH   vr!   r!   r"   	<setcomp>   rK   z_normalize.<locals>.<setcomp>)r@   r4   MARKERS_ALLOWING_SETr   )rC   rE   ri   r!   r!   r"   
_normalize   s   
rw   markersenvironment!dict[str, str | AbstractSet[str]]c           
   	   C  s   g g}| D ]k}t |tr|d t|| qt |tr[|\}}}t |tr1|j}|| }|j}	n
|j}|j}|| }	t |tsDJ dt||	|d\}}	|d t	|||	|d q|dkre|g  q|dkrjqt
d|tdd |D S )	Nzlhs must be a string)ri   orandzUnexpected marker c                 s  s    | ]}t |V  qd S r   )all)rH   itemr!   r!   r"   rT     s    z$_evaluate_markers.<locals>.<genexpr>)r@   rY   append_evaluate_markersrA   r   rB   r4   rw   rr   	TypeErrorany)
rx   ry   groupsrM   rC   rD   rE   Zenvironment_key	lhs_value	rhs_valuer!   r!   r"   r      s,   



r   infosys._version_infoc                 C  sB   | j  d| j d| j }| j}|dkr||d t| j 7 }|S )Nrl   finalr   )majorminormicroreleaselevelr4   serial)r   versionkindr!   r!   r"   _format_full_version  s
   r   c                  C  s^   t tjj} tjj}|| tjt t t	 t t
 t dt dd tjdS )zReturn the default marker environment for the current Python process.

    This is the base environment used by :meth:`Marker.evaluate`.
    rl   N   )r5   r,   r6   r7   r*   r8   r9   r)   r:   r+   r;   )r   sysimplementationr   nameosplatformmachinereleasesystemr+   python_implementationr[   python_version_tuple)iverr5   r!   r!   r"   r   '  s   r   c                   @  s   e Zd ZdZdZd*ddZed+ddZd,ddZd,ddZ	d-ddZ
d.ddZd,ddZd/ddZd0ddZd0d d!Z	"	#d1d2d(d)Zd"S )3r   a  Represents a parsed dependency marker expression.

    Marker expressions are parsed according to the
    :ref:`specification of dependency specifiers <pypug:dependency-specifiers>`.

    :param marker: The string representation of a marker expression.
    :raises InvalidMarker: If ``marker`` cannot be parsed.

    Instances are safe to serialize with :mod:`pickle`. They use a stable
    format so the same pickle can be loaded in future packaging releases.

    .. versionchanged:: 26.2

        Added a stable pickle format. Pickles created with packaging 26.2+ can
        be unpickled with future releases.  Backward compatibility with pickles
        from packaging < 26.2 is supported but may be removed in a future
        release.
    )_markersrM   r4   r   Nonec              
   C  sB   g | _ z
tt|| _ W d S  ty  } ztt||d }~ww r   )r   rL   _parse_markerr   r   r4   )selfrM   er!   r!   r"   __init__S  s   zMarker.__init__rx   r   c                 C  s   |  | }||_|S )zCreate a Marker instance from a pre-parsed marker tree.

        This avoids re-parsing serialised marker strings when combining markers.
        )__new__r   )clsrx   newr!   r!   r"   _from_markersq  s   
zMarker._from_markersc                 C  s
   t | jS r   )rQ   r   r   r!   r!   r"   __str__{  s   
zMarker.__str__c                 C  s   d| j j dt| dS )Nre   rV   z)>)	__class__r/   r4   r   r!   r!   r"   __repr__~  s   zMarker.__repr__intc                 C  s   t t| S r   )hashr4   r   r!   r!   r"   __hash__  s   zMarker.__hash__otherobjectrj   c                 C  s   t |tstS t| t|kS r   )r@   r   NotImplementedr4   r   r   r!   r!   r"   __eq__  s   
zMarker.__eq__c                 C  s   t | S r   )r4   r   r!   r!   r"   __getstate__  s   zMarker.__getstate__statec              
   C  s   t |tr$z
tt|| _W d S  ty# } ztd||d }~ww t |tr;d|v r;|d }t |tr;|| _d S t |t	rat
|dkra|\}}t |trad|v ra|d }t |tra|| _d S td|)NzCannot restore Marker from r   r   )r@   r4   rL   r   r   r   r   dictrY   rA   rZ   )r   r   excrx   _Z	slot_dictr!   r!   r"   __setstate__  s*   


zMarker.__setstate__c                 C  "   t |tstS | | jd|jgS )Nr}   r@   r   r   r   r   r   r!   r!   r"   __and__     
zMarker.__and__c                 C  r   )Nr|   r   r   r!   r!   r"   __or__  r   zMarker.__or__Nr$   ry   +Mapping[str, str | AbstractSet[str]] | Nonecontextr   c                 C  s   t dt }|dkr|jt t d n|dkrd|d< |dur:|| d|v r:t d|d }|r6t|nd|d< t| jt|S )	a"  Evaluate a marker.

        Return the boolean from evaluating this marker against the environment.
        The environment is determined from the current Python process unless
        passed in explicitly.

        :param environment: Mapping containing keys and values to override the
           detected environment.
        :param EvaluateContext context: The context in which the marker is
            evaluated, which influences what marker names are considered valid.
            Accepted values are ``"metadata"`` (for core metadata; default),
            ``"lock_file"``, and ``"requirement"`` (i.e. all other situations).
        :raises UndefinedComparison: If the marker uses a comparison on values
            that are not valid versions per the :ref:`specification of version
            specifiers <pypug:version-specifiers>`.
        :raises UndefinedEnvironmentName: If the marker references a value that
            is missing from the evaluation environment.
        :returns: ``True`` if the marker matches, otherwise ``False``.

        rz   r%   )r'   r(   r$    r?   Nz
str | None)r	   r   update	frozensetr   r   r   _repair_python_full_version)r   ry   r   current_environmentr?   r!   r!   r"   evaluate  s"   

zMarker.evaluate)rM   r4   r   r   )rx   r   r   r   )r   r4   )r   r   )r   r   r   rj   )r   r   r   r   )r   r   r   r   )Nr$   )ry   r   r   r   r   rj   )r/   r0   r1   r2   	__slots__r   classmethodr   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   r   =  s"    

	






r   envc                 C  s*   t d| d }|dr| d| d< | S )z
    Work around platform.python_version() returning something that is not PEP 440
    compliant for non-tagged Python builds.
    r4   r)   +local)r	   endswith)r   r)   r!   r!   r"   r     s   
r   )r   r   )r=   r>   r   r>   )rG   r   r   r   )T)rM   rN   rO   rP   r   r4   )
rC   r4   rD   r   rE   rh   ri   r4   r   rj   )rC   r4   rE   rh   ri   r4   r   rs   )rx   r   ry   rz   r   rj   )r   r   r   r4   )r   r   )r   rz   r   rz   )8
__future__r   operatorr   r   r   typingr   r   r   r   r   r   r	   _parserr   r   r   r   r   r   r   Z
_tokenizerr   
specifiersr   r   utilsr   r    r#   r4   rj   Operatorr   rv   rm   
ValueErrorr   r   r   r   rF   rL   rQ   eqnerg   r<   rr   rw   r   r   r   r   r   r!   r!   r!   r"   <module>   sV   $
		
M
	



!
 &