
    Ki;              	      Z   U d dl mZ d dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ g d
Zd*dZeeeeee   f   ge f   Z!e	d   Z"	 ddhZ#h dZ$ G d de%      Z& G d de%      Z' G d de%      Z( G d de      Z)	 	 	 	 d+dZ*d,dZ+	 d-	 	 	 	 	 d.dZ,d d d ejZ                  ejZ                  ej\                  ejZ                  d dZ/d e0d!<   d/d"Z1	 	 	 	 	 	 	 	 d0d#Z2	 	 	 	 	 	 d1d$Z3d2d%Z4d3d&Z5 G d' d(      Z6	 	 	 	 d4d)Z7y)5    )annotationsN)AbstractSetCallableLiteralMapping	TypedDictUnioncast   )
MarkerAtom
MarkerListOpValueVariable)parse_marker)ParserSyntaxError)InvalidSpecifier	Specifier)canonicalize_name)EnvironmentEvaluateContextInvalidMarkerMarkerUndefinedComparisonUndefinedEnvironmentNamedefault_environmentc                     t         S N)__all__     ]/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/packaging/markers.py__dir__r#      s    Nr!   )metadata	lock_filerequirementextrasdependency_groups>   python_versionplatform_releasepython_full_versionimplementation_versionc                      e Zd ZdZy)r   zRaised when attempting to create a :class:`Marker` from invalid input.

    This error indicates that the given marker string does not conform to the
    :ref:`specification of dependency specifiers <pypug:dependency-specifiers>`.
    N__name__
__module____qualname____doc__r    r!   r"   r   r   6   s    r!   r   c                      e Zd ZdZy)r   zRaised when evaluating an unsupported marker comparison.

    This can happen when marker values are compared as versions but do not
    conform to the :ref:`specification of version specifiers
    <pypug:version-specifiers>`.
    Nr.   r    r!   r"   r   r   >   s    r!   r   c                      e Zd ZdZy)r   zJRaised when evaluating a marker that references a missing environment key.Nr.   r    r!   r"   r   r   G   s    Tr!   r   c                      e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded	<   	 ded
<   	 ded<   	 ded<   	 ded<   y)r   z
    A dictionary that represents a Python environment as captured by
    :func:`default_environment`. All fields are required.
    strimplementation_namer,   os_nameplatform_machiner*   platform_systemplatform_versionr+   platform_python_implementationr)   sys_platformN)r/   r0   r1   r2   __annotations__r    r!   r"   r   r   K   s    
 >
 L
      %(' 9r!   r   c                :   t        | t              s| S | \  }}}t        |t              r0|j                  dk(  r!t	        |j                        }t        |      }n?t        |t              r/|j                  dk(  r t	        |j                        }t        |      }|||fS )Nextra)
isinstancetupler   valuer   r   )resultlhsoprhsnormalized_extras        r"   _normalize_extrasrI      s     fe$LCS#x SYY'%9,SYY7$%	C	"syyG';,SYY7$%C<r!   c                >    | D cg c]  }t        |       c}S c c}w )z!
    Normalize extra values.
    )rI   )resultsrs     r"   _normalize_extra_valuesrM      s    
 +22Qa 222s   c                   t        | t        t        t        f      sJ t        | t              r5t	        |       dk(  r't        | d   t        t        f      rt        | d         S t        | t              r3d | D        }|rdj                  |      S ddj                  |      z   dz   S t        | t              r-dj                  | D cg c]  }|j                          c}      S | S c c}w )Nr   r   c              3  6   K   | ]  }t        |d         yw)F)firstN)_format_marker).0ms     r"   	<genexpr>z!_format_marker.<locals>.<genexpr>   s     @A//@s    ())rA   listrB   r6   lenrQ   join	serialize)markerrP   innerrS   s       r"   rQ   rQ      s     ftUC0111 	64 K1vay4-0fQi((&$@@88E?"%(3..	FE	"xx71788 8s   C%c                
    | |v S r   r    rE   rG   s     r"   <lambda>r`      s
    3#: r!   c                
    | |vS r   r    r_   s     r"   r`   r`      s
    s#~ r!   c                     yNFr    _lhs_rhss     r"   r`   r`          r!   c                     yrc   r    rd   s     r"   r`   r`      rg   r!   )inznot in<z<=z==z!=z>=>zdict[str, Operator]
_operatorsc          	         |j                         }|t        v r#	 t        | |       }|j                  | d      S t
        j                  |      }|t        d|d| d|d       || |      S # t        $ r Y @w xY w)NT)prereleasesz
Undefined z on z and .)r[   MARKERS_REQUIRING_VERSIONr   containsr   rl   getr   )rE   rF   rG   keyop_strspecopers          r"   _eval_oprw      s    \\^F
''	8xu-.D ==$=77&NN62D|!JrfDuSG1"MNNS>   		s   A1 1	A=<A=c                    |dk(  rt        |t              sJ d       | |fS |t        v rJt        |t              rt        |       t        |      fS t        |       |D ch c]  }t        |       c}fS | |fS c c}w )Nr@   zextra value must be a string)rA   r6   MARKERS_ALLOWING_SETr   )rE   rG   rs   vs       r"   
_normalizer{      s     g~#s#C%CC#Sz
""c3%c*,=c,BCC%c*3,Oa->q-A,OPP 8O -Ps   A7c           	     D   g g}| D ]  }t        |t              r|d   j                  t        ||             3t        |t              r|\  }}}t        |t
              r|j                  }||   }|j                  }	n|j                  }|j                  }||   }	t        |t              sJ d       t        ||	|      \  }}	|d   j                  t        |||	|             |dk(  r|j                  g        |dk(  rt        d|       t        d |D              S )Nzlhs must be a string)rs   orandzUnexpected marker c              3  2   K   | ]  }t        |        y wr   )all)rR   items     r"   rT   z$_evaluate_markers.<locals>.<genexpr>  s     ,Ts4y,s   )rA   rX   append_evaluate_markersrB   r   rC   r6   r{   rw   	TypeErrorany)
markersenvironmentgroupsr\   rE   rF   rG   environment_key	lhs_value	rhs_values
             r"   r   r      s    !#tF =fd#2J/DE&!LCS#x("%))'8	II	II	"%))'8	i-E/EE-#-i#X Iy2Jhy"i_UVt^MM"u_0
;<</=2 ,V,,,r!   c                    | j                    d| j                   d| j                   }| j                  }|dk7  r||d   t	        | j
                        z   z  }|S )Nro   finalr   )majorminormicroreleaselevelr6   serial)infoversionkinds      r"   _format_full_versionr     sW    Adjj\4::,7GDw47S---Nr!   c                    t        t        j                  j                        } t        j                  j                  }|| t
        j                  t        j                         t        j                         t        j                         t        j                         t        j                         t        j                         dj                  t        j                         dd       t        j                  dS )zReturn the default marker environment for the current Python process.

    This is the base environment used by :meth:`Marker.evaluate`.
    ro   N   )r7   r,   r8   r9   r*   r:   r;   r+   r<   r)   r=   )r   sysimplementationr   nameosplatformmachinereleasesystemr)   python_implementationrZ   python_version_tuple)iverr7   s     r"   r   r   '  s    
   2 2 : :;D,,112"&77$,,.$,,.#??,$,,.'668*2*H*H*J((8#@#@#B2A#FG r!   c                  v    e Zd ZdZdZddZedd       ZddZddZ	ddZ
ddZdd	Zdd
Z	 	 d	 	 	 	 	 ddZy)r   a<  Represents a parsed dependency marker expression.

    Marker expressions are parsed according to the
    :ref:`specification of dependency specifiers <pypug:dependency-specifiers>`.

    :param marker: The string representation of a marker expression.
    :raises InvalidMarker: If ``marker`` cannot be parsed.
    )_markersc                    g | _         	 t        t        |            | _         y # t        $ r}t	        t        |            |d }~ww xY wr   )r   rM   _parse_markerr   r   r6   )selfr\   es      r"   __init__zMarker.__init__I  sD     %'	/3M&4IJDM" ! 	/A'Q.	/s   # 	AAAc                6    | j                  |       }||_        |S )zCreate a Marker instance from a pre-parsed marker tree.

        This avoids re-parsing serialised marker strings when combining markers.
        )__new__r   )clsr   news      r"   _from_markerszMarker._from_markersg  s     kk#
r!   c                ,    t        | j                        S r   )rQ   r   r   s    r"   __str__zMarker.__str__q  s    dmm,,r!   c                N    d| j                   j                   dt        |       dS )Nrj   rV   z)>)	__class__r/   r6   r   s    r"   __repr__zMarker.__repr__t  s&    4>>**+1SYM<<r!   c                *    t        t        |             S r   )hashr6   r   s    r"   __hash__zMarker.__hash__w  s    CIr!   c                \    t        |t              st        S t        |       t        |      k(  S r   )rA   r   NotImplementedr6   r   others     r"   __eq__zMarker.__eq__z  s%    %(!!4yCJ&&r!   c                ~    t        |t              st        S | j                  | j                  d|j                  g      S )Nr   rA   r   r   r   r   r   s     r"   __and__zMarker.__and__  s2    %(!!!!4==%"HIIr!   c                ~    t        |t              st        S | j                  | j                  d|j                  g      S )Nr~   r   r   s     r"   __or__zMarker.__or__  s2    %(!!!!4==$"GHHr!   Nc                >   t        dt                     }|dk(  r$|j                  t               t                      n
|dk(  rd|d<   |6|j                  |       d|v r!t        d|d         }|rt	        |      nd|d<   t        | j                  t        |            S )a"  Evaluate a marker.

        Return the boolean from evaluating this marker against the environment.
        The environment is determined from the current Python process unless
        passed in explicitly.

        :param environment: Mapping containing keys and values to override the
           detected environment.
        :param EvaluateContext context: The context in which the marker is
            evaluated, which influences what marker names are considered valid.
            Accepted values are ``"metadata"`` (for core metadata; default),
            ``"lock_file"``, and ``"requirement"`` (i.e. all other situations).
        :raises UndefinedComparison: If the marker uses a comparison on values
            that are not valid versions per the :ref:`specification of version
            specifiers <pypug:version-specifiers>`.
        :raises UndefinedEnvironmentName: If the marker references a value that
            is missing from the evaluation environment.
        :returns: ``True`` if the marker matches, otherwise ``False``.

        !dict[str, str | AbstractSet[str]]r%   )r'   r(   r$    r@   z
str | None)r
   r   update	frozensetr   r   r   _repair_python_full_version)r   r   contextcurrent_environmentr@   s        r"   evaluatezMarker.evaluate  s    2 #/1D1F
 k!&& {ik '  
"+-("&&{3-- \+>w+GHKP/@/GVX#G, MM67JK
 	
r!   )r\   r6   returnNone)r   r   r   r   )r   r6   )r   int)r   objectr   bool)r   r   r   r   )Nr$   )r   z+Mapping[str, str | AbstractSet[str]] | Noner   r   r   r   )r/   r0   r1   r2   	__slots__r   classmethodr   r   r   r   r   r   r   r   r    r!   r"   r   r   =  sr     I/<  -='J
I DH#-.
@.
 !.
 
	.
r!   r   c                V    t        d| d         }|j                  d      r| d| d<   | S )z
    Work around platform.python_version() returning something that is not PEP 440
    compliant for non-tagged Python builds.
    r6   r+   +local)r
   endswith)envr+   s     r"   r   r     s=     uc*?&@A##C((;'<E%B!"Jr!   )r   z	list[str])rD   MarkerList | MarkerAtom | strr   r   )rK   r   r   r   )T)r\   zlist[str] | MarkerAtom | strrP   zbool | Noner   r6   )
rE   r6   rF   r   rG   str | AbstractSet[str]rs   r6   r   r   )rE   r6   rG   r   rs   r6   r   z"tuple[str, str | AbstractSet[str]])r   r   r   r   r   r   )r   zsys._version_infor   r6   )r   r   )r   r   r   r   )8
__future__r   operatorr   r   r   typingr   r   r   r   r   r	   r
   _parserr   r   r   r   r   r   r   
_tokenizerr   
specifiersr   r   utilsr   r   r#   r6   r   Operatorr   ry   rp   
ValueErrorr   r   r   r   rI   rM   rQ   eqnerl   r>   rw   r{   r   r   r   r   r   r    r!   r"   <module>r      s  
 #  	  
 R R R @ @ 2 ) 3 $ S%[%5 567=>@A !"56  J * Uz UJ) JZ)" 3 @D(1<: &-	!
++
++
++
++	!	#
 	"	)03'*--&G-	-B,{
 {
|
	*
&
r!   