ó
    Eñi¬g  ã                  ó®  • S SK J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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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      rE\
" S1S29      S>S3 j5       rF " S4 S5\E\R„                  5      rG " S6 S7\G\R„                  5      rH " S8 S9\G\R„                  5      rI " S: S;\C\R„                  5      rJg)?é    )Ú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                ó°   • 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      ÚJ/home/mande/repo/quber/.venv/lib/python3.13/site-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$ )ÚNodeMetaéT   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 )NzÉ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)Ú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Üœ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"   ƒ “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   é€   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   r1   )Ú__dict__Ú_nodeidÚ_storeÚconfigr>   Úparentr0   ÚsessionNc                ó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>   rf   re   rL   rg   rM   r3   Útyper0   r   ÚkeywordsÚown_markersrQ   Úextra_keyword_matchesrc   Únodeidr!   Ústashrd   )Úselfr>   rf   re   rg   r1   r0   rn   s           r2   rH   Ú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ˆ�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.
re   z.config is not a valid argument for from_parentrg   z/session is not a valid argument for from_parentrf   rX   )rL   rV   )rA   rf   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.)rg   Ú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¼ÀÀvÈtÓ9TÓ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×+Ñ+ÜØJÈ7É+ÐVóð ô 0°Ó5‰ˆØÑ!Ð!Ð!Ü×ÒØØÜ˜“YØ˜A‘:ó		
r4   c                ó   • U R                   $ )z;A ::-separated string denoting its collection tree address.)rc   rw   s    r2   rn   ÚNode.nodeid  s   € ð �|‰|Ðr4   c                ó,   • [        U R                  5      $ ©N)Úhashrc   rw   s    r2   Ú__hash__ÚNode.__hash__  s   € Ü�D—L‘LÓ!Ð!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)z‚Iterate over all parent collectors starting from and including self
up to the root of the collection tree.

.. versionadded:: 8.1
N)rf   )rp   rf   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.)Úappendrf   Úreverse)rp   ÚchainÚitems      r2   Ú	listchainÚNode.listchain1  sA   € ð ˆØ ˆØÑØ�L‰L˜ÔØ—;‘;ˆ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)z�Dynamically 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�   € õ 	*ä�fœm×,Ñ,Ø‰GÜ˜¤×$Ñ$Ü˜hÓ/‰GäÐFÓGÐGØ&-�‰�g—l‘lÑ#ÞØ×Ñ×#Ñ# G§L¡LÕ1à×Ñ×#Ñ# A w§|¡|Õ4r4   c                ó.   • S U R                  US9 5       $ )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  ó*   #   • U  H	  oS    v •  M     g7f)rI   NrX   )Ú.0Úxs     r2   Ú	<genexpr>Ú$Node.iter_markers.<locals>.<genexpr>X  s   é € ÐEÒD˜�!–ÒDùs   ‚r=   )Úiter_markers_with_node©rp   r>   s     r2   Úiter_markersÚNode.iter_markersR  s   € ñ F˜d×9Ñ9¸tÐ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)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.
Nr>   )r˜   rl   rM   )rp   r>   Únoder¤   s       r2   r°   ÚNode.iter_markers_with_nodeZ  sG   é € ð ×%Ñ%Ö'ˆDØ×(Ô(�Ø‘<¤7¨4°¸Ó#>À$Õ#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      $ )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.
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ˆØ—N‘NÖ$ˆ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Ò 0˜1—”Ñ 0Ñ1Ð1ùÒ1s   “+c                óN   • U R                   R                  R                  X5        g)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)rg   Ú_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)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�   )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?   Ú
formatreprre   Ú	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ä�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   Å3?G! Ç!G0Ç/G0c                ó$   • U R                  X5      $ )z—Return 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   )rc   rd   re   rm   rk   r>   rl   rf   r0   rg   ro   )NNNNNN)r>   r†   rf   úNode | Nonere   úConfig | Nonerg   úSession | Noner1   úLEGACY_PATH | Noner0   úPath | Nonern   ú
str | NonerY   ÚNone)rf   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ÀÈTÓ3R€HØÑØ˜˜ˆ|ÐÜ
�$˜˜tÓ
$€CØ
�Ü˜3ÓÐÜ�4˜Ð!3Ó4°bÐ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  re   ré   r†   Úargsrñ   )rp   rÑ   ÚexcrÚ   s       r2   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Ð$Ð<Ð<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Ø"Ÿ™¨D¯I©I˜Ð6ˆJØÓ&Ø'Ÿ^™^¼˜^Ð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  iè  )Úmaxsizec                óx   • X;   a  gUR                    H$  nX ;   d  M
  [        UR                  U5      5      s  $    g )NÚ )Úparentsr†   Úrelative_to)Úinitial_pathsr0   rf   s      r2   Ú_check_initialpaths_for_relpathr/  "  s<   € ð ÓØà—,”,ˆØÕ"Ü�t×'Ñ'¨Ó/Ó0Ò0ñ ð 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	$ )ÚFSCollectori0  z%Base class for filesystem collectors.Nc	           	     ód  >• 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 ]Y  UUUUUUS9  g ! [         a     NÜf = f! [         a    ['        UR(                  U5      n Nˆf = f)Nri   )r>   rf   re   rg   rn   r0   )r�   r6   r   r1  r
   r3   rj   r>   r0   r-  r†   rƒ   Úreplacerë   ÚsepÚSEPrg   re   Úrootpathr/  Ú_initialpathsrK   rH   )rp   r1   Úpath_or_parentr0   r>   rf   re   rg   rn   ÚrelrU   s             €r2   rH   Ú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$   ÂE< Ã.8F Å<
F	ÆF	Æ F/Æ.F/)r1   r0   c               ó*   >• [         TU ]  " SXUS.UD6$ )zThe public constructor.)rf   r1   r0   rX   )rK   rs   )rA   rf   r1   r0   rC   rU   s        €r2   rs   ÚFSCollector.from_parenti  s   ø€ ô ‰wÒ"ÐQ¨&ÀdÑQÈbÑQÐQr4   r  )NNNNNNNN)r1   rù   r8  zPath | Node | Noner0   rú   r>   rû   rf   rö   re   r÷   rg   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  0  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)ÚFileiv  zGBase class for collecting tests from a file.

:ref:`non-python tests`.
rX   Nr  rX   r4   r2   r>  r>  v  s   † ôr4   r>  c                  ó   • \ rS rSrSrSrg)Ú	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`.
rX   Nr  rX   r4   r2   r@  r@  }  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)re   rg   rn   )rK   rH   Ú_report_sectionsÚuser_propertiesÚ-_check_item_and_collector_diamond_inheritance)rp   r>   rf   re   rg   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"   é € ð 
Ú&3˜d´zÀ$Ì	×7R‹MˆD�MŽM¢mùs   ‚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   rF  Ú2Item._check_item_and_collector_diamond_inheritance´  sˆ   € ô
 �4‹jˆð @ˆ	Ü�3 5×)Ñ)ØÜ� Ô%à—9‘9ñ 
Ø&)§m¢mó
ó 
ˆö Ü�MŠMØ—<‘<�.ð !%Ø%- 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)rD  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   € ð �y‰y˜$ Ð"Ð"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    rg   Ú_node_location_to_relpathrj   r†   )rp   r  r0   Ú	relfspaths       r2   r  ÚItem.locationù  s\   € ð —?‘?Ó$ˆÜ˜H Q™KÓ(ˆØ—L‘L×:Ñ:¸4Ó@ˆ	Ü�H˜Q‘KÓ ¤CÒ'Ð'Ð'Ø A™;¨°©Ð4Ð4r4   )rD  rE  )NNNN)re   r÷   rg   rø   rn   rû   rY   rü   rþ   )rX  r†   rY  r†   rZ  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   rF  r'  r(  rU  r[  r^  r   r  r]   r^   r_   s   @r2   rB  rB  �  sŽ   ø† ñð
 €Hð
 Ø $Ø"&Ø!ð=ð ð	=ð
  ð=ð ð=ð 
÷=ð =ô:ð: 	×ÑóRó ðRô?ô"#ð ó
5ó ö
5r4   rB  )r/   z
type[Node]r0   rú   r1   rù   rY   r
   )rµ   r6   rY   ztuple[str | Path, int | None])r.  zfrozenset[Path]r0   r
   rY   rû   )KÚ
__future__r   r'  Úcollections.abcr   r   r   r   Ú	functoolsr   r	   rë   Úpathlibr
   Útypingr   r   r   r   r   r   r+   Ú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$   r5  Ú__file__rf   r#  r&   r3   r5   ÚABCMetar9   ÚABCr6   r„   r  r/  r1  r>  r@  rB  rX   r4   r2   Ú<module>r|     s¡  ðå "ã 
Ý $Ý $Ý $Ý *Ý %Ý Û 	Û Ý Ý Ý Ý Ý Ý  Ý Û ã ã Ý %Ý ,Ý +Ý (Ý -Ý &Ý $Ý !Ý 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5r4   