+
    -jg                       ^ RI Ht ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIH	t	 ^ RIH
t
 ^ RIt^ RIt^ R	IHt ^ R
IHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIH t  ^ RIH!t! ^ RI"H#t# ^ RI"H$t$ ^ RI%H&t& ^ RI'H(t( ^ RI)H*t* ^ RI)H+t+ ^ RI)H,t, ^ RI-H.t. ^ RI/H0t0 ^ R I1H2t2 ^ R!I3H4t4 ]'       d   ^ R"I5H6t6 ^ R#I7H8t8 R$t9]! ]Pt                  4      Pv                  t<]! R%4      t=R& R' lt>]! R(R)R*7      t? ! R+ R,]P                  4      tA ! R- R)]P                  ]AR.7      tCR/ R0 ltD ! R1 R2]C]P                  4      tE]
! R3R47      R5 R6 l4       tF ! R7 R8]E]P                  4      tG ! R9 R:]G]P                  4      tH ! R; R<]G]P                  4      tI ! R= R>]C]P                  4      tJR# )?    )annotationsN)Callable)Iterable)Iterator)MutableMapping)cached_property)	lru_cache)Path)Any)cast)NoReturn)overload)TYPE_CHECKING)TypeVar)getfslineno)ExceptionInfo)TerminalRepr)	Traceback)TracebackStyle)LEGACY_PATH)	signature)Config)ConftestImportFailure)_check_path)NODE_CTOR_FSPATH_ARG)Mark)MarkDecorator)NodeKeywords)fail)absolutepath)Stash)PytestWarning)Self)Session/_Tc               (    V ^8  d   QhRRRRRRRR/# )	   	node_typez
type[Node]pathPath | NonefspathLEGACY_PATH | Nonereturnr
    )formats   "b/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/_pytest/nodes.py__annotate__r2   <   s0      
  
	    c                    Ve8   \         P                  ! \        P                  ! V P                  R7      ^R7       Ve   Ve   \        W4       V# Vf   Q h\        V4      # )N)node_type_name)
stacklevel)warningswarnr   r0   __name__r   r
   )r)   r*   r,   s   &&&r1   _imply_pathr:   <   sc    
  ''(11 		
 %!!!F|r3   	_NodeTypeNode)boundc                  >   a  ] tR t^TtRtR R ltR V 3R lltRtV ;t# )NodeMetaa  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                   V ^8  d   QhRR/# )r(   r.   r   r/   )r0   s   "r1   r2   NodeMeta.__annotate__c   s     ! !8 !r3   c                	v    R P                  V P                   RV P                   2R7      p\        VRR7       R# )zDirect 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)pytraceN)r0   
__module__r9   r   )clskkwmsgs   &*, r1   __call__NodeMeta.__call__c   s:    ! &(#,,8&
9 	 	S% r3   c                    V ^8  d   QhRRRR/# )r(   rH   ztype[_T]r.   r&   r/   )r0   s   "r1   r2   rA   l   s     4 4X 4B 4r3   c           
     	l  <  \         SV `  ! V/ VB #   \         d    \        \	        T R 4      4      pTP                  4        UUu/ uF  w  rYP                  9   g   K  YbK  	  Mu uppi ppp^RIHp \        P                  ! T! T  R\        T4       R24      4       \         ST `  ! X/ TB u # i ; i)__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.)superrL   	TypeErrorr   getattritems
parameterswarning_typesrQ   r7   r8   set)rH   rI   rJ   sigvknown_kwrQ   	__class__s   &*,    r1   _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"    3B3A&A&%AB32B3r/   )	r9   rG   __qualname____firstlineno____doc__rL   r]   __static_attributes____classcell__r\   s   @r1   r?   r?   T   s    !4 4r3   r?   c                     ] tR t^t$ RtR]R&   R6tR7R R llt]R R l4       t	]
R	 R
 l4       tR R ltR R lt]
R R l4       tR R ltR R ltR R ltR R ltR R ltR8R R lltR9R R lltR9R R  llt]R! R" l4       t]R# R$ l4       tR9R% R& lltR' R( ltR) R* ltR+ R, ltR- R. ltR/ R0 ltR9R1 R2 lltR9R3 R4 lltR5t R# ):r<   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   r,   Nc               8    V ^8  d   QhRRRRRRRRR	R
RRRRRR/# )r(   rE   strparentNode | NoneconfigConfig | NonesessionSession | Noner,   r-   r*   r+   nodeid
str | Noner.   Noner/   )r0   s   "r1   r2   Node.__annotate__   sZ     ;! ;!;! ;! 	;!
  ;! #;! ;! ;! 
;!r3   c                	   Wn         W n        V'       d   W0n        M$V'       g   \        R 4      hVP                  V n        V'       d   W@n        M$V'       g   \        R4      hVP                  V n        Vf   Vf   \        VRR4      p\        \        V 4      WeR7      V n        \        V 4      V n
        . V n        \        4       V n        Ve   RV9  g   Q hWpn        MPV P                  '       g   \        R4      hV P                  P                  R,           V P                   ,           V n        \!        4       V n        V P"                  V n        R# )z!config or parent must be providedz"session or parent must be providedNr*   r,   z::()z!nodeid or parent must be providedz::)rE   rh   rj   rS   rl   rT   r:   typer*   r   keywordsown_markersrX   extra_keyword_matches_nodeidrn   r!   stash_store)selfrE   rh   rj   rl   r,   r*   rn   s   &&&&&&&&r1   rP   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r3   c                    V ^8  d   QhRRRR/# )r(   rh   r<   r.   r#   r/   )r0   s   "r1   r2   rq      s     0 0 0 0r3   c                r    RV9   d   \        R4      hRV9   d   \        R4      hV P                  ! RRV/VB # )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.
rj   z.config is not a valid argument for from_parentrl   z/session is not a valid argument for from_parentrh   r/   )rS   r]   )rH   rh   rJ   s   &&,r1   from_parentNode.from_parent   sA     r>LMM?MNN{{/&/B//r3   c                   V ^8  d   QhRR/# )r(   r.   zpluggy.HookRelayr/   )r0   s   "r1   r2   rq      s     4 4' 4r3   c                L    V P                   P                  V P                  4      # )z6fspath-sensitive hook proxy used to call pytest hooks.)rl   gethookproxyr*   r{   s   &r1   ihook
Node.ihook   s     ||((33r3   c                   V ^8  d   QhRR/# r(   r.   rg   r/   )r0   s   "r1   r2   rq      s     V V# Vr3   c                	d    R P                  V P                  P                  \        V RR4      4      # )z<{} {}>rE   N)r0   r\   r9   rT   r   s   &r1   __repr__Node.__repr__   s(     7 7vt9TUUr3   c                    V ^8  d   QhRRRR/# )r(   warningWarningr.   rp   r/   )r0   s   "r1   r2   rq      s     !
 !
G !
 !
r3   c                    \        V\        4      '       g   \        RV: 24      h\        V 4      w  r#Vf   Q h\        P
                  ! VR\        V4      V^,           R7       R# )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 N)categoryfilenamelineno)
isinstancer   
ValueErrorget_fslocation_from_itemr7   warn_explicitrg   )r{   r   r*   r   s   &&  r1   r8   	Node.warn   sd    , '7++J7+V  05!!!YA:		
r3   c                   V ^8  d   QhRR/# r   r/   )r0   s   "r1   r2   rq     s       r3   c                    V P                   # )z;A ::-separated string denoting its collection tree address.)rx   r   s   &r1   rn   Node.nodeid  s     ||r3   c                   V ^8  d   QhRR/# )r(   r.   intr/   )r0   s   "r1   r2   rq     s     " "# "r3   c                	,    \        V P                  4      # N)hashrx   r   s   &r1   __hash__Node.__hash__  s    DLL!!r3   c                   V ^8  d   QhRR/# r(   r.   rp   r/   )r0   s   "r1   r2   rq      s      t r3   c                	    R # r   r/   r   s   &r1   setup
Node.setup       r3   c                   V ^8  d   QhRR/# r   r/   )r0   s   "r1   r2   rq   #  s      $ r3   c                	    R # r   r/   r   s   &r1   teardownNode.teardown#  r   r3   c                   V ^8  d   QhRR/# )r(   r.   zIterator[Node]r/   )r0   s   "r1   r2   rq   &  s     	# 	#n 	#r3   c              #  >   "   T pVe   Vx  VP                   pK  R# 5i)zIterate over all parent collectors starting from and including self
up to the root of the collection tree.

.. versionadded:: 8.1
N)rh   )r{   rh   s   & r1   iter_parentsNode.iter_parents&  s%      # L]]F !s   c                   V ^8  d   QhRR/# )r(   r.   z
list[Node]r/   )r0   s   "r1   r2   rq   1  s     	 	: 	r3   c                t    . pT pVe    VP                  V4       VP                  pK#  VP                  4        V# )zpReturn a list of all parent collectors starting from the root of the
collection tree down to and including self.)appendrh   reverse)r{   chainitems   &  r1   	listchainNode.listchain1  s7      LL;;Dr3   c               $    V ^8  d   QhRRRRRR/# )r(   markerzstr | MarkDecoratorr   boolr.   rp   r/   )r0   s   "r1   r2   rq   <  s"     5 5!4 5d 5d 5r3   c                x   ^ RI Hp \        V\        4      '       d   TpM-\        V\        4      '       d   \        W14      pM\        R4      hW@P                  VP                  &   V'       d(   V P                  P                  VP                  4       R# V P                  P                  ^ VP                  4       R# )zDynamically add a marker object to the node.

:param marker:
    The marker.
:param append:
    Whether to append the marker, or prepend it.
)MARK_GENz'is not a string or pytest.mark.* MarkerN)_pytest.markr   r   r   rg   rT   r   ru   rE   rv   r   markinsert)r{   r   r   r   marker_s   &&&  r1   
add_markerNode.add_marker<  s     	*fm,,G$$h/GFGG&-gll###GLL1##Aw||4r3   c                    V ^8  d   QhRRRR/# )r(   rE   ro   r.   zIterator[Mark]r/   )r0   s   "r1   r2   rq   R  s     F F F~ Fr3   c                4    R V P                  VR7       4       # )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  2   "   T F  q^,          x  K  	  R# 5i)   Nr/   ).0xs   & r1   	<genexpr>$Node.iter_markers.<locals>.<genexpr>X  s     ED!Ds   rD   )iter_markers_with_noder{   rE   s   &&r1   iter_markersNode.iter_markersR  s     Fd99t9DEEr3   c                    V ^8  d   QhRRRR/# )r(   rE   ro   r.   zIterator[tuple[Node, Mark]]r/   )r0   s   "r1   r2   rq   Z  s     % %%	$%r3   c              #     "   V P                  4        F3  pVP                   F   pVe   \        VRR4      V8X  g   K  W#3x  K"  	  K5  	  R# 5i)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.
NrE   )r   rv   rT   )r{   rE   noder   s   &&  r1   r   Node.iter_markers_with_nodeZ  sG      %%'D((<74#>$#F*$ ) (s
   6AAc                    V ^8  d   QhRRRR/# )r(   rE   rg   r.   Mark | Noner/   )r0   s   "r1   r2   rq   h  s    ??s?{?r3   c                	    R # r   r/   r   s   &&r1   get_closest_markerNode.get_closest_markerg  s    <?r3   c               $    V ^8  d   QhRRRRRR/# )r(   rE   rg   defaultr   r.   r/   )r0   s   "r1   r2   rq   k  s    GGsGTGdGr3   c                	    R # r   r/   r{   rE   r   s   &&&r1   r   r   j  s    DGr3   c               $    V ^8  d   QhRRRRRR/# )r(   rE   rg   r   r   r.   r/   )r0   s   "r1   r2   rq   m  s!     ; ;s ;[ ;K ;r3   c                :    \        V P                  VR7      V4      # )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.
rD   )nextr   r   s   &&&r1   r   r   m  s     D%%4%0'::r3   c                   V ^8  d   QhRR/# )r(   r.   zset[str]r/   )r0   s   "r1   r2   rq   v  s      8 r3   c                ~    \        4       pV P                  4        F  pVP                  VP                  4       K   	  V# )z;Return a set of all extra keywords in self and any parents.)rX   r   updaterw   )r{   extra_keywordsr   s   &  r1   listextrakeywordsNode.listextrakeywordsv  s4    #&5NN$D!!$"<"<= %r3   c                   V ^8  d   QhRR/# )r(   r.   z	list[str]r/   )r0   s   "r1   r2   rq   }  s     2 29 2r3   c                	^    V P                  4        Uu. uF  qP                  NK  	  up# u upi r   )r   rE   )r{   r   s   & r1   	listnamesNode.listnames}  s%     $ 01 01 0111s   *c                    V ^8  d   QhRRRR/# )r(   finzCallable[[], object]r.   rp   r/   )r0   s   "r1   r2   rq     s     9 9 4 9 9r3   c                P    V P                   P                  P                  W4       R# )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)rl   _setupstateaddfinalizer)r{   r   s   &&r1   r   Node.addfinalizer  s     	  --c8r3   c                    V ^8  d   QhRRRR/# )r(   rH   ztype[_NodeType]r.   z_NodeType | Noner/   )r0   s   "r1   r2   rq     s     
 
_ 
1A 
r3   c                ^    V P                  4        F  p\        W!4      '       g   K  Vu # 	  R# )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   )r{   rH   r   s   && r1   	getparentNode.getparent  s,     %%'D$$$ ( r3   c                    V ^8  d   QhRRRR/# r(   excinfoExceptionInfo[BaseException]r.   r   r/   )r0   s   "r1   r2   rq     s     ! !)E !) !r3   c                	    VP                   # r   )	traceback)r{   r   s   &&r1   _traceback_filterNode._traceback_filter  s       r3   c               $    V ^8  d   QhRRRRRR/# )r(   r   r   styleTracebackStyle | Noner.   r   r/   )r0   s   "r1   r2   rq     s(     8
 8
-8
 %8
 
	8
r3   c           
     	   ^ RI Hp \        VP                  \        4      '       d+   \
        P                  ! VP                  P                  4      p\        VP                  \        P                  4      '       d   VP                  P                  '       g   Rp\        VP                  V4      '       d   VP                  P                  4       # V P                  P                  RR4      '       d   RpRpMV P                  pVR8X  d   RpVf'   V P                  P                  RR4      R8X  d   RpMRpV P                  P                  4       ^8  d   RpMR	pV P                  P                  4       ^8  d   RMR	p \!        \"        P$                  ! 4       4      V P                  P&                  P(                  8g  pVP-                  R	VV P                  P                  R
R4      VVVVR7      #   \*         d    R	p LAi ; i)r   )FixtureLookupErrorvalue	fulltraceFlongautotbstyleshortT
showlocals)funcargsabspathr  r   tbfiltertruncate_localstruncate_args)_pytest.fixturesr   r   r   r   r   from_exceptioncauser   	ExceptionrF   
formatreprrj   	getoptionr   get_verbosityr
   osgetcwdinvocation_paramsdirOSErrorgetrepr)r{   r   r   r   r	  r
  r  r  s   &&&     r1   _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   =?G. .G>=G>c               $    V ^8  d   QhRRRRRR/# )r(   r   r   r   r   r.   str | TerminalReprr/   )r0   s   "r1   r2   rq     s(     5 5-5 %5 
	5r3   c                $    V P                  W4      # )zReturn a representation of a collection or test failure.

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

:param excinfo: Exception information for the failure.
)r  )r{   r   r   s   &&&r1   repr_failureNode.repr_failure  s     $$W44r3   )rx   rz   rj   rw   ru   rE   rv   rh   r*   rl   ry   )__dict__rx   rz   rj   rE   rh   r*   rl   )NNNNNN)Tr   )!r9   rG   r_   r`   ra   __annotations__	__slots__rP   classmethodr   propertyr   r   r8   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  rb   r/   r3   r1   r<   r<      s     	I;!z 0 0" 4 4V!
J  "	#	5,F% ? ?G G;29
!8
t5 5r3   )	metaclassc                    V ^8  d   QhRRRR/# )r(   r   r<   r.   ztuple[str | Path, int | None]r/   )r0   s   "r1   r2   r2     s     9 94 9,I 9r3   c                    \        V RR4      pVe
   VR,          # \        V RR4      pVe   \        V4      # \        V RR4      R3# )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.
locationN:Nr(   Nobjr*   zunknown location)rT   r   )r   r(  r)  s   &  r1   r   r     sU     4;4T3RH|
$t
$C
34!34b88r3   c                  r    ] tR tRtRt ! R R]4      t]P                  R R l4       t	R R lt
R	 R
 ltRtR# )	Collectori  z}Base class of all collectors.

Collector create children through `collect()` and thus iteratively build
the collection tree.
c                      ] tR tRtRtRtR# )Collector.CollectErrori  z6An error during collection, contains a custom message.r/   Nr9   rG   r_   r`   ra   rb   r/   r3   r1   CollectErrorr.    s    Dr3   r0  c                   V ^8  d   QhRR/# )r(   r.   zIterable[Item | Collector]r/   )r0   s   "r1   r2   Collector.__annotate__  s     . .3 .r3   c                    \        R4      h)z;Collect children (items and collectors) for this collector.abstractNotImplementedErrorr   s   &r1   collectCollector.collect  s     "*--r3   c                    V ^8  d   QhRRRR/# )r(   r   r   r.   r  r/   )r0   s   "r1   r2   r2    s     = =3=	=r3   c                P   \        VP                  V P                  4      '       dK   V P                  P	                  RR4      '       g)   VP                  p\        VP                  ^ ,          4      # V P                  P	                  RR4      pVR8X  d   RpV P                  WR7      # )ziReturn a representation of a collection failure.

:param excinfo: Exception information for the failure.
r  Fr  r  r  )r   )r   r   r0  rj   r  rg   argsr  )r{   r   excr  s   &&  r1   r  Collector.repr_failure  s     gmmT%6%677@U@UA
 A
 --Csxx{## ++''	6:fG$$W$<<r3   c                    V ^8  d   QhRRRR/# r   r/   )r0   s   "r1   r2   r2    s     ! !)E !) !r3   c                	    \        V R 4      '       dV   VP                  pVP                  V P                  R7      pW28X  d   VP                  \        R7      pVP                  V4      # VP                  # )r*   r*   )excludepath)hasattrr   cutr*   tracebackcutdirfilter)r{   r   r   
ntracebacks   &&  r1   r   Collector._traceback_filter  sa    4  ))I"DII6J&'^^^H
$$W--   r3   r/   N)r9   rG   r_   r`   ra   r  r0  abcabstractmethodr7  r  r   rb   r/   r3   r1   r,  r,    s>    Ey E 	. .
=*! !r3   r,  i  )maxsizec               $    V ^8  d   QhRRRRRR/# )r(   initial_pathszfrozenset[Path]r*   r
   r.   ro   r/   )r0   s   "r1   r2   r2   #  s$     
 
"
*.

r3   c                    W9   d   R # VP                    F%  pW 9   g   K  \        VP                  V4      4      u # 	  R# ) N)parentsrg   relative_to)rL  r*   rh   s   && r1   _check_initialpaths_for_relpathrQ  "  s<     ,,"t''/00  r3   c                  ^   a  ] tR tRtRtRR V 3R lllt]RRRR/R V 3R	 lll4       tR
tV ;t	# )FSCollectori0  z%Base class for filesystem collectors.Nc               <    V ^8  d   QhRRRRRRRRR	R
RRRRRRRR/	# )r(   r,   r-   path_or_parentzPath | Node | Noner*   r+   rE   ro   rh   ri   rj   rk   rl   rm   rn   r.   rp   r/   )r0   s   "r1   r2   FSCollector.__annotate__3  sd     4
 4
"4
 +4
 	4

 4
 4
 4
  4
 4
 
4
r3   c	           	     	  < V'       dL   \        V\        4      '       d   Ve   Q h\        \        V4      pM\        V\        4      '       d	   Ve   Q hTp\        \        V 4      W1R7      pVfm   VP                  pVe]   VP                  V8w  dL    VP                  VP                  4      p	\        V	4      pVP                  \        P                  \        4      pW0n        Vf   Vf   Q hVP                   pVf    \        V P                  P                  VP"                  P$                  4      4      pV'       d>   \        P                  \        8w  d%   VP                  \        P                  \        4      p\*        S
V `Y  VVVVVVR7       R #   \         d     Li ; i  \         d    \'        TP(                  T4      p Li ; i)Nrs   )rE   rh   rj   rl   rn   r*   )r   r<   r   rS  r
   r:   rt   rE   r*   rP  rg   r   replacer  sepSEPrl   rj   rootpathrQ  _initialpathsrR   rP   )r{   r,   rU  r*   rE   rh   rj   rl   rn   relr\   s   &&&&&&&&& r1   rP   FSCollector.__init__3  s{    .$//~%~k>:ND11|#|%4:t;<99D!fkkT&9$**6;;7C s8D||BFFC0	?%%%nnG>VTYY227>>3J3JKL "&&C-4 	 	
) "   V89N9NPTUVs$   F <8F! FF!!GGr,   r*   c               $    V ^8  d   QhRRRRRR/# )r(   r,   r-   r*   r+   r.   r#   r/   )r0   s   "r1   r2   rV  j  s/     	R 	R #		R
 	R 
	Rr3   c          	     0   < \         SV `  ! RRVRVRV/VB # )zThe public constructor.rh   r,   r*   r/   )rR   r   )rH   rh   r,   r*   rJ   r\   s   &&$$,r1   r   FSCollector.from_parenti  s'     w"Q&QQdQbQQr3   r@  )NNNNNNNN)
r9   rG   r_   r`   ra   rP   r#  r   rb   rc   rd   s   @r1   rS  rS  0  sC    /4
 4
l 	R &*		R
 !	R 	R 	Rr3   rS  c                      ] tR tRtRtRtR# )Fileiv  zGBase class for collecting tests from a file.

:ref:`non-python tests`.
r/   Nr/  r/   r3   r1   rc  rc  v  s    r3   rc  c                      ] tR tRtRtRtR# )	Directoryi}  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`.
r/   Nr/  r/   r3   r1   re  re  }  s    r3   re  c                     a  ] tR tRtRtRtRR V 3R llltR R lt]P                  R R	 l4       t
R
 R ltR R lt]R R l4       tRtV ;t# )Itemi  zyBase class of all test invocation items.

Note that for a single function there might be multiple test invocation items.
Nc               (    V ^8  d   QhRRRRRRRR/# )	r(   rj   rk   rl   rm   rn   ro   r.   rp   r/   )r0   s   "r1   r2   Item.__annotate__  s4     = = 	=
  = = 
=r3   c           	     	t   < \         SV `  ! VV3R VRVRV/VB  . V n        . V n        V P	                  4        R# )rj   rl   rn   N)rR   rP   _report_sectionsuser_properties-_check_item_and_collector_diamond_inheritance)r{   rE   rh   rj   rl   rn   rJ   r\   s   &&&&&&,r1   rP   Item.__init__  s`     		
 	
 		

 	
 	
 =? :<::<r3   c                   V ^8  d   QhRR/# r   r/   )r0   s   "r1   r2   ri    s      t r3   c                   \        V 4      pRp\        WR4      '       d   R# \        WR4       RP                  R VP                   4       4      pV'       d.   \
        P                  ! VP                   RV R2\        4       R# R# )	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  j   "   T F)  p\        V\        4      '       g   K  VP                  x  K+  	  R # 5ir   )
issubclassr,  r9   )r   bases   & r1   r   EItem._check_item_and_collector_diamond_inheritance.<locals>.<genexpr>  s"      
&3dz$	7RMDMMms   33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/)	rt   rT   setattrjoin	__bases__r7   r8   r9   r"   )r{   rH   	attr_nameproblemss   &   r1   rm  2Item._check_item_and_collector_diamond_inheritance  s    
 4j @	35))%99 
&)mm
 
 MM<<. !%%-J /gg
  r3   c                   V ^8  d   QhRR/# r   r/   )r0   s   "r1   r2   ri    s     R R Rr3   c                    \        R4      h)zkRun the test case for this item.

Must be implemented by subclasses.

.. seealso:: :ref:`non-python tests`
z,runtest must be implemented by Item subclassr5  r   s   &r1   runtestItem.runtest  s     ""PQQr3   c               (    V ^8  d   QhRRRRRRRR/# )r(   whenrg   keycontentr.   rp   r/   )r0   s   "r1   r2   ri    s(     ? ?s ? ?s ?t ?r3   c                T    V'       d    V P                   P                  WV34       R# R# )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)rk  r   )r{   r  r  r  s   &&&&r1   add_report_sectionItem.add_report_section  s%     !!(($W)=> r3   c                   V ^8  d   QhRR/# )r(   r.   z.tuple[os.PathLike[str] | str, int | None, str]r/   )r0   s   "r1   r2   ri    s     # #J #r3   c                     V P                   RR3# )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`
NrN  r@  r   s   &r1   
reportinfoItem.reportinfo  s     yy$""r3   c                   V ^8  d   QhRR/# )r(   r.   ztuple[str, int | None, str]r/   )r0   s   "r1   r2   ri    s     
5 
55 
5r3   c                    V P                  4       p\        V^ ,          4      pV P                  P                  V4      p\	        V^,          4      \
        J g   Q hW1^,          V^,          3# )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    rl   _node_location_to_relpathrt   rg   )r{   r(  r*   	relfspaths   &   r1   r(  Item.location  s\     ??$HQK(LL::4@	HQK C'''A;44r3   )rk  rl  )NNNN)r9   rG   r_   r`   ra   nextitemrP   rm  rH  rI  r~  r  r  r   r(  rb   rc   rd   s   @r1   rg  rg    sX    
 H= =:: 	R R?"# 
5 
5r3   rg  )K
__future__r   rH  collections.abcr   r   r   r   	functoolsr   r	   r  pathlibr
   typingr   r   r   r   r   r   r7   pluggy_pytest._code_pytestr   _pytest._code.coder   r   r   r   _pytest.compatr   r   _pytest.configr   r   _pytest.config.compatr   _pytest.deprecatedr   _pytest.mark.structuresr   r   r   _pytest.outcomesr   _pytest.pathlibr    _pytest.stashr!   _pytest.warning_typesr"   typing_extensionsr#   _pytest.mainr$   rZ  __file__rh   rD  r&   r:   r;   ABCMetar?   ABCr<   r   r,  rQ  rS  rc  re  rg  r/   r3   r1   <module>r     se   " 
 $ $ $ * %  	             % , + ( - & $ ! 0 - 3 ( 1 0 ! (  / & % 
w''(// T]* Kv.	)4s{{ )4X]5377h ]5@9&,!cgg ,!^ 4
 
CR)SWW CRL; SWW $u54 u5r3   