
    ?gsg                       S SK Jr  S SKrS SKJr  S SKJ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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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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K(J+r+  S SK,J-r-  S SK.J/r/  S SK.J0r0  S S K1J2r2  S S!K3J4r4  \(       a  S S"K5J6r6  S S#K7J8r8  S$r9\	" \Rt                  5      Rv                  r<\" S%5      r=        S:S& jr>\" S'S(S)9r? " S* S+\R                  5      rA " S, S(\R                  \AS-9rCS;S. jrD " S/ S0\C\R                  5      rES<S1 jrF " S2 S3\E\R                  5      rG " S4 S5\G\R                  5      rH " S6 S7\G\R                  5      rI " S8 S9\C\R                  5      rJg)=    )annotationsN)cached_property)	signature)Path)Any)Callable)cast)Iterable)Iterator)MutableMapping)NoReturn)overload)TYPE_CHECKING)TypeVar)getfslineno)ExceptionInfo)TerminalRepr)	Traceback)TracebackStyle)LEGACY_PATH)Config)ConftestImportFailure)_check_path)NODE_CTOR_FSPATH_ARG)Mark)MarkDecorator)NodeKeywords)fail)absolutepath)
commonpath)Stash)PytestWarning)Self)Session/_Tc                    Ub1  [         R                  " [        R                  " U R                  S9SS9  Ub  Ub  [        X5        U$ Uc   e[        U5      $ )N)node_type_name   )
stacklevel)warningswarnr   format__name__r   r   )	node_typepathfspaths      //usr/lib/python3/dist-packages/_pytest/nodes.py_imply_pathr3   <   sc    
  ''(11 		
 %!!!F|    	_NodeTypeNode)boundc                  :   ^  \ rS rSrSrSS jrSU 4S jjrSrU =r$ )NodeMetaT   a  Metaclass used by :class:`Node` to enforce that direct construction raises
:class:`Failed`.

This behaviour supports the indirection introduced with :meth:`Node.from_parent`,
the named constructor to be used instead of direct construction. The design
decision to enforce indirection with :class:`NodeMeta` was made as a
temporary aid for refactoring the collection tree, which was diagnosed to
have :class:`Node` objects whose creational patterns were overly entangled.
Once the refactoring is complete, this metaclass can be removed.

See https://github.com/pytest-dev/pytest/projects/3 for an overview of the
progress on detangling the :class:`Node` classes.
c                h    SR                  U R                   SU R                   3S9n[        USS9  g )NzDirect construction of {name} has been deprecated, please use {name}.from_parent.
See https://docs.pytest.org/en/stable/deprecations.html#node-construction-changed-to-node-from-parent for more details..nameF)pytrace)r-   
__module__r.   r   )clskkwmsgs       r2   __call__NodeMeta.__call__c   s:    ! &(#,,8&
9 	 	S% r4   c           
     j  >  [         TU ]  " U0 UD6$ ! [         a    [        [	        U S5      5      nUR                  5        VVs0 s H  u  pXR                  ;   d  M  X_M     Os  snnf nnnSSKJn  [        R                  " U" U  S[        U5       S35      5        [         TU ]  " W0 UD6s $ f = f)N__init__   )PytestDeprecationWarningz7 is not using a cooperative constructor and only takes z.
See https://docs.pytest.org/en/stable/deprecations.html#constructors-of-custom-pytest-node-subclasses-should-take-kwargs for more details.)superrE   	TypeErrorr   getattritems
parameterswarning_typesrJ   r+   r,   set)rA   rB   rC   sigvknown_kwrJ   	__class__s          r2   _createNodeMeta._createl   s    	47#Q-"-- 	4GC45C)+KqNN7JKHK?MM(eRSVW_S`Ra b( ( 7#Q3(33	4s"    2B2A%A%$AB21B2 )returnr   )rA   ztype[_T]rY   r&   )	r.   r@   __qualname____firstlineno____doc__rE   rV   __static_attributes____classcell__rU   s   @r2   r9   r9   T   s    !4 4r4   r9   c                     \ rS rSr% SrS\S'   Sr      S                S!S jjr\S"S j5       r	\
S#S	 j5       rS$S
 jrS%S jr\
S$S j5       rS&S jrS'S jrS'S jrS(S jrS)S jrS*S+S jjrS,S-S jjr S,   S.S jjr\S/S j5       r\S0S j5       rS,S1S jjrS2S jrS3S jrS4S jrS5S jrS6S jr S,     S7S jjr S,     S8S jjrSr g)9r6      zBase class of :class:`Collector` and :class:`Item`, the components of
the test collection tree.

``Collector``\'s are the internal nodes of the tree, and ``Item``\'s are the
leaf nodes.
r   r1   )r>   parentconfigsessionr0   _nodeid_store__dict__Nc                t   Xl         X l        U(       a  X0l        O#U(       d  [        S5      eUR                  U l        U(       a  X@l        O#U(       d  [        S5      eUR                  U l        Uc  Uc  [        USS 5      n[        [        U 5      XeS9U l        [        U 5      U l
        / U l        [        5       U l        Ub  SU;  d   eXpl        OGU R                  (       d  [        S5      eU R                  R                  S-   U R                   -   U l        [!        5       U l        U R"                  U l        g )Nz!config or parent must be providedz"session or parent must be providedr0   r1   z::()z!nodeid or parent must be providedz::)r>   rb   rc   rL   rd   rM   r3   typer0   r   keywordsown_markersrQ   extra_keyword_matchesre   nodeidr!   stashrf   )selfr>   rb   rc   rd   r1   r0   rn   s           r2   rH   Node.__init__   s    	 "(K CDD --DK$+L DEE!>>DL<FN6640D"-d4j$"N	 3?t2D (* 03u"'''!L;; CDD;;--4tyy@DL "G
jjr4   c                n    SU;   a  [        S5      eSU;   a  [        S5      eU R                  " SSU0UD6$ )a
  Public constructor for Nodes.

This indirection got introduced in order to enable removing
the fragile logic from the node constructors.

Subclasses can use ``super().from_parent(...)`` when overriding the
construction.

:param parent: The parent node of this Node.
rc   z.config is not a valid argument for from_parentrd   z/session is not a valid argument for from_parentrb   rX   )rL   rV   )rA   rb   rC   s      r2   from_parentNode.from_parent   sA     r>LMM?MNN{{/&/B//r4   c                L    U R                   R                  U R                  5      $ )z6fspath-sensitive hook proxy used to call pytest hooks.)rd   gethookproxyr0   rp   s    r2   ihook
Node.ihook   s     ||((33r4   c                d    SR                  U R                  R                  [        U SS 5      5      $ )Nz<{} {}>r>   )r-   rU   r.   rM   rw   s    r2   __repr__Node.__repr__   s(     7 7vt9TUUr4   c                    [        U[        5      (       d  [        SU< 35      e[        U 5      u  p#Uc   e[        R
                  " US[        U5      US-   S9  g)a  Issue a warning for this Node.

Warnings will be displayed after the test session, unless explicitly suppressed.

:param Warning warning:
    The warning instance to issue.

:raises ValueError: If ``warning`` instance is not a subclass of Warning.

Example usage:

.. code-block:: python

    node.warn(PytestWarning("some message"))
    node.warn(UserWarning("some message"))

.. versionchanged:: 6.2
    Any subclass of :class:`Warning` is now accepted, rather than only
    :class:`PytestWarning <pytest.PytestWarning>` subclasses.
z8warning must be an instance of Warning or subclass, got NrI   )categoryfilenamelineno)
isinstanceWarning
ValueErrorget_fslocation_from_itemr+   warn_explicitstr)rp   warningr0   r   s       r2   r,   	Node.warn   sd    , '7++J7+V  05!!!YA:		
r4   c                    U R                   $ )z;A ::-separated string denoting its collection tree address.)re   rw   s    r2   rn   Node.nodeid  s     ||r4   c                ,    [        U R                  5      $ N)hashre   rw   s    r2   __hash__Node.__hash__  s    DLL!!r4   c                    g r   rX   rw   s    r2   setup
Node.setup       r4   c                    g r   rX   rw   s    r2   teardownNode.teardown#  r   r4   c              #  B   #    U nUb  Uv   UR                   nUb  M  gg7f)zIterate over all parent collectors starting from and including self
up to the root of the collection tree.

.. versionadded:: 8.1
N)rb   )rp   rb   s     r2   iter_parentsNode.iter_parents&  s(      # L]]F  s   c                x    / nU nUb"  UR                  U5        UR                  nUb  M"  UR                  5         U$ )zpReturn a list of all parent collectors starting from the root of the
collection tree down to and including self.)appendrb   reverse)rp   chainitems      r2   	listchainNode.listchain1  sA      LL;;D  	r4   c                n   SSK Jn  [        U[        5      (       a  UnO,[        U[        5      (       a  [        X15      nO[        S5      eX@R                  UR                  '   U(       a&  U R                  R                  UR                  5        gU R                  R                  SUR                  5        g)zDynamically add a marker object to the node.

:param marker:
    The marker.
:param append:
    Whether to append the marker, or prepend it.
r   )MARK_GENz'is not a string or pytest.mark.* MarkerN)_pytest.markr   r   r   r   rM   r   rk   r>   rl   r   markinsert)rp   markerr   r   marker_s        r2   
add_markerNode.add_marker<  s     	*fm,,G$$h/GFGG&-gll###GLL1##Aw||4r4   c                .    S U R                  US9 5       $ )zIterate over all markers of the node.

:param name: If given, filter the results by the name attribute.
:returns: An iterator of the markers of the node.
c              3  *   #    U  H	  oS    v   M     g7f)rI   NrX   ).0xs     r2   	<genexpr>$Node.iter_markers.<locals>.<genexpr>X  s     ED!Ds   r=   )iter_markers_with_noderp   r>   s     r2   iter_markersNode.iter_markersR  s     Fd99t9DEEr4   c              #     #    U R                  5        H1  nUR                   H  nUb  [        USS5      U:X  d  M  X#4v   M      M3     g7f)zIterate over all markers of the node.

:param name: If given, filter the results by the name attribute.
:returns: An iterator of (node, mark) tuples.
Nr>   )r   rl   rM   )rp   r>   noder   s       r2   r   Node.iter_markers_with_nodeZ  sG      %%'D((<74#>$#F*$ ) (s
   5A	A	c                    g r   rX   r   s     r2   get_closest_markerNode.get_closest_markerg  s    <?r4   c                    g r   rX   rp   r>   defaults      r2   r   r   j  s    DGr4   c                4    [        U R                  US9U5      $ )zReturn the first marker matching the name, from closest (for
example function) to farther level (for example module level).

:param default: Fallback return value if no marker was found.
:param name: Name to filter by.
r=   )nextr   r   s      r2   r   r   m  s     D%%4%0'::r4   c                ~    [        5       nU R                  5        H  nUR                  UR                  5        M      U$ )z;Return a set of all extra keywords in self and any parents.)rQ   r   updaterm   )rp   extra_keywordsr   s      r2   listextrakeywordsNode.listextrakeywordsv  s4    #&5NN$D!!$"<"<= %r4   c                `    U R                  5        Vs/ s H  oR                  PM     sn$ s  snf r   )r   r>   )rp   r   s     r2   	listnamesNode.listnames}  s%     $ 01 01 0111s   +c                N    U R                   R                  R                  X5        g)zRegister a function to be called without arguments when this node is
finalized.

This method can only be called when this node is active
in a setup chain, for example during self.setup().
N)rd   _setupstateaddfinalizer)rp   fins     r2   r   Node.addfinalizer  s     	  --c8r4   c                Z    U R                  5        H  n[        X!5      (       d  M  Us  $    g)zGet the closest parent node (including self) which is an instance of
the given class.

:param cls: The node class to search for.
:returns: The node, if found.
N)r   r   )rp   rA   r   s      r2   	getparentNode.getparent  s,     %%'D$$$ ( r4   c                    UR                   $ r   )	traceback)rp   excinfos     r2   _traceback_filterNode._traceback_filter  s       r4   c           
        SSK Jn  [        UR                  [        5      (       a*  [
        R                  " UR                  R                  5      n[        UR                  [        R                  5      (       a  UR                  R                  (       d  Sn[        UR                  U5      (       a  UR                  R                  5       $ U R                  R                  SS5      (       a  SnSnOU R                  nUS:X  a  SnUc%  U R                  R                  SS5      S	:X  a  S	nOSnU R                  R                  5       S
:  a  SnOSnU R                  R                  5       S:  a  SOSn [!        ["        R$                  " 5       5      U R                  R&                  R(                  :g  nUR-                  SUU R                  R                  SS5      UUUUS9$ ! [*         a    Sn N=f = f)Nr   )FixtureLookupErrorvalue	fulltraceFlongautotbstyleshortrI   T   
showlocals)funcargsabspathr   styletbfiltertruncate_localstruncate_args)_pytest.fixturesr   r   r   r   r   from_exceptioncauser   	Exceptionr?   
formatreprrc   	getoptionr   get_verbosityr   osgetcwdinvocation_paramsdirOSErrorgetrepr)rp   r   r   r   r   r   r   r   s           r2   _repr_failure_pyNode._repr_failure_py  s   
 	8gmm%:;;#227==3F3FGGgmmT^^44==((gmm%788==++-- ;;  e44EH--H={{$$Y77B;;$$&*#O"O!%!:!:!<q!@d	299;'4;;+H+H+L+LLG {{,,\5A+'  
 	
  	G	s   3?G! !G0/G0c                $    U R                  X5      $ )zReturn a representation of a collection or test failure.

.. seealso:: :ref:`non-python tests`

:param excinfo: Exception information for the failure.
)r   )rp   r   r   s      r2   repr_failureNode.repr_failure  s     $$W44r4   )re   rf   rc   rm   rk   r>   rl   rb   r0   rd   ro   )NNNNNN)r>   r   rb   Node | Nonerc   Config | Nonerd   Session | Noner1   LEGACY_PATH | Noner0   Path | Nonern   
str | NonerY   None)rb   r6   rY   r#   )rY   zpluggy.HookRelay)rY   r   )r   r   rY   r   )rY   intrY   r   )rY   zIterator[Node])rY   z
list[Node])T)r   zstr | MarkDecoratorr   boolrY   r   r   )r>   r   rY   zIterator[Mark])r>   r   rY   zIterator[tuple[Node, Mark]])r>   r   rY   Mark | None)r>   r   r   r   rY   r   )r>   r   r   r   rY   r   )rY   zset[str])rY   z	list[str])r   zCallable[[], object]rY   r   )rA   ztype[_NodeType]rY   z_NodeType | Noner   ExceptionInfo[BaseException]rY   r   )r   r  r   TracebackStyle | NonerY   r   )r   r  r   r  rY   str | TerminalRepr)!r.   r@   rZ   r[   r\   __annotations__	__slots__rH   classmethodrs   propertyrx   r{   r,   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r]   rX   r4   r2   r6   r6      s    	I # $"&%) !;!;! ;! 	;!
  ;! #;! ;! ;! 
;!z 0 0" 4 4V!
J  "	#	5,F "&%%	$% ? ?G G;29
! (,8
-8
 %8
 
	8
z (,5-5 %5 
	5 5r4   )	metaclassc                    [        U SS5      nUb  USS $ [        U SS5      nUb  [        U5      $ [        U SS5      S4$ )a  Try to extract the actual location from a node, depending on available attributes:

* "location": a pair (path, lineno)
* "obj": a Python object that the node wraps.
* "path": just a path

:rtype: A tuple of (str|Path, int) with filename and 0-based line number.
locationNr   objr0   zunknown location)rM   r   )r   r  r  s      r2   r   r     sW     4;4T3RH|
$t
$C
34!34b88r4   c                  r    \ rS rSrSr " S S\5      r\R                  S
S j5       r	    SS jr
SS jrSrg	)	Collectori  z}Base class of all collectors.

Collector create children through `collect()` and thus iteratively build
the collection tree.
c                      \ rS rSrSrSrg)Collector.CollectErrori  z6An error during collection, contains a custom message.rX   Nr.   r@   rZ   r[   r\   r]   rX   r4   r2   CollectErrorr    s    Dr4   r  c                    [        S5      e)z;Collect children (items and collectors) for this collector.abstractNotImplementedErrorrw   s    r2   collectCollector.collect  s     "*--r4   c                <   [        UR                  U R                  5      (       aE  U R                  R	                  SS5      (       d$  UR                  n[        UR                  S   5      $ U R                  R	                  SS5      nUS:X  a  SnU R                  XS9$ )ziReturn a representation of a collection failure.

:param excinfo: Exception information for the failure.
r   Fr   r   r   r   )r   )r   r   r  rc   r   r   argsr   )rp   r   excr   s       r2   r   Collector.repr_failure  s     gmmT%6%677@U@UA
 A
 --Csxx{## ++''	6:fG$$W$<<r4   c                    [        U S5      (       aN  UR                  nUR                  U R                  S9nX2:X  a  UR                  [        S9nUR                  U5      $ UR                  $ )Nr0   r0   )excludepath)hasattrr   cutr0   tracebackcutdirfilter)rp   r   r   
ntracebacks       r2   r   Collector._traceback_filter  sa    4  ))I"DII6J&'^^^H
$$W--   r4   rX   N)rY   zIterable[Item | Collector])r   r  rY   r  r  )r.   r@   rZ   r[   r\   r   r  abcabstractmethodr  r   r   r]   rX   r4   r2   r  r    sI    Ey E 	. .
=3=	=*!r4   r  c                    U R                    H:  n[        X5      U:X  d  M  [        UR                  U5      5      nUS:X  a  Ss  $ Us  $    g )Nr<    )_initialpathsr    r   relative_to)rd   r0   initial_pathrels       r2   _check_initialpaths_for_relpathr/  "  sJ    --d)\9d&&|45C2,, . r4   c                     ^  \ rS rSrSr        S                 S	U 4S jjjr\SSS.     S
U 4S jjj5       rSrU =r	$ )FSCollectori*  z%Base class for filesystem collectors.Nc	           	     N  > U(       aG  [        U[        5      (       a  Ub   e[        [        U5      nO[        U[        5      (       a  Ub   eUn[        [        U 5      X1S9nUcj  UR                  nUb[  UR                  U:w  aK   UR                  UR                  5      n	[        U	5      nUR                  [        R                  [        5      nX0l        Uc  Uc   eUR                   nUc|   [        U R                  R                  UR"                  R$                  5      5      nU(       a<  [        R                  [        :w  a$  UR                  [        R                  [        5      n[(        T
U ]U  UUUUUUS9  g ! [         a     Nf = f! [         a    ['        Xs5      n N}f = f)Nri   )r>   rb   rc   rd   rn   r0   )r   r6   r	   r1  r   r3   rj   r>   r0   r,  r   r   replacer   sepSEPrd   rc   rootpathr/  rK   rH   )rp   r1   path_or_parentr0   r>   rb   rc   rd   rn   r.  rU   s             r2   rH   FSCollector.__init__-  sr    .$//~%~k>:ND11|#|%4:t;<99D!fkkT&9$**6;;7C s8D||BFFC0	?%%%nnG>HTYY227>>3J3JKL "&&C-4 	 	
) "   H8GHs$   E< .8F <
F	F	F$#F$)r1   r0   c               *   > [         TU ]  " SXUS.UD6$ )zThe public constructor.)rb   r1   r0   rX   )rK   rs   )rA   rb   r1   r0   rC   rU   s        r2   rs   FSCollector.from_parentc  s     w"Q&dQbQQr4   r  )NNNNNNNN)r1   r   r7  zPath | Node | Noner0   r   r>   r   rb   r   rc   r   rd   r   rn   r   rY   r   )r1   r   r0   r   rY   r#   )
r.   r@   rZ   r[   r\   rH   r  rs   r]   r^   r_   s   @r2   r1  r1  *  s    / &*-1 " $"&!4
"4
 +4
 	4

 4
 4
 4
  4
 4
 
4
 4
l 
 &* 	R #		R
 	R 
	R 	Rr4   r1  c                      \ rS rSrSrSrg)Fileip  zGBase class for collecting tests from a file.

:ref:`non-python tests`.
rX   Nr  rX   r4   r2   r<  r<  p  s    r4   r<  c                      \ rS rSrSrSrg)	Directoryiw  a  Base class for collecting files from a directory.

A basic directory collector does the following: goes over the files and
sub-directories in the directory and creates collectors for them by calling
the hooks :hook:`pytest_collect_directory` and :hook:`pytest_collect_file`,
after checking that they are not ignored using
:hook:`pytest_ignore_collect`.

The default directory collectors are :class:`~pytest.Dir` and
:class:`~pytest.Package`.

.. versionadded:: 8.0

:ref:`custom directory collectors`.
rX   Nr  rX   r4   r2   r>  r>  w  s    r4   r>  c                     ^  \ rS rSrSrSr    S       SU 4S jjjrSS jr\R                  SS j5       r
SS jrSS jr\SS	 j5       rS
rU =r$ )Itemi  zyBase class of all test invocation items.

Note that for a single function there might be multiple test invocation items.
Nc                n   > [         TU ]  " UU4UUUS.UD6  / U l        / U l        U R	                  5         g )N)rc   rd   rn   )rK   rH   _report_sectionsuser_properties-_check_item_and_collector_diamond_inheritance)rp   r>   rb   rc   rd   rn   rC   rU   s          r2   rH   Item.__init__  sR     		
 	
 	
 =? :<::<r4   c                   [        U 5      nSn[        XS5      (       a  g[        XS5        SR                  S UR                   5       5      nU(       a,  [
        R                  " UR                   SU S3[        5        gg)	z{
Check if the current type inherits from both File and Collector
at the same time, emitting a warning accordingly (#8447).
)_pytest_diamond_inheritance_warning_shownFNTz, c              3  h   #    U  H(  n[        U[        5      (       d  M  UR                  v   M*     g 7fr   )
issubclassr  r.   )r   bases     r2   r   EItem._check_item_and_collector_diamond_inheritance.<locals>.<genexpr>  s"      
&3dz$	7RMDMMms   22zF is an Item subclass and should not be a collector, however its bases z are collectors.
Please split the Collectors and the Item into separate node types.
Pytest Doc example: https://docs.pytest.org/en/latest/example/nonpython.html
example pull request on a plugin: https://github.com/asmeurer/pytest-flakes/pull/40/)	rj   rM   setattrjoin	__bases__r+   r,   r.   r"   )rp   rA   	attr_nameproblemss       r2   rD  2Item._check_item_and_collector_diamond_inheritance  s    
 4j @	35))%99 
&)mm
 
 MM<<. !%%-J /gg
  r4   c                    [        S5      e)zkRun the test case for this item.

Must be implemented by subclasses.

.. seealso:: :ref:`non-python tests`
z,runtest must be implemented by Item subclassr  rw   s    r2   runtestItem.runtest  s     ""PQQr4   c                N    U(       a  U R                   R                  XU45        gg)a  Add a new report section, similar to what's done internally to add
stdout and stderr captured output::

    item.add_report_section("call", "stdout", "report section contents")

:param str when:
    One of the possible capture states, ``"setup"``, ``"call"``, ``"teardown"``.
:param str key:
    Name of the section, can be customized at will. Pytest uses ``"stdout"`` and
    ``"stderr"`` internally.
:param str content:
    The full contents as a string.
N)rB  r   )rp   whenkeycontents       r2   add_report_sectionItem.add_report_section  s%     !!(($W)=> r4   c                     U R                   SS4$ )a   Get location information for this item for test reports.

Returns a tuple with three elements:

- The path of the test (default ``self.path``)
- The 0-based line number of the test (default ``None``)
- A name of the test to be shown (default ``""``)

.. seealso:: :ref:`non-python tests`
Nr*  r  rw   s    r2   
reportinfoItem.reportinfo  s     yy$""r4   c                    U R                  5       n[        US   5      nU R                  R                  U5      n[	        US   5      [
        L d   eX1S   US   4$ )z
Returns a tuple of ``(relfspath, lineno, testname)`` for this item
where ``relfspath`` is file path relative to ``config.rootpath``
and lineno is a 0-based line number.
r   r   rI   )r\  r   rd   _node_location_to_relpathrj   r   )rp   r  r0   	relfspaths       r2   r  Item.location  s\     ??$HQK(LL::4@	HQK C'''A;44r4   )rB  rC  )NNNN)rc   r   rd   r   rn   r   rY   r   r   )rV  r   rW  r   rX  r   rY   r   )rY   z.tuple[os.PathLike[str] | str, int | None, str])rY   ztuple[str, int | None, str])r.   r@   rZ   r[   r\   nextitemrH   rD  r'  r(  rS  rY  r\  r   r  r]   r^   r_   s   @r2   r@  r@    s    
 H
  $"&!= 	=
  = = 
= =:: 	R R?"# 
5 
5r4   r@  )r/   z
type[Node]r0   r   r1   r   rY   r   )r   r6   rY   ztuple[str | Path, int | None])rd   r$   r0   r   rY   r   )K
__future__r   r'  	functoolsr   inspectr   r   pathlibr   typingr   r   r	   r
   r   r   r   r   r   r   r+   pluggy_pytest._code_pytestr   _pytest._code.coder   r   r   r   _pytest.compatr   _pytest.configr   r   _pytest.config.compatr   _pytest.deprecatedr   _pytest.mark.structuresr   r   r   _pytest.outcomesr   _pytest.pathlibr   r    _pytest.stashr!   _pytest.warning_typesr"   typing_extensionsr#   _pytest.mainr$   r5  __file__rb   r#  r&   r3   r5   ABCMetar9   ABCr6   r   r  r/  r1  r<  r>  r@  rX   r4   r2   <module>rz     su   " 
 %  	        !         % , + ( - & ! 0 - 3 ( 1 0 ! ( &  / & % 
w''(// T]
  
	* Kv.	)4s{{ )4X]5377h ]5@9&,!cgg ,!^CR)SWW CRL; SWW $u54 u5r4   