+
     h'  c                  s   R t ^ RIHt ^ RIt^ RIHtHtHtHt ^RI	H
t
Ht  ! R R4      t ! R R]4      t ! R	 R
]4      t ! R R]4      t]]]3,          t]]]]3,          t]]]R,          3,          t]]R]]3,          ,          t ! R R]4      tR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R  ltR! R" ltR# R$ ltR% R& lt R' R( lt!R) R* lt"R+ R, lt#R- R. lt$R/ R0 lt%R1 R2 lt&R# )3zHandwritten parser of dependency specifiers.

The docstring for each __parse_* function contains EBNF-inspired grammar representing
the implementation.
)annotationsN)
NamedTupleSequenceTupleUnion)DEFAULT_RULES	Tokenizerc                  sF    ] tR t^tR R ltR R ltR R ltR R ltR	tR
# )Nodec                    V ^8  d   QhRRRR/# )   valuestrreturnZNone Zformat   "6/usr/lib/python3.14/site-packages/packaging/_parser.py__annotate__Node.__annotate__   s      c d     c                	s    Wn         R # Nr
   )selfr
   s   &&r   __init__ZNode.__init__   s    
r   c                   V ^8  d   QhRR/# r	   r   r   r   r   r   r   r   r      s       r   c                	s    V P                   # r   r   r      &r   __str__ZNode.__str__   s    zzr   c               r   r   r   r   r   r   r   r      s     8 8# 8r   c                	s<    R V P                   P                   RV  R2# )Z<z('z')>)Z	__class____name__r   r   r   __repr__ZNode.__repr__   s"    4>>**+2dV377r   c               r   r   r   r   r   r   r   r      s     " "3 "r   c                	s    \         hr   )ZNotImplementedErrorr   r   r   	serializeZNode.serialize   s    !!r   r   N)	r   
__module____qualname____firstlineno__r   r   r   r   __static_attributes__r   r   r   r   r      s    8" "r   r   c                  s"    ] tR t^tR R ltRtR# )Variablec               r   r   r   r   r   r   r   ZVariable.__annotate__         3 r   c                	    \        V 4      # r   r   r   r   r   r   ZVariable.serialize       4yr   r   Nr   r    r!   r"   r   r#   r   r   r   r$   r$           r   r$   c                  s"    ] tR t^"tR R ltRtR# )Valuec               r   r   r   r   r   r   r   ZValue.__annotate__#   s      3 r   c                	s    R V  R 2# )Z"r   r   r   r   r   ZValue.serialize#   s    4&{r   r   Nr)   r   r   r   r+   r+   "   s     r   r+   c                  s"    ] tR t^'tR R ltRtR# )Opc               r   r   r   r   r   r   r   ZOp.__annotate__(   r%   r   c                	r&   r   r'   r   r   r   r   ZOp.serialize(   r(   r   r   Nr)   r   r   r   r,   r,   '   r*   r   r,   
MarkerAtom
MarkerListc                  sJ    ] tR t^2t$ R]R&   R]R&   R]R&   R]R&   R]R&   R	tR
# )ParsedRequirementr   nameurl	list[str]extras	specifierzMarkerList | Nonemarkerr   N)r   r    r!   r"   Z__annotations__r#   r   r   r   r/   r/   2   s    
I	HNr   r/   c               r   )r	   sourcer   r   r/   r   r   r   r   r   r   =   s     F Fc F&7 Fr   c                6    \        \        V \        R 7      4      # )Zrules)_parse_requirementr   r   r6   r   r   parse_requirementr;   =       imDEEr   c               r   )r	   	tokenizerr   r   r/   r   r   r   r   r   r   A   s     C C) C0A Cr   c                s   V P                  R4       V P                  RRR7      pVP                  pV P                  R4       \        V 4      pV P                  R4       \	        V 4      w  rEpV P                  RRR7       \        W$W5V4      # )zA
requirement = WS? IDENTIFIER WS? extras WS? requirement_details
WS
IDENTIFIERz1package name at the start of dependency specifierZexpectedENDzend of dependency specifier)consumeexpecttext_parse_extras_parse_requirement_detailsr/   )r=   Z
name_tokenr0   r3   r1   r4   r5   s   &      r   r9   r9   A   s     d!!R " J ??Dd9%Fd7	BCFU%BCT6BBr   c               r   )r	   r=   r   r   z"tuple[str, str, MarkerList | None]r   r   r   r   r   r   V   s     0$ 0$0$'0$r   c                sH   RpRpRpV P                  R4      '       d   V P                  4        V P                  R4       V P                  pV P	                  RRR7      P
                  pV P                  RR	R
7      '       d   W!V3# V P	                  RRR7       V P                  RR	R
7      '       d   W!V3# \        WRR7      pM]V P                  p\        V 4      pV P                  R4       V P                  RR	R
7      '       d   W!V3# \        T TV'       d   RMRR7      pW!V3# )zr
requirement_details = AT URL (WS requirement_marker?)?
                    | specifier WS? (requirement_marker)?
 NZATr>   ZURLzURL after @r@   rA   TZpeekzwhitespace after URLzURL and whitespace)
span_startafterversion specifierz#name and no valid version specifier)checkreadrB   positionrC   rD   _parse_requirement_marker_parse_specifier)r=   r4   r1   r5   Z	url_startZspecifier_starts   &     r   rF   rF   V   s/    I
CFt$&&	u}=BB??5t?,,F++(>? ??5t?,,F++*3G
 $,,$Y/	$??5t?,,F++*&  $:
 F##r   c               s(    V ^8  d   QhRRRRRRRR/# )	r	   r=   r   rI   ZintrJ   r   r   r.   r   r   r   r   r   r      s,      ),58r   c               s    V P                  R4      '       g   V P                  RV R2VR7       V P                  4        \        V 4      pV P	                  R4       V# )z+
requirement_marker = SEMICOLON marker WS?
Z	SEMICOLONz!Expected end or semicolon (after Z))rI   r>   )rL   raise_syntax_errorrM   _parse_markerrB   )r=   rI   rJ   r5   s   &$$ r   rO   rO      s^     ??;''$$/wa8! 	% 	
 NN9%FdMr   c               r   r	   r=   r   r   r2   r   r   r   r   r   r      s      Y 9 r   c                s   V P                  RRR7      '       g   . # V P                  RRRR7      ;_uu_ 4        V P                  R4       \        V 4      pV P                  R4       RRR4       V#   + '       g   i     X# ; i)	z?
extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
ZLEFT_BRACKETTrH   ZRIGHT_BRACKETr3   Zaroundr>   N)rL   enclosing_tokensrB   _parse_extras_list)r=   r3      & r   rE   rE      s     ??>?55			#	# 
$ 
 

 	$#I.$
 M
 
 Ms   .A00B	c               r   rS   r   r   r   r   r   r      s      ) 	 r   c                s   . pV P                  R4      '       g   V# VP                  V P                  4       P                  4        V P	                  R4       V P                  RRR7      '       d   V P                  R4       MV P                  R4      '       g    V# V P                  4        V P	                  R4       V P                  RRR7      pVP                  VP                  4       K  )	z6
extras_list = identifier (wsp* ',' wsp* identifier)*
r?   Tr>   rH   z"Expected comma between extra namesCOMMAzextra name after commar@   )rL   ZappendrM   rD   rB   rQ   rC   )r=   r3   Zextra_token   &  r   rV   rV      s     F??<((
MM).."''(
$??<d?33(()MN)) M 	$&&|>V&Wk&&'r   c               r   r	   r=   r   r   r   r   r   r   r   r   r      s      	 c r   c                s    V P                  RRRR7      ;_uu_ 4        V P                  R4       \        V 4      pV P                  R4       RRR4       V#   + '       g   i     X# ; i)zf
specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
          | WS? version_many WS?
LEFT_PARENTHESISRIGHT_PARENTHESISrK   rT   r>   N)rU   rB   _parse_version_many)r=   parsed_specifiersrW   r   rP   rP      sn    
 
	#	#" 
$ 
 

 	$/	:$
 
 
 s   .AA&	c               r   rZ   r   r   r   r   r   r      s      9  r   c                s:   RpV P                  R4      '       Ed   V P                  pWP                  4       P                  ,          pV P                  RRR7      '       d&   V P	                  RVV P                  ^,           R7       V P                  RRR7      '       d   V P	                  R	VV P                  R7       V P                  R
4       V P                  R4      '       g    V# WP                  4       P                  ,          pV P                  R
4       EK  V# )z8
version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
rG   Z	SPECIFIERZVERSION_PREFIX_TRAILTrH   z6.* suffix can only be used with `==` or `!=` operators)rI   Zspan_endZVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsr>   rX   )rL   rN   rM   rD   rQ   rB   )r=   r^   rI   rY   r   r]   r]      s    
//+
&
&''
^^-222??1?==((H%"++a/ ) 
 ??6T?BB((R%"++ ) 
 	$w''  	^^-222$r   c               r   )r	   r6   r   r   r.   r   r   r   r   r   r      s     F F F Fr   c                r7   r8   )_parse_full_markerr   r   r:   r   r   parse_markerr`      r<   r   c               r   r	   r=   r   r   r.   r   r   r   r   r   r      s      ) 
 r   c                sB    \        V 4      pV P                  R RR7       V# )rA   zend of marker expressionr@   )rR   rC   )r=   ZretvalrW   r   r_   r_      s%    9%FU%?@Mr   c               r   ra   r   r   r   r   r   r     s     	 	Y 	: 	r   c                s    \        V 4      .pV P                  R4      '       d;   V P                  4       p\        V 4      pVP                  VP                  V34       KQ  V# )z,
marker = marker_atom (BOOLOP marker_atom)+
ZBOOLOP)_parse_marker_atomrL   rM   ZextendrD   )r=   Z
expressionZtokenZ
expr_right   &   r   rR   rR     sS     %Y/0J
//(
#
# '	2
5::z23r   c               r   )r	   r=   r   r   r-   r   r   r   r   r   r     s      ) 
 r   c                s^   V P                  R4       V P                  RRR7      '       dT   V P                  RRRR7      ;_uu_ 4        V P                  R4       \        V 4      pV P                  R4       RRR4       M\	        V 4      pV P                  R4       X#   + '       g   i     L#; i)	zk
marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
            | WS? marker_item WS?
r>   r[   TrH   r\   zmarker expressionrT   N)rB   rL   rU   rR   _parse_marker_item)r=   r5   rW   r   rb   rb     s     d)55''& ( 
 

 d#!.y!9Fd#
 
 $I.dM
 
s   .BB,	c               r   )r	   r=   r   r   
MarkerItemr   r   r   r   r   r   (  s     : :) :
 :r   c                s    V P                  R4       \        V 4      pV P                  R4       \        V 4      pV P                  R4       \        V 4      pV P                  R4       WV3# )z?
marker_item = WS? marker_var WS? marker_op WS? marker_var WS?
r>   )rB   _parse_marker_var_parse_marker_op)r=   Zmarker_var_leftZ	marker_opZmarker_var_rightrc   r   rd   rd   (  sg     d'	2Od +Id(3d(899r   c               r   )r	   r=   r   r   	MarkerVarr   r   r   r   r   r   6  s     
 
 
y 
r   c                s2   V P                  R4      '       d4   \        V P                  4       P                  P	                  RR4      4      # V P                  R4      '       d$   \        V P                  4       P                  4      # V P                  RR7       R# )z'
marker_var = VARIABLE | QUOTED_STRING
ZVARIABLEZ.Z_ZQUOTED_STRINGz+Expected a marker variable or quoted string)ZmessageN)rL   process_env_varrM   rD   Zreplaceprocess_python_strrQ   r=   r   r   rf   rf   6  su     z""y~~/44<<S#FGG		)	)!).."2"7"788$$A 	% 	
r   c               r   )r	   env_varr   r   r$   r   r   r   r   r   r   D  s     ! !S !X !r   c                s<    V R9   d   \        R 4      # \        V 4      # )platform_python_implementation)rm   Zpython_implementation)r$   )rl   r   r   ri   ri   D  s"    MM899  r   c               r   )r	   
python_strr   r   r+   r   r   r   r   r   r   K  s      3 5 r   c                sV    \         P                  ! V 4      p\        \        V4      4      # r   )astZliteral_evalr+   r   )rn   r
   rW   r   rj   rj   K  s!    Z(EUr   c               r   )r	   r=   r   r   r,   r   r   r   r   r   r   P  s     
 
	 
b 
r   c                s   V P                  R4      '       d   V P                  4        \        R4      # V P                  R4      '       dB   V P                  4        V P                  RRR7       V P                  RRR7       \        R4      # V P                  R	4      '       d$   \        V P                  4       P                  4      # V P                  R
4      # )z
marker_op = IN | NOT IN | OP
ZINZinZNOTr>   zwhitespace after 'not'r@   z'in' after 'not'znot inZOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rL   rM   r,   rC   rD   rQ   rk   r   r   rg   rg   P  s     t$x			(@A(:;(|			).."''((++X
 	
r   )'Z__doc__Z
__future__r    ro   Ztypingr   r   r   r   Z
_tokenizerr   r   r   r$   r+   r,   rh   re   r-   r   r.   r/   r;   r9   rF   rO   rE   rV   rP   r]   r`   r_   rR   rb   rd   rf   ri   rj   rg   r   r   r   <module>rp      s    # 
 5 5 0" "t 
D 
 
 (E/"	9b)+,
:x556
eL*c9:;

 FC*0$f(&6"@F	,:
!

r   