£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
Pf                 @   sd   d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 dgZ
G dd deZd
d	dZdS )zEParser for the environment markers micro-language defined in PEP 345.    N   )python_implementationstring_types)in_venv	interpretc            
   @   s   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	Zejdejdd  ejj	ddd e
jee ej ej ej e d	Zd*ddZdd Zdd Zd+ddZdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) ZdS ),	Evaluatorz5
    A limited evaluator for Python expressions.
    c             C   s   | |kS )N )xyr   r   /usr/lib/python3.6/markers.py<lambda>   s    zEvaluator.<lambda>c             C   s   | |kS )Nr   )r	   r
   r   r   r   r      s    c             C   s   | |kS )Nr   )r	   r
   r   r   r   r      s    c             C   s   | |kS )Nr   )r	   r
   r   r   r   r      s    c             C   s   | |k S )Nr   )r	   r
   r   r   r   r      s    c             C   s   | |kS )Nr   )r	   r
   r   r   r   r      s    c             C   s   |  S )Nr   )r	   r   r   r   r       s    c             C   s   | |kS )Nr   )r	   r
   r   r   r   r   !   s    c             C   s   | |kS )Nr   )r	   r
   r   r   r   r   "   s    )	eqgtZgteinltZltenotZnoteqZnotinz%s.%sN    r   r   )	Zsys_platformZpython_versionZpython_full_versionZos_nameZplatform_in_venvZplatform_releaseZplatform_versionZplatform_machineZplatform_python_implementationc             C   s   |pi | _ d| _dS )zu
        Initialise an instance.

        :param context: If specified, names are looked up in this mapping.
        N)contextsource)selfr   r   r   r   __init__3   s    
zEvaluator.__init__c             C   s8   d}d| j |||   }|| t| j k r4|d7 }|S )zH
        Get the part of the source which is causing a problem.
        
   z%rz...)r   len)r   offsetZfragment_lensr   r   r   get_fragment<   s
    zEvaluator.get_fragmentc             C   s   t | d| dS )z@
        Get a handler for the specified AST node type.
        zdo_%sN)getattr)r   	node_typer   r   r   get_handlerF   s    zEvaluator.get_handlerc             C   s   t |trr|| _ddi}|r$||d< ytj|f|}W n: tk
rp } z| j|j}td| W Y dd}~X nX |jj	j
 }| j|}|dkr| jdkrd}n| j|j}td||f ||S )zf
        Evaluate a source string or node, using ``filename`` when
        displaying errors.
        modeevalfilenamezsyntax error %sNz(source not available)z don't know how to evaluate %r %s)
isinstancer   r   astparseSyntaxErrorr   r   	__class____name__lowerr   
col_offset)r   noder"   kwargser   r   Zhandlerr   r   r   evaluateL   s&    


zEvaluator.evaluatec             C   s&   t |tjstdd|jj|jf S )Nzattribute node expectedz%s.%s)r#   r$   Z	AttributeAssertionErrorvalueidattr)r   r+   r   r   r   get_attr_keyf   s    zEvaluator.get_attr_keyc             C   sf   t |jtjsd}n| j|}|| jkp0|| jk}|sBtd| || jkrX| j| }n
| j| }|S )NFzinvalid expression: %s)r#   r0   r$   Namer3   r   allowed_valuesr&   )r   r+   validkeyresultr   r   r   do_attributej   s    


zEvaluator.do_attributec             C   s   | j |jd }|jjtjk}|jjtjk}|s8|s8t|r@|sJ|r| rx4|jdd  D ]"}| j |}|rp|sz|rZ| rZP qZW |S )Nr   r   )r.   valuesopr'   r$   ZOrZAndr/   )r   r+   r8   Zis_orZis_andnr   r   r   	do_boolopx   s    
zEvaluator.do_boolopc       	         s    fdd} j }j|}d}xnt j jD ]\\}}||| |jjj }|jkrft	d| j|}j| ||}|sP |}|}q2W |S )Nc                s@   d}t | tjr t |tjr d}|s<j j}td| d S )NTFzInvalid comparison: %s)r#   r$   ZStrr   r*   r&   )lhsnoderhsnoder6   r   )r+   r   r   r   sanity_check   s    z*Evaluator.do_compare.<locals>.sanity_checkTzunsupported operation: %r)
leftr.   zipZopsZcomparatorsr'   r(   r)   	operatorsr&   )	r   r+   r@   r>   Zlhsr8   r;   r?   Zrhsr   )r+   r   r   
do_compare   s     



zEvaluator.do_comparec             C   s   | j |jS )N)r.   Zbody)r   r+   r   r   r   do_expression   s    zEvaluator.do_expressionc             C   sT   d}|j | jkr"d}| j|j  }n|j | jkr>d}| j|j  }|sPtd|j  |S )NFTzinvalid expression: %s)r1   r   r5   r&   )r   r+   r6   r8   r   r   r   do_name   s    zEvaluator.do_namec             C   s   |j S )N)r   )r   r+   r   r   r   do_str   s    zEvaluator.do_str)N)N)r(   
__module____qualname____doc__rC   sysplatformversion_infoversionsplitosnamestrr   releasemachiner   r5   r   r   r   r.   r3   r9   r=   rD   rE   rF   rG   r   r   r   r   r      s<   

	

r   c             C   s   t |j| j 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
    )r   r.   strip)ZmarkerZexecution_contextr   r   r   r      s    	)N)rJ   r$   rP   rK   rL   compatr   r   utilr   __all__objectr   r   r   r   r   r   <module>   s    "