
    i-                       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d%dZd&dZ	 	 	 	 d'dZ	 	 	 	 	 	 	 	 d(dZd)dZd)dZd*dZd*dZd+dZ d,dZ!d,dZ"d-dZ#d.d Z$d/d!Z%d0d"Z&d1d#Z'd2d$Z(y)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                  H    e Zd ZdZd
dZddZddZddZddZddZ	ddZ
y	)Nodevaluec                    || _         y Nr   selfr   s     D/root/searxng-venv/lib/python3.12/site-packages/packaging/_parser.py__init__zNode.__init__   s	    
    c                    | j                   S r   r   r   s    r   __str__zNode.__str__   s    zzr   c                P    d| j                   j                   d| j                  dS )N<(z)>)	__class____name__r   r   s    r   __repr__zNode.__repr__   s&    4>>**+1TZZN"==r   c                    t         r   )NotImplementedErrorr   s    r   	serializezNode.serialize   s    !!r   c                    | j                   S r   r   r   s    r   __getstate__zNode.__getstate__   s    zzr   c                |    t        |t              s%t        d| j                  j                   d|      || _        y )NCannot restore z value from )
isinstancestr	TypeErrorr   r   r   r   s     r   _restore_valuezNode._restore_value"   s=    %%!$.."9"9!:,uiP  
r   c                z   t        |t              r| j                  |       y t        |t              r<t	        |      dk(  r.|\  }}t        |t
              rd|v r| j                  |d          y t        |t
              rd|v r| j                  |d          y t        d| j                  j                   d|      )N   r   r'   z from )	r(   r)   r+   tuplelendictr*   r   r   )r   state_	slot_dicts       r   __setstate__zNode.__setstate__)   s    eS!&eU#E
a LAy)T*w)/C##Ig$67eT"w%'7g//$..*A*A)B&	RSSr   N)r   r)   returnNoner5   r)   )r   objectr5   r6   )r1   r8   r5   r6   )r   
__module____qualname__	__slots__r   r   r    r#   r%   r+   r4    r   r   r   r      s+    I>"Tr   r   c                      e Zd ZdZddZy)Variabler<   c                    t        |       S r   r)   r   s    r   r#   zVariable.serialize>       4yr   Nr7   r   r9   r:   r;   r#   r<   r   r   r>   r>   ;       Ir   r>   c                      e Zd ZdZddZy)Valuer<   c                    d|  dS )N"r<   r   s    r   r#   zValue.serializeE   s    4&{r   Nr7   rB   r<   r   r   rE   rE   B   s    Ir   rE   c                      e Zd ZdZddZy)Opr<   c                    t        |       S r   r@   r   s    r   r#   zOp.serializeL   rA   r   Nr7   rB   r<   r   r   rI   rI   I   rC   r   rI   )andor
MarkerAtom
MarkerListc                  @    e Zd ZU ded<   ded<   ded<   ded<   ded<   y	)
ParsedRequirementr)   nameurl	list[str]extras	specifierzMarkerList | NonemarkerN)r   r9   r:   __annotations__r<   r   r   rP   rP   W   s    
I	HNr   rP   c                6    t        t        | t                    S N)rules)_parse_requirementr   r   sources    r   parse_requirementr^   b       imDEEr   c                   | j                  d       | j                  dd      }|j                  }| j                  d       t        |       }| j                  d       t	        |       \  }}}| j                  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_detailsrP   )	tokenizer
name_tokenrQ   rT   rR   rU   rV   s          r   r[   r[   f   s     d!!R " J ??Dd9%Fd7	BCFU%BCT3	6BBr   c                   d}d}d}| j                  d      r| j                          | j                  d       | j                  }| j	                  dd      j
                  }| j                  dd	
      r|||fS | j	                  dd       | j                  dd	
      r|||fS t        | |d      }nR| j                  }t        |       }| j                  d       | j                  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ATra   URLzURL after @rc   re   Tpeekzwhitespace after URLz$semicolon (after URL and whitespace))
span_startrd   zEcomma (within version specifier), semicolon (after version specifier)z0semicolon (after name with no version specifier))checkreadrf   positionrg   rh   _parse_requirement_marker_parse_specifier)rk   rU   rR   rV   	url_startspecifier_starts         r   rj   rj   {   s/    I
CFt$&&	u}=BB??5t?,F++(>? ??5t?,F++* ;
 $,,$Y/	$??5t?,F++*&  XG
 F##r   c                   | j                  d      s| j                  d| d|d       | j                          t        |       }| j	                  d       |S )z3
    requirement_marker = SEMICOLON marker WS?
    	SEMICOLONz	Expected z or endNrs   span_endra   )rt   raise_syntax_errorru   _parse_markerrf   )rk   rs   rd   rV   s       r   rw   rw      s^     ??;'$$z)! 	% 	

 NN9%FdMr   c                    | j                  dd      sg S | j                  ddd      5  | j                  d       t        |       }| j                  d       ddd       |S # 1 sw Y   S xY w)	zG
    extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
    LEFT_BRACKETTrq   RIGHT_BRACKETrT   aroundra   N)rt   enclosing_tokensrf   _parse_extras_list)rk   rT   s     r   ri   ri      s{     ??>?5			#	# 
$ 
  
 	$#I.$  M  Ms   .A""A,c                   g }| j                  d      s|S |j                  | j                         j                         	 | j	                  d       | j                  dd      r| j                  d       n| j                  d      s	 |S | j                          | j	                  d       | j                  dd      }|j                  |j                         )	z>
    extras_list = identifier (wsp* ',' wsp* identifier)*
    rb   Tra   rq   z"Expected comma between extra namesCOMMAzextra name after commarc   )rt   appendru   rh   rf   r   rg   )rk   rT   extra_tokens      r   r   r      s     F??<(
MM).."''(
$??<d?3(()MN) M 	$&&|>V&Wk&&' r   c                    | j                  ddd      5  | j                  d       t        |       }| j                  d       ddd       |S # 1 sw Y   S xY w)zr
    specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
              | WS? version_many WS?
    LEFT_PARENTHESISRIGHT_PARENTHESISzversion specifierr   ra   N)r   rf   _parse_version_many)rk   parsed_specifierss     r   rx   rx      si    
 
	#	#" 
$ 
  
 	$/	:$    s   .AAc                   d}| j                  d      r| j                  }|| j                         j                  z  }| j                  dd      r!| j	                  d|| j                  dz          | j                  d	d      r| j	                  d
|| j                         | j                  d       | j                  d      s	 |S || j                         j                  z  }| j                  d       | j                  d      r|S )z@
    version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
    rn   	SPECIFIERVERSION_PREFIX_TRAILTrq   z6.* suffix can only be used with `==` or `!=` operatorsr
   r}   VERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsra   r   )rt   rv   ru   rh   r   rf   )rk   r   rs   s      r   r   r     s    
//+
&''
Y^^-222??1?=((H%"++a/ ) 
 ??6T?B((R%"++ ) 
 	$w'  	Y^^-222$' //+
&* r   c                6    t        t        | t                    S rY   )_parse_full_markerr   r   r\   s    r   parse_markerr   $  r_   r   c                B    t        |       }| j                  dd       |S )Nre   zend of marker expressionrc   )r   rg   )rk   retvals     r   r   r   (  s%    9%FU%?@Mr   c                    t        |       g}| j                  d      rJ| j                         }t        |       }|j                  |j                  |f       | j                  d      rJ|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    BOOLOP)_parse_marker_atomrt   ru   extendrh   )rk   
expressiontoken
expr_rights       r   r   r   .  s`     %Y/0J
//(
# '	2
5::z23 //(
# r   c                4   | j                  d       | j                  dd      rK| j                  ddd      5  | j                  d       t        |       }| j                  d       ddd       nt	        |       }| j                  d       S # 1 sw Y   xY w)	zw
    marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
                | WS? marker_item WS?
    ra   r   Trq   r   zmarker expressionr   N)rf   rt   r   r   _parse_marker_item)rk   rV   s     r   r   r   :  s     d)5''& ( 
 	$
 d#!.y!9Fd#	$ 	$ $I.dM	$ 	$s   .BBc                    | j                  d       t        |       }| j                  d       t        |       }| j                  d       t        |       }| j                  d       |||fS )zG
    marker_item = WS? marker_var WS? marker_op WS? marker_var WS?
    ra   )rf   _parse_marker_var_parse_marker_op)rk   marker_var_left	marker_opmarker_var_rights       r   r   r   P  si     d'	2Od +Id(3dY(899r   c                   | j                  d      r3t        | j                         j                  j	                  dd            S | j                  d      r#t        | j                         j                        S | j                  d       y)z/
    marker_var = VARIABLE | QUOTED_STRING
    VARIABLE.r2   QUOTED_STRINGz+Expected a marker variable or quoted string)messageN)rt   process_env_varru   rh   replaceprocess_python_strr   rk   s    r   r   r   ^  so     z"y~~/44<<S#FGG		)!).."2"7"788$$A 	% 	
r   c                6    | dv rt        d      S t        |       S )N)platform_python_implementationpython_implementationr   )r>   )env_vars    r   r   r   l  s"    MM899  r   c                T    t        j                  |       }t        t        |            S r   )astliteral_evalrE   r)   )
python_strr   s     r   r   r   s  s!    Z(EUr   c                   | j                  d      r| j                          t        d      S | j                  d      rA| j                          | j                  dd       | j                  dd       t        d      S | j                  d	      r#t        | j                         j                        S | j                  d
      S )z&
    marker_op = IN | NOT IN | OP
    INinNOTra   zwhitespace after 'not'rc   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rt   ru   rI   rg   rh   r   r   s    r   r   r   x  s     t$x		(@A(:;(|		).."''((++X
 	
r   )r]   r)   r5   rP   )rk   r   r5   rP   )rk   r   r5   z"tuple[str, str, MarkerList | None])rk   r   rs   intrd   r)   r5   rN   )rk   r   r5   rS   )rk   r   r5   r)   )r]   r)   r5   rN   )rk   r   r5   rN   )rk   r   r5   rM   )rk   r   r5   
MarkerItem)rk   r   r5   	MarkerVar)r   r)   r5   r>   )r   r)   r5   rE   )rk   r   r5   rI   ))__doc__
__future__r   r   typingr   r   r   r   r   r	   
_tokenizerr   r   r   r>   rE   rI   MarkerLogicalr   r   rM   rN   rP   r^   r[   rj   rw   ri   r   rx   r   r   r   r   r   r   r   r   r   r   r<   r   r   <module>r      s7   # 
 D D 0)T )TXt D   $(E/"	9b)+,
:x556
%j-?@A

 FC*2$2$'2$j),8;*&6"@F	,:
!

r   