U ��.e#�@s�dZddlZddlZddlZddlZddlmZmZmZddl m Z m Z dgZ dd�Z Gd d �d e�Zd d �Ze�Z[e�Zdd d�ZdS)zG Parser for the environment markers micro-language defined in PEP 508. �N�)�python_implementation�urlparse� string_types)�in_venv� parse_marker� interpretcCst|t�r|sdS|ddkS)NFr�'")� isinstancer)�o�r �?/usr/lib/python3.8/site-packages/pip/_vendor/distlib/markers.py� _is_literalsrc @sfeZdZdZdd�dd�dd�dd�dd�dd�d d�d d�d d�d d�d d�dd�d� Zdd�ZdS)� Evaluatorz; This class is used to evaluate marker expessions. cCs||kS�Nr ��x�yr r r �$�zEvaluator.cCs||kSrr rr r r r%rcCs||kp||kSrr rr r r r&rcCs||kSrr rr r r r'rcCs||kSrr rr r r r(rcCs||kp||kSrr rr r r r)rcCs||kSrr rr r r r*rcCs||kp||kSrr rr r r r+rcCs|o|Srr rr r r r,rcCs|p|Srr rr r r r-rcCs||kSrr rr r r r.rcCs||kSrr rr r r r/r) z==z===z~=z!=�z>=�and�or�inznot inc Cs�t|t�rB|ddkr$|dd�}q�||kr8td|��||}n�t|t�sPt�|d}||jkrntd|��|d}|d }t|d�r�t|d �r�td |||f��|�||�}|�||�}|j|||�}|S) z� Evaluate a marker expression returned by the :func:`parse_requirement` function in the specified context. rr r�����zunknown variable: %s�opzop not implemented: %s�lhs�rhszinvalid comparison: %s %s %s) r r� SyntaxError�dict�AssertionError� operations�NotImplementedErrorr�evaluate) �self�expr�context�resultrZelhsZerhsrrr r r r$2s$        zEvaluator.evaluateN)�__name__� __module__� __qualname__�__doc__r"r$r r r r rs�rc Cs�dd�}ttd�r(|tjj�}tjj}nd}d}||tjt��t��t� �t� �t��t t ��t� �t� �dd�tjd� }|S)NcSs<d|j|j|jf}|j}|dkr8||dt|j�7}|S)Nz%s.%s.%s�finalr)�major�minor�micro� releaselevel�str�serial)�info�versionZkindr r r �format_full_versionNs z,default_context..format_full_version�implementation�0��) �implementation_name�implementation_versionZos_nameZplatform_machineZplatform_python_implementationZplatform_releaseZplatform_systemZplatform_versionZplatform_in_venvZpython_full_version�python_versionZ sys_platform)�hasattr�sysr7r5�name�os�platform�machiner�release�systemr2rr=)r6r<r;r(r r r �default_contextMs(   �rFc Cs�zt|�\}}Wn2tk rB}ztd||f��W5d}~XYnX|rd|ddkrdtd||f��tt�}|rz|�|�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� Exceptionrr �DEFAULT_CONTEXT�update� evaluatorr$)ZmarkerZexecution_contextr&�rest�er'r r r rqs " )N)r,rAr?rB�re�compatrrr�utilrr�__all__r�objectrrFrIrKrr r r r �s/