U
    ZSh/                  	   @  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 d
dddddgZe	eeeee f gef Z e
d Z!ddh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'dddddZ(dBdddd d!d"Z)d#d$ d%d$ ej*ej+ej,ej-ej.ej/d&Z0d'e1d(< dd)d*d+d,d-d.Z2dd*dd/d0d1d2Z3d3d4d+d5d6d7Z4d8dd9d:d;Z5dd<d=dZ6G d>d dZ7d4d4d?d@dAZ8dS )C    )annotationsN)AbstractSetAnyCallableLiteral	TypedDictUnioncast   )
MarkerAtom
MarkerListOpValueVariable)parse_marker)ParserSyntaxError)InvalidSpecifier	Specifiercanonicalize_nameEvaluateContextInvalidMarkerMarkerUndefinedComparisonUndefinedEnvironmentNamedefault_environment)metadata	lock_filerequirementextrasdependency_groupsc                   @  s   e Zd ZdZdS )r   zE
    An invalid marker was found, users should refer to PEP 508.
    N__name__
__module____qualname____doc__ r&   r&   D/root/rtd-docs/venv/lib/python3.8/site-packages/packaging/markers.pyr   !   s   c                   @  s   e Zd ZdZdS )r   zP
    An invalid operation was attempted on a value that doesn't support it.
    Nr!   r&   r&   r&   r'   r   '   s   c                   @  s   e Zd ZdZdS )r   z\
    A name was attempted to be used that does not exist inside of the
    environment.
    Nr!   r&   r&   r&   r'   r   -   s   c                   @  sf   e Zd ZU 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 )Environmentstrimplementation_nameimplementation_versionos_nameplatform_machineplatform_releaseplatform_systemplatform_versionpython_full_versionplatform_python_implementationpython_versionsys_platformN)r"   r#   r$   __annotations__r&   r&   r&   r'   r(   4   s   
r(   r   )resultsreturnc                 C  s|   t | d trx| d \}}}t |trD|jdkrDt|j}t|}n&t |trj|jdkrjt|j}t|}|||f| d< | S )z!
    Normalize extra values.
    r   extra)
isinstancetupler   valuer   r   )r6   lhsoprhsnormalized_extrar&   r&   r'   _normalize_extra_values|   s    


r@   Tzlist[str] | MarkerAtom | strzbool | Noner)   )markerfirstr7   c                 C  s   t | tttfstt | trHt| dkrHt | d ttfrHt| d S t | trdd | D }|rnd|S dd| d S n"t | trddd	 | D S | S d S )
Nr
   r   c                 s  s   | ]}t |d dV  qdS )F)rB   N)_format_marker.0mr&   r&   r'   	<genexpr>   s     z!_format_marker.<locals>.<genexpr> ()c                 S  s   g | ]}|  qS r&   )	serializerD   r&   r&   r'   
<listcomp>   s     z"_format_marker.<locals>.<listcomp>)r9   listr:   r)   AssertionErrorlenrC   join)rA   rB   innerr&   r&   r'   rC      s     



rC   c                 C  s   | |kS Nr&   r<   r>   r&   r&   r'   <lambda>       rT   c                 C  s   | |kS rR   r&   rS   r&   r&   r'   rT      rU   )inznot in<z<=z==z!=z>=>zdict[str, Operator]
_operatorsr   zstr | AbstractSet[str]bool)r<   r=   r>   r7   c                 C  s   t |trHztd| |g}W n tk
r8   Y nX |j| ddS t| }|d krzt	d|d| d|d|| |S )N T)prereleasesz
Undefined z on z and .)
r9   r)   r   rP   rK   r   containsrY   getr   )r<   r=   r>   specoperr&   r&   r'   _eval_op   s    
rb   z"tuple[str, str | AbstractSet[str]])r<   r>   keyr7   c                 C  sj   |dkr*t |tstdt| t|fS |tkrbt |trLt| t|fS t| dd |D fS | |fS )Nr8   zextra value must be a stringc                 S  s   h | ]}t |qS r&   r   )rE   vr&   r&   r'   	<setcomp>   s     z_normalize.<locals>.<setcomp>)r9   r)   rN   r   MARKERS_ALLOWING_SET)r<   r>   rc   r&   r&   r'   
_normalize   s    
rg   r   !dict[str, str | AbstractSet[str]])markersenvironmentr7   c           
      C  s   g g}| D ]}t |tttfs"tt |trB|d t|| q
t |tr|\}}}t |trv|j}|| }|j}	n|j}|j}|| }	t |tstdt	||	|d\}}	|d t
|||	 q
|dkst|dkr
|g  q
tdd |D S )Nzlhs must be a string)rc   )andorrm   c                 s  s   | ]}t |V  qd S rR   )all)rE   itemr&   r&   r'   rG      s     z$_evaluate_markers.<locals>.<genexpr>)r9   rM   r:   r)   rN   append_evaluate_markersr   r;   rg   rb   any)
ri   rj   groupsrA   r<   r=   r>   environment_key	lhs_value	rhs_valuer&   r&   r'   rq      s*    



rq   zsys._version_info)infor7   c                 C  sB   | j  d| j d| j }| j}|dkr>||d t| j 7 }|S )Nr]   finalr   )majorminormicroreleaselevelr)   serial)rw   versionkindr&   r&   r'   format_full_version   s
    r   r7   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 )Nr]      )r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   )r   sysimplementationr~   nameosplatformmachinereleasesystemr3   python_implementationrP   python_version_tuple)iverr*   r&   r&   r'   r      s    c                   @  sj   e Zd ZdddddZddddZddd	d
ZddddZdddddZdddddddZdS )r   r)   None)rA   r7   c              
   C  sH   zt t|| _W n0 tk
rB } ztt||W 5 d }~X Y nX d S rR   )r@   _parse_marker_markersr   r   r)   )selfrA   er&   r&   r'   __init__  s    zMarker.__init__r   c                 C  s
   t | jS rR   )rC   r   r   r&   r&   r'   __str__,  s    zMarker.__str__c                 C  s   d|  dS )Nz	<Marker('z')>r&   r   r&   r&   r'   __repr__/  s    zMarker.__repr__intc                 C  s   t | jjt| fS rR   )hash	__class__r"   r)   r   r&   r&   r'   __hash__2  s    zMarker.__hash__r   rZ   )otherr7   c                 C  s   t |tstS t| t|kS rR   )r9   r   NotImplementedr)   )r   r   r&   r&   r'   __eq__5  s    
zMarker.__eq__Nr   zdict[str, str] | Noner   )rj   contextr7   c                 C  sv   t dt }|dkr(|jt t d n|dkr8d|d< |dk	rf|| d|krf|d dkrfd|d< t| jt|S )a?  Evaluate a marker.

        Return the boolean from evaluating the given marker against the
        environment. environment is an optional argument to override all or
        part of the determined environment. The *context* parameter specifies what
        context the markers are being evaluated for, which influences what markers
        are considered valid. Acceptable values are "metadata" (for core metadata;
        default), "lock_file", and "requirement" (i.e. all other situations).

        The environment is determined from the current Python process.
        rh   r   )r   r    r   r[   r8   N)r	   r   update	frozensetrq   r   _repair_python_full_version)r   rj   r   current_environmentr&   r&   r'   evaluate;  s&      
 zMarker.evaluate)Nr   )	r"   r#   r$   r   r   r   r   r   r   r&   r&   r&   r'   r     s     )envr7   c                 C  s*   t t| 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.
    r1   +local)r	   r)   endswith)r   r1   r&   r&   r'   r   `  s    
r   )T)9
__future__r   operatorr   r   r   typingr   r   r   r   r   r   r	   _parserr   r   r   r   r   r   r   
_tokenizerr   
specifiersr   r   utilsr   __all__r)   rZ   Operatorr   rf   
ValueErrorr   r   r   r(   r@   rC   ltleeqnegegtrY   r5   rb   rg   rq   r   r   r   r   r&   r&   r&   r'   <module>   sX    $	H  N