o
    a+)hÂ  ã                   @   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e d¡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   úZC:\Users\User\Downloads\Proyecto_IoT\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 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: %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   ;   s6   
éí

zEvaluator.evaluateN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r5   r7   r   r   r   r   r   '   s     ôr   z\d+\.\d+c                  C   sŒ   dd„ } t tdƒr| tjjƒ}tjj}nd}d}t ¡ }t |¡}| 	d¡}||t
jt ¡ t ¡ t ¡ t ¡ t ¡ ttƒ ƒ||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Ú r   )Ú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Úplatformr2   Ú_DIGITSÚmatchÚgroupÚosÚmachineÚpython_implementationÚreleaseÚsystemrD   r   )rI   rN   rM   Úppvr   Úpvr   r   r   r   Údefault_context_   s.   



ôre   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^   ÚrerX   rZ   Úcompatr   Úutilr   r   rG   r   r   Ú__all__Úcompiler   r   r   Úobjectr   r[   re   rh   rj   r   r   r   r   r   Ú<module>   s&   

6"