Ë
    æØjjò+  ã                  ó  — U d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ ddlZddl	Z	ddl
Z
ddlZddlZddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddgZdZded<    G d„ de	j.                  «      Z ej2                  d¬«       G d„ d«      «       Z G d„ d«      ZdZd)d„Zd*d„Zd*d„Zd*d„Z dddd œZ!d+d!„Z"d,d"„Z# G d#„ de«      Z$ej2                   G d$„ d%«      «       Z% G d&„ d'ee&e%f   «      Z'e G d(„ d«      «       Z(y)-a  Evaluate match expressions, as used by `-k` and `-m`.

The grammar is:

expression: expr? EOF
expr:       and_expr ('or' and_expr)*
and_expr:   not_expr ('and' not_expr)*
not_expr:   'not' not_expr | '(' expr ')' | ident kwargs?

ident:      (\w|:|\+|-|\.|\[|\]|\\|/)+
kwargs:     ('(' name '=' value ( ', ' name '=' value )*  ')')
name:       a valid ident, but not a reserved keyword
value:      (unescaped) string literal | (-)?[0-9]+ | 'False' | 'True' | 'None'

The semantics are:

- Empty expression evaluates to False.
- ident evaluates to True or False according to a provided matcher function.
- ident with parentheses and keyword arguments evaluates to True or False according to a provided matcher function.
- or/and/not evaluate according to the usual boolean semantics.
é    )ÚannotationsN)ÚIterator)ÚMapping)ÚSequence)ÚFinal)Úfinal)ÚLiteral)ÚNoReturn)Úoverload)ÚProtocolÚ
ExpressionÚExpressionMatcherú<pytest match expression>r   Ú	FILE_NAMEc                  ó4   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
Zy)Ú	TokenTypezleft parenthesiszright parenthesisÚorÚandÚnotÚ
identifierzend of inputú=zstring literalú,N)Ú__name__Ú
__module__Ú__qualname__ÚLPARENÚRPARENÚORÚANDÚNOTÚIDENTÚEOFÚEQUALÚSTRINGÚCOMMA© ó    úY/opt/eval-harness/bench_task/venv/lib/python3.12/site-packages/_pytest/mark/expression.pyr   r   3   s4   „ Ø€FØ €FØ	€BØ
€CØ
€CØ€EØ
€CØ€EØ€FØ�Er'   r   T)Úfrozenc                  ó0   — e Zd ZU dZded<   ded<   ded<   y)	ÚToken)ÚposÚtypeÚvaluer   r-   Ústrr.   Úintr,   N)r   r   r   Ú	__slots__Ú__annotations__r&   r'   r(   r+   r+   @   s   … à(€IØ
ƒOØƒJØ	„Hr'   r+   c                  ój   — e Zd ZdZdd„Zdd„Zedd„«       Zeddœ	 	 	 	 	 dd„«       Zddœdd„Zdd	„Zy
)ÚScanner)ÚcurrentÚinputÚtokensc                ór   — || _         | j                  |«      | _        t        | j                  «      | _        y ©N)r6   Úlexr7   Únextr5   )Úselfr6   s     r(   Ú__init__zScanner.__init__K   s(   € ØˆŒ
Ø—h‘h˜u“oˆŒÜ˜DŸK™KÓ(ˆ�r'   c              #  ó  K  — d}|t        |«      k  �rO||   dv r|dz  }�n1||   dk(  r$t        t        j                  d|«      –— |dz  }�n||   dk(  r$t        t        j                  d|«      –— |dz  }�nÙ||   dk(  r$t        t        j
                  d|«      –— |dz  }�n­||   dk(  r$t        t        j                  d|«      –— |dz  }�n�||   x}dv r™|j                  ||dz   «      }|d	k(  rt        d
|› d�t        d|dz   |f«      ‚|||dz    }|j                  d«      x}d	k7  rt        dt        d||z   dz   |f«      ‚t        t        j                  ||«      –— |t        |«      z  }nßt        j                  d||d  «      }|r¦|j                  d«      }|dk(  rt        t        j                  ||«      –— nc|dk(  rt        t        j                  ||«      –— n@|dk(  rt        t        j                   ||«      –— nt        t        j"                  ||«      –— |t        |«      z  }nt        d||   › d�t        d|dz   |f«      ‚|t        |«      k  r�ŒOt        t        j$                  d|«      –— y ­w)Nr   )ú ú	é   ú(ú)r   r   )ú'ú"éÿÿÿÿzclosing quote "z" is missingú\z4escaping with "\" not supported in marker expressionz(:?\w|:|\+|-|\.|\[|\]|\\|/)+r   r   r   zunexpected character "rE   Ú )Úlenr+   r   r   r   r#   r%   ÚfindÚSyntaxErrorr   r$   ÚreÚmatchÚgroupr   r   r    r!   r"   )r<   r6   r,   Ú
quote_charÚend_quote_posr.   Úbackslash_posrM   s           r(   r:   zScanner.lexP   s‚  è ø€ ØˆØ”C˜“JÓØ�S‰z˜[Ñ(Ø�q‘’Ø�s‘˜sÒ"ÜœI×,Ñ,¨c°3Ó7Ò7Ø�q‘’Ø�s‘˜sÒ"ÜœI×,Ñ,¨c°3Ó7Ò7Ø�q‘’Ø�s‘˜sÒ"ÜœIŸO™O¨S°#Ó6Ò6Ø�q‘’Ø�s‘˜sÒ"ÜœIŸO™O¨S°#Ó6Ò6Ø�q‘’Ø % c¡
Ð*�*¨zÑ9Ø %§
¡
¨:°s¸Q±wÓ ?�Ø  BÒ&Ü%Ø)¨*¨°\ÐBÜ" A s¨Q¡w°Ð6óð ð ˜c M°AÑ$5Ð6�Ø%*§Z¡Z°Ó%5Ð5�M¸"Ò<Ü%ØOÜ" A s¨]Ñ':¸QÑ'>ÀÐFóð ô œI×,Ñ,¨e°SÓ9Ò9Ø”s˜5“zÑ!‘äŸ™Ð!@À%ÈÈÀ+ÓN�ÙØ!ŸK™K¨›N�EØ ’}Ü#¤I§L¡L°%¸Ó=Ó=Ø %šÜ#¤I§M¡M°5¸#Ó>Ó>Ø %šÜ#¤I§M¡M°5¸#Ó>Ó>ä#¤I§O¡O°U¸CÓ@Ò@Øœ3˜u›:Ñ%‘Cä%Ø0°°s±°¸AÐ>Ü" A s¨Q¡w°Ð6óð ðY ”C˜“JÔô` ”I—M‘M 2 sÓ+Ó+ùs   ‚IJÉ#Jc                ó   — y r9   r&   ©r<   r-   Úrejects      r(   ÚacceptzScanner.accept„   s   € ØJMr'   F©rT   c                ó   — y r9   r&   rS   s      r(   rU   zScanner.accept‡   s   € ð r'   c               óä   — | j                   j                  |u rD| j                   }|j                  t        j                  urt	        | j
                  «      | _         |S |r| j                  |f«       y r9   )r5   r-   r   r"   r;   r7   rT   )r<   r-   rT   Útokens       r(   rU   zScanner.acceptŒ   sV   € Ø�<‰<×Ñ Ñ$Ø—L‘LˆEØ�z‰z¤§¡Ñ.Ü# D§K¡KÓ0�”ØˆLÙØ�K‰K˜˜Ô Ør'   c                óô   — t        dj                  dj                  d„ |D «       «      | j                  j                  j
                  «      t        d| j                  j                  dz   | j                  f«      ‚)Nzexpected {}; got {}z OR c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr9   )r.   )Ú.0r-   s     r(   ú	<genexpr>z!Scanner.reject.<locals>.<genexpr>™   s   è ø€ Ò<¨4˜DŸJ�JÑ<ùs   ‚rA   )	rK   ÚformatÚjoinr5   r-   r.   r   r,   r6   )r<   Úexpecteds     r(   rT   zScanner.reject–   sc   € ÜØ!×(Ñ(Ø—‘Ñ<°8Ô<Ó<Ø—‘×!Ñ!×'Ñ'óô ˜˜4Ÿ<™<×+Ñ+¨aÑ/°·±Ð<ó
ð 	
r'   N)r6   r/   ÚreturnÚNone)r6   r/   ra   zIterator[Token])r-   r   rT   zLiteral[True]ra   r+   )r-   r   rT   zLiteral[False]ra   úToken | None)r-   r   rT   Úboolra   rc   )r`   zSequence[TokenType]ra   r
   )	r   r   r   r1   r=   r:   r   rU   rT   r&   r'   r(   r4   r4   H   s^   „ Ø.€Ió)ó
2,ðh ÚMó ØMàà;@ñØðØ*8ðà	òó ðð 9>õ ô
r'   r4   ú$c                ó  — | j                  t        j                  «      rt        j                  d«      }n,t        | «      }| j                  t        j                  d¬«       t        j                  t        j                  |«      «      S )NFTrV   )rU   r   r"   ÚastÚConstantÚexprÚfix_missing_locationsr   ©ÚsÚrets     r(   Ú
expressionrn   ¦   sW   € Ø‡x�x”	—‘ÔÜŸ™ UÓ+‰ä�1‹gˆØ	�‰”—‘ tˆÔ,Ü×$Ñ$¤S§^¡^°CÓ%8Ó9Ð9r'   c                ó  — t        | «      }| j                  t        j                  «      rUt        | «      }t	        j
                  t	        j                  «       ||g«      }| j                  t        j                  «      rŒU|S r9   )Úand_exprrU   r   r   rg   ÚBoolOpÚOr©rl   rm   Úrhss      r(   ri   ri   ¯   sW   € Ü
�1‹+€CØ
�(‰(”9—<‘<Ô
 Ü�q‹kˆÜ�j‰jœŸ™› C¨ :Ó.ˆð �(‰(”9—<‘<Õ
 ð €Jr'   c                ó  — t        | «      }| j                  t        j                  «      rUt        | «      }t	        j
                  t	        j                  «       ||g«      }| j                  t        j                  «      rŒU|S r9   )Únot_exprrU   r   r   rg   rq   ÚAndrs   s      r(   rp   rp   ·   sW   € Ü
�1‹+€CØ
�(‰(”9—=‘=Ô
!Ü�q‹kˆÜ�j‰jœŸ™› S¨# JÓ/ˆð �(‰(”9—=‘=Õ
!ð €Jr'   c                ó<  — | j                  t        j                  «      r1t        j                  t        j
                  «       t        | «      «      S | j                  t        j                  «      r.t        | «      }| j                  t        j                  d¬«       |S | j                  t        j                  «      }|r t        j                  t        |j                  z   t        j                  «       «      }| j                  t        j                  «      rDt        j                  |g t!        | «      ¬«      }| j                  t        j                  d¬«       |S |}|S | j#                  t        j                  t        j                  t        j                  f«       y )NTrV   )ÚfuncÚargsÚkeywords)rU   r   r    rg   ÚUnaryOpÚNotrv   r   ri   r   r!   ÚNameÚIDENT_PREFIXr.   ÚLoadÚCallÚ
all_kwargsrT   )rl   rm   ÚidentÚnames       r(   rv   rv   ¿   s	  € Ø‡x�x”	—‘ÔÜ�{‰{œ3Ÿ7™7›9¤h¨q£kÓ2Ð2Ø‡x�x”	× Ñ Ô!Ü�1‹gˆØ	�‰”×!Ñ!¨$ˆÔ/Øˆ
Ø�H‰H”Y—_‘_Ó%€EÙÜ�x‰xœ u§{¡{Ñ2´C·H±H³JÓ?ˆØ�8‰8”I×$Ñ$Ô%Ü—(‘( ¨2¼
À1»ÔFˆCØ�H‰H”Y×%Ñ%¨dˆHÔ3ð ˆ
ð ˆCØˆ
à‡H�HŒi�m‰mœY×-Ñ-¬y¯©Ð?Õ@r'   F)ÚTrueÚFalserb   c                ó>  — | j                  t        j                  d¬«      }|j                  j	                  «       s8t        d|j                  › �t        d|j                  dz   | j                  f«      ‚t        j                  |j                  «      r9t        d|j                  › d�t        d|j                  dz   | j                  f«      ‚| j                  t        j                  d¬«       | j                  t        j                  «      x}r|j                  dd }nÌ| j                  t        j                  d¬«      }|j                  x}j                  «       s$|j                  d«      r|dd  j                  «       rt        |«      }n_|j                  t         v rt         |j                     }n9t        d	|j                  › d
�t        d|j                  dz   | j                  f«      ‚t#        j                  |j                  t#        j$                  |«      «      }|S )NTrV   znot a valid python identifier rA   z$unexpected reserved python keyword `ú`rF   ú-zunexpected character/s "rE   )rU   r   r!   r.   ÚisidentifierrK   r   r,   r6   ÚkeywordÚ	iskeywordr#   r$   ÚisdigitÚ
startswithr0   ÚBUILTIN_MATCHERSrg   rh   )rl   Úkeyword_nameÚvalue_tokenr.   Únumberrm   s         r(   Úsingle_kwargr“   Ö   sÉ  € Ø—8‘8œIŸO™O°D�8Ó9€LØ×Ñ×*Ñ*Ô,ÜØ,¨\×-?Ñ-?Ð,@ÐAÜ˜˜<×+Ñ+¨aÑ/°·±Ð9ó
ð 	
ô ×Ñ˜×+Ñ+Ô,ÜØ2°<×3EÑ3EÐ2FÀaÐHÜ˜˜<×+Ñ+¨aÑ/°·±Ð9ó
ð 	
ð ‡H�HŒY�_‰_ T€HÔ*à—h‘hœy×/Ñ/Ó0Ð0€{Ð0Ø)4×):Ñ):¸1¸RÐ)@‰à—h‘hœyŸ™°t�hÓ<ˆØ!×'Ñ'Ð'ˆF×0Ñ0Ô2Ø×Ñ˜cÔ" v¨a¨b z×'9Ñ'9Ô';ä˜“K‰EØ×ÑÔ"2Ñ2Ü$ [×%6Ñ%6Ñ7‰EäØ*¨;×+<Ñ+<Ð*=¸QÐ?Ü˜A˜{Ÿ™°Ñ2°A·G±GÐ<óð ô
 �+‰+�l×(Ñ(¬#¯,©,°uÓ*=Ó
>€CØ€Jr'   c                óÐ   — t        | «      g}| j                  t        j                  «      r:|j	                  t        | «      «       | j                  t        j                  «      rŒ:|S r9   )r“   rU   r   r%   Úappendrk   s     r(   r‚   r‚   ø   sE   € Ü˜‹?Ð
€CØ
�(‰(”9—?‘?Ô
#Ø�
‰
”< “?Ô#ð �(‰(”9—?‘?Õ
#à€Jr'   c                  ó   — e Zd ZdZdd„Zy)r   aC  A callable which, given an identifier and optional kwargs, should return
    whether it matches in an :class:`Expression` evaluation.

    Should be prepared to handle arbitrary strings as input.

    If no kwargs are provided, the expression of the form `foo`.
    If kwargs are provided, the expression is of the form `foo(1, b=True, "s")`.

    If the expression is not supported (e.g. don't want to accept the kwargs
    syntax variant), should raise :class:`~pytest.UsageError`.

    Example::

        def matcher(name: str, /, **kwargs: str | int | bool | None) -> bool:
            # Match `cat`.
            if name == "cat" and not kwargs:
                return True
            # Match `dog(barks=True)`.
            if name == "dog" and kwargs == {"barks": False}:
                return True
            return False
    c                ó   — y r9   r&   )r<   r„   Úkwargss      r(   Ú__call__zExpressionMatcher.__call__  s   � r'   N)r„   r/   r˜   ústr | int | bool | Nonera   rd   )r   r   r   Ú__doc__r™   r&   r'   r(   r   r   ÿ   s   „ ñô. Ur'   c                  ó2   — e Zd ZU ded<   ded<   dd„Zd	d„Zy)
ÚMatcherNameAdapterr   Úmatcherr/   r„   c                ó8   — | j                  | j                  «      S r9   ©rž   r„   ©r<   s    r(   Ú__bool__zMatcherNameAdapter.__bool__  s   € Ø�|‰|˜DŸI™IÓ&Ð&r'   c                ó<   —  | j                   | j                  fi |¤ŽS r9   r    )r<   r˜   s     r(   r™   zMatcherNameAdapter.__call__"  s   € Øˆt�|‰|˜DŸI™IÑ0¨Ñ0Ð0r'   N)ra   rd   )r˜   rš   ra   rd   )r   r   r   r2   r¢   r™   r&   r'   r(   r�   r�     s   … àÓØ
ƒIó'ô1r'   r�   c                  ó0   — e Zd ZdZdd„Zdd„Zd	d„Zd
d„Zy)ÚMatcherAdapterzDAdapts a matcher function to a locals mapping as required by eval().c                ó   — || _         y r9   )rž   ©r<   rž   s     r(   r=   zMatcherAdapter.__init__)  s	   € Øˆ�r'   c                óP   — t        | j                  |t        t        «      d  ¬«      S )Nr    )r�   rž   rI   r   )r<   Úkeys     r(   Ú__getitem__zMatcherAdapter.__getitem__,  s    € Ü!¨$¯,©,¸SÄÄ\ÓARÐATÐ=UÔVÐVr'   c                ó   — t        «       ‚r9   ©ÚNotImplementedErrorr¡   s    r(   Ú__iter__zMatcherAdapter.__iter__/  ó   € Ü!Ó#Ð#r'   c                ó   — t        «       ‚r9   r¬   r¡   s    r(   Ú__len__zMatcherAdapter.__len__2  r¯   r'   N)rž   r   ra   rb   )r©   r/   ra   r�   )ra   zIterator[str])ra   r0   )r   r   r   r›   r=   rª   r®   r±   r&   r'   r(   r¥   r¥   &  s   „ ÙNóóWó$ô$r'   r¥   c                  ó6   — e Zd ZdZdZdd„Zedd„«       Zd	d„Zy)
r   zwA compiled match expression as used by -k and -m.

    The expression can be evaluated against different matchers.
    )Ú_coder6   c                ó    — || _         || _        y r9   )r6   r³   )r<   r6   Úcodes      r(   r=   zExpression.__init__?  s   € à!ˆŒ
Ø ˆ�
r'   c                ó^   — t        t        |«      «      }t        |dd¬«      }t        ||«      S )zšCompile a match expression.

        :param input: The input expression - one line.

        :raises SyntaxError: If the expression is malformed.
        r   Úeval)ÚfilenameÚmode)rn   r4   Úcompiler   )Úclsr6   Úastexprrµ   s       r(   rº   zExpression.compileD  s4   € ô œW U›^Ó,ˆÜØØ0Øô
ˆô
 ˜% Ó&Ð&r'   c           	     óX   — t        t        | j                  di it        |«      «      «      S )a´  Evaluate the match expression.

        :param matcher:
            A callback which determines whether an identifier matches or not.
            See the :class:`ExpressionMatcher` protocol for details and example.

        :returns: Whether the expression matches or not.

        :raises UsageError:
            If the matcher doesn't support the expression. Cannot happen if the
            matcher supports all expressions.
        Ú__builtins__)rd   r·   r³   r¥   r§   s     r(   ÚevaluatezExpression.evaluateT  s&   € ô ”D˜Ÿ™ n°bÐ%9¼>È'Ó;RÓSÓTÐTr'   N)r6   r/   rµ   ztypes.CodeTypera   rb   )r6   r/   ra   r   )rž   r   ra   rd   )	r   r   r   r›   r1   r=   Úclassmethodrº   r¿   r&   r'   r(   r   r   6  s-   „ ñð
 #€Ió!ð
 ò'ó ð'ôUr'   )rl   r4   ra   zast.Expression)rl   r4   ra   zast.expr)rl   r4   ra   zast.keyword)rl   r4   ra   zlist[ast.keyword]))r›   Ú
__future__r   rg   Úcollections.abcr   r   r   ÚdataclassesÚenumr‹   rL   ÚtypesÚtypingr   r   r	   r
   r   r   Ú__all__r   r2   ÚEnumr   Ú	dataclassr+   r4   r   rn   ri   rp   rv   r�   r“   r‚   r   r�   r/   r¥   r   r&   r'   r(   ú<module>rÊ      s0  ðòõ, #ã 
Ý $Ý #Ý $Û Û Û Û 	Û Ý Ý Ý Ý Ý Ý ð Øð€ð /€	ˆ5Ó .ô
�—	‘	ô 
ð €×Ñ˜dÔ#÷ð ó $ð÷U
ñ U
ðv €ó:óóóAð( !¨5¸$Ñ?Ð óóDôU˜ô Uð6 ×Ñ÷1ð 1ó ð1ô$�W˜SÐ"4Ð4Ñ5ô $ð  ÷*Uð *Uó ñ*Ur'   