+
    ÄD©i¬g  ã                  ó®  € ^ 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   "Ú//usr/lib/python3/dist-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# )zÉDirect 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ñ 4�Xð 4¨Bñ 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ÜœG C¨Ó4Ó5ˆCØ)+¯©¬ÔK©¡ °q¿N¹NÑ7Jœ˜šªùÓKˆHÑKÝ?ä�MŠMÙ(Ø�eÐRÔSVÐW_ÓS`ÐRað b(ð (óôô ‘7Ò# QÐ3¨(Ñ3Ò3ð	4ús"   ƒ “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<   zºBase 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Ø Ÿ-™-ˆDŒKçà$+�LçÜÐ DÓEÐEØ!Ÿ>™>ˆDŒLàŠ<˜FšNÜ˜6 6¨4Ó0ˆDä"-¬d°4«j¸$Ô"NˆŒ	ô 3?¸tÓ2DˆŒð (*ˆÔô 03«uˆÔ"àÒØ Ô'Ð'Ð'Ø!�Là—;—;�;ÜÐ CÓDÐDØŸ;™;×-Ñ-°Õ4°t·y±yÕ@ˆDŒLô "›GˆŒ
à—j‘jˆŽ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¼ÀÀvÈtÓ9TÓ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×+Ò+ÜØJÈ7É+Ð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   € Ü�D—L‘LÓ!Ð!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)z‚Iterate 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   € ð ˆØ ˆØÒØ�L‰L˜ÔØ—;‘;Š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ð 5¸dð 5Èdñ 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# )z�Dynamically 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�   € õ 	*ä�fœm×,Ò,Ø‰GÜ˜¤×$Ò$Ü˜hÓ/‰GäÐFÓGÐGØ&-�‰�g—l‘lÑ#ßØ×Ñ×#Ñ# G§L¡LÖ1à×Ñ×#Ñ# A w§|¡|Ö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       # )zšIterate 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˜�!—’ÓDùs   ‚rD   )Úiter_markers_with_node©r{   rE   s   &&r1   Úiter_markersÚNode.iter_markersR  s   € ñ F˜d×9Ñ9¸tÐ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)z–Iterate 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Ø×(Ô(�Ø’<¤7¨4°¸Ó#>À$Ö#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ÑG sÐG°TÐG¸dÑ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      # )zÛReturn 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ˆØ—N‘NÖ$ˆDØ×!Ñ! $×"<Ñ"<Ö=ñ %àÐr3   c               ó   € V ^8„  d   QhRR/# )r(   r.   z	list[str]r/   )r0   s   "r1   r2   rq   }  s   € ÷ 2ñ 2˜9ñ 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Ñ 0˜1—”Ñ 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# )z¼Register 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# )zŸGet 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ä�g—m‘mÔ%:×;Ò;Ü#×2Ò2°7·=±=×3FÑ3FÓGˆGÜ�g—m‘m¤T§^¡^×4Ò4Ø—=‘=×(×(Ð(Ø�Ü�g—m‘mÐ%7×8Ò8Ø—=‘=×+Ñ+Ó-Ð-ð �;‰;× Ñ  ¨e×4Ò4ØˆEØ‰Hà×-Ñ-ˆHØ˜ŒØ�àŠ=Ø�{‰{×$Ñ$ Y°Ó7¸7ÔBØ‘à�à�;‰;×$Ñ$Ó&¨Ô*Ø#‰Oà"ˆOà!%§¡×!:Ñ!:Ó!<¸qÔ!@™Àdˆð	Üœ2Ÿ9š9›;Ó'¨4¯;©;×+HÑ+H×+LÑ+LÑLˆGð �‰ØØØ—{‘{×,Ñ,¨\¸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      # )z—Return 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ñ 9 4ð 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ÀÈTÓ3R€HØÒØ˜�|ÐÜ
�$˜˜tÓ
$€CØ
‚Ü˜3ÓÐÜ�4˜Ð!3Ó4°bÐ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�   € ô �g—m‘m T×%6Ñ%6×7Ò7ÀÇÁ×@UÑ@UØ˜÷A
ò A
ð —-‘-ˆCÜ�s—x‘x •{Ó#Ð#ð —+‘+×'Ñ'¨	°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Ø"Ÿ™¨D¯I©I˜Ó6ˆJØÔ&Ø'Ÿ^™^¼˜^Ó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     Læi ; i  \         d    \'        TP(                  T4      p L�i ; 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¨>Ó:‘Ü˜N¬D×1Ò1Ø’|Ð#�|Ø%�äœ4 ›: tÔ;ˆØŠ<Ø—9‘9ˆDØÒ! f§k¡k°TÔ&9ð$Ø×*Ñ*¨6¯;©;Ó7�Cô ˜s›8�DØ—|‘|¤B§F¡F¬CÓ0�ØŒ	àŠ?ØÒ%Ð%Ð%Ø—n‘nˆGàŠ>ðVÜ˜TŸY™Y×2Ñ2°7·>±>×3JÑ3JÓKÓL�÷ œ"Ÿ&™&¤Cœ-ØŸ™¬¯©´Ó4�ä‰ÑØØØØØØð 	ö 	
øô) "ô Ùðûô ô VÜ8¸×9NÑ9NÐPTÓ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¸ÐQÀdÐQÈbÑ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"   é € ð 
Ù&3˜d´zÀ$Ì	×7RŒMˆD�MŽM£mùs   ‚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ˆ   € ô
 �4‹jˆð @ˆ	Ü�3 5×)Ò)ÙÜ� Ô%à—9‘9ñ 
Ø&)§m¢mó
ó 
ˆ÷ Ü�MŠMØ—<‘<�.ð !%Ø%- 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   € ð �y‰y˜$ Ð"Ð"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\   € ð —?‘?Ó$ˆÜ˜H Q�KÓ(ˆØ—L‘L×:Ñ:¸4Ó@ˆ	Ü�H˜Q•KÓ ¤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ƒ]€õñ* �K vÔ.€	ô)4ˆs�{‰{ô )4ôX]5ˆ3�7‰7˜hõ ]5õ@9ô&,!��c—g‘gô ,!ñ^ �4Ôô
ó ð
ôCR�)˜SŸW™Wô CRôLˆ;˜Ÿ™ô ô�˜SŸW™Wô ô$u5ˆ4�—‘ö u5r3   