Ë
    æØjj²-  ã                  óª  — 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)3z˜Handwritten 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     úS/opt/eval-harness/bench_task/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   € Ø�z‰zÐr   c                óP   — d| j                   j                  › d| j                  ›d�S )Nú<ú(z)>)Ú	__class__Ú__name__r   r   s    r   Ú__repr__zNode.__repr__   s&   € Ø�4—>‘>×*Ñ*Ð+¨1¨T¯Z©Z¨N¸"Ð=Ð=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   € à�z‰zÐ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Ð!:¸,ÀuÀiÐ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ª   € Ü�eœSÔ!à×Ñ Ô&ØÜ�eœUÔ#¬¨E«
°aªà ‰LˆAˆyÜ˜)¤TÔ*¨w¸)Ñ/CØ×#Ñ# I¨gÑ$6Ô7ØÜ�eœTÔ" 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>   ó   € Ü�4‹yÐ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ä˜T 3¨°	¸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ˆØ�?‰?˜5 tˆ?Ô,Ø˜ FÐ+Ð+à×Ñ˜Ð(>ÐÔ?ð �?‰?˜5 tˆ?Ô,Ø˜ FÐ+Ð+ä*ØØ Ø;ô
‰ð $×,Ñ,ˆÜ$ YÓ/ˆ	Ø×Ñ˜$Ôà�?‰?˜5 tˆ?Ô,Ø˜ 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 Ð)Ø!Øð 	%ô 	
ð
 ‡N�NÔä˜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÷ ð €Mús   ª.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à�?‰?˜<Ô(Øˆà
‡M�M�)—.‘.Ó"×'Ñ'Ô(à
Ø×Ñ˜$ÔØ�?‰?˜<¨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Ñ/ð )ô ð
 �?‰?Ð6¸Tˆ?Ô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Ó/Ð0€JØ
�/‰/˜(Ô
#Ø—‘Ó ˆÜ'¨	Ó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Ó!9ˆFØ×Ñ˜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ÔÜ'¨	Ó2€OØ×Ñ�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�/Ñ"€	Ø�9˜b )Ð+Ñ,€
Ø�:˜x¨Ñ5Ð5Ñ6€
Ø�%˜ j°-Ð?Ñ@ÑA€
ô˜
ô óFóCð*2$Øð2$à'ó2$ðjØðØ),ðØ8;ðàóó*ó&ó6ó"ó@Fóó	óó,:ó
ó!óô

r   