ó
    ùÞ j®f  ã                  ó†  • 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  \(       a  S S K1J2r2  S S!K3J4r4  S"r5S:S# jr6\" \Rn                  5      Rp                  r9\" S$5      r:\" S%S&S'9r; " S( S)\Rx                  5      r= " S* S&\R|                  \=S+9r?S;S, jr@ " S- S.\?\R|                  5      rA\
" S/S09      S<S1 j5       rB " S2 S3\A\R|                  5      rC " S4 S5\C\R|                  5      rD " S6 S7\C\R|                  5      rE " S8 S9\?\R|                  5      rFg)=é    )Ú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)ÚMark)ÚMarkDecorator)ÚNodeKeywords)Úfail)Úabsolutepath)ÚStash)ÚPytestWarning)ÚSelf)ÚSessionÚ/c                óV   • [         R                  " U 5      R                  S[        5      $ )am  Normalize path separators to forward slashes for nodeid compatibility.

Replaces backslashes with forward slashes. This handles both Windows native
paths and cross-platform data (e.g., Windows paths in serialized test reports
when running on Linux).

:param path: A path string or PathLike object.
:returns: String with all backslashes replaced by forward slashes.
Ú\)ÚosÚfspathÚreplaceÚSEP©Úpaths    ÚG/var/www/html/gaurav/venv/lib/python3.13/site-packages/_pytest/nodes.pyÚnorm_sepr-   5   s   € ô �9Š9�T‹?×"Ñ" 4¬Ó-Ð-ó    Ú_TÚ	_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éK   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)ÚformatÚ
__module__Ú__name__r   )ÚclsÚkÚkwÚmsgs       r,   Ú__call__ÚNodeMeta.__call__Z   s:   € ð!÷ ‰&˜Ÿ™Ð(¨¨#¯,©,¨Ð8ˆ&Ð
9ð 	ô 	ˆS˜%Ó r.   c           
     óh  >•  [         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.)ÚsuperrB   Ú	TypeErrorr   ÚgetattrÚitemsÚ
parametersÚwarning_typesrG   ÚwarningsÚwarnÚset)r>   r?   r@   ÚsigÚvÚknown_kwrG   Ú	__class__s          €r,   Ú_createÚNodeMeta._createc   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"   ƒ “2B1ÁA$ÁA$Á#AB1Â0B1© )Úreturnr   )r>   ztype[_T]rX   r/   )	r=   r<   Ú__qualname__Ú__firstlineno__Ú__doc__rB   rU   Ú__static_attributes__Ú__classcell__©rT   s   @r,   r4   r4   K   s   ø† ñô!÷4õ 4r.   r4   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)9r1   éw   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'   )Ú__dict__Ú_nodeidÚ_storeÚconfigr9   Úparentr+   ÚsessionNc                óR  • 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   eUR
                  nX`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 providedz::()z!nodeid or parent must be providedz::)r9   re   rd   rI   rf   r+   r   ÚkeywordsÚown_markersrP   Úextra_keyword_matchesrb   Únodeidr   Ústashrc   )Úselfr9   re   rd   rf   r'   r+   rk   s           r,   rE   ÚNode.__init__“   sø   € ð Œ	ð Œæà"(�KæÜÐ CÓDÐDØ Ÿ-™-ˆDŒKæà$+�LæÜÐ DÓEÐEØ!Ÿ>™>ˆDŒLà‰<ØÑ%Ð%Ð%Ø—;‘;ˆDà"&Œ	ô 3?¸tÓ2DˆŒð (*ˆÔô 03«uˆÔ"àÑØ Ó'Ð'Ð'Ø!�Là—;—;ÜÐ CÓDÐDØŸ;™;×-Ñ-°Ñ4°t·y±yÑ@ˆDŒLô "›GˆŒ
à—j‘jˆ�r.   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.
rd   z.config is not a valid argument for from_parentrf   z/session is not a valid argument for from_parentre   rW   )rI   rU   )r>   re   r@   s      r,   Úfrom_parentÚNode.from_parentÑ   sA   € ð �r‹>ÜÐLÓMÐMØ˜‹?ÜÐMÓNÐNØ�{Š{Ñ/ &Ð/¨BÑ/Ð/r.   c                óL   • U R                   R                  U R                  5      $ )z4Path-sensitive hook proxy used to call pytest hooks.)rf   Úgethookproxyr+   ©rm   s    r,   ÚihookÚ
Node.ihookã   s   € ð �|‰|×(Ñ(¨¯©Ó3Ð3r.   c                ód   • SR                  U R                  R                  [        U SS 5      5      $ )Nz<{} {}>r9   )r;   rT   r=   rJ   rt   s    r,   Ú__repr__ÚNode.__repr__è   s(   € Ø×Ñ §¡× 7Ñ 7¼ÀÀvÈtÓ9TÓUÐUr.   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 NrF   )ÚcategoryÚfilenameÚlineno)Ú
isinstanceÚWarningÚ
ValueErrorÚget_fslocation_from_itemrN   Úwarn_explicitÚstr)rm   Úwarningr+   r}   s       r,   rO   Ú	Node.warnë   sd   € ô, ˜'¤7×+Ñ+ÜØJÈ7É+ÐVóð ô 0°Ó5‰ˆØÑ!Ð!Ð!Ü×ÒØØÜ˜“YØ˜A‘:ó		
r.   c                ó   • U R                   $ )z;A ::-separated string denoting its collection tree address.)rb   rt   s    r,   rk   ÚNode.nodeid  s   € ð �|‰|Ðr.   c                ó,   • [        U R                  5      $ ©N)Úhashrb   rt   s    r,   Ú__hash__ÚNode.__hash__  s   € Ü�D—L‘LÓ!Ð!r.   c                ó   • g r‰   rW   rt   s    r,   ÚsetupÚ
Node.setup  ó   € Ør.   c                ó   • g r‰   rW   rt   s    r,   ÚteardownÚNode.teardown  r�   r.   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)re   )rm   re   s     r,   Ú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.)Úappendre   Úreverse)rm   ÚchainÚitems      r,   Ú	listchainÚNode.listchain)  sA   € ð ˆØ ˆØÑØ�L‰L˜ÔØ—;‘;ˆDð Óð 	�‰ŒØˆr.   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ƒ   rJ   r€   rh   r9   ri   r˜   ÚmarkÚinsert)rm   Úmarkerr˜   rŸ   Úmarker_s        r,   Ú
add_markerÚNode.add_marker4  s�   € õ 	*ä�fœm×,Ñ,Ø‰GÜ˜¤×$Ñ$Ü˜hÓ/‰GäÐFÓGÐGØ&-�‰�g—l‘lÑ#ÞØ×Ñ×#Ñ# G§L¡LÕ1à×Ñ×#Ñ# A w§|¡|Õ4r.   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)rF   NrW   )Ú.0Úxs     r,   Ú	<genexpr>Ú$Node.iter_markers.<locals>.<genexpr>P  s   é € ÐEÑD˜�!–ÒDùs   ‚r8   )Úiter_markers_with_node©rm   r9   s     r,   Úiter_markersÚNode.iter_markersJ  s   € ñ F˜d×9Ñ9¸tÐ9ÑDÓEÐEr.   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.
Nr9   )r•   ri   rJ   )rm   r9   Únoder¡   s       r,   r­   ÚNode.iter_markers_with_nodeR  sG   é € ð ×%Ñ%Ö'ˆDØ×(Ô(�Ø‘<¤7¨4°¸Ó#>À$Õ#FØ˜*Ô$ó )ò (ùs
   ‚5A	»A	c                ó   • g r‰   rW   r®   s     r,   Úget_closest_markerÚNode.get_closest_marker_  s   € Ø<?r.   c                ó   • g r‰   rW   ©rm   r9   Údefaults      r,   rµ   r¶   b  s   € ØDGr.   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.
r8   )Únextr¯   r¸   s      r,   rµ   r¶   e  s   € ô �D×%Ñ%¨4Ð%Ð0°'Ó:Ð:r.   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.)rP   rœ   Úupdaterj   )rm   Úextra_keywordsr›   s      r,   ÚlistextrakeywordsÚNode.listextrakeywordsn  s4   € ä#&£5ˆØ—N‘NÖ$ˆDØ×!Ñ! $×"<Ñ"<Ö=ñ %àÐr.   c                ó^   • U R                  5        Vs/ sH  oR                  PM     sn$ s  snf r‰   )rœ   r9   )rm   rª   s     r,   Ú	listnamesÚNode.listnamesu  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)rf   Ú_setupstateÚaddfinalizer)rm   Úfins     r,   rÆ   ÚNode.addfinalizerx  s   € ð 	�‰× Ñ ×-Ñ-¨cÕ8r.   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~   )rm   r>   r²   s      r,   Ú	getparentÚNode.getparent�  s,   € ð ×%Ñ%Ö'ˆDÜ˜$×$Ó$Ø’ñ (ð r.   c                ó   • UR                   $ r‰   )Ú	traceback)rm   Úexcinfos     r,   Ú_traceback_filterÚNode._traceback_filter�  s   € Ø× Ñ Ð r.   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ÚshortrF   Té   Ú
showlocals)ÚfuncargsÚabspathrÚ   ÚstyleÚtbfilterÚtruncate_localsÚtruncate_args)Ú_pytest.fixturesrÒ   r~   rÓ   r   r   Úfrom_exceptionÚcauser   Ú	Exceptionr:   Ú
formatreprrd   Ú	getoptionrÏ   Úget_verbosityr
   r&   ÚgetcwdÚinvocation_paramsÚdirÚOSErrorÚgetrepr)rm   rÎ   rÝ   rÒ   rÞ   rß   rà   rÜ   s           r,   Ú_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í   )rm   rÎ   rÝ   s      r,   Úrepr_failureÚNode.repr_failureÊ  s   € ð ×$Ñ$ WÓ4Ð4r.   )rb   rc   rd   rj   rh   r9   ri   re   r+   rf   rl   )NNNNNN)r9   rƒ   re   úNode | Nonerd   úConfig | Nonerf   úSession | Noner'   ÚNoner+   úPath | Nonerk   ú
str | NonerX   rõ   )re   r1   rX   r!   )rX   zpluggy.HookRelay)rX   rƒ   )r„   r   rX   rõ   )rX   Úint©rX   rõ   )rX   zIterator[Node])rX   z
list[Node])T)r£   zstr | MarkDecoratorr˜   ÚboolrX   rõ   r‰   )r9   r÷   rX   zIterator[Mark])r9   r÷   rX   zIterator[tuple[Node, Mark]])r9   rƒ   rX   úMark | None)r9   rƒ   r¹   r   rX   r   )r9   rƒ   r¹   rû   rX   rû   )rX   zset[str])rX   z	list[str])rÇ   zCallable[[], object]rX   rõ   )r>   ztype[_NodeType]rX   z_NodeType | None©rÎ   úExceptionInfo[BaseException]rX   r   )rÎ   rý   rÝ   úTracebackStyle | NonerX   r   )rÎ   rý   rÝ   rþ   rX   ústr | TerminalRepr)!r=   r<   rY   rZ   r[   Ú__annotations__Ú	__slots__rE   Úclassmethodrp   Úpropertyru   rx   rO   rk   r‹   rŽ   r’   r•   rœ   r¥   r¯   r­   r   rµ   r¿   rÂ   rÆ   rÊ   rÏ   rí   rð   r\   rW   r.   r,   r1   r1   w   s’  ‡ ñð Óð	€Ið #Ø $Ø"&ØØ Ø!ð<!àð<!ð ð<!ð ð	<!ð
  ð<!ð ð<!ð ð<!ð ð<!ð 
õ<!ð| ó0ó ð0ð" ó4ó ð4ôVô!
ðJ óó ðô"ôôô	#ô	ö5ö,Fð "&ð%Øð%à	$õ%ð Û?ó Ø?àÛGó ØGö;ôô2ô9ô
ô!ð (,ð8
à-ð8
ð %ð8
ð 
õ	8
ðz (,ð5à-ð5ð %ð5ð 
÷	5ð 5r.   )Ú	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Ù   Úobjr+   zunknown locationéÿÿÿÿ)rJ   r   )r²   r  r  s      r,   r�   r�   Ø  sW   € ô 4;¸4ÀÈTÓ3R€HØÑØ˜˜ˆ|ÐÜ
�$˜˜tÓ
$€CØ
�Ü˜3ÓÐÜ�4˜Ð!3Ó4°bÐ8Ð8r.   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.rW   N©r=   r<   rY   rZ   r[   r\   rW   r.   r,   ÚCollectErrorr  ò  s   † ÜDr.   r  c                ó   • [        S5      e)z;Collect children (items and collectors) for this collector.Úabstract©ÚNotImplementedErrorrt   s    r,   ÚcollectÚCollector.collectõ  s   € ô " *Ó-Ð-r.   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  rd   ræ   rƒ   Úargsrí   )rm   rÎ   Úexcr×   s       r,   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Ð$Ð<Ð<r.   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                  $ )Nr+   r*   )Úexcludepath)ÚhasattrrÍ   Úcutr+   ÚtracebackcutdirÚfilter)rm   rÎ   rÍ   Ú
ntracebacks       r,   rÏ   ÚCollector._traceback_filter  sa   € Ü�4˜× Ñ Ø×)Ñ)ˆIØ"Ÿ™¨D¯I©I˜Ð6ˆJØÓ&Ø'Ÿ^™^¼˜^ÐH�
Ø×$Ñ$ WÓ-Ð-Ø× Ñ Ð r.   rW   N)rX   zIterable[Item | Collector])rÎ   rý   rX   rÿ   rü   )r=   r<   rY   rZ   r[   rä   r  ÚabcÚabstractmethodr  rð   rÏ   r\   rW   r.   r,   r
  r
  ë  sI   † ñôE�yô Eð 	×Ñó.ó ð.ð
=Ø3ð=à	ô=÷*!r.   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_pathsr+   re   s      r,   Ú_check_initialpaths_for_relpathr)    s<   € ð ÓØà—,”,ˆØÕ"Ü�t×'Ñ'¨Ó/Ó0Ò0ñ ð r.   c                  ó”   ^ • \ rS rSrSr        S                 S	U 4S jjjr\SSS.     S
U 4S jjj5       rSrU =r	$ )ÚFSCollectori(  z%Base class for filesystem collectors.Nc	           	     ó´  >• U(       aG  [        U[        5      (       a  Ub   e[        [        U5      nO[        U[        5      (       a  Ub   eUnUc   eUcQ  UR
                  nUbB  UR                  U:w  a2   UR                  UR                  5      n	[        U	5      n[        U5      nX0l        Uc  Uc   eUR                  nUcK   [        U R                  R                  UR                  R                  5      5      nU(       a  [        U5      n[         T
U ]E  UUUUUUS9  g ! [         a     N’f = f! [         a    [        UR                  U5      n NWf = f)N)r9   re   rd   rf   rk   r+   )r~   r1   r   r+  r
   r9   r+   r'  rƒ   r€   r-   rf   rd   Úrootpathr)  Ú_initialpathsrH   rE   )rm   r'   Úpath_or_parentr+   r9   re   rd   rf   rk   ÚrelrT   s             €r,   rE   ÚFSCollector.__init__+  sX  ø€ ö Ü˜.¬$×/Ñ/Ø‘~Ð%�~Üœk¨>Ó:‘Ü˜N¬D×1Ñ1Ø‘|Ð#�|Ø%�ØÑÐÐà‰<Ø—9‘9ˆDØÑ! f§k¡k°TÓ&9ð$Ø×*Ñ*¨6¯;©;Ó7�Cô ˜s›8�DÜ “~�ØŒ	à‰?ØÑ%Ð%Ð%Ø—n‘nˆGà‰>ðVÜ˜TŸY™Y×2Ñ2°7·>±>×3JÑ3JÓKÓL�ö Ü! &Ó)�ä‰ÑØØØØØØð 	ò 	
øô) "ó Ùðûô ó VÜ8¸×9NÑ9NÐPTÓU’ðVús$   Á8D$ Ã8D4 Ä$
D1Ä0D1Ä4 EÅE)r'   r+   c               ó*   >• [         TU ]  " SXUS.UD6$ )zThe public constructor.)re   r'   r+   rW   )rH   rp   )r>   re   r'   r+   r@   rT   s        €r,   rp   ÚFSCollector.from_parenta  s   ø€ ô ‰wÒ"ÐQ¨&ÀdÑQÈbÑQÐQr.   r*   )NNNNNNNN)r'   rõ   r/  zPath | Node | Noner+   rö   r9   r÷   re   rò   rd   ró   rf   rô   rk   r÷   rX   rõ   )r'   rõ   r+   rö   rX   r!   )
r=   r<   rY   rZ   r[   rE   r  rp   r\   r]   r^   s   @r,   r+  r+  (  sÂ   ø† Ù/ð Ø-1Ø ØØ"Ø $Ø"&Ø!ð4
àð4
ð +ð4
ð ð	4
ð
 ð4
ð ð4
ð ð4
ð  ð4
ð ð4
ð 
÷4
ð 4
ðl ð
 Ø ñ	Rð ð		Rð
 ð	Rð 
÷	Ró ö	Rr.   r+  c                  ó   • \ rS rSrSrSrg)ÚFilein  zGBase class for collecting tests from a file.

:ref:`non-python tests`.
rW   Nr  rW   r.   r,   r5  r5  n  s   † ôr.   r5  c                  ó   • \ rS rSrSrSrg)Ú	Directoryiu  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`.
rW   Nr  rW   r.   r,   r7  r7  u  s   † ôr.   r7  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)rd   rf   rk   )rH   rE   Ú_report_sectionsÚuser_propertiesÚ-_check_item_and_collector_diamond_inheritance)rm   r9   re   rd   rf   rk   r@   rT   s          €r,   rE   ÚItem.__init__�  sR   ø€ ô 	‰ÒØØð	
ð ØØñ	
ð ò	
ð =?ˆÔð :<ˆÔà×:Ñ:Õ<r.   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  óf   #   • U H(  n[        U[        5      (       d  M  UR                  v •  M*     g 7fr‰   )Ú
issubclassr
  r=   )r©   Úbases     r,   r«   ÚEItem._check_item_and_collector_diamond_inheritance.<locals>.<genexpr>¼  s"   é € ð 
Ù&3˜d´zÀ$Ì	×7R‹MˆD�MŽM¢mùs   ‚1ž1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/)	ÚtyperJ   ÚsetattrÚjoinÚ	__bases__rN   rO   r=   r    )rm   r>   Ú	attr_nameÚproblemss       r,   r=  Ú2Item._check_item_and_collector_diamond_inheritance¬  sˆ   € ô
 �4‹jˆð @ˆ	Ü�3 5×)Ñ)ØÜ� Ô%à—9‘9ñ 
Ø&)§m¢mó
ó 
ˆö Ü�MŠMØ—<‘<�.ð !%Ø%- Jð /gðgô
 õð r.   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  rt   s    r,   ÚruntestÚItem.runtestÉ  s   € ô "Ð"PÓQÐQr.   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)r;  r˜   )rm   ÚwhenÚkeyÚcontents       r,   Úadd_report_sectionÚItem.add_report_sectionÓ  s%   € ö Ø×!Ñ!×(Ñ(¨$°WÐ)=Õ>ð r.   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*   rt   s    r,   Ú
reportinfoÚItem.reportinfoä  s   € ð �y‰y˜$ Ð"Ð"r.   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Ù   rF   )rV  r   rf   Ú_node_location_to_relpathrE  rƒ   )rm   r  r+   Ú	relfspaths       r,   r  ÚItem.locationñ  s\   € ð —?‘?Ó$ˆÜ˜H Q™KÓ(ˆØ—L‘L×:Ñ:¸4Ó@ˆ	Ü�H˜Q‘KÓ ¤CÒ'Ð'Ð'Ø A™;¨°©Ð4Ð4r.   )r;  r<  )NNNN)rd   ró   rf   rô   rk   r÷   rX   rõ   rù   )rP  rƒ   rQ  rƒ   rR  rƒ   rX   rõ   )rX   z.tuple[os.PathLike[str] | str, int | None, str])rX   ztuple[str, int | None, str])r=   r<   rY   rZ   r[   ÚnextitemrE   r=  r!  r"  rM  rS  rV  r   r  r\   r]   r^   s   @r,   r9  r9  ‡  sŽ   ø† ñð
 €Hð
 Ø $Ø"&Ø!ð=ð ð	=ð
  ð=ð ð=ð 
÷=ð =ô:ð: 	×ÑóRó ðRô?ô"#ð ó
5ó ö
5r.   r9  )r+   zstr | os.PathLike[str]rX   rƒ   )r²   r1   rX   ztuple[str | Path, int | None])r(  zfrozenset[Path]r+   r
   rX   r÷   )GÚ
__future__r   r!  Úcollections.abcr   r   r   r   Ú	functoolsr   r	   r&   Úpathlibr
   Útypingr   r   r   r   r   r   rN   ÚpluggyÚ_pytest._codeÚ_pytestr   Ú_pytest._code.coder   r   r   r   Ú_pytest.compatr   r   Ú_pytest.configr   r   Ú_pytest.mark.structuresr   r   r   Ú_pytest.outcomesr   Ú_pytest.pathlibr   Ú_pytest.stashr   Ú_pytest.warning_typesr    Útyping_extensionsr!   Ú_pytest.mainr"   r)   r-   Ú__file__re   r  r/   r0   ÚABCMetar4   ÚABCr1   r�   r
  r)  r+  r5  r7  r9  rW   r.   r,   Ú<module>rr     sy  ðå "ã 
Ý $Ý $Ý $Ý *Ý %Ý Û 	Û Ý Ý Ý Ý Ý Ý  Ý Û ã ã Ý %Ý ,Ý +Ý (Ý -Ý &Ý $Ý !Ý 0Ý (Ý 1Ý 0Ý !Ý (Ý Ý /ö Ý&õ %ð 
€ô
.ñ �w×'Ñ'Ó(×/Ñ/€ñ ˆTƒ]€ñ �K vÑ.€	ô)4ˆs�{‰{ô )4ôX^5ˆ3�7‰7˜hò ^5ôB9ô&,!��c—g‘gô ,!ñ^ �4Ñð
Ø"ð
Ø*.ð
àó
ó ð
ôCR�)˜SŸW™Wô CRôLˆ;˜Ÿ™ô ô�˜SŸW™Wô ô$u5ˆ4�—‘õ u5r.   