U
    gA)                  	   @  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
 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gZeeegef 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#d=ddddddZ$dd  d!d  ej%ej&ej'ej(ej)ej*d"Z+d#e,d$< dd%dd&d'd(d)Z-ddd*d+d,d-Z.d.d/d&d0d1d2Z/d3dd4d5d6Z0dd7d8dZ1G d9d dZ2d/d/d:d;d<Z3dS )>    )annotationsN)AnyCallable	TypedDictcast   )
MarkerAtom
MarkerListOpValueVariable)parse_marker)ParserSyntaxError)InvalidSpecifier	Specifiercanonicalize_nameInvalidMarkerMarkerUndefinedComparisonUndefinedEnvironmentNamedefault_environmentc                   @  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   5/tmp/pip-unpacked-wheel-et9flr3b/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   1   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   )r-   lhsoprhsZnormalized_extrar   r   r   _normalize_extra_valuesy   s    


r6   Tzlist[str] | MarkerAtom | strzbool | Noner    )markerfirstr.   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)r8   N)_format_marker.0mr   r   r   	<genexpr>   s     z!_format_marker.<locals>.<genexpr> ()c                 S  s   g | ]}|  qS r   )	serializer:   r   r   r   
<listcomp>   s     z"_format_marker.<locals>.<listcomp>)r0   listr1   r    AssertionErrorlenr9   join)r7   r8   innerr   r   r   r9      s     



r9   c                 C  s   | |kS Nr   r3   r5   r   r   r   <lambda>       rJ   c                 C  s   | |kS rH   r   rI   r   r   r   rJ      rK   )inznot in<z<=z==z!=z>=>zdict[str, Operator]
_operatorsr
   bool)r3   r4   r5   r.   c                 C  sz   zt d| |g}W n tk
r.   Y nX |j| ddS t| }|d krptd|d| d|d|| |S )N T)prereleasesz
Undefined z on z and .)r   rF   rA   r   containsrO   getr   )r3   r4   r5   specoperr   r   r   _eval_op   s    rX   ztuple[str, ...])valueskeyr.   c                 G  s   | dkrt dd |D S |S )Nr/   c                 s  s   | ]}t |V  qd S rH   r   )r;   vr   r   r   r=      s     z_normalize.<locals>.<genexpr>)r1   )rZ   rY   r   r   r   
_normalize   s    r\   r	   dict[str, str])markersenvironmentr.   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	||	|d\}}	|d t
|||	 q
|dkst|dkr
|g  q
tdd |D S )N)rZ   )andorrb   c                 s  s   | ]}t |V  qd S rH   )all)r;   itemr   r   r   r=      s     z$_evaluate_markers.<locals>.<genexpr>)r0   rC   r1   r    rD   append_evaluate_markersr   r2   r\   rX   any)
r^   r_   groupsr7   r3   r4   r5   Zenvironment_key	lhs_value	rhs_valuer   r   r   rf      s(    



rf   zsys._version_info)infor.   c                 C  sB   | j  d| j d| j }| j}|dkr>||d t| j 7 }|S )NrS   finalr   )majorminormicroreleaselevelr    serial)rk   versionkindr   r   r   format_full_version   s
    rt   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 )NrS      )r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   )rt   sysimplementationrr   nameosplatformmachinereleasesystemr*   python_implementationrF   python_version_tuple)iverr!   r   r   r   r      s    c                   @  sh   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ZdS )r   r    None)r7   r.   c              
   C  sH   zt t|| _W n0 tk
rB } ztt||W 5 d }~X Y nX d S rH   )r6   _parse_marker_markersr   r   r    )selfr7   er   r   r   __init__  s    zMarker.__init__ru   c                 C  s
   t | jS rH   )r9   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 rH   )hash	__class__r   r    r   r   r   r   __hash__$  s    zMarker.__hash__r   rP   )otherr.   c                 C  s   t |tstS t| t|kS rH   )r0   r   NotImplementedr    )r   r   r   r   r   __eq__'  s    
zMarker.__eq__Nzdict[str, str] | None)r_   r.   c                 C  sJ   t dt }d|d< |dk	r:|| |d dkr:d|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 environment is determined from the current Python process.
        r]   rQ   r/   N)r   r   updaterf   r   _repair_python_full_version)r   r_   current_environmentr   r   r   evaluate-  s    	
 zMarker.evaluate)N)	r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   )envr.   c                 C  s"   | d  dr| d  d7  < | S )z
    Work around platform.python_version() returning something that is not PEP 440
    compliant for non-tagged Python builds.
    r(   +local)endswith)r   r   r   r   r   D  s    r   )T)4
__future__r   operatorrz   r{   rw   typingr   r   r   r   _parserr   r	   r
   r   r   r   r   
_tokenizerr   
specifiersr   r   utilsr   __all__r    rP   ZOperator
ValueErrorr   r   r   r   r6   r9   ltleeqnegegtrO   r,   rX   r\   rf   rt   r   r   r   r   r   r   r   <module>   sR    H @