
    h                         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j                  d      Zd	d
hZd Zd Zd Z G d de      Z ej                  d      Zd Z e       Z[ e       ZddZy)zG
Parser for the environment markers micro-language defined in PEP 508.
    N   )string_types)in_venvparse_marker)LegacyVersion	interpretz<((\d+(\.\d+)*\w*)|\'(\d+(\.\d+)*\w*)\'|\"(\d+(\.\d+)*\w*)\")python_versionpython_full_versionc                 6    t        | t              xr | t        v S N)
isinstancer   _VERSION_MARKERS)ss    DD:\EasyAligner\venv\Lib\site-packages\pip/_vendor/distlib/markers.py_is_version_markerr      s    a&@10@+@@    c                 6    t        | t              r| sy| d   dv S )NFr   '")r   r   )os    r   _is_literalr   #   s    a&aQ45=r   c                     t         j                  |       D ch c]  }t        |j                         d           c}S c c}w )Nr   )_VERSION_PATTERNfinditerLVgroups)r   ms     r   _get_versionsr   )   s6    '7'@'@'CD'C!Bqxxz!}'CDDDs   #>c                   L    e Zd ZdZd d d d d d d d	 d
 d d d dZd Zy)	Evaluatorz<
    This class is used to evaluate marker expressions.
    c                     | |k(  S r    xys     r   <lambda>zEvaluator.<lambda>3       16r   c                     | |k(  S r   r!   r"   s     r   r%   zEvaluator.<lambda>4   s    AFr   c                     | |k(  xs | |kD  S r   r!   r"   s     r   r%   zEvaluator.<lambda>5       16?QU?r   c                     | |k7  S r   r!   r"   s     r   r%   zEvaluator.<lambda>6   r&   r   c                     | |k  S r   r!   r"   s     r   r%   zEvaluator.<lambda>7       !a%r   c                     | |k(  xs | |k  S r   r!   r"   s     r   r%   zEvaluator.<lambda>8   r)   r   c                     | |kD  S r   r!   r"   s     r   r%   zEvaluator.<lambda>9   r,   r   c                     | |k(  xs | |kD  S r   r!   r"   s     r   r%   zEvaluator.<lambda>:   r)   r   c                     | xr |S r   r!   r"   s     r   r%   zEvaluator.<lambda>;   s
    AG!Gr   c                     | xs |S r   r!   r"   s     r   r%   zEvaluator.<lambda><   s
    166r   c                 
    | |v S r   r!   r"   s     r   r%   zEvaluator.<lambda>=   s    16r   c                 
    | |vS r   r!   r"   s     r   r%   zEvaluator.<lambda>>   s    qzr   )=====~=!=<<=>>=andorinnot inc                 n   t        |t              r'|d   dv r|dd }|S ||vrt        d|z        ||   }|S t        |t              sJ |d   }|| j                  vrt        d|z        |d   }|d	   }t        |d         r"t        |d	         rt        d
|d|d|      | j                  ||      }| j                  ||      }t        |      st        |      r|dv rt        |      }t        |      }n%t        |      r|dv rt        |      }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:  )r8   r9   r:   r;   r5   r4   r7   r6   )r>   r?   )r   r   SyntaxErrordict
operationsNotImplementedErrorr   evaluater   r   r   )	selfexprcontextresultrB   elhserhsrC   rD   s	            r   rJ   zEvaluator.evaluateA   s]   
 dL)Aw%a4 1 w&%&<t&CDD , ) dD)))dB()*BR*GHH;D;D4;'KU,D!#'T#3 4 4 --g.C--g.C#D)-?-EMMgg#D)b4D.Dg#C((T__R(c2Fr   N)__name__
__module____qualname____doc__rH   rJ   r!   r   r   r   r   -   s9    
 ""*!**#!!)J!r   r   z\d+\.\d+c                  J   d } t        t        d      r; | t        j                  j                        }t        j                  j                  }nd}d}t        j                         }t        j                  |      }|j                  d      }||t        j                  t        j                         t        j                         t        j                         t        j                         t        j                         t        t!                     ||t        j
                  d}|S )Nc                     | j                   d| j                  d| j                  }| j                  }|dk7  r||d   t	        | j
                        z   z  }|S )N.finalr   )majorminormicroreleaselevelstrserial)infoversionkinds      r   format_full_versionz,default_context.<locals>.format_full_versionj   sM     $

DJJ

C  7?tAwT[[!111Gr   implementation0 r   )implementation_nameimplementation_versionos_nameplatform_machineplatform_python_implementationplatform_releaseplatform_systemplatform_versionplatform_in_venvr
   r	   sys_platform)hasattrsysrc   r`   nameplatformr	   _DIGITSmatchgrouposmachinepython_implementationreleasesystemr]   r   )rb   rg   rf   ppvr   pvrN   s          r   default_contextr~   h   s     s$%!4&&"(!0055!$ 

!
!
#CcA	
B2"877$,,.*2*H*H*J$,,.#??,$,,.	N"F Mr   c                 
   	 t        |       \  }}|r|d   dk7  rt        d| d|      t        t              }|r|j                  |       t        j                  ||      S # t        $ r}t        d| d|      d}~ww xY w)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: z: Nr   #z$unexpected trailing data in marker: )r   	ExceptionrF   rG   DEFAULT_CONTEXTupdate	evaluatorrJ   )markerexecution_contextrL   resterM   s         r   r   r      s    '!&)
d Q3!4) * 	*?#G()dG,,  '!1& ' 	''s   A# #	B,A==Br   )rT   rw   rerq   rs   compatr   utilr   r   r`   r   r   __all__compiler   r   r   r   r   objectr   rt   r~   r   r   r   r!   r   r   <module>r      s    
 	 
    ' (-2::CE $&;< AE5 5p "**[
!"J "#K	-r   