
    iB              	      4   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dDd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)dEdZ*dFdZ+	 dGdHd&Z,d' d( d) ej-        ej-        ej.        ej-        d* d+Z/d,e0d-<   dId5Z1dJd7Z2dKd;Z3dLd>Z4dMd?Z5 G d@ dA          Z6dNdCZ7dS )O    )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_environmentreturn	list[str]c                     t           S N)__all__     X/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/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dS )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dS )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>`.
    Nr1   r#   r$   r%   r   r   >   s           r$   r   c                      e Zd ZdZdS )r   zJRaised when evaluating a marker that references a missing environment key.Nr1   r#   r$   r%   r   r   G   s        TTT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<   dS )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)r2   r3   r4   r5   __annotations__r#   r$   r%   r   r   K   s          
 >
 LLL
      (''' 9 r$   r   resultMarkerList | MarkerAtom | strc                T   t          | t                    s| S | \  }}}t          |t                    r/|j        dk    r$t	          |j                  }t          |          }nCt          |t                    r.|j        dk    r#t	          |j                  }t          |          }|||fS )Nextra)
isinstancetupler   valuer   r   )rB   lhsoprhsnormalized_extras        r%   _normalize_extrasrM      s     fe$$ LCS#x   &SY'%9%9,SY77$%%	C	"	" &syG';';,SY77$%%C<r$   resultsr   c                    d | D             S )z!
    Normalize extra values.
    c                ,    g | ]}t          |          S r#   )rM   ).0rs     r%   
<listcomp>z+_normalize_extra_values.<locals>.<listcomp>   s!    222Qa  222r$   r#   )rN   s    r%   _normalize_extra_valuesrT      s    
 32'2222r$   Tmarkerlist[str] | MarkerAtom | strfirstbool | Noner9   c                   t          | t          t          t          f          sJ t          | t                    rJt	          |           dk    r7t          | d         t          t          f          rt          | d                   S t          | t                    r>d | D             }|rd                    |          S dd                    |          z   dz   S t          | t                    rd                    d | D                       S | S )Nr   r   c              3  8   K   | ]}t          |d           V  dS )F)rW   N)_format_markerrQ   ms     r%   	<genexpr>z!_format_marker.<locals>.<genexpr>   s/      @@A///@@@@@@r$    ()c                6    g | ]}|                                 S r#   )	serializer\   s     r%   rS   z"_format_marker.<locals>.<listcomp>   s     7771777r$   )rF   listrG   r9   lenr[   join)rU   rW   inners      r%   r[   r[      s    ftUC011111 	64  )KK1vay4-00  fQi(((&$ 	@@@@@ 	/88E??"%(3..	FE	"	" xx77777888r$   c                
    | |v S r!   r#   rI   rK   s     r%   <lambda>rj      s
    3#: r$   c                
    | |vS r!   r#   ri   s     r%   rj   rj      s
    s#~ r$   c                    dS NFr#   _lhs_rhss     r%   rj   rj          E r$   c                    dS rm   r#   rn   s     r%   rj   rj      rq   r$   )inznot in<z<=z==z!=z>=>zdict[str, Operator]
_operatorsrI   rJ   r   rK   str | AbstractSet[str]keyboolc          	     4   |                                 }|t          v r;	 t          | |           }|                    | d          S # t          $ r Y nw xY wt
                              |          }|t          d|d| d|d           || |          S )NT)prereleasesz
Undefined z on z and .)rc   MARKERS_REQUIRING_VERSIONr   containsr   rv   getr   )rI   rJ   rK   rx   op_strspecopers          r%   _eval_opr      s    \\^^F
'''	8---..D ==$=777   	 	 	D	
 'NN622D|!"Mr"M"M"M"MS"M"M"MNNN4S>>s   A	 	
AA"tuple[str, str | AbstractSet[str]]c                
   |dk    r#t          |t                    s
J d            | |fS |t          v rNt          |t                    rt          |           t          |          fS t          |           d |D             fS | |fS )NrE   zextra value must be a stringc                ,    h | ]}t          |          S r#   r   )rQ   vs     r%   	<setcomp>z_normalize.<locals>.<setcomp>   s!    ,O,O,Oa->q-A-A,O,O,Or$   )rF   r9   MARKERS_ALLOWING_SETr   )rI   rK   rx   s      r%   
_normalizer      s     g~~#s##CC%CCC#Sz
"""c3 	Q%c**,=c,B,BCC%c**,O,O3,O,O,OPP 8Or$   markersenvironment!dict[str, str | AbstractSet[str]]c           	        g g}| D ]6}t          |t                    r*|d                             t          ||                     Bt          |t                    r|\  }}}t          |t
                    r|j        }||         }|j        }	n|j        }|j        }||         }	t          |t                    s
J d            t          ||	|          \  }}	|d                             t          |||	|                     |dk    r|                    g            |dk    r&t          d|          t          d |D                       S )Nzlhs must be a string)rx   orandzUnexpected marker c              3  4   K   | ]}t          |          V  d S r!   )all)rQ   items     r%   r^   z$_evaluate_markers.<locals>.<genexpr>  s(      ,,Ts4yy,,,,,,r$   )rF   rd   append_evaluate_markersrG   r   rH   r9   r   r   	TypeErrorany)
r   r   groupsrU   rI   rJ   rK   environment_key	lhs_value	rhs_values
             r%   r   r      su    !#tF = =fd## 	=2J/DDEEEE&& 	=!LCS#x(( 9"%)'8	I		I	"%)'8	i--EE/EEE-#-i#X#X#X Iy2Jhy"i_UUUVVVVt^^MM"u__;;;<<<,,V,,,,,,r$   infosys._version_infoc                    | j          d| j         d| j         }| j        }|dk    r ||d         t	          | j                  z   z  }|S )Nr|   finalr   )majorminormicroreleaselevelr9   serial)r   versionkinds      r%   _format_full_versionr     sV    77dj774:7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                    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`.
    r|   N   )r:   r/   r;   r<   r-   r=   r>   r.   r?   r,   r@   )r   sysimplementationr   nameosplatformmachinereleasesystemr,   python_implementationrf   python_version_tuple)iverr:   s     r%   r   r   '  s    
   2 :;;D,12"&7$,..$,..#?,,$,..'688*2*H*J*J((8#@#B#B2A2#FGG  r$   c                      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Zd%dZ	 	 d&d'dZdS )(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.

    Instances are safe to serialize with :mod:`pickle`. They use a stable
    format so the same pickle can be loaded in future packaging releases.

    .. versionchanged:: 26.2

        Added a stable pickle format. Pickles created with packaging 26.2+ can
        be unpickled with future releases.  Backward compatibility with pickles
        from packaging < 26.2 is supported but may be removed in a future
        release.
    )_markersrU   r9   r   Nonec                    g | _         	 t          t          |                    | _         d S # t          $ r"}t	          t          |                    |d }~ww xY wr!   )r   rT   _parse_markerr   r   r9   )selfrU   es      r%   __init__zMarker.__init__S  sb     %'	/3M&4I4IJJDMMM" ! 	/ 	/ 	/A''Q.	/s   !, 
AAAr   r   c                >    |                      |           }||_        |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_markersq  s!     kk#
r$   c                *    t          | j                  S r!   )r[   r   r   s    r%   __str__zMarker.__str__{  s    dm,,,r$   c                B    d| j         j         dt          |           dS )Nrt   r`   z)>)	__class__r2   r9   r   s    r%   __repr__zMarker.__repr__~  s&    <4>*<<SYY<<<<r$   intc                :    t          t          |                     S r!   )hashr9   r   s    r%   __hash__zMarker.__hash__  s    CIIr$   otherobjectry   c                z    t          |t                    st          S t          |           t          |          k    S r!   )rF   r   NotImplementedr9   r   r   s     r%   __eq__zMarker.__eq__  s1    %(( 	"!!4yyCJJ&&r$   c                     t          |           S r!   )r9   r   s    r%   __getstate__zMarker.__getstate__  s     4yyr$   statec                :   t          |t                    rJ	 t          t          |                    | _        n%# t
          $ r}t          d|          |d }~ww xY wd S t          |t                    r*d|v r&|d         }t          |t                    r	|| _        d S t          |t                    rWt          |          dk    rD|\  }}t          |t                    r*d|v r&|d         }t          |t                    r	|| _        d S t          d|          )NzCannot restore Marker from r   r   )rF   r9   rT   r   r   r   r   dictrd   rG   re   )r   r   excr   _	slot_dicts         r%   __setstate__zMarker.__setstate__  s<   eS!! 	R 7e8L8L M M$ R R R Ge G GHHcQRFeT"" 	zU':':J'G'4((  'eU## 	E

a LAy)T** zY/F/F#J/gt,, $+DMF?e??@@@s   !9 
AAAc                ~    t          |t                    st          S |                     | j        d|j        g          S )Nr   rF   r   r   r   r   r   s     r%   __and__zMarker.__and__  s9    %(( 	"!!!!4=%"HIIIr$   c                ~    t          |t                    st          S |                     | j        d|j        g          S )Nr   r   r   s     r%   __or__zMarker.__or__  s9    %(( 	"!!!!4=$"GHHHr$   Nr'   r   +Mapping[str, str | AbstractSet[str]] | Nonecontextr   c                   t          dt                                }|dk    r0|                    t                      t                                 n|dk    rd|d<   |E|                    |           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``.

        r   r(   )r*   r+   r'    rE   Nz
str | None)r
   r   update	frozensetr   r   r   _repair_python_full_version)r   r   r   current_environmentrE   s        r%   evaluatezMarker.evaluate  s    2 #/1D1F1F
 
 k!!&& {{ikk '     
""+-("&&{333--- \+>w+GHHKP/X/@/G/G/GVX#G, M67JKK
 
 	
r$   )rU   r9   r   r   )r   r   r   r   )r   r9   )r   r   )r   r   r   ry   )r   r   r   r   )r   r   r   r   )Nr'   )r   r   r   r   r   ry   )r2   r3   r4   r5   	__slots__r   classmethodr   r   r   r   r   r   r   r   r   r   r#   r$   r%   r   r   =  s(        & I/ / / /<    [- - - -= = = =   ' ' ' '   
A A A A0J J J J
I I I I DH#-.
 .
 .
 .
 .
 .
 .
r$   r   envc                l    t          d| d                   }|                    d          r| d| d<   | S )z
    Work around platform.python_version() returning something that is not PEP 440
    compliant for non-tagged Python builds.
    r9   r.   +local)r
   endswith)r   r.   s     r%   r   r     sJ     uc*?&@AA##C(( C(;%B%B%B!"Jr$   )r   r   )rB   rC   r   rC   )rN   r   r   r   )T)rU   rV   rW   rX   r   r9   )
rI   r9   rJ   r   rK   rw   rx   r9   r   ry   )rI   r9   rK   rw   rx   r9   r   r   )r   r   r   r   r   ry   )r   r   r   r9   )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&   r9   ry   Operatorr   r   r}   
ValueErrorr   r   r   r   rM   rT   r[   eqnerv   rA   r   r   r   r   r   r   r   r#   r$   r%   <module>r      sk  
 # " " " " " "  				  



 R R R R R R R R R R R R R R R R R R @ @ @ @ @ @ @ @ @ @ @ @ @ @ 2 2 2 2 2 2 ) ) ) ) ) ) 3 3 3 3 3 3 3 3 $ $ $ $ $ $      S%[%5 567=>@A !"56        J       *   U U U U Uz U U UJ J J J J) J J JZ    3 3 3 3 @D    : &
%--	!	!
+
+
+
+	!	!	# 	#
 	 	 	 	   "   *- - - -B      ,b
 b
 b
 b
 b
 b
 b
 b
J
 
 
 
 
 
r$   