U
    42i1                  	   @  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dgZeeeeee f gef Z e	d Z!ddhZ"dd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)d d d!d"d#Z*dKd%d&d'd(d)d*Z+d+d, d-d, d.d, ej,ej,ej-ej,d/d, d0Z.d1e/d2< d'd3d4d'd5d6d7d8Z0d'd4d'd9d:d;d<Z1d d=d5d>d?d@Z2dAd'dBdCdDZ3d
dEdFdZ4G dGd dZ5d=d=dHdIdJZ6dS )L    )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)metadata	lock_filerequirementextrasdependency_groupsimplementation_versionplatform_releasepython_full_versionpython_versionc                   @  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-7wv4vqcv/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   4   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 )r   strimplementation_namer"   os_nameplatform_machiner#   platform_systemplatform_versionr$   platform_python_implementationr%   sys_platformN)r'   r(   r)   __annotations__r+   r+   r+   r,   r   ;   s   
zMarkerList | MarkerAtom | str)resultreturnc                 C  sp   t | ts| S | \}}}t |tr@|jdkr@t|j}t|}n&t |trf|jdkrft|j}t|}|||fS )Nextra)
isinstancetupler   valuer   r   )r6   lhsoprhsZnormalized_extrar+   r+   r,   _normalize_extras   s    




r?   r   )resultsr7   c                 C  s   dd | D S )z!
    Normalize extra values.
    c                 S  s   g | ]}t |qS r+   )r?   ).0rr+   r+   r,   
<listcomp>   s     z+_normalize_extra_values.<locals>.<listcomp>r+   )r@   r+   r+   r,   _normalize_extra_values   s    rD   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)rF   N)_format_markerrA   mr+   r+   r,   	<genexpr>   s     z!_format_marker.<locals>.<genexpr> ()c                 S  s   g | ]}|  qS r+   )	serializerH   r+   r+   r,   rC      s     z"_format_marker.<locals>.<listcomp>)r9   listr:   r-   AssertionErrorlenrG   join)rE   rF   innerr+   r+   r,   rG      s     



rG   c                 C  s   | |kS Nr+   r<   r>   r+   r+   r,   <lambda>       rV   c                 C  s   | |kS rT   r+   rU   r+   r+   r,   rV      rW   c                 C  s   dS NFr+   Z_lhsZ_rhsr+   r+   r,   rV      rW   c                 C  s   dS rX   r+   rY   r+   r+   r,   rV      rW   )inznot in<z<=z==z!=z>=>zdict[str, Operator]
_operatorsr   zstr | AbstractSet[str]bool)r<   r=   r>   keyr7   c                C  s   |  }|tkrHzt| | }W n tk
r8   Y nX |j| ddS t|}|d krvtd|d| d|d|| |S )NT)prereleasesz
Undefined z on z and .)rN   MARKERS_REQUIRING_VERSIONr   r   containsr]   getr   )r<   r=   r>   r_   Zop_strspecoperr+   r+   r,   _eval_op   s    
rg   z"tuple[str, str | AbstractSet[str]])r<   r>   r_   r7   c                 C  sb   |dkr"t |tstd| |fS |tkrZt |trDt| 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   )rA   vr+   r+   r,   	<setcomp>   s     z_normalize.<locals>.<setcomp>)r9   r-   rP   MARKERS_ALLOWING_SETr   )r<   r>   r_   r+   r+   r,   
_normalize   s    
rk   !dict[str, str | AbstractSet[str]])markersenvironmentr7   c           
   	   C  s   g g}| D ]}t |tr.|d t|| q
t |tr|\}}}t |trb|j}|| }|j}	n|j}|j}|| }	t |tstdt	||	|d\}}	|d t
|||	|d q
|dkr|g  q
|dkrq
td|q
tdd |D S )	Nzlhs must be a string)r_   orandzUnexpected marker c                 s  s   | ]}t |V  qd S rT   )all)rA   itemr+   r+   r,   rJ     s     z$_evaluate_markers.<locals>.<genexpr>)r9   rO   append_evaluate_markersr:   r   r;   r-   rP   rk   rg   	TypeErrorany)
rm   rn   groupsrE   r<   r=   r>   Zenvironment_key	lhs_value	rhs_valuer+   r+   r,   ru      s,    



ru   zsys._version_info)infor7   c                 C  sB   | j  d| j d| j }| j}|dkr>||d t| j 7 }|S )Nra   finalr   )majorminormicroreleaselevelr-   serial)r{   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 )Nra      )r.   r"   r/   r0   r#   r1   r2   r$   r3   r%   r4   )r   sysimplementationr   nameosplatformmachinereleasesystemr%   python_implementationrR   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)rE   r7   c              
   C  sN   g | _ ztt|| _ W n0 tk
rH } ztt||W 5 d }~X Y nX d S rT   )_markersrD   _parse_markerr   r   r-   )selfrE   er+   r+   r,   __init__%  s
    zMarker.__init__r   c                 C  s
   t | jS rT   )rG   r   r   r+   r+   r,   __str__C  s    zMarker.__str__c                 C  s   d| j j d|  dS )Nr[   z('z')>)	__class__r'   r   r+   r+   r,   __repr__F  s    zMarker.__repr__intc                 C  s   t t| S rT   )hashr-   r   r+   r+   r,   __hash__I  s    zMarker.__hash__objectr^   )otherr7   c                 C  s   t |tstS t| t|kS rT   )r9   r   NotImplementedr-   )r   r   r+   r+   r,   __eq__L  s    
zMarker.__eq__Nr   z+Mapping[str, str | AbstractSet[str]] | Noner   )rn   contextr7   c                 C  s   t dt }|dkr(|jt t d n|dkr8d|d< |dk	rt|| d|krtt d|d }|rlt|n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 *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.
        rl   r   )r    r!   r    r8   Nz
str | None)r	   r   update	frozensetr   ru   r   _repair_python_full_version)r   rn   r   current_environmentr8   r+   r+   r,   evaluateR  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 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.
    r-   r$   +local)r	   endswith)r   r$   r+   r+   r,   r   z  s    
r   )T)7
__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-   r^   ZOperatorr   rj   rb   
ValueErrorr   r   r   r   r?   rD   rG   eqner]   r5   rg   rk   ru   r   r   r   r   r+   r+   r+   r,   <module>   sf    $
H	 !V