§
    öyIf%"  ã            
       óâ  — d 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
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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lmZ ddlmZ ddlmZ erddlmZ g d¢Z eee                  ¦   «         Z dddœde!deeeeeef                  f         dee"         d efd!„Z#d"ed dfd#„Z$ ed$¬%¦  «        d&ed eee%ef                  fd'„¦   «         Z&ej'         G d(„ d)¦  «        ¦   «         Z(d*d+d&ed dfd,„Z)ej'         G d-„ d.¦  «        ¦   «         Z*d*d+d&ed dfd/„Z+d0e"d1e"d e
fd2„Z,d*d+d&ed dfd3„Z-d&ed dfd4„Z.d&ed dfd5„Z/dS )6z=Generic mechanism for marking and selecting python functions.é    N)ÚAbstractSet)Ú
Collection)ÚList)ÚOptional)ÚTYPE_CHECKING)ÚUnioné   )Ú
Expression)Ú
ParseError)ÚEMPTY_PARAMETERSET_OPTION)Úget_empty_parameterset_mark)ÚMark)ÚMARK_GEN)ÚMarkDecorator)ÚMarkGenerator)ÚParameterSet)ÚConfig)ÚExitCode)Úhookimpl)Ú
UsageError)ÚParser)ÚStashKey)ÚItem)r   r   r   r   r   r   © ©ÚmarksÚidÚvaluesr   r   Úreturnc                 ó&   — t          j        || |dœŽS )a£  Specify a parameter in `pytest.mark.parametrize`_ calls or
    :ref:`parametrized fixtures <fixture-parametrize-marks>`.

    .. code-block:: python

        @pytest.mark.parametrize(
            "test_input,expected",
            [
                ("3+5", 8),
                pytest.param("6*9", 42, marks=pytest.mark.xfail),
            ],
        )
        def test_eval(test_input, expected):
            assert eval(test_input) == expected

    :param values: Variable args of the values of the parameter set, in order.
    :param marks: A single mark or a list of marks to be applied to this parameter set.
    :param id: The id to attribute to this parameter set.
    r   )r   Úparam)r   r   r   s      úI/var/www/piapp/venv/lib/python3.11/site-packages/_pytest/mark/__init__.pyr!   r!   -   s   € õ0 Ô˜v¨U°rÐ:Ð:Ð:Ð:ó    Úparserc                 ó0  — |                       d¦  «        }|                     dddddd¬¦  «         |                     d	dd
ddd¬¦  «         |                     ddd¬¦  «         |                      ddd¦  «         |                      t          d¦  «         d S )NÚgeneralz-kÚstoreÚkeywordÚ Ú
EXPRESSIONa¹  Only run tests which match the given substring expression. An expression is a Python evaluatable expression where all names are substring-matched against test names and their parent classes. Example: -k 'test_method or test_other' matches all test functions and classes whose name contains 'test_method' or 'test_other', while -k 'not test_method' matches those that don't contain 'test_method' in their names. -k 'not test_method and not test_other' will eliminate the matches. Additionally keywords are matched to classes and functions containing extra names in their 'extra_keyword_matches' set, as well as functions which have names assigned directly to them. The matching is case-insensitive.)ÚactionÚdestÚdefaultÚmetavarÚhelpz-mÚmarkexprÚMARKEXPRzUOnly run tests matching given mark expression. For example: -m 'mark1 and not mark2'.z	--markersÚ
store_truez4show markers (builtin, plugin and per-project ones).)r+   r/   Úmarkersz'Register new markers for test functionsÚlinelistz&Default marker for empty parametersets)ÚgetgroupÚ
_addoptionÚ	addoptionÚaddinir   )r$   Úgroups     r"   Úpytest_addoptionr:   H   sÒ   € Ø�OŠO˜IÑ&Ô&€EØ	×ÒØØØØØð,ð ñ ô ð ð( 
×ÒØØØØØð1ð ñ ô ð ð 
‡O‚OØØØCð ñ ô ð ð ‡M‚M�)ÐFÈ
ÑSÔSÐSØ
‡M‚MÕ+Ð-UÑVÔVÐVÐVÐVr#   T)ÚtryfirstÚconfigc                 óÚ  — dd l }| j        j        rÚ|                      ¦   «          |j                             | ¦  «        }|                      d¦  «        D ]€}|                     dd¦  «        }|d         }t          |¦  «        dk    r|d         nd}| 	                    d|z  d¬	¦  «         | 
                    |¦  «         | 
                    ¦   «          Œ�|                      ¦   «          dS d S )
Nr   r3   ú:r	   é   r)   z@pytest.mark.%s:T)Úbold)Ú_pytest.configÚoptionr3   Ú_do_configurer<   Úcreate_terminal_writerÚgetiniÚsplitÚlenÚwriteÚlineÚ_ensure_unconfigure)r<   Ú_pytestÚtwrI   ÚpartsÚnameÚrests          r"   Úpytest_cmdline_mainrP   r   sê   € àÐÐÐà„}Ôð Ø×ÒÑÔÐØŒ^×2Ò2°6Ñ:Ô:ˆØ—M’M )Ñ,Ô,ð 	ð 	ˆDØ—J’J˜s AÑ&Ô&ˆEØ˜”8ˆDÝ" 5™zœz¨Qš˜�5˜”8�8°BˆDØ�HŠHÐ'¨$Ñ.°TˆHÑ:Ô:Ð:Ø�GŠG�D‰MŒMˆMØ�GŠG‰IŒIˆIˆIØ×"Ò"Ñ$Ô$Ð$Øˆqàˆ4r#   c                   óV   — e Zd ZU dZdZee         ed<   edd„¦   «         Z	dede
fd	„Zd
S )ÚKeywordMatcheraÑ  A matcher for keywords.

    Given a list of names, matches any substring of one of these names. The
    string inclusion check is case-insensitive.

    Will match on the name of colitem, including the names of its parents.
    Only matches names of items which are either a :class:`Class` or a
    :class:`Function`.

    Additionally, matches on names in the 'extra_keyword_matches' set of
    any item, as well as names directly assigned to test functions.
    )Ú_namesrS   Úitemr   r   c                 ó4  — t          ¦   «         }dd l}|                     ¦   «         D ]b}t          ||j        ¦  «        rŒt          ||j        ¦  «        rt          |j        |j        ¦  «        rŒH|                     |j        ¦  «         Œc| 	                    | 
                    ¦   «         ¦  «         t          |dd ¦  «        }|r| 	                    |j        ¦  «         | 	                    d„ |                     ¦   «         D ¦   «         ¦  «          | |¦  «        S )Nr   Úfunctionc              3   ó$   K  — | ]}|j         V — Œd S ©N©rN   ©Ú.0Úmarks     r"   ú	<genexpr>z+KeywordMatcher.from_item.<locals>.<genexpr>´   s$   è è € ÐFÐF¨$˜DœIÐFÐFÐFÐFÐFÐFr#   )ÚsetÚpytestÚ	listchainÚ
isinstanceÚSessionÚ	DirectoryÚparentÚaddrN   ÚupdateÚlistextrakeywordsÚgetattrÚ__dict__Úiter_markers)ÚclsrT   Úmapped_namesr_   ÚnodeÚfunction_objs         r"   Ú	from_itemzKeywordMatcher.from_item™   s(  € å‘u”uˆð
 	ˆˆˆà—N’NÑ$Ô$ð 	(ð 	(ˆDÝ˜$ ¤Ñ/Ô/ð ØÝ˜$ Ô 0Ñ1Ô1ð µjØ”˜Vœ^ñ7ô 7ð ð Ø×Ò˜TœYÑ'Ô'Ð'Ð'ð 	×Ò˜D×2Ò2Ñ4Ô4Ñ5Ô5Ð5õ ˜t Z°Ñ6Ô6ˆØð 	7Ø×Ò Ô 5Ñ6Ô6Ð6ð 	×ÒÐFÐF°$×2CÒ2CÑ2EÔ2EÐFÑFÔFÑFÔFÐFàˆs�<Ñ Ô Ð r#   Úsubnamec                 óh   — |                      ¦   «         }d„ | j        D ¦   «         }|D ]	}||v r dS Œ
dS )Nc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rX   )Úlower)r[   rN   s     r"   r]   z*KeywordMatcher.__call__.<locals>.<genexpr>º   s*   è è € Ð6Ð6 $�—’‘”Ð6Ð6Ð6Ð6Ð6Ð6r#   TF)rs   rS   )Úselfrp   ÚnamesrN   s       r"   Ú__call__zKeywordMatcher.__call__¸   sM   € Ø—-’-‘/”/ˆØ6Ð6¨$¬+Ð6Ñ6Ô6ˆàð 	ð 	ˆDØ˜$ˆˆØ�t�tð àˆur#   N)rT   r   r   rR   ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   ÚstrÚ__annotations__Úclassmethodro   Úboolrv   r   r#   r"   rR   rR   †   sx   € € € € € € ðð ð €Ià˜ÔÐÐÑàð!ð !ð !ñ „[ð!ð< ð ¨ð ð ð ð ð ð r#   rR   Úitemsz
List[Item]c                 óx  — |j         j                             ¦   «         }|sd S t          |d¦  «        }g }g }| D ]Z}|                     t
                               |¦  «        ¦  «        s|                     |¦  «         ŒE|                     |¦  «         Œ[|r$|j         	                    |¬¦  «         || d d …<   d S d S )NzWrong expression passed to '-k'©r�   )
rB   r(   ÚlstripÚ_parse_expressionÚevaluaterR   ro   ÚappendÚhookÚpytest_deselected)r�   r<   ÚkeywordexprÚexprÚ	remainingÚ
deselectedÚcolitems          r"   Údeselect_by_keywordr�   Â   sÚ   € Ø”-Ô'×.Ò.Ñ0Ô0€KØð Øˆå˜[Ð*KÑLÔL€Dà€IØ€JØð &ð &ˆØ�}Š}�^×5Ò5°gÑ>Ô>Ñ?Ô?ð 	&Ø×Ò˜gÑ&Ô&Ð&Ð&à×Ò˜WÑ%Ô%Ð%Ð%àð ØŒ×%Ò%¨JÐ%Ñ7Ô7Ð7Øˆˆaˆaˆa‰ˆˆðð r#   c                   óV   — e Zd ZU dZdZee         ed<   edd„¦   «         Z	dede
fd	„Zd
S )ÚMarkMatcherzuA matcher for markers which are present.

    Tries to match on any marker names, attached to the given colitem.
    ©Úown_mark_namesr“   rT   r   r   c                 óT   — d„ |                      ¦   «         D ¦   «         } | |¦  «        S )Nc                 ó   — h | ]	}|j         ’Œ
S r   rY   rZ   s     r"   ú	<setcomp>z(MarkMatcher.from_item.<locals>.<setcomp>ã   s   € Ð@Ð@Ð@ D�d”iÐ@Ð@Ð@r#   )rj   )rk   rT   Ú
mark_namess      r"   ro   zMarkMatcher.from_itemá   s/   € à@Ð@¨D×,=Ò,=Ñ,?Ô,?Ð@Ñ@Ô@ˆ
Øˆs�:‰ŒÐr#   rN   c                 ó   — || j         v S rX   r’   )rt   rN   s     r"   rv   zMarkMatcher.__call__æ   s   € Ø�tÔ*Ð*Ð*r#   N)rT   r   r   r‘   rw   r   r#   r"   r‘   r‘   Ö   sx   € € € € € € ðð ð
 $€Ià Ô$Ð$Ð$Ñ$àðð ð ñ „[ðð+˜Sð + Tð +ð +ð +ð +ð +ð +r#   r‘   c                 óT  — |j         j        }|sd S t          |d¦  «        }g }g }| D ]Z}|                     t                               |¦  «        ¦  «        r|                     |¦  «         ŒE|                     |¦  «         Œ[|r$|j                             |¬¦  «         || d d …<   d S d S )NzWrong expression passed to '-m'rƒ   )	rB   r0   r…   r†   r‘   ro   r‡   rˆ   r‰   )r�   r<   Ú	matchexprr‹   rŒ   r�   rT   s          r"   Údeselect_by_markr›   ê   sÎ   € Ø”Ô&€IØð Øˆå˜YÐ(IÑJÔJ€DØ€IØ€JØð $ð $ˆØ�=Š=�×.Ò.¨tÑ4Ô4Ñ5Ô5ð 	$Ø×Ò˜TÑ"Ô"Ð"Ð"à×Ò˜dÑ#Ô#Ð#Ð#Øð ØŒ×%Ò%¨JÐ%Ñ7Ô7Ð7Øˆˆaˆaˆa‰ˆˆðð r#   r‹   Úexc_messagec                 ó€   — 	 t          j        | ¦  «        S # t          $ r}t          |› d| › d|› �¦  «        d ‚d }~ww xY w)Nz: )r
   Úcompiler   r   )r‹   rœ   Úes      r"   r…   r…   ü   sb   € ðBÝÔ! $Ñ'Ô'Ð'øÝð Bð Bð BÝ˜KÐ6Ð6¨4Ð6Ð6°1Ð6Ð6Ñ7Ô7¸TÐAøøøøðBøøøs   ‚ –
= 8¸=c                 óF   — t          | |¦  «         t          | |¦  «         d S rX   )r�   r›   )r�   r<   s     r"   Úpytest_collection_modifyitemsr¡     s(   € Ý˜˜vÑ&Ô&Ð&Ý�U˜FÑ#Ô#Ð#Ð#Ð#r#   c                 ó¾   — t           j        | j        t          <   | t           _        |                      t
          ¦  «        }|dvrt          t
          ›d|›�¦  «        ‚d S )N)ÚskipÚxfailÚfail_at_collectNr)   z9 must be one of skip, xfail or fail_at_collect but it is )r   Ú_configÚstashÚold_mark_config_keyrE   r   r   )r<   Úempty_parametersets     r"   Úpytest_configurerª     sn   € Ý(0Ô(8€F„LÕ$Ñ%Ø…HÔàŸšÕ'@ÑAÔAÐàÐ!OÐOÐOÝÝ(ð 1ð 1Ø,ð1ð 1ñ
ô 
ð 	
ð PÐOr#   c                 óZ   — | j                              t          d ¦  «        t          _        d S rX   )r§   Úgetr¨   r   r¦   )r<   s    r"   Úpytest_unconfigurer­     s#   € Ø”|×'Ò'Õ(;¸TÑBÔB…HÔÐÐr#   )0r{   ÚdataclassesÚtypingr   r   r   r   r   r   Ú
expressionr
   r   Ú
structuresr   r   r   r   r   r   r   rA   r   r   r   r   Ú_pytest.config.argparsingr   Ú_pytest.stashr   Ú_pytest.nodesr   Ú__all__r¨   Úobjectr}   r!   r:   ÚintrP   Ú	dataclassrR   r�   r‘   r›   r…   r¡   rª   r­   r   r#   r"   ú<module>r¹      s&  ðØ CÐ Cà Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð à "Ð "Ð "Ð "Ð "Ð "Ø "Ð "Ð "Ð "Ð "Ð "Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø %Ð %Ð %Ð %Ð %Ð %Ø %Ð %Ð %Ð %Ð %Ð %Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø #Ð #Ð #Ð #Ð #Ð #Ø #Ð #Ð #Ð #Ð #Ð #Ø %Ð %Ð %Ð %Ð %Ð %Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø "Ð "Ð "Ð "Ð "Ð "ð ð #Ø"Ð"Ð"Ð"Ð"Ð"ðð ð €ð 1�h˜x¨Ô/Ô0Ñ2Ô2Ð ð
 KMØð;ð ;ð ;Øð;à� 
¨5°ÀÐ1DÔ+EÔ FÐFÔGð;ð 	�Œð;ð ð	;ð ;ð ;ð ;ð6'W˜Vð 'W¨ð 'Wð 'Wð 'Wð 'WðT 
€�4ÐÑÔð ð ¨8°E¸#¸x¸-Ô4HÔ+Ið ð ð ñ Ôðð& Ôð8ð 8ð 8ð 8ð 8ñ 8ô 8ñ Ôð8ðv˜|ð °Vð Àð ð ð ð ð( Ôð+ð +ð +ð +ð +ñ +ô +ñ Ôð+ð&˜Lð °&ð ¸Tð ð ð ð ð$B˜Cð B¨cð B°jð Bð Bð Bð Bð$¨ð $¸vð $È$ð $ð $ð $ð $ð


˜Vð 

¨ð 

ð 

ð 

ð 

ðC˜vð C¨$ð Cð Cð Cð Cð Cð Cr#   