ó
    Eñiì+  ã                  ó  • % S r SSKJr  SSKrSSKJr  SSKJr  SSKJr  SSKrSSK	r	SSK
r
SSKrSSKrSSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SS/rSrS\S'    " S S\	R.                  5      r\R2                  " SS9 " S S5      5       r " S S5      rSrS)S jrS*S jrS*S jrS*S jr SSSS .r!S+S! jr"S,S" jr# " S# S\5      r$\R2                   " S$ S%5      5       r% " S& S'\\&\%4   5      r'\ " S( S5      5       r(g)-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                  ó<   • \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrg)Ú	TokenTypeé3   zleft parenthesiszright parenthesisÚorÚandÚnotÚ
identifierzend of inputÚ=zstring literalÚ,© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚLPARENÚRPARENÚORÚANDÚNOTÚIDENTÚEOFÚEQUALÚSTRINGÚCOMMAÚ__static_attributes__r   ó    ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/_pytest/mark/expression.pyr   r   3   s4   † Ø€FØ €FØ	€BØ
€CØ
€CØ€EØ
€CØ€EØ€FØƒEr*   r   T)Úfrozenc                  ó8   • \ rS rSr% SrS\S'   S\S'   S\S'   S	rg
)ÚTokené@   )ÚposÚtypeÚvaluer   r1   Ústrr2   Úintr0   r   N)r   r   r   r   Ú	__slots__Ú__annotations__r)   r   r*   r+   r.   r.   @   s   ‡ à(€IØ
ƒOØƒJØ	†Hr*   r.   c                  ó‚   • \ rS rSrSrSS jrSS jr\SS j5       r\SS.     SS jj5       rSS.SS	 jjrSS
 jr	Sr
g)ÚScanneréH   )ÚcurrentÚinputÚtokensc                óp   • Xl         U R                  U5      U l        [        U R                  5      U l        g ©N)r;   Úlexr<   Únextr:   )Úselfr;   s     r+   Ú__init__ÚScanner.__init__K   s&   € ØŒ
Ø—h‘h˜u“oˆŒÜ˜DŸK™KÓ(ˆ�r*   c              #  ó  #   • SnU[        U5      :  GaR  X   S;   a  US-  nGO1X   S:X  a$  [        [        R                  SU5      v •  US-  nGOX   S:X  a$  [        [        R                  SU5      v •  US-  nGOÙX   S:X  a$  [        [        R
                  SU5      v •  US-  nGO­X   S:X  a$  [        [        R                  SU5      v •  US-  nGO�X   =nS;   a•  UR                  X2S-   5      nUS	:X  a  [        S
U S3[        SUS-   U45      eXUS-    nUR                  S5      =nS	:w  a  [        S[        SUS-   U45      e[        [        R                  XR5      v •  U[        U5      -  nOâ[        R                  " SXS  5      nU(       a¥  UR                  S5      nUS:X  a  [        [        R                  XR5      v •  ObUS:X  a  [        [        R                  XR5      v •  O?US:X  a  [        [        R                   XR5      v •  O[        [        R"                  XR5      v •  U[        U5      -  nO[        SX    S3[        SUS-   U45      eU[        U5      :  a  GMR  [        [        R$                  SU5      v •  g 7f)Nr   )Ú Ú	é   Ú(Ú)r   r   )Ú'Ú"éÿÿÿÿzclosing quote "z" is missingÚ\z4escaping with "\" not supported in marker expressionz(:?\w|:|\+|-|\.|\[|\]|\\|/)+r   r   r   zunexpected character "rK   Ú )Úlenr.   r   r   r    r&   r(   ÚfindÚSyntaxErrorr   r'   ÚreÚmatchÚgroupr!   r"   r#   r$   r%   )rA   r;   r0   Ú
quote_charÚend_quote_posr2   Úbackslash_posrS   s           r+   r?   ÚScanner.lexP   s^  é € ØˆØ”C˜“JÔØ‰z˜[Ó(Ø�q‘’Ø‘˜sÓ"ÜœI×,Ñ,¨c°3Ó7Ò7Ø�q‘’Ø‘˜sÓ"ÜœI×,Ñ,¨c°3Ó7Ò7Ø�q‘’Ø‘˜sÓ"ÜœIŸO™O¨S°#Ó6Ò6Ø�q‘’Ø‘˜sÓ"ÜœIŸO™O¨S°#Ó6Ò6Ø�q‘’Ø %¡
Ð*�*¨zÓ9Ø %§
¡
¨:¸Q±wÓ ?�Ø  BÓ&Ü%Ø)¨*¨°\ÐBÜ" A s¨Q¡w°Ð6óð ð  M°AÑ$5Ð6�Ø%*§Z¡Z°Ó%5Ð5�M¸"Ó<Ü%ØOÜ" A }°qÑ'8¸%Ð@óð ô œI×,Ñ,¨eÓ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Ó@Ò@Øœ3˜u›:Ñ%‘Cä%Ø0°±°¸AÐ>Ü" A s¨Q¡w°Ð6óð ðY ”C˜“JÖô` ”I—M‘M 2 sÓ+Ó+ùs   ‚I"JÉ'Jc               ó   • g r>   r   ©rA   r1   Úrejects      r+   ÚacceptÚScanner.accept„   s   € ØJMr*   F©r[   c               ó   • g r>   r   rZ   s      r+   r\   r]   ‡   s   € ð r*   c               óò   • U R                   R                  UL aE  U R                   nUR                  [        R                  La  [	        U R
                  5      U l         U$ U(       a  U R                  U45        g r>   )r:   r1   r   r%   r@   r<   r[   )rA   r1   r[   Útokens       r+   r\   r]   Œ   sV   € Ø�<‰<×Ñ Ò$Ø—L‘LˆEØ�z‰z¤§¡Ò.Ü# D§K¡KÓ0�”ØˆLÞØ�K‰K˜˜Ô Ør*   c                óô   • [        SR                  SR                  S U 5       5      U R                  R                  R
                  5      [        SU R                  R                  S-   U R                  45      e)Nzexpected {}; got {}z OR c              3  ó8   #   • U  H  oR                   v •  M     g 7fr>   )r2   )Ú.0r1   s     r+   Ú	<genexpr>Ú!Scanner.reject.<locals>.<genexpr>™   s   é € Ð<²8¨4ŸJžJ²8ùs   ‚rG   )	rQ   ÚformatÚjoinr:   r1   r2   r   r0   r;   )rA   Úexpecteds     r+   r[   ÚScanner.reject–   sc   € ÜØ!×(Ñ(Ø—‘Ñ<±8Ó<Ó<Ø—‘×!Ñ!×'Ñ'óô ˜˜4Ÿ<™<×+Ñ+¨aÑ/°·±Ð<ó
ð 	
r*   N)r;   r3   ÚreturnÚNone)r;   r3   rk   zIterator[Token])r1   r   r[   zLiteral[True]rk   r.   )r1   r   r[   zLiteral[False]rk   úToken | None)r1   r   r[   Úboolrk   rm   )ri   zSequence[TokenType]rk   r
   )r   r   r   r   r5   rB   r?   r   r\   r[   r)   r   r*   r+   r8   r8   H   s^   † Ø.€Iô)ô
2,ðh ÛMó ØMàà;@ñØðØ*8ðà	ôó ðð 9>÷ ÷
r*   r8   Ú$c                ó  • U R                  [        R                  5      (       a  [        R                  " S5      nO)[        U 5      nU R                  [        R                  SS9  [        R                  " [        R                  " U5      5      $ )NFTr^   )r\   r   r%   ÚastÚConstantÚexprÚfix_missing_locationsr   ©ÚsÚrets     r+   Ú
expressionrx   ¦   sZ   € Ø‡x�x”	—‘×ÑÜŸš UÓ+‰ä�1‹gˆØ	�‰”—‘ tˆÑ,Ü×$Ò$¤S§^¢^°CÓ%8Ó9Ð9r*   c                ó  • [        U 5      nU R                  [        R                  5      (       a\  [        U 5      n[        R
                  " [        R                  " 5       X/5      nU R                  [        R                  5      (       a  M\  U$ r>   )Úand_exprr\   r   r!   rq   ÚBoolOpÚOr©rv   rw   Úrhss      r+   rs   rs   ¯   s[   € Ü
�1‹+€CØ
�(‰(”9—<‘<×
 Ñ
 Ü�q‹kˆÜ�jŠjœŸš› C :Ó.ˆð �(‰(”9—<‘<×
 Ó
 ð €Jr*   c                ó  • [        U 5      nU R                  [        R                  5      (       a\  [        U 5      n[        R
                  " [        R                  " 5       X/5      nU R                  [        R                  5      (       a  M\  U$ r>   )Únot_exprr\   r   r"   rq   r{   ÚAndr}   s      r+   rz   rz   ·   s[   € Ü
�1‹+€CØ
�(‰(”9—=‘=×
!Ñ
!Ü�q‹kˆÜ�jŠjœŸš› S JÓ/ˆð �(‰(”9—=‘=×
!Ó
!ð €Jr*   c                ó\  • U R                  [        R                  5      (       a3  [        R                  " [        R
                  " 5       [        U 5      5      $ U R                  [        R                  5      (       a+  [        U 5      nU R                  [        R                  SS9  U$ U R                  [        R                  5      nU(       a¢  [        R                  " [        UR                  -   [        R                  " 5       5      nU R                  [        R                  5      (       a?  [        R                  " U/ [!        U 5      S9nU R                  [        R                  SS9  U$ UnU$ U R#                  [        R                  [        R                  [        R                  45        g )NTr^   )ÚfuncÚargsÚkeywords)r\   r   r#   rq   ÚUnaryOpÚNotr€   r   rs   r    r$   ÚNameÚIDENT_PREFIXr2   ÚLoadÚCallÚ
all_kwargsr[   )rv   rw   ÚidentÚnames       r+   r€   r€   ¿   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ÚFalserl   c                ór  • U R                  [        R                  SS9nUR                  R	                  5       (       d8  [        SUR                   3[        SUR                  S-   U R                  45      e[        R                  " UR                  5      (       a9  [        SUR                   S3[        SUR                  S-   U R                  45      eU R                  [        R                  SS9  U R                  [        R                  5      =n(       a  UR                  SS nOÚU R                  [        R                  SS9nUR                  =nR                  5       (       d.  UR                  S5      (       a$  USS  R                  5       (       a  [        U5      nOaUR                  [         ;   a  [         UR                     nO9[        S	UR                   S
3[        SUR                  S-   U R                  45      e["        R                  " UR                  ["        R$                  " U5      5      nU$ )NTr^   znot a valid python identifier rG   z$unexpected reserved python keyword `Ú`rL   Ú-zunexpected character/s "rK   )r\   r   r$   r2   ÚisidentifierrQ   r   r0   r;   ÚkeywordÚ	iskeywordr&   r'   ÚisdigitÚ
startswithr4   ÚBUILTIN_MATCHERSrq   rr   )rv   Úkeyword_nameÚvalue_tokenr2   Únumberrw   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Ñ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                óæ   • [        U 5      /nU R                  [        R                  5      (       a@  UR	                  [        U 5      5        U R                  [        R                  5      (       a  M@  U$ r>   )r�   r\   r   r(   Úappendru   s     r+   rŒ   rŒ   ø   sK   € Ü˜‹?Ð
€CØ
�(‰(”9—?‘?×
#Ñ
#Ø�
‰
”< “?Ô#ð �(‰(”9—?‘?×
#Ó
#à€Jr*   c                  ó"   • \ rS rSrSrSS jrSrg)r   éÿ   a  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               ó   • g r>   r   )rA   rŽ   Úkwargss      r+   Ú__call__ÚExpressionMatcher.__call__  s   € ÐQTr*   r   N)rŽ   r3   r£   ústr | int | bool | Nonerk   rn   )r   r   r   r   Ú__doc__r¤   r)   r   r*   r+   r   r   ÿ   s   † ñ÷. Ur*   c                  ó>   • \ rS rSr% S\S'   S\S'   S
S jrSS jrSrg	)ÚMatcherNameAdapteri  r   Úmatcherr3   rŽ   c                ó8   • U R                  U R                  5      $ r>   ©rª   rŽ   ©rA   s    r+   Ú__bool__ÚMatcherNameAdapter.__bool__  s   € Ø�|‰|˜DŸI™IÓ&Ð&r*   c                ó<   • U R                   " U R                  40 UD6$ r>   r¬   )rA   r£   s     r+   r¤   ÚMatcherNameAdapter.__call__"  s   € Ø�|Š|˜DŸI™IÑ0¨Ñ0Ð0r*   r   N)rk   rn   )r£   r¦   rk   rn   )r   r   r   r   r6   r®   r¤   r)   r   r*   r+   r©   r©     s   ‡ àÓØ
ƒIô'÷1r*   r©   c                  ó@   • \ rS rSrSrS	S jrS
S jrSS jrSS jrSr	g)ÚMatcherAdapteri&  zDAdapts a matcher function to a locals mapping as required by eval().c                ó   • Xl         g r>   ©rª   ©rA   rª   s     r+   rB   ÚMatcherAdapter.__init__)  s   € Ø�r*   c                óJ   • [        U R                  U[        [        5      S  S9$ )Nr¬   )r©   rª   rO   r‰   )rA   Úkeys     r+   Ú__getitem__ÚMatcherAdapter.__getitem__,  s    € Ü!¨$¯,©,¸SÄÄ\ÓARÐATÐ=UÑVÐVr*   c                ó   • [        5       er>   ©ÚNotImplementedErrorr­   s    r+   Ú__iter__ÚMatcherAdapter.__iter__/  ó   € Ü!Ó#Ð#r*   c                ó   • [        5       er>   r½   r­   s    r+   Ú__len__ÚMatcherAdapter.__len__2  rÁ   r*   rµ   N)rª   r   rk   rl   )r¹   r3   rk   r©   )rk   zIterator[str])rk   r4   )
r   r   r   r   r§   rB   rº   r¿   rÃ   r)   r   r*   r+   r³   r³   &  s   † ÙNôôWô$÷$r*   r³   c                  óD   • \ rS rSrSrSrSS jr\S	S j5       rS
S jr	Sr
g)r   i6  zoA compiled match expression as used by -k and -m.

The expression can be evaluated against different matchers.
)Ú_coder;   c                ó   • Xl         X l        g r>   )r;   rÆ   )rA   r;   Úcodes      r+   rB   ÚExpression.__init__?  s   € à!Œ
Ø �
r*   c                óV   • [        [        U5      5      n[        USSS9n[        X5      $ )z‚Compile a match expression.

:param input: The input expression - one line.

:raises SyntaxError: If the expression is malformed.
r   Úeval)ÚfilenameÚmode)rx   r8   Úcompiler   )Úclsr;   ÚastexprrÈ   s       r+   rÎ   ÚExpression.compileD  s2   € ô œW U›^Ó,ˆÜØØ0Øñ
ˆô
 ˜%Ó&Ð&r*   c           	     óX   • [        [        U R                  S0 0[        U5      5      5      $ )at  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__)rn   rË   rÆ   r³   r¶   s     r+   ÚevaluateÚExpression.evaluateT  s&   € ô ”D˜Ÿ™ n°bÐ%9¼>È'Ó;RÓSÓTÐTr*   N)r;   r3   rÈ   ztypes.CodeTyperk   rl   )r;   r3   rk   r   )rª   r   rk   rn   )r   r   r   r   r§   r5   rB   ÚclassmethodrÎ   rÔ   r)   r   r*   r+   r   r   6  s-   † ñð
 #€Iô!ð
 ó'ó ð'÷Ur*   )rv   r8   rk   zast.Expression)rv   r8   rk   zast.expr)rv   r8   rk   zast.keyword)rv   r8   rk   zlist[ast.keyword]))r§   Ú
__future__r   rq   Úcollections.abcr   r   r   ÚdataclassesÚenumr•   rR   ÚtypesÚtypingr   r   r	   r
   r   r   Ú__all__r   r6   ÚEnumr   Ú	dataclassr.   r8   r‰   rx   rs   rz   r€   r™   r�   rŒ   r   r©   r3   r³   r   r   r*   r+   Ú<module>rà      s.  ðòõ, #ã 
Ý $Ý #Ý $Û Û Û Û 	Û Ý Ý Ý Ý Ý Ý ð Øð€ð /€	ˆ5Ó .ô
�—	‘	ô 
ð ×Ò˜dÑ#÷ð ó $ð÷U
ñ U
ðv €ô:ôôôAð( !¨5¸$Ñ?Ð ôôDôU˜ô Uð6 ×Ñ÷1ð 1ó ð1ô$�W˜SÐ"4Ð4Ñ5ô $ð  ÷*Uð *Uó ñ*Ur*   