
    Ri)                       d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
 ddlmZmZ  G d d          Z G d	 d
e          Z G d de          Z G d de          Zed         Ze
eef         Ze	eeef         Ze
eed         f         Zee
deef                  Z G d de          Zd3dZd4dZd5dZd6d Zd7d"Zd7d#Zd8d$Zd8d%Zd9d&Z d:d'Z!d:d(Z"d;d)Z#d<d+Z$d=d-Z%d>d/Z&d?d1Z'd@d2Z(dS )AzHandwritten 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                  2    e Zd ZdZddZddZddZdd	Zd
S )Nodevaluer   strreturnNonec                    || _         d S Nr   )selfr   s     d/Users/shanyulin/my-agent/.venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/_parser.py__init__zNode.__init__   s    


    c                    | j         S r   r   r   s    r   __str__zNode.__str__   s
    zr   c                2    d| j         j         d| j        dS )N<(z)>)	__class____name__r   r   s    r   __repr__zNode.__repr__   s"    =4>*==TZ====r   c                    t           r   )NotImplementedErrorr   s    r   	serializezNode.serialize   s    !!r   N)r   r   r   r   r   r   )r!   
__module____qualname__	__slots__r   r   r"   r%    r   r   r   r      si        I      > > > >" " " " " "r   r   c                      e Zd ZdZddZdS )Variabler*   r   r   c                     t          |           S r   r   r   s    r   r%   zVariable.serialize"       4yyr   Nr&   r!   r'   r(   r)   r%   r*   r   r   r,   r,      -        I     r   r,   c                      e Zd ZdZddZdS )Valuer*   r   r   c                    d|  dS )N"r*   r   s    r   r%   zValue.serialize)   s    4{{{r   Nr&   r0   r*   r   r   r3   r3   &   s-        I     r   r3   c                      e Zd ZdZddZdS )Opr*   r   r   c                     t          |           S r   r.   r   s    r   r%   zOp.serialize0   r/   r   Nr&   r0   r*   r   r   r7   r7   -   r1   r   r7   )andor
MarkerAtom
MarkerListc                  B    e Zd ZU ded<   ded<   ded<   ded<   ded<   d	S )
ParsedRequirementr   nameurl	list[str]extras	specifierzMarkerList | NonemarkerN)r!   r'   r(   __annotations__r*   r   r   r>   r>   ;   sE         IIIHHHNNNr   r>   sourcer   r   c                H    t          t          | t                              S N)rules)_parse_requirementr   r   rF   s    r   parse_requirementrL   F       imDDDEEEr   	tokenizerr   c                T   |                      d           |                     dd          }|j        }|                      d           t          |           }|                      d           t	          |           \  }}}|                     dd           t          |||||          S )zI
    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_detailsr>   )rN   
name_tokenr?   rB   r@   rC   rD   s          r   rJ   rJ   J   s     d!!R "  J ?Dd9%%Fd7	BBCFU%BCCCT3	6BBBr   "tuple[str, str, MarkerList | None]c                X   d}d}d}|                      d          r|                                  |                     d           | j        }|                     dd          j        }|                      dd	
          r|||fS |                     dd           |                      dd	
          r|||fS t          | |d          }n]| j        }t          |           }|                     d           |                      dd	
          r|||fS t          | ||rdnd          }|||fS )z~
    requirement_details = AT URL (WS requirement_marker?)?
                        | specifier WS? (requirement_marker)?
     NATrP   URLzURL after @rR   rT   Tpeekzwhitespace after URLz$semicolon (after URL and whitespace))
span_startrS   zEcomma (within version specifier), semicolon (after version specifier)z0semicolon (after name with no version specifier))checkreadrU   positionrV   rW   _parse_requirement_marker_parse_specifier)rN   rC   r@   rD   	url_startspecifier_starts         r   rY   rY   _   s    I
CFt $
$&	u}==B??5t?,, 	,F++(>??? ??5t?,, 	,F++* ;
 
 
 $,$Y//	$??5t?,, 	,F++*& HWWG
 
 
 F##r   rb   intrS   c                   |                      d          s|                     d| d|d           |                                  t          |           }|                     d           |S )z3
    requirement_marker = SEMICOLON marker WS?
    	SEMICOLONz	Expected z or endNrb   span_endrP   )rc   raise_syntax_errorrd   _parse_markerrU   )rN   rb   rS   rD   s       r   rf   rf      s     ??;'' 
$$))))! 	% 	
 	
 	

 NN9%%FdMr   rA   c                
   |                      dd          sg S |                     ddd          5  |                     d           t          |           }|                     d           ddd           n# 1 swxY w Y   |S )	zG
    extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
    LEFT_BRACKETTr`   RIGHT_BRACKETrB   aroundrP   N)rc   enclosing_tokensrU   _parse_extras_list)rN   rB   s     r   rX   rX      s     ??>?55 			#	# 
$ 
 
    
 	$#I..$                              Ms   :A88A<?A<c                   g }|                      d          s|S |                    |                                 j                   	 |                     d           |                      dd          r|                     d           n|                      d          sn[|                                  |                     d           |                     dd          }|                    |j                   |S )	z>
    extras_list = identifier (wsp* ',' wsp* identifier)*
    rQ   TrP   r`   z"Expected comma between extra namesCOMMAzextra name after commarR   )rc   appendrd   rW   rU   ro   rV   )rN   rB   extra_tokens      r   rw   rw      s     F??<(( 
MM)..""'(((($??<d?33 	(()MNNNN)) 	$&&|>V&WWk&'''( Mr   c                    |                      ddd          5  |                     d           t          |           }|                     d           ddd           n# 1 swxY w Y   |S )zr
    specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
              | WS? version_many WS?
    LEFT_PARENTHESISRIGHT_PARENTHESISzversion specifierrt   rP   N)rv   rU   _parse_version_many)rN   parsed_specifierss     r   rg   rg      s    
 
	#	#" 
$ 
 
    
 	$/	::$                              s   :AA#&A#c                2   d}|                      d          r| j        }||                                 j        z  }|                      dd          r |                     d|| j        dz              |                      d	d          r|                     d
|| j                   |                     d           |                      d          snF||                                 j        z  }|                     d           |                      d          |S )z@
    version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
    r]   	SPECIFIERVERSION_PREFIX_TRAILTr`   z6.* suffix can only be used with `==` or `!=` operatorsr
   rm   VERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrP   ry   )rc   re   rd   rW   ro   rU   )rN   r   rb   s      r   r   r      s@    
//+
&
&  '
Y^^--22??1?== 	((H%"+a/ )   
 ??6T?BB 	((R%"+ )   
 	$w'' 	Y^^--22$' //+
&
&  * r   c                H    t          t          | t                              S rH   )_parse_full_markerr   r   rK   s    r   parse_markerr     rM   r   c                R    t          |           }|                     dd           |S )NrT   zend of marker expressionrR   )rp   rV   )rN   retvals     r   r   r     s.    9%%FU%?@@@Mr   c                    t          |           g}|                     d          rT|                                 }t          |           }|                    |j        |f           |                     d          T|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    BOOLOP)_parse_marker_atomrc   rd   extendrW   )rN   
expressiontoken
expr_rights       r   rp   rp     s}     %Y//0J
//(
#
# 4  '	22
5:z2333 //(
#
# 4 r   c                z   |                      d           |                     dd          rj|                     ddd          5  |                      d           t          |           }|                      d           ddd           n# 1 swxY w Y   nt	          |           }|                      d           |S )	zw
    marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
                | WS? marker_item WS?
    rP   r}   Tr`   r~   zmarker expressionrt   N)rU   rc   rv   rp   _parse_marker_item)rN   rD   s     r   r   r     s
    d)55 
/''& ( 
 
 	$ 	$
 d###!.y!9!9Fd###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ $I..dMs   :BBB
MarkerItemc                   |                      d           t          |           }|                      d           t          |           }|                      d           t          |           }|                      d           |||fS )zG
    marker_item = WS? marker_var WS? marker_op WS? marker_var WS?
    rP   )rU   _parse_marker_var_parse_marker_op)rN   marker_var_left	marker_opmarker_var_rights       r   r   r   4  s     d'	22Od ++Id(33dY(899r   	MarkerVarc                F   |                      d          r:t          |                                 j                            dd                    S |                      d          r&t          |                                 j                  S |                     d           dS )z/
    marker_var = VARIABLE | QUOTED_STRING
    VARIABLE._QUOTED_STRINGz+Expected a marker variable or quoted string)messageN)rc   process_env_varrd   rW   replaceprocess_python_strro   rN   s    r   r   r   B  s     z"" 
y~~//4<<S#FFGGG		)	) 
!).."2"2"7888$$A 	% 	
 	
 	
 	
 	
r   env_varc                F    | dv rt          d          S t          |           S )N)platform_python_implementationpython_implementationr   )r,   )r   s    r   r   r   P  s+    MMM8999   r   
python_strc                b    t          j        |           }t          t          |                    S r   )astliteral_evalr3   r   )r   r   s     r   r   r   W  s&    Z((EUr   c                   |                      d          r#|                                  t          d          S |                      d          rQ|                                  |                     dd           |                     dd           t          d          S |                      d	          r&t          |                                 j                  S |                     d
          S )z&
    marker_op = IN | NOT IN | OP
    INinNOTrP   zwhitespace after 'not'rR   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rc   rd   r7   rV   rW   ro   r   s    r   r   r   \  s     t 
$xx			 

(@AAA(:;;;(||			 
)..""'(((++X
 
 	
r   )rF   r   r   r>   )rN   r   r   r>   )rN   r   r   r[   )rN   r   rb   rj   rS   r   r   r<   )rN   r   r   rA   )rN   r   r   r   )rF   r   r   r<   )rN   r   r   r<   )rN   r   r   r;   )rN   r   r   r   )rN   r   r   r   )r   r   r   r,   )r   r   r   r3   )rN   r   r   r7   ))__doc__
__future__r   r   typingr   r   r   r   r   r	   
_tokenizerr   r   r   r,   r3   r7   MarkerLogicalr   r   r;   r<   r>   rL   rJ   rY   rf   rX   rw   rg   r   r   r   rp   r   r   r   r   r   r   r*   r   r   <module>r      s    # " " " " " 



 D D D D D D D D D D D D D D D D 0 0 0 0 0 0 0 0" " " " " " " "     t       D           $(E/"	9b)+,
:x556
%j-?@A
    
   F F F FC C C C*2$ 2$ 2$ 2$j   *   &   6   "   @F F F F   	 	 	 	   ,: : : :
 
 
 
! ! ! !   

 
 
 
 
 
r   