o
    j}                     @   s   d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	 ddl
mZ dgZedZd	d
 Zdd ZG dd deZdd Ze Z[e ZdddZdS )zG
Parser for the environment markers micro-language defined in PEP 508.
    N   )string_types)in_venvparse_marker)NormalizedVersion	interpretz<((\d+(\.\d+)*\w*)|\'(\d+(\.\d+)*\w*)\'|\"(\d+(\.\d+)*\w*)\")c                 C   s   t | tr| s	dS | d dv S )NFr   '")
isinstancer   )o r   UC:\Users\bbmin\dev\vps-for-web\.venv\Lib\site-packages\pip/_vendor/distlib/markers.py_is_literal   s   r   c                 C   s2   g }t | D ]}|t| d  qt|S )Nr   )_VERSION_PATTERNfinditerappendNVgroupsset)sresultmr   r   r   _get_versions!   s   r   c                   @   sf   e Zd ZdZdd dd dd dd dd dd d	d d
d dd dd dd dd dZdd ZdS )	Evaluatorz;
    This class is used to evaluate marker expessions.
    c                 C      | |kS Nr   xyr   r   r   <lambda>-       zEvaluator.<lambda>c                 C   r   r   r   r   r   r   r   r   .   r   c                 C      | |kp| |kS r   r   r   r   r   r   r   /       c                 C   s   | |kS r   r   r   r   r   r   r   0   r   c                 C   s   | |k S r   r   r   r   r   r   r   1   r   c                 C   s   | |kp| |k S r   r   r   r   r   r   r   2   r!   c                 C   s   | |kS r   r   r   r   r   r   r   3   r   c                 C   r    r   r   r   r   r   r   r   4   r!   c                 C   s   | o|S r   r   r   r   r   r   r   5   r   c                 C   s   | p|S r   r   r   r   r   r   r   6   r   c                 C   s   | |v S r   r   r   r   r   r   r   7   r   c                 C   s   | |vS r   r   r   r   r   r   r   8   r   )=====~=!=<<=>>=andorinnot inc           	      C   s"  t |tr#|d dv r|dd }|S ||vrtd| || }|S t |ts*J |d }|| jvr9td| |d }|d	 }t|d rVt|d	 rVtd
|||f | ||}| ||}|dksj|dkrw|dv rwt|}t|}n|dkr|dv rt|}t	|}| j| ||}|S )z
        Evaluate a marker expression returned by the :func:`parse_requirement`
        function in the specified context.
        r   r   r   zunknown variable: %sopzop not implemented: %slhsrhszinvalid comparison: %s %s %spython_version)r&   r'   r(   r)   r#   r"   r%   r$   )r,   r-   )
r	   r   SyntaxErrordict
operationsNotImplementedErrorr   evaluater   r   )	selfexprcontextr   r/   ZelhsZerhsr0   r1   r   r   r   r7   ;   s8   


zEvaluator.evaluateN)__name__
__module____qualname____doc__r5   r7   r   r   r   r   r   '   s     r   c                  C   s   dd } t tdr| tjj}tjj}nd}d}||tjt t t	 t
 t tt t t d d tjd}|S )Nc                 S   s<   d| j | j| jf }| j}|dkr||d t| j 7 }|S )Nz%s.%s.%sfinalr   )majorminormicroreleaselevelstrserial)infoversionkindr   r   r   format_full_version^   s
   z,default_context.<locals>.format_full_versionimplementation0    )implementation_nameimplementation_versionos_nameplatform_machineplatform_python_implementationplatform_releaseplatform_systemplatform_versionZplatform_in_venvpython_full_versionr2   sys_platform)hasattrsysrJ   rG   nameosplatformmachinepython_implementationreleasesystemrD   r   r2   )rI   rO   rN   r   r   r   r   default_context]   s(   

ra   c              
   C   s|   zt | \}}W n ty } ztd| |f d}~ww |r-|d dkr-td| |f tt}|r8|| t||S )z
    Interpret a marker and return a result depending on environment.

    :param marker: The marker to interpret.
    :type marker: str
    :param execution_context: The context used for name lookup.
    :type execution_context: mapping
    z)Unable to interpret marker syntax: %s: %sNr   #z*unexpected trailing data in marker: %s: %s)r   	Exceptionr3   r4   DEFAULT_CONTEXTupdate	evaluatorr7   )markerZexecution_contextr9   rester:   r   r   r   r      s   	
r   )r>   r[   rerY   r\   compatr   utilr   r   rG   r   r   __all__compiler   r   r   objectr   ra   rd   rf   r   r   r   r   r   <module>   s$   
6