
    [Fi%"              
          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jN                   G d( d)             Z(d*d+d&ed dfd,Z)ejN                   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/y)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      g/var/www/html/BankruptcyAI-uat/bankruptcy-ai/venv/lib/python3.12/site-packages/_pytest/mark/__init__.pyr!   r!   -   s    0 vUr::    parserc                     | j                  d      }|j                  dddddd       |j                  d	dd
ddd       |j                  ddd       | j                  ddd       | j                  t        d       y )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    OOI&E	,  ( 
1   
OOC   MM)F
S
MM+-UVr#   T)tryfirstconfigc                    dd l }| j                  j                  r| j                          |j                  j                  |       }| j                  d      D ]e  }|j                  dd      }|d   }t        |      dk(  r|d   nd}|j                  d|z  d	       |j                  |       |j                          g | j                          yy )
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26:MM), 	DJJsA&E8D"5zQ58BDHH'$.TH:GGDMGGI	 	""$r#   c                   H    e Zd ZU dZdZee   ed<   ed	d       Z	dede
fdZy)
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   r   c                    t               }dd l}|j                         D ]k  }t        ||j                        rt        ||j
                        r!t        |j                  |j                        rQ|j                  |j                         m |j                  |j                                t        |dd       }|r|j                  |j                         |j                  d |j                         D                | |      S )Nr   functionc              3   4   K   | ]  }|j                     y wN)rN   ).0marks     r"   	<genexpr>z+KeywordMatcher.from_item.<locals>.<genexpr>   s     F$DIIFs   )setpytest	listchain
isinstanceSession	DirectoryparentaddrN   updatelistextrakeywordsgetattr__dict__iter_markers)clsitemmapped_namesr\   nodefunction_objs         r"   	from_itemzKeywordMatcher.from_item   s    u
 	NN$ 	(D$/$ 0 01jV^^7 TYY'	( 	D2245 tZ6 5 56 	F$2C2C2EFF<  r#   subnamec                 d    |j                         }d | j                  D        }|D ]  }||v s y y)Nc              3   <   K   | ]  }|j                           y wrW   )lower)rX   rN   s     r"   rZ   z*KeywordMatcher.__call__.<locals>.<genexpr>   s     6$6s   TF)rq   rS   )selfrn   namesrN   s       r"   __call__zKeywordMatcher.__call__   s9    --/6$++6 	D$	 r#   N)ri   r   r   rR   __name__
__module____qualname____doc__	__slots__r   str__annotations__classmethodrm   boolrt   r   r#   r"   rR   rR      s>     I! !<  r#   rR   itemsz
List[Item]c                 V   |j                   j                  j                         }|sy t        |d      }g }g }| D ]I  }|j	                  t
        j                  |            s|j                  |       9|j                  |       K |r"|j                  j                  |       || d d  y y )NzWrong expression passed to '-k'r   )
rB   r(   lstrip_parse_expressionevaluaterR   rm   appendhookpytest_deselected)r   r<   keywordexprexpr	remaining
deselectedcolitems          r"   deselect_by_keywordr      s    --''..0K[*KLDIJ &}}^55g>?g&W%	& %%J%7a r#   c                   H    e Zd ZU dZdZee   ed<   ed	d       Z	dede
fdZy)
MarkMatcherzuA matcher for markers which are present.

    Tries to match on any marker names, attached to the given colitem.
    own_mark_namesr   r   c                 j    |j                         D ch c]  }|j                   }} | |      S c c}w rW   )rg   rN   )rh   ri   rY   
mark_namess       r"   rm   zMarkMatcher.from_item   s2    ,0,=,=,?@Ddii@
@: As   0rN   c                     || j                   v S rW   r   )rr   rN   s     r"   rt   zMarkMatcher.__call__   s    t****r#   N)ri   r   r   r   ru   r   r#   r"   r   r      s>    
 $I$$ +S +T +r#   r   c                 :   |j                   j                  }|sy t        |d      }g }g }| D ]I  }|j                  t        j                  |            r|j                  |       9|j                  |       K |r"|j                  j                  |       || d d  y y )NzWrong expression passed to '-m'r   )	rB   r0   r   r   r   rm   r   r   r   )r   r<   	matchexprr   r   r   ri   s          r"   deselect_by_markr      s    &&IY(IJDIJ $==..t45T"d#	$
 %%J%7a r#   r   exc_messagec                 x    	 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      sI    B!!$'' BK=4&1#67TABs    	949c                 4    t        | |       t        | |       y rW   )r   r   )r   r<   s     r"   pytest_collection_modifyitemsr     s    v&UF#r#   c                     t         j                  | j                  t        <   | t         _        | j	                  t
              }|dvrt        t
        d|      y )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     sa    (0(8(8FLL$%H'@A!OO(+ ,,/1
 	
 Pr#   c                 V    | j                   j                  t        d       t        _        y rW   )r   getr   r   r   )r<   s    r"   pytest_unconfigurer     s    ||''(;TBHr#   )0ry   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         " " 1 3    % % $ ! # # % , " " 1hx/02 
 KM;;
51D+E FFG; 	; 	;6'WV 'W 'WT 
4 8E#x-4H+I  & 8 8 8v| V  ( + + +&L & T $BC Bc Bj B$ $v $$ $


V 

 

Cv C$ Cr#   