U
    b6{iã1  ã                	   @  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-zjp86yhe/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ƒr‚dd„ | D ƒ}|rnd |¡S dd |¡ d S n"t | tƒr d 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ƒsˆtdƒ‚t	||	|d�\}}	|d  t
|||	|d�¡ q
|dkrÊ| g ¡ q
|dkrÔq
td|›�ƒ‚q
tdd„ |D ƒƒS )	Néÿÿÿÿz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