
    h'                       S r SSKJr  SSKrSSK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\\\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#S/S! jr$S0S" jr%S1S# jr&g)2zHandwritten 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                  <    \ 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   c                    Xl         g Nvalue)selfr   s     C/var/www/html/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                <    SU R                   R                   SU  S3$ )N<z('z')>)	__class____name__r   s    r   __repr__Node.__repr__   s"    4>>**+2dV377r   c                    [         er   )NotImplementedErrorr   s    r   	serializeNode.serialize   s    !!r   r   N)r   strreturnNoner&   r%   )	r   
__module____qualname____firstlineno__r   r   r   r#   __static_attributes__ r   r   r   r      s    8"r   r   c                      \ rS rSrSS jrSrg)Variable   c                    [        U 5      $ r   r%   r   s    r   r#   Variable.serialize       4yr   r-   Nr(   r   r)   r*   r+   r#   r,   r-   r   r   r/   r/          r   r/   c                      \ rS rSrSS jrSrg)Value"   c                    SU  S3$ )N"r-   r   s    r   r#   Value.serialize#   s    4&{r   r-   Nr(   r5   r-   r   r   r8   r8   "   s    r   r8   c                      \ rS rSrSS jrSrg)Op'   c                    [        U 5      $ r   r2   r   s    r   r#   Op.serialize(   r4   r   r-   Nr(   r5   r-   r   r   r>   r>   '   r6   r   r>   
MarkerAtom
MarkerListc                  H    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S
rg)ParsedRequirement2   r%   nameurl	list[str]extras	specifierzMarkerList | Nonemarkerr-   N)r   r)   r*   r+   __annotations__r,   r-   r   r   rE   rE   2   s    
I	HNr   rE   c                0    [        [        U [        S95      $ N)rules)_parse_requirementr
   r	   sources    r   parse_requirementrT   =       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_detailsrE   )	tokenizer
name_tokenrG   rJ   rH   rK   rL   s          r   rQ   rQ   A   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$ [        X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ATrW   URLzURL after @rY   r[   Tpeekzwhitespace after URLzURL and whitespace)
span_startafterversion specifierz#name and no valid version specifier)checkreadr\   positionr]   r^   _parse_requirement_marker_parse_specifier)ra   rK   rH   rL   	url_startspecifier_starts         r   r`   r`   V   s&    I
CFt$&&	u}=BB??5t?,F++(>? ??5t?,F++*3G
 $,,$Y/	$??5t?,F++*&  $:
 F##r   c                   U R                  S5      (       d  U R                  SU S3US9  U R                  5         [        U 5      nU R	                  S5        U$ )z+
requirement_marker = SEMICOLON marker WS?
	SEMICOLONz!Expected end or semicolon (after ))ri   rW   )rl   raise_syntax_errorrm   _parse_markerr\   )ra   ri   rj   rL   s       r   ro   ro      s^     ??;''$$/wa8! 	% 	
 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_BRACKETTrg   RIGHT_BRACKETrJ   aroundrW   N)rl   enclosing_tokensr\   _parse_extras_list)ra   rJ   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)*
rX   TrW   rg   z"Expected comma between extra namesCOMMAzextra name after commarY   )rl   appendrm   r^   r\   rv   r]   )ra   rJ   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_PARENTHESISrk   r{   rW   N)r}   r\   _parse_version_many)ra   parsed_specifierss     r   rp   rp      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)*)?
rd   	SPECIFIERVERSION_PREFIX_TRAILTrg   z6.* suffix can only be used with `==` or `!=` operatorsr   )ri   span_endVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrW   r   )rl   rn   rm   r^   rv   r\   )ra   r   ri   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      $ rO   )_parse_full_markerr
   r	   rR   s    r   parse_markerr      rU   r   c                <    [        U 5      nU R                  SSS9  U$ )Nr[   zend of marker expressionrY   )rw   r]   )ra   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_atomrl   rm   extendr^   )ra   
expressiontoken
expr_rights       r   rw   rw     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?
rW   r   Trg   r   zmarker expressionr{   N)r\   rl   r}   rw   _parse_marker_item)ra   rL   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?
rW   )r\   _parse_marker_var_parse_marker_op)ra   marker_var_left	marker_opmarker_var_rights       r   r   r   (  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)rl   process_env_varrm   r^   replaceprocess_python_strrv   ra   s    r   r   r   6  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   )r/   )env_vars    r   r   r   D  s"    MM899  r   c                V    [         R                  " U 5      n[        [        U5      5      $ r   )astliteral_evalr8   r%   )
python_strr   s     r   r   r   K  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NOTrW   zwhitespace after 'not'rY   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rl   rm   r>   r]   r^   rv   r   s    r   r   r   P  s     t$x			(@A(:;(|			).."''((++X
 	
r   )rS   r%   r&   rE   )ra   r
   r&   rE   )ra   r
   r&   z"tuple[str, str, MarkerList | None])ra   r
   ri   intrj   r%   r&   rC   )ra   r
   r&   rI   )ra   r
   r&   r%   )rS   r%   r&   rC   )ra   r
   r&   rC   )ra   r
   r&   rB   )ra   r
   r&   
MarkerItem)ra   r
   r&   	MarkerVar)r   r%   r&   r/   )r   r%   r&   r8   )ra   r
   r&   r>   )'__doc__
__future__r   r   typingr   r   r   r   
_tokenizerr	   r
   r   r/   r8   r>   r   r   rB   r%   rC   rE   rT   rQ   r`   ro   r_   r~   rp   r   r   r   rw   r   r   r   r   r   r   r-   r   r   <module>r      s*   # 
 5 5 0" "t 
D 
 
 (E/"	9b)+,
:x556
eL*c9:;

 FC*0$0$'0$f),58(&6"@F	,:
!

r   