<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

Re                 @   s   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
 Gd 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 i	 d d   d 6d d   d 6d d   d 6d	 d   d
 6d d   d 6d d   d 6d d   d 6d d   d 6d d   d 6Z i	 e j d 6d e j d d  d 6e j j	 d d  d d 6e
 j d 6e e    d 6e j   d  6e j   d! 6e j   d" 6e   d# 6Z d d$ d%  Z d& d'   Z d( d)   Z d d* d+  Z d, d-   Z d. d/   Z d0 d1   Z d2 d3   Z d4 d5   Z d6 d7   Z d8 d9   Z d S):	Evaluatorz5
    A limited evaluator for Python expressions.
    c             C   s
   |  | k S)N )xyr   r   6/tmp/pip-ztkk0jow-build/pip/_vendor/distlib/markers.py<lambda>   s    zEvaluator.<lambda>eqc             C   s
   |  | k S)Nr   )r	   r
   r   r   r   r      s    gtc             C   s
   |  | k S)Nr   )r	   r
   r   r   r   r      s    Zgtec             C   s
   |  | k S)Nr   )r	   r
   r   r   r   r      s    inc             C   s
   |  | k  S)Nr   )r	   r
   r   r   r   r      s    ltc             C   s
   |  | k S)Nr   )r	   r
   r   r   r   r      s    Zltec             C   s   |  S)Nr   )r	   r   r   r   r       s    notc             C   s
   |  | k S)Nr   )r	   r
   r   r   r   r   !   s    Znoteqc             C   s
   |  | k S)Nr   )r	   r
   r   r   r   r   "   s    notinsys_platformz%s.%sN   python_version r   r   python_full_versionos_nameZplatform_in_venvZplatform_releaseplatform_version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   sK   d } d |  j  | | |  } | | t |  j   k  rG | d 7} n  | 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  r | |  _ i d d 6} | r8 | | d <n  y t j | |  } Wq t k
 r } z' |  j | j  } t d |   WYd d } ~ Xq Xn  | j j	 j
   } |  j |  } | d k r|  j d k r d } n |  j | j  } t d | | f   n  | |  S)zf
        Evaluate a source string or node, using ``filename`` when
        displaying errors.
        evalmode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%   handlerr   r   r   evaluateL   s&    	&	zEvaluator.evaluatec             C   s5   t  | t j  s t d   d | j j | j f S)Nzattribute node expectedz%s.%s)r*   r+   	AttributeAssertionErrorvalueidattr)r   r2   r   r   r   get_attr_keyf   s    zEvaluator.get_attr_keyc             C   s   t  | j t j  s d } n- |  j |  } | |  j k pH | |  j k } | sd t d |   n  | |  j k r |  j | } n |  j | } | S)NFzinvalid expression: %s)r*   r9   r+   Namer<   r   allowed_valuesr-   )r   r2   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 } | sR | sR t  | r^ | sk | r | r xJ | j d d   D]2 } |  j  |  } | r | s | r | r Pq q Wn  | S)Nr   r   )r6   valuesopr.   r+   OrAndr8   )r   r2   rA   Zis_orZis_andnr   r   r   	do_boolopx   s    zEvaluator.do_boolopc       	         s      f d d   }   j  }  j |  } d } x t   j   j  D] \ } } | | |  | j j j   } |  j k r t	 d |   n   j |  }  j | | |  } | s Pn  | } | } qI W| S)Nc                sb   d } t  |  t j  r3 t  | t j  r3 d } n  | s^  j   j  } t d |   n  d  S)NTFzInvalid comparison: %s)r*   r+   Strr#   r1   r-   )lhsnoderhsnoder?   r"   )r2   r   r   r   sanity_check   s    $	z*Evaluator.do_compare.<locals>.sanity_checkTzunsupported operation: %r)
leftr6   zipopscomparatorsr.   r/   r0   	operatorsr-   )	r   r2   rL   rJ   ZlhsrA   rD   rK   Zrhsr   )r2   r   r   
do_compare   s     	"
zEvaluator.do_comparec             C   s   |  j  | j  S)N)r6   body)r   r2   r   r   r   do_expression   s    zEvaluator.do_expressionc             C   s|   d } | j  |  j k r1 d } |  j | j  } n+ | j  |  j k r\ d } |  j | j  } n  | sx t d | j    n  | S)NFTzinvalid expression: %s)r:   r   r>   r-   )r   r2   r?   rA   r   r   r   do_name   s    zEvaluator.do_namec             C   s   | j  S)N)r"   )r   r2   r   r   r   do_str   s    zEvaluator.do_str)r/   
__module____qualname____doc__rQ   sysplatformversion_infoversionsplitosnamestrr   releasemachiner   r>   r   r#   r&   r6   r<   rB   rH   rR   rT   rU   rV   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   r6   strip)markerZexecution_contextr   r   r   r      s    	)rY   r+   r_   rZ   r[   compatr   r   utilr   __all__objectr   r   r   r   r   r   <module>   s   	