§
    ÖŽ’jS-  ã                  ó8  — 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j        d¬¦  «         G d„ d¦  «        ¦   «         Z G d„ d¦  «        ZdZd/d„Zd0d „Zd0d!„Zd0d"„Z dd#dd$œZ!d1d&„Z"d2d(„Z# G d)„ de¦  «        Z$ej         G d*„ d+¦  «        ¦   «         Z% G d,„ d-ee&e%f         ¦  «        Z'e G d.„ d¦  «        ¦   «         Z(dS )3a  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                  ó6   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdS )Ú	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© ó    úEC:\Projects\DSCons\.venv\Lib\site-packages\_pytest\mark\expression.pyr   r   3   s@   € € € € € Ø€FØ €FØ	€BØ
€CØ
€CØ€EØ
€CØ€EØ€FØ€E€E€Er'   r   T)Úfrozenc                  ó2   — e Zd ZU dZded<   ded<   ded<   dS )	ÚToken)ÚposÚtypeÚvaluer   r-   Ústrr.   Úintr,   N)r   r   r   Ú	__slots__Ú__annotations__r&   r'   r(   r+   r+   @   s0   € € € € € € à(€IØ€O€O�OØ€J€J�JØ€H€H�H€H€Hr'   r+   c                  ón   — 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dS )!ÚScanner)ÚcurrentÚinputÚtokensr6   r/   ÚreturnÚNonec                óz   — || _         |                      |¦  «        | _        t          | j        ¦  «        | _        d S ©N)r6   Úlexr7   Únextr5   )Úselfr6   s     r(   Ú__init__zScanner.__init__K   s/   € ØˆŒ
Ø—h’h˜u‘o”oˆŒÝ˜DœKÑ(Ô(ˆŒˆˆr'   úIterator[Token]c              #  óª  K  — d}|t          |¦  «        k     �r�||         dv r|dz  }�nx||         dk    r$t          t          j        d|¦  «        V — |dz  }�nH||         dk    r$t          t          j        d|¦  «        V — |dz  }�n||         dk    r$t          t          j        d|¦  «        V — |dz  }�nè||         dk    r$t          t          j        d|¦  «        V — |dz  }�n¸||         x}dv r¶|                     ||dz   ¦  «        }|d	k    r t          d
|› d�t          d|dz   |f¦  «        ‚|||dz   …         }|                     d¦  «        x}d	k    rt          dt          d||z   dz   |f¦  «        ‚t          t          j
        ||¦  «        V — |t          |¦  «        z  }nöt          j        d||d …         ¦  «        }|r±|                     d¦  «        }|dk    rt          t          j        ||¦  «        V — ne|dk    rt          t          j        ||¦  «        V — nA|dk    rt          t          j        ||¦  «        V — nt          t          j        ||¦  «        V — |t          |¦  «        z  }n&t          d||         › d�t          d|dz   |f¦  «        ‚|t          |¦  «        k     �°�t          t          j        d|¦  «        V — d S )Nr   )ú ú	é   ú(ú)r   r   )ú'ú"éÿÿÿÿzclosing quote "z" is missingú\z4escaping with "\" not supported in marker expressionz(:?\w|:|\+|-|\.|\[|\]|\\|/)+r   r   r   zunexpected character "rH   Ú )Ú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_posrP   s           r(   r<   zScanner.lexP   s4  è è € ØˆØ•C˜‘J”JÒÑØ�SŒz˜[Ð(Ð(Ø�q‘�‘Ø�s”˜sÒ"Ð"Ý�IÔ,¨c°3Ñ7Ô7Ð7Ð7Ð7Ø�q‘�‘Ø�s”˜sÒ"Ð"Ý�IÔ,¨c°3Ñ7Ô7Ð7Ð7Ð7Ø�q‘�‘Ø�s”˜sÒ"Ð"Ý�IœO¨S°#Ñ6Ô6Ð6Ð6Ð6Ø�q‘�‘Ø�s”˜sÒ"Ð"Ý�IœO¨S°#Ñ6Ô6Ð6Ð6Ð6Ø�q‘�‘Ø % c¤
Ð*�*¨zÐ9Ð9Ø %§
¢
¨:°s¸Q±wÑ ?Ô ?�Ø  BÒ&Ð&Ý%ØB¨*ÐBÐBÐBÝ" A s¨Q¡w°Ð6ñô ð ð ˜c M°AÑ$5Ð5Ô6�Ø%*§Z¢Z°Ñ%5Ô%5Ð5�M¸"Ò<Ð<Ý%ØOÝ" A s¨]Ñ':¸QÑ'>ÀÐFñô ð õ �IÔ,¨e°SÑ9Ô9Ð9Ð9Ð9Ø•s˜5‘z”zÑ!��åœÐ!@À%ÈÈÈÄ+ÑNÔN�Øð Ø!ŸKšK¨™NœN�EØ ’}�}Ý#¥I¤L°%¸Ñ=Ô=Ð=Ð=Ð=Ð=Ø %š˜Ý#¥I¤M°5¸#Ñ>Ô>Ð>Ð>Ð>Ð>Ø %š˜Ý#¥I¤M°5¸#Ñ>Ô>Ð>Ð>Ð>Ð>å#¥I¤O°U¸CÑ@Ô@Ð@Ð@Ð@Ø�3˜u™:œ:Ñ%�C�Cå%Ø>°°s´Ð>Ð>Ð>Ý" A s¨Q¡w°Ð6ñô ð ðY •C˜‘J”JÒÑõ` •I”M 2 sÑ+Ô+Ð+Ð+Ð+Ð+Ð+r'   r-   r   ÚrejectúLiteral[True]r+   c               ó   — d S r;   r&   ©r>   r-   rU   s      r(   ÚacceptzScanner.accept„   s   € ØJMÈ#r'   F©rU   úLiteral[False]úToken | Nonec               ó   — d S r;   r&   rX   s      r(   rY   zScanner.accept‡   s	   € ð �sr'   Úboolc               ó¼   — | j         j        |u r5| j         }|j        t          j        urt	          | j        ¦  «        | _         |S |r|                      |f¦  «         d S r;   )r5   r-   r   r"   r=   r7   rU   )r>   r-   rU   Útokens       r(   rY   zScanner.acceptŒ   s_   € ØŒ<Ô Ð$Ð$Ø”LˆEØŒz¥¤Ð.Ð.Ý# D¤KÑ0Ô0�”ØˆLØð 	!Ø�KŠK˜˜Ñ Ô Ð Øˆtr'   ÚexpectedúSequence[TokenType]r
   c                óØ   — t          d                     d                     d„ |D ¦   «         ¦  «        | j        j        j        ¦  «        t          d| j        j        dz   | j        f¦  «        ‚)Nzexpected {}; got {}z OR c              3  ó$   K  — | ]}|j         V — Œd S r;   )r.   )Ú.0r-   s     r(   ú	<genexpr>z!Scanner.reject.<locals>.<genexpr>™   s$   è è € Ð<Ð<¨4˜DœJÐ<Ð<Ð<Ð<Ð<Ð<r'   rD   )	rN   ÚformatÚjoinr5   r-   r.   r   r,   r6   )r>   ra   s     r(   rU   zScanner.reject–   sj   € ÝØ!×(Ò(Ø—’Ð<Ð<°8Ð<Ñ<Ô<Ñ<Ô<Ø”Ô!Ô'ñô õ ˜˜4œ<Ô+¨aÑ/°´Ð<ñ
ô 
ð 	
r'   N)r6   r/   r8   r9   )r6   r/   r8   r@   )r-   r   rU   rV   r8   r+   )r-   r   rU   r[   r8   r\   )r-   r   rU   r^   r8   r\   )ra   rb   r8   r
   )	r   r   r   r1   r?   r<   r   rY   rU   r&   r'   r(   r4   r4   H   s¼   € € € € € Ø.€Ið)ð )ð )ð )ð
2,ð 2,ð 2,ð 2,ðh ØMÐMÐMñ „XØMàà;@ðð ð ð ð ñ „Xðð 9>ð ð ð ð ð ð ð
ð 
ð 
ð 
ð 
ð 
r'   r4   ú$Úsr8   úast.Expressionc                ó  — |                       t          j        ¦  «        rt          j        d¦  «        }n0t          | ¦  «        }|                       t          j        d¬¦  «         t          j        t          j        |¦  «        ¦  «        S )NFTrZ   )rY   r   r"   ÚastÚConstantÚexprÚfix_missing_locationsr   ©rj   Úrets     r(   Ú
expressionrs   ¦   sg   € Ø‡x‚x•	”ÑÔð -Ýœ UÑ+Ô+ˆˆå�1‰gŒgˆØ	�Š•” tˆÑ,Ô,Ð,ÝÔ$¥S¤^°CÑ%8Ô%8Ñ9Ô9Ð9r'   úast.exprc                ó  — t          | ¦  «        }|                      t          j        ¦  «        rVt          | ¦  «        }t	          j        t	          j        ¦   «         ||g¦  «        }|                      t          j        ¦  «        °V|S r;   )Úand_exprrY   r   r   rm   ÚBoolOpÚOr©rj   rr   Úrhss      r(   ro   ro   ¯   sh   € Ý
�1‰+Œ+€CØ
�(Š(•9”<Ñ
 Ô
 ð /Ý�q‰kŒkˆÝŒj�œ™œ C¨ :Ñ.Ô.ˆð �(Š(•9”<Ñ
 Ô
 ð /ð €Jr'   c                ó  — t          | ¦  «        }|                      t          j        ¦  «        rVt          | ¦  «        }t	          j        t	          j        ¦   «         ||g¦  «        }|                      t          j        ¦  «        °V|S r;   )Únot_exprrY   r   r   rm   rw   ÚAndry   s      r(   rv   rv   ·   sh   € Ý
�1‰+Œ+€CØ
�(Š(•9”=Ñ
!Ô
!ð 0Ý�q‰kŒkˆÝŒj�œ™œ S¨# JÑ/Ô/ˆð �(Š(•9”=Ñ
!Ô
!ð 0ð €Jr'   c                ó2  — |                       t          j        ¦  «        r3t          j        t          j        ¦   «         t          | ¦  «        ¦  «        S |                       t          j        ¦  «        r2t          | ¦  «        }|                       t          j	        d¬¦  «         |S |                       t          j
        ¦  «        }|rœt          j        t          |j        z   t          j        ¦   «         ¦  «        }|                       t          j        ¦  «        rFt          j        |g t!          | ¦  «        ¬¦  «        }|                       t          j	        d¬¦  «         n|}|S |                      t          j        t          j        t          j
        f¦  «         d S )NTrZ   )ÚfuncÚargsÚkeywords)rY   r   r    rm   ÚUnaryOpÚNotr|   r   ro   r   r!   ÚNameÚIDENT_PREFIXr.   ÚLoadÚCallÚ
all_kwargsrU   )rj   rr   ÚidentÚnames       r(   r|   r|   ¿   s.  € Ø‡x‚x•	”ÑÔð 3ÝŒ{�3œ7™9œ9¥h¨q¡k¤kÑ2Ô2Ð2Ø‡x‚x•	Ô Ñ!Ô!ð Ý�1‰gŒgˆØ	�Š•Ô!¨$ˆÑ/Ô/Ð/Øˆ
Ø�HŠH•Y”_Ñ%Ô%€EØð ÝŒx� u¤{Ñ2µC´H±J´JÑ?Ô?ˆØ�8Š8•IÔ$Ñ%Ô%ð 	Ý”( ¨2½
À1¹¼ÐFÑFÔFˆCØ�HŠH•YÔ%¨dˆHÑ3Ô3Ð3Ð3àˆCØˆ
à‡H‚H�iŒm�YÔ-­y¬Ð?Ñ@Ô@Ð@Ð@Ð@r'   F)ÚTrueÚFalser9   úast.keywordc                óü  — |                       t          j        d¬¦  «        }|j                             ¦   «         s.t          d|j        › �t          d|j        dz   | j        f¦  «        ‚t          j
        |j        ¦  «        r/t          d|j        › d�t          d|j        dz   | j        f¦  «        ‚|                       t          j        d¬¦  «         |                       t          j        ¦  «        x}r|j        dd…         }nÍ|                       t          j        d¬¦  «        }|j        x}                     ¦   «         s1|                     d¦  «        r,|dd …                              ¦   «         rt          |¦  «        }nP|j        t           v rt           |j                 }n/t          d	|j        › d
�t          d|j        dz   | j        f¦  «        ‚t#          j	        |j        t#          j        |¦  «        ¦  «        }|S )NTrZ   znot a valid python identifier rD   z$unexpected reserved python keyword `ú`rI   ú-zunexpected character/s "rH   )rY   r   r!   r.   ÚisidentifierrN   r   r,   r6   ÚkeywordÚ	iskeywordr#   r$   ÚisdigitÚ
startswithr0   ÚBUILTIN_MATCHERSrm   rn   )rj   Úkeyword_nameÚvalue_tokenr.   Únumberrr   s         r(   Úsingle_kwargrš   Ö   sï  € Ø—8’8�IœO°D�8Ñ9Ô9€LØÔ×*Ò*Ñ,Ô,ð 
ÝØA¨\Ô-?ÐAÐAÝ˜˜<Ô+¨aÑ/°´Ð9ñ
ô 
ð 	
õ Ô˜Ô+Ñ,Ô,ð 
ÝØH°<Ô3EÐHÐHÐHÝ˜˜<Ô+¨aÑ/°´Ð9ñ
ô 
ð 	
ð ‡H‚H�YŒ_ T€HÑ*Ô*Ð*à—h’h�yÔ/Ñ0Ô0Ð0€{ð Ø)4Ô):¸1¸R¸4Ô)@ˆˆà—h’h�yœ°t�hÑ<Ô<ˆØ!Ô'Ð'ˆF×0Ò0Ñ2Ô2ð 
	Ø×Ò˜cÑ"Ô"ð
	Ø'-¨a¨b¨b¤z×'9Ò'9Ñ';Ô';ð
	õ ˜‘K”KˆEˆEØÔÕ"2Ð2Ð2Ý$ [Ô%6Ô7ˆEˆEåØ?¨;Ô+<Ð?Ð?Ð?Ý˜A˜{œ°Ñ2°A´GÐ<ñô ð õ
 Œ+�lÔ(­#¬,°uÑ*=Ô*=Ñ
>Ô
>€CØ€Jr'   úlist[ast.keyword]c                óæ   — t          | ¦  «        g}|                      t          j        ¦  «        rA|                     t          | ¦  «        ¦  «         |                      t          j        ¦  «        °A|S r;   )rš   rY   r   r%   Úappendrq   s     r(   rˆ   rˆ   ø   s[   € Ý˜‰?Œ?Ð
€CØ
�(Š(•9”?Ñ
#Ô
#ð $Ø�
Š
•< ‘?”?Ñ#Ô#Ð#ð �(Š(•9”?Ñ
#Ô
#ð $à€Jr'   c                  ó   — e Zd ZdZd
d„Zd	S )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
    rŠ   r/   Úkwargsústr | int | bool | Noner8   r^   c               ó   — d S r;   r&   )r>   rŠ   rŸ   s      r(   Ú__call__zExpressionMatcher.__call__  s   € € € r'   N)rŠ   r/   rŸ   r    r8   r^   )r   r   r   Ú__doc__r¢   r&   r'   r(   r   r   ÿ   s)   € € € € € ðð ð. UÐTÐTÐTÐTÐTr'   c                  ó4   — e Zd ZU ded<   ded<   dd„Zdd
„ZdS )ÚMatcherNameAdapterr   Úmatcherr/   rŠ   r8   r^   c                ó6   — |                       | j        ¦  «        S r;   ©r¦   rŠ   ©r>   s    r(   Ú__bool__zMatcherNameAdapter.__bool__  s   € Ø�|Š|˜DœIÑ&Ô&Ð&r'   rŸ   r    c                ó(   —  | j         | j        fi |¤ŽS r;   r¨   )r>   rŸ   s     r(   r¢   zMatcherNameAdapter.__call__"  s   € ØˆtŒ|˜DœIÐ0Ð0¨Ð0Ð0Ð0r'   N)r8   r^   )rŸ   r    r8   r^   )r   r   r   r2   rª   r¢   r&   r'   r(   r¥   r¥     sS   € € € € € € àÐÐÑØ€I€I�Ið'ð 'ð 'ð 'ð1ð 1ð 1ð 1ð 1ð 1r'   r¥   c                  ó2   — e Zd ZdZdd„Zdd
„Zdd„Zdd„ZdS )ÚMatcherAdapterzDAdapts a matcher function to a locals mapping as required by eval().r¦   r   r8   r9   c                ó   — || _         d S r;   )r¦   ©r>   r¦   s     r(   r?   zMatcherAdapter.__init__)  s   € ØˆŒˆˆr'   Úkeyr/   r¥   c                ób   — t          | j        |t          t          ¦  «        d …         ¬¦  «        S )Nr¨   )r¥   r¦   rL   r…   )r>   r°   s     r(   Ú__getitem__zMatcherAdapter.__getitem__,  s*   € Ý!¨$¬,¸SÅÅ\ÑARÔARÐATÐATÔ=UÐVÑVÔVÐVr'   úIterator[str]c                ó   — t          ¦   «         ‚r;   ©ÚNotImplementedErrorr©   s    r(   Ú__iter__zMatcherAdapter.__iter__/  ó   € Ý!Ñ#Ô#Ð#r'   r0   c                ó   — t          ¦   «         ‚r;   rµ   r©   s    r(   Ú__len__zMatcherAdapter.__len__2  r¸   r'   N)r¦   r   r8   r9   )r°   r/   r8   r¥   )r8   r³   )r8   r0   )r   r   r   r£   r?   r²   r·   rº   r&   r'   r(   r­   r­   &  sn   € € € € € ØNÐNðð ð ð ðWð Wð Wð Wð$ð $ð $ð $ð$ð $ð $ð $ð $ð $r'   r­   c                  ó>   — e Zd ZdZdZdd	„Zedd
„¦   «         Zdd„ZdS )r   zwA compiled match expression as used by -k and -m.

    The expression can be evaluated against different matchers.
    )Ú_coder6   r6   r/   Úcodeútypes.CodeTyper8   r9   c                ó"   — || _         || _        d S r;   )r6   r¼   )r>   r6   r½   s      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)rs   r4   Úcompiler   )Úclsr6   Úastexprr½   s       r(   rÄ   zExpression.compileD  sF   € õ �W U™^œ^Ñ,Ô,ˆÝØØ0Øð
ñ 
ô 
ˆõ
 ˜% Ñ&Ô&Ð&r'   r¦   r   r^   c           	     óf   — 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__)r^   rÁ   r¼   r­   r¯   s     r(   ÚevaluatezExpression.evaluateT  s-   € õ •D˜œ n°bÐ%9½>È'Ñ;RÔ;RÑSÔSÑTÔTÐTr'   N)r6   r/   r½   r¾   r8   r9   )r6   r/   r8   r   )r¦   r   r8   r^   )	r   r   r   r£   r1   r?   ÚclassmethodrÄ   rÉ   r&   r'   r(   r   r   6  ss   € € € € € ðð ð
 #€Ið!ð !ð !ð !ð
 ð'ð 'ð 'ñ „[ð'ðUð Uð Uð Uð Uð Ur'   )rj   r4   r8   rk   )rj   r4   r8   rt   )rj   r4   r8   r�   )rj   r4   r8   r›   ))r£   Ú
__future__r   rm   Úcollections.abcr   r   r   ÚdataclassesÚenumr’   rO   ÚtypesÚtypingr   r   r	   r
   r   r   Ú__all__r   r2   ÚEnumr   Ú	dataclassr+   r4   r…   rs   ro   rv   r|   r–   rš   rˆ   r   r¥   r/   r­   r   r&   r'   r(   ú<module>rÔ      sD  ððð ð ð, #Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø $Ð $Ð $Ð $Ð $Ð $Ø #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð Øð€ð /€	Ð .Ð .Ð .Ñ .ð
ð 
ð 
ð 
ð 
�”	ñ 
ô 
ð 
ð €Ô˜dÐ#Ñ#Ô#ðð ð ð ð ñ ô ñ $Ô#ððU
ð U
ð U
ð U
ð U
ñ U
ô U
ð U
ðv €ð:ð :ð :ð :ðð ð ð ðð ð ð ðAð Að Að Að( !¨5¸$Ð?Ð?Ð ðð ð ð ðDð ð ð ðUð Uð Uð Uð U˜ñ Uô Uð Uð6 Ôð1ð 1ð 1ð 1ð 1ñ 1ô 1ñ Ôð1ð$ð $ð $ð $ð $�W˜SÐ"4Ð4Ô5ñ $ô $ð $ð  ð*Uð *Uð *Uð *Uð *Uñ *Uô *Uñ „ð*Uð *Uð *Ur'   