
    ցj_1                       S r SSKJr  SSKrSSKJr  SSKJrJrJ	r	  SSK
JrJrJr   " S S	5      r " S
 S\5      r " S S\5      r " S S\5      r\S   r\	\\4   r\\\\4   r\	\\S   4   r\\	S\\4      r " S S\5      rS&S jrS'S jr    S(S jr        S)S jrS*S jrS*S jrS+S jr S+S jr!S,S jr"S-S jr#S-S jr$S.S  jr%S/S! jr&S0S" jr'S1S# jr(S2S$ jr)S3S% jr*g)4zHandwritten parser of dependency specifiers.

The docstring for each __parse_* function contains EBNF-inspired grammar representing
the implementation.
    )annotationsN)Sequence)Literal
NamedTupleUnion   )DEFAULT_RULESParserSyntaxError	Tokenizerc                  ^    \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSrg
)Node   valuec                    Xl         g Nr   selfr   s     K/mnt/workspace/venv-train/lib/python3.13/site-packages/packaging/_parser.py__init__Node.__init__   s    
    c                    U R                   $ r   r   r   s    r   __str__Node.__str__   s    zzr   c                R    SU R                   R                   SU R                  < S3$ )N<(z)>)	__class____name__r   r   s    r   __repr__Node.__repr__   s&    4>>**+1TZZN"==r   c                    [         er   )NotImplementedErrorr   s    r   	serializeNode.serialize   s    !!r   c                    U R                   $ r   r   r   s    r   __getstate__Node.__getstate__   s    zzr   c                    [        U[        5      (       d&  [        SU R                  R                   SU< 35      eXl        g )NCannot restore z value from )
isinstancestr	TypeErrorr    r!   r   r   s     r   _restore_valueNode._restore_value#   s>    %%%!$.."9"9!:,uiP  
r   c                   [        U[        5      (       a  U R                  U5        g [        U[        5      (       aC  [	        U5      S:X  a4  Uu  p#[        U[
        5      (       a  SU;   a  U R                  US   5        g [        U[
        5      (       a  SU;   a  U R                  US   5        g [        SU R                  R                   SU< 35      e)N   r   r,   z from )	r-   r.   r0   tuplelendictr/   r    r!   )r   state_	slot_dicts       r   __setstate__Node.__setstate__*   s    eS!!&eU##E
a LA)T**w)/C##Ig$67eT""w%'7g//$..*A*A)B&	RSSr   N)r   r.   returnNoner<   r.   )r   objectr<   r=   )r7   r?   r<   r=   )r!   
__module____qualname____firstlineno__	__slots__r   r   r"   r&   r)   r0   r:   __static_attributes__ r   r   r   r      s+    I>"Tr   r   c                  "    \ rS rSrSrSS jrSrg)Variable<   rE   c                    [        U 5      $ r   r.   r   s    r   r&   Variable.serialize?       4yr   Nr>   r!   r@   rA   rB   rC   r&   rD   rE   r   r   rG   rG   <       Ir   rG   c                  "    \ rS rSrSrSS jrSrg)ValueC   rE   c                ^    [        U 5      nSU;  a  SU S3$ SU;  a  SU S3$ [        S5      e)N"'z>Cannot serialize marker value containing both quote characters)r.   
ValueErrorr   s     r   r&   Value.serializeF   sG    D	eugQ<eugQ<L
 	
r   Nr>   rM   rE   r   r   rP   rP   C   s    I
r   rP   c                  "    \ rS rSrSrSS jrSrg)OpQ   rE   c                    [        U 5      $ r   rJ   r   s    r   r&   Op.serializeT   rL   r   Nr>   rM   rE   r   r   rX   rX   Q   rN   r   rX   )andor
MarkerAtom
MarkerListc                  H    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S
rg)ParsedRequirement_   r.   nameurl	list[str]extras	specifierzMarkerList | NonemarkerrE   N)r!   r@   rA   rB   __annotations__rD   rE   r   r   ra   ra   _   s    
I	HNr   ra   c                0    [        [        U [        S95      $ N)rules)_parse_requirementr   r	   sources    r   parse_requirementrp   j       imDEEr   c                   U R                  S5        U R                  SSS9nUR                  nU R                  S5        [        U 5      nU R                  S5        [	        U 5      u  pEnU R                  SSS9  [        X$X5U5      $ )zA
requirement = WS? IDENTIFIER WS? extras WS? requirement_details
WS
IDENTIFIERz1package name at the start of dependency specifierexpectedENDzend of dependency specifier)consumeexpecttext_parse_extras_parse_requirement_detailsra   )	tokenizer
name_tokenrc   rf   rd   rg   rh   s          r   rm   rm   n   s     d!!R " J ??Dd9%Fd7	BCFU%BCT6BBr   c                   SnSnSnU R                  S5      (       a  U R                  5         U R                  S5        U R                  nU R	                  SSS9R
                  nU R                  SS	S
9(       a  X!U4$ U R	                  SSS9  U R                  SS	S
9(       a  X!U4$ [        U USS9nOUU R                  n[        U 5      nU R                  S5        U R                  SS	S
9(       a  X!U4$ [        U UU(       a  SOSS9nX!U4$ )zr
requirement_details = AT URL (WS requirement_marker?)?
                    | specifier WS? (requirement_marker)?
 NATrs   URLzURL after @ru   rw   Tpeekzwhitespace after URLz$semicolon (after URL and whitespace))
span_startrv   zEcomma (within version specifier), semicolon (after version specifier)z0semicolon (after name with no version specifier))checkreadrx   positionry   rz   _parse_requirement_marker_parse_specifier)r}   rg   rd   rh   	url_startspecifier_starts         r   r|   r|      s*    I
CFt$&&	u}=BB??5t?,F++(>? ??5t?,F++* ;
 $,,$Y/	$??5t?,F++*&  XG
 F##r   c                   U R                  S5      (       d  U R                  SU S3USS9  U R                  5         [        U 5      nU R	                  S5        U$ )z+
requirement_marker = SEMICOLON marker WS?
	SEMICOLONz	Expected z or endNr   span_endrs   )r   raise_syntax_errorr   _parse_markerrx   )r}   r   rv   rh   s       r   r   r      sa     ??;''$$z)! 	% 	

 NN9%FdMr   c                    U R                  SSS9(       d  / $ U R                  SSSS9   U R                  S5        [        U 5      nU R                  S5        SSS5        U$ ! , (       d  f       W$ = f)	z?
extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
LEFT_BRACKETTr   RIGHT_BRACKETrf   aroundrs   N)r   enclosing_tokensrx   _parse_extras_list)r}   rf   s     r   r{   r{      s{     ??>?5			#	# 
$ 

 	$#I.$
 M
 
 Ms   .A!!
A0c                   / nU R                  S5      (       d  U$ UR                  U R                  5       R                  5         U R	                  S5        U R                  SSS9(       a  U R                  S5        OU R                  S5      (       d   U$ U R                  5         U R	                  S5        U R                  SSS9nUR                  UR                  5        M  )	z6
extras_list = identifier (wsp* ',' wsp* identifier)*
rt   Trs   r   z"Expected comma between extra namesCOMMAzextra name after commaru   )r   appendr   rz   rx   r   ry   )r}   rf   extra_tokens      r   r   r      s     F??<((
MM).."''(
$??<d?3(()MN)) M 	$&&|>V&Wk&&' r   c                    U R                  SSSS9   U R                  S5        [        U 5      nU R                  S5        SSS5        U$ ! , (       d  f       W$ = f)zf
specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
          | WS? version_many WS?
LEFT_PARENTHESISRIGHT_PARENTHESISzversion specifierr   rs   N)r   rx   _parse_version_many)r}   parsed_specifierss     r   r   r      si    
 
	#	#" 
$ 

 	$/	:$
 
 
 s   .A


Ac                   SnU R                  S5      (       GaC  U R                  nU R                  5       R                  nX-  nU R                  SSS9(       ad  SnUR	                  S5      (       d,  UR	                  S5      (       a  UR	                  S	5      (       d  S
nU R                  UUU R                  S-   S9  U R                  SSS9(       a  U R                  SUU R                  S9  U R                  S5        U R                  S5      (       d   U$ XR                  5       R                  -  nU R                  S5        U R                  S5      (       a  GMC  U$ )z8
version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
r   	SPECIFIERVERSION_PREFIX_TRAILTr   z6.* suffix can only be used with `==` or `!=` operatorsz!=z==z===zN.* suffix cannot be used with pre-release, post-release, dev or local versionsr   r   VERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrs   r   )r   r   r   rz   
startswithr   rx   )r}   r   r   rg   messages        r   r   r     sX    
//+
&
&''
NN$))	&??1?=NG##D))$$T**93G3G3N3N,  ((%"++a/ ) 
 ??6T?B((R%"++ ) 
 	$w''  	^^-222$9 //+
&
&< r   c                0    [        [        U [        S95      $ rk   )_parse_full_markerr   r	   rn   s    r   parse_markerr   5  rq   r   c                <    [        U 5      nU R                  SSS9  U$ )Nrw   zend of marker expressionru   )r   ry   )r}   retvals     r   r   r   9  s%    9%FU%?@Mr   c                    [        U 5      /nU R                  S5      (       aP  U R                  5       n[        U 5      nUR                  UR                  U45        U R                  S5      (       a  MP  U$ )z,
marker = marker_atom (BOOLOP marker_atom)+
BOOLOP)_parse_marker_atomr   r   extendrz   )r}   
expressiontoken
expr_rights       r   r   r   ?  sf     %Y/0J
//(
#
# '	2
5::z23 //(
#
# r   c                <   U R                  S5        U R                  SSS9(       aH  U R                  SSSS9   U R                  S5        [        U 5      nU R                  S5        SSS5        O[	        U 5      nU R                  S5        W$ ! , (       d  f       N!= f)	zk
marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
            | WS? marker_item WS?
rs   r   Tr   r   zmarker expressionr   N)rx   r   r   r   _parse_marker_item)r}   rh   s     r   r   r   K  s     d)5''& ( 

 d#!.y!9Fd#
 
 $I.dM
 
s   .B
Bc                    U R                  S5        [        U 5      nU R                  S5        [        U 5      nU R                  S5        [        U 5      nU R                  S5        XU4$ )z?
marker_item = WS? marker_var WS? marker_op WS? marker_var WS?
rs   )rx   _parse_marker_var_parse_marker_op)r}   marker_var_left	marker_opmarker_var_rights       r   r   r   a  sg     d'	2Od +Id(3d(899r   c           
        U R                  S5      (       a3  [        U R                  5       R                  R	                  SS5      5      $ U R                  S5      (       a&  U R                  5       n [        UR                  5      $ U R                  SS	9  g! [        [        4 aG  n[        SU R                  UR                  UR                  [        UR                  5      -   4S9UeSnAff = f)
z'
marker_var = VARIABLE | QUOTED_STRING
VARIABLE.r8   QUOTED_STRINGzInvalid quoted string)ro   spanNz+Expected a marker variable or quoted string)r   )r   process_env_varr   rz   replaceprocess_python_strSyntaxErrorrU   r
   ro   r   r5   r   )r}   r   excs      r   r   r   o  s     z""y~~/44<<S#FGG		)	) 	%ejj11 	$$A 	% 	
 Z( 	#' ''nnenns5::&FG 		s   1B C-&AC((C-c                :    U S;   a  [        S5      $ [        U 5      $ )N)platform_python_implementationpython_implementationr   )rG   )env_vars    r   r   r     s"    MM899  r   c                V    [         R                  " U 5      n[        [        U5      5      $ r   )astliteral_evalrP   r.   )
python_strr   s     r   r   r     s!    Z(EUr   c                   U R                  S5      (       a  U R                  5         [        S5      $ U R                  S5      (       a;  U R                  5         U R                  SSS9  U R                  SSS9  [        S5      $ U R                  S	5      (       a#  [        U R                  5       R                  5      $ U R                  S
5      $ )z
marker_op = IN | NOT IN | OP
INinNOTrs   zwhitespace after 'not'ru   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)r   r   rX   ry   rz   r   )r}   s    r   r   r     s     t$x			(@A(:;(|			).."''((++X
 	
r   )ro   r.   r<   ra   )r}   r   r<   ra   )r}   r   r<   z"tuple[str, str, MarkerList | None])r}   r   r   intrv   r.   r<   r_   )r}   r   r<   re   )r}   r   r<   r.   )ro   r.   r<   r_   )r}   r   r<   r_   )r}   r   r<   r^   )r}   r   r<   
MarkerItem)r}   r   r<   	MarkerVar)r   r.   r<   rG   )r   r.   r<   rP   )r}   r   r<   rX   )+__doc__
__future__r   r   collections.abcr   typingr   r   r   
_tokenizerr	   r
   r   r   rG   rP   rX   MarkerLogicalr   r4   r   r^   listr_   ra   rp   rm   r|   r   r{   r   r   r   r   r   r   r   r   r   r   r   r   rE   r   r   <module>r      s=   # 
 $ - - C C)T )TXt 
D 
  $(E/"	9b)+,
:x556
%j-?@A

 FC*2$2$'2$j),8;*&6"#RF	,:
,!

r   