
    uvi)                       S r SSKJr  SSKrSSKJrJrJrJrJ	r	J
r
  SSK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$S/S! jr%S0S" jr&S1S# jr'S2S$ jr(g)3zHandwritten parser of dependency specifiers.

The docstring for each __parse_* function contains EBNF-inspired grammar representing
the implementation.
    )annotationsN)ListLiteral
NamedTupleSequenceTupleUnion   )DEFAULT_RULES	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r	g)
Node   valuec                    Xl         g Nr   )selfr   s     ?/root/pdf_env/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   N)r   strreturnNoner)   r(   )
r!   
__module____qualname____firstlineno__	__slots__r   r   r"   r&   __static_attributes__ r   r   r   r      s    I>"r   r   c                  "    \ rS rSrSrSS jrSrg)Variable   r1   c                    [        U 5      $ r   r(   r   s    r   r&   Variable.serialize"       4yr   Nr+   r!   r,   r-   r.   r/   r&   r0   r1   r   r   r3   r3          Ir   r3   c                  "    \ rS rSrSrSS jrSrg)Value&   r1   c                    SU  S3$ )N"r1   r   s    r   r&   Value.serialize)   s    4&{r   Nr+   r9   r1   r   r   r<   r<   &   s    Ir   r<   c                  "    \ rS rSrSrSS jrSrg)Op-   r1   c                    [        U 5      $ r   r6   r   s    r   r&   Op.serialize0   r8   r   Nr+   r9   r1   r   r   rB   rB   -   r:   r   rB   )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markerr1   N)r!   r,   r-   r.   __annotations__r0   r1   r   r   rK   rK   ;   s    
I	HNr   rK   c                0    [        [        U [        S95      $ N)rules)_parse_requirementr   r   sources    r   parse_requirementrZ   F       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_detailsrK   )	tokenizer
name_tokenrM   rP   rN   rQ   rR   s          r   rW   rW   J   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ATr]   URLzURL after @r_   ra   Tpeekzwhitespace after URLz$semicolon (after URL and whitespace))
span_startr`   zEcomma (within version specifier), semicolon (after version specifier)z0semicolon (after name with no version specifier))checkreadrb   positionrc   rd   _parse_requirement_marker_parse_specifier)rg   rQ   rN   rR   	url_startspecifier_starts         r   rf   rf   _   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ro   span_endr]   )rp   raise_syntax_errorrq   _parse_markerrb   )rg   ro   r`   rR   s       r   rs   rs      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_BRACKETTrm   RIGHT_BRACKETrP   aroundr]   N)rp   enclosing_tokensrb   _parse_extras_list)rg   rP   s     r   re   re      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)*
r^   Tr]   rm   z"Expected comma between extra namesCOMMAzextra name after commar_   )rp   appendrq   rd   rb   r{   rc   )rg   rP   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   r]   N)r   rb   _parse_version_many)rg   parsed_specifierss     r   rt   rt      si    
 
	#	#" 
$ 

 	$/	:$
 
 
 s   .A


Ac                *   SnU R                  S5      (       a  U R                  nXR                  5       R                  -  nU R                  SSS9(       a  U R	                  S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  M  U$ )z8
version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
rj   	SPECIFIERVERSION_PREFIX_TRAILTrm   z6.* suffix can only be used with `==` or `!=` operatorsr
   ry   VERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsr]   r   )rp   rr   rq   rd   r{   rb   )rg   r   ro   s      r   r   r      s    
//+
&
&''
^^-222??1?=((H%"++a/ ) 
 ??6T?B((R%"++ ) 
 	$w''  	^^-222$' //+
&
&* r   c                0    [        [        U [        S95      $ rU   )_parse_full_markerr   r   rX   s    r   parse_markerr     r[   r   c                <    [        U 5      nU R                  SSS9  U$ )Nra   zend of marker expressionr_   )r|   rc   )rg   retvals     r   r   r     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_atomrp   rq   extendrd   )rg   
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?
r]   r   Trm   r   zmarker expressionr   N)rb   rp   r   r|   _parse_marker_item)rg   rR   s     r   r   r     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?
r]   )rb   _parse_marker_var_parse_marker_op)rg   marker_var_left	marker_opmarker_var_rights       r   r   r   4  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       R                  5      $ U R                  SS9  g)z'
marker_var = VARIABLE | QUOTED_STRING
VARIABLE._QUOTED_STRINGz+Expected a marker variable or quoted string)messageN)rp   process_env_varrq   rd   replaceprocess_python_strr{   rg   s    r   r   r   B  su     z""y~~/44<<S#FGG		)	)!).."2"7"788$$A 	% 	
r   c                :    U S;   a  [        S5      $ [        U 5      $ )N)platform_python_implementationpython_implementationr   )r3   )env_vars    r   r   r   P  s"    MM899  r   c                V    [         R                  " U 5      n[        [        U5      5      $ r   )astliteral_evalr<   r(   )
python_strr   s     r   r   r   W  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NOTr]   zwhitespace after 'not'r_   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rp   rq   rB   rc   rd   r{   r   s    r   r   r   \  s     t$x			(@A(:;(|			).."''((++X
 	
r   )rY   r(   r)   rK   )rg   r   r)   rK   )rg   r   r)   z"tuple[str, str, MarkerList | None])rg   r   ro   intr`   r(   r)   rI   )rg   r   r)   rO   )rg   r   r)   r(   )rY   r(   r)   rI   )rg   r   r)   rI   )rg   r   r)   rH   )rg   r   r)   
MarkerItem)rg   r   r)   	MarkerVar)r   r(   r)   r3   )r   r(   r)   r<   )rg   r   r)   rB   ))__doc__
__future__r   r   typingr   r   r   r   r   r	   
_tokenizerr   r   r   r3   r<   rB   MarkerLogicalr   r   rH   rI   rK   rZ   rW   rf   rs   re   r   rt   r   r   r   r|   r   r   r   r   r   r   r1   r   r   <module>r      s4   # 
 D D 0" " t D   $(E/"	9b)+,
:x556
%j-?@A

 FC*2$2$'2$j),8;*&6"@F	,:
!

r   