Ë
    V.jsg  ã                  óŒ  — d dl mZ d dlZd dlmZ d dlmZ d dlZd dlZd dlm	Z	 d dl
mZ d dl
mZ d dl
mZ d d	l
mZ d d
l
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dl!m"Z" d dl!m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl(m*Z* d dl(m+Z+ d dl,m-Z- d dl.m/Z/ d dl.m0Z0 d d l1m2Z2 d d!l3m4Z4 erd d"l5m6Z6 d d#l7m8Z8 d$Z9 e	ejt                  «      jv                  Z< ed%«      Z=	 	 	 	 	 	 	 	 d:d&„Z> ed'd(¬)«      Z? G d*„ d+ej€                  «      ZA G d,„ d(ej„                  eA¬-«      ZCd;d.„ZD G d/„ d0eCej„                  «      ZEd<d1„ZF G d2„ d3eEej„                  «      ZG G d4„ d5eGej„                  «      ZH G d6„ d7eGej„                  «      ZI G d8„ d9eCej„                  «      ZJy)=é    )ÚannotationsN)Úcached_property)Ú	signature)ÚPath)ÚAny)ÚCallable)Úcast)ÚIterable)ÚIterator)ÚMutableMapping)ÚNoReturn)Úoverload)ÚTYPE_CHECKING)ÚTypeVar)Úgetfslineno)ÚExceptionInfo)ÚTerminalRepr)Ú	Traceback)ÚTracebackStyle)ÚLEGACY_PATH)ÚConfig)ÚConftestImportFailure)Ú_check_path)ÚNODE_CTOR_FSPATH_ARG)ÚMark)ÚMarkDecorator)ÚNodeKeywords)Úfail)Úabsolutepath)Ú
commonpath)ÚStash)ÚPytestWarning)ÚSelf)ÚSessionÚ/Ú_Tc                ó²   — |�5t        j                  t        j                  | j                  ¬«      d¬«       |�|�t        ||«       |S |€J ‚t        |«      S )N)Únode_type_nameé   )Ú
stacklevel)ÚwarningsÚwarnr   ÚformatÚ__name__r   r   )Ú	node_typeÚpathÚfspaths      úOC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\_pytest/nodes.pyÚ_imply_pathr3   <   se   € ð
 ÐÜ�‰Ü ×'Ñ'Ø(×1Ñ1ôð õ		
ð ÐØÐÜ˜˜fÔ%ØˆàÐ!Ð!Ð!Ü�F‹|Ðó    Ú	_NodeTypeÚNode)Úboundc                  ó,   ‡ — e Zd ZdZdd„Zdˆ fd„Zˆ xZS )Ú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                ót   — dj                  | j                  › d| j                  › �¬«      }t        |d¬«       y )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__zNodeMeta.__call__c   s:   € ð!÷ ‰&˜Ÿ™Ð(¨¨#¯,©,¨Ð8ˆ&Ó
9ð 	ô 	ˆS˜%Ö r4   c           
     ó\  •— 	 t        ‰| �  |i |¤ŽS # t        $ r� t        t	        | d«      «      }|j                  «       D ��ci c]  \  }}||j                  v sŒ||“Œ nc c}}w }}}ddlm} t        j                   || › dt        |«      › d�«      «       t        ‰| �  i |¤ŽcY S w xY w)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.)ÚsuperrD   Ú	TypeErrorr   ÚgetattrÚitemsÚ
parametersÚwarning_typesrH   r+   r,   Úset)r@   rA   rB   ÚsigÚvÚknown_kwrH   Ú	__class__s          €r2   Ú_createzNodeMeta._createl   sº   ø€ ð	4Ü‘7Ñ# QÐ-¨"Ñ-Ð-øÜò 	4ÜœG C¨Ó4Ó5ˆCØ)+¯©¬ÔK©¡  A°q¸C¿N¹NÒ7J˜˜1™©ùÓKˆHÑKÝ?ä�M‰MÙ(Ø�eÐRÔSVÐW_ÓS`ÐRað b(ð (óôô ‘7Ñ# QÐ3¨(Ñ3Ò3ð	4ús"   ƒ ’1B+ÁA ÁA ÁA	B+Â*B+)Úreturnr   )r@   ztype[_T]rU   r&   )r.   r?   Ú__qualname__Ú__doc__rD   rT   Ú__classcell__©rS   s   @r2   r9   r9   T   s   ø„ ñó!÷4ñ 4r4   r9   c                  ój  — e Zd ZU dZded<   dZ	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zed d„«       Ze	d!d„«       Z
d"d	„Zd#d
„Ze	d"d„«       Zd$d„Zd%d„Zd%d„Zd&d„Zd'd„Zd(d)d„Zd*d+d„Z	 d*	 	 	 d,d„Zed-d„«       Zed.d„«       Zd*d/d„Zd0d„Zd1d„Zd2d„Zd3d„Zd4d„Z	 d*	 	 	 	 	 d5d„Z	 d*	 	 	 	 	 d6d„Zy)7r6   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   )r=   ÚparentÚconfigÚsessionr0   Ú_nodeidÚ_storeÚ__dict__Nc                óJ  — || _         || _        |r|| _        n|st        d«      ‚|j                  | _        |r|| _        n|st        d«      ‚|j                  | _        |€|€t        |dd «      }t        t        | «      ||¬«      | _        t        | «      | _
        g | _        t        «       | _        |�d|vsJ ‚|| _        nB| j                  st        d«      ‚| j                  j                  dz   | j                   z   | _        t!        «       | _        | j"                  | _        y )Nz!config or parent must be providedz"session or parent must be providedr0   ©r1   z::()z!nodeid or parent must be providedz::)r=   r[   r\   rJ   r]   rK   r3   Útyper0   r   ÚkeywordsÚown_markersrO   Úextra_keyword_matchesr^   Únodeidr!   Ústashr_   )Úselfr=   r[   r\   r]   r1   r0   rg   s           r2   rF   zNode.__init__œ   s  € ð ˆŒ	ð ˆŒáà"(ˆD�KáÜÐ CÓDÐDØ Ÿ-™-ˆDŒKáà$+ˆD�LáÜÐ DÓEÐEØ!Ÿ>™>ˆDŒLàˆ<˜F˜NÜ˜6 6¨4Ó0ˆDä"-¬d°4«j¸$ÀvÔ"NˆŒ	ô 3?¸tÓ2DˆŒð (*ˆÔô 03«uˆÔ"àÐØ Ñ'Ð'Ð'Ø!ˆD�Là—;’;ÜÐ CÓDÐDØŸ;™;×-Ñ-°Ñ4°t·y±yÑ@ˆDŒLô "›GˆŒ
à—j‘jˆ�r4   c                óf   — d|v rt        d«      ‚d|v rt        d«      ‚ | j                  dd|i|¤ŽS )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.
        r\   z.config is not a valid argument for from_parentr]   z/session is not a valid argument for from_parentr[   © )rJ   rT   )r@   r[   rB   s      r2   Úfrom_parentzNode.from_parentÙ   sC   € ð �r‰>ÜÐLÓMÐMØ˜‰?ÜÐMÓNÐNØˆs�{‰{Ñ/ &Ð/¨BÑ/Ð/r4   c                óL   — | j                   j                  | j                  «      S )z6fspath-sensitive hook proxy used to call pytest hooks.)r]   Úgethookproxyr0   ©ri   s    r2   Úihookz
Node.ihookë   s   € ð �|‰|×(Ñ(¨¯©Ó3Ð3r4   c                ód   — dj                  | j                  j                  t        | dd «      «      S )Nz<{} {}>r=   )r-   rS   r.   rK   ro   s    r2   Ú__repr__zNode.__repr__ð   s(   € Ø×Ñ §¡× 7Ñ 7¼ÀÀvÈtÓ9TÓUÐUr4   c                ó®   — t        |t        «      st        d|›�«      ‚t        | «      \  }}|€J ‚t	        j
                  |dt        |«      |dz   ¬«       y)aw  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 NrG   )ÚcategoryÚfilenameÚlineno)Ú
isinstanceÚWarningÚ
ValueErrorÚget_fslocation_from_itemr+   Úwarn_explicitÚstr)ri   Úwarningr0   rv   s       r2   r,   z	Node.warnó   sc   € ô, ˜'¤7Ô+ÜØJÈ7È+ÐVóð ô 0°Ó5‰ˆˆfØÐ!Ð!Ð!Ü×ÑØØÜ˜“YØ˜A‘:ö		
r4   c                ó   — | j                   S )z;A ::-separated string denoting its collection tree address.)r^   ro   s    r2   rg   zNode.nodeid  s   € ð �|‰|Ðr4   c                ó,   — t        | j                  «      S ©N)Úhashr^   ro   s    r2   Ú__hash__zNode.__hash__  s   € Ü�D—L‘LÓ!Ð!r4   c                 ó   — y r€   rk   ro   s    r2   Úsetupz
Node.setup   ó   € Ør4   c                 ó   — y r€   rk   ro   s    r2   ÚteardownzNode.teardown#  r…   r4   c              #  ó<   K  — | }|�|–— |j                   }|�Œyy­w)zšIterate over all parent collectors starting from and including self
        up to the root of the collection tree.

        .. versionadded:: 8.1
        N)r[   )ri   r[   s     r2   Úiter_parentszNode.iter_parents&  s)   è ø€ ð #ˆØÐ ØŠLØ—]‘]ˆFð Ó ùs   ‚šc                ór   — g }| }|� |j                  |«       |j                  }|�Œ |j                  «        |S )zxReturn a list of all parent collectors starting from the root of the
        collection tree down to and including self.)Úappendr[   Úreverse)ri   ÚchainÚitems      r2   Ú	listchainzNode.listchain1  sA   € ð ˆØ ˆØÐØ�L‰L˜ÔØ—;‘;ˆDð Ñð 	�‰ŒØˆr4   c                óT  — ddl m} t        |t        «      r|}n(t        |t        «      rt        ||«      }nt        d«      ‚|| j                  |j                  <   |r&| j                  j                  |j                  «       y| j                  j                  d|j                  «       y)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‘   rw   r   r|   rK   ry   rd   r=   re   r‹   ÚmarkÚinsert)ri   Úmarkerr‹   r‘   Úmarker_s        r2   Ú
add_markerzNode.add_marker<  s   € õ 	*ä�fœmÔ,Ø‰GÜ˜¤Ô$Ü˜h¨Ó/‰GäÐFÓGÐGØ&-ˆ�‰�g—l‘lÑ#ÙØ×Ñ×#Ñ# G§L¡LÕ1à×Ñ×#Ñ# A w§|¡|Õ4r4   c                ó4   — d„ | j                  |¬«      D «       S )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  ó&   K  — | ]	  }|d    –— Œ y­w)rG   Nrk   )Ú.0Úxs     r2   Ú	<genexpr>z$Node.iter_markers.<locals>.<genexpr>X  s   è ø€ ÐEÑD˜��!•ÑDùs   ‚r<   )Úiter_markers_with_node©ri   r=   s     r2   Úiter_markerszNode.iter_markersR  s   € ñ F˜d×9Ñ9¸tÐ9ÔDÓEÐEr4   c              #  óŠ   K  — | j                  «       D ],  }|j                  D ]  }|�t        |dd«      |k(  sŒ||f–— Œ Œ. y­w)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‰   re   rK   )ri   r=   Únoder“   s       r2   r�   zNode.iter_markers_with_nodeZ  sJ   è ø€ ð ×%Ñ%Ö'ˆDØ×(Ô(�Ø�<¤7¨4°¸Ó#>À$Ó#FØ ˜*Ó$ñ )ñ (ùs
   ‚5A¸Ac                 ó   — y r€   rk   rž   s     r2   Úget_closest_markerzNode.get_closest_markerg  s   € Ø<?r4   c                 ó   — y r€   rk   ©ri   r=   Údefaults      r2   r£   zNode.get_closest_markerj  s   € ØDGr4   c                ó:   — t        | j                  |¬«      |«      S )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£   zNode.get_closest_markerm  s   € ô �D×%Ñ%¨4Ð%Ó0°'Ó:Ð:r4   c                óz   — t        «       }| j                  «       D ]  }|j                  |j                  «       Œ |S )z;Return a set of all extra keywords in self and any parents.)rO   r�   Úupdaterf   )ri   Úextra_keywordsrŽ   s      r2   ÚlistextrakeywordszNode.listextrakeywordsv  s4   € ä#&£5ˆØ—N‘NÖ$ˆDØ×!Ñ! $×"<Ñ"<Õ=ð %àÐr4   c                ó\   — | j                  «       D �cg c]  }|j                  ‘Œ c}S c c}w r€   )r�   r=   )ri   r›   s     r2   Ú	listnameszNode.listnames}  s'   € Ø $§¡Ô 0Ó1Ñ 0˜1�—“Ð 0Ñ1Ð1ùÒ1s   “)c                óP   — | j                   j                  j                  || «       y)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)r]   Ú_setupstateÚaddfinalizer)ri   Úfins     r2   r±   zNode.addfinalizer€  s   € ð 	�‰× Ñ ×-Ñ-¨c°4Õ8r4   c                óN   — | j                  «       D ]  }t        ||«      sŒ|c S  y)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‰   rw   )ri   r@   r¡   s      r2   Ú	getparentzNode.getparent‰  s+   € ð ×%Ñ%Ö'ˆDÜ˜$ Õ$Ø’ð (ð r4   c                ó   — |j                   S r€   )Ú	traceback)ri   Úexcinfos     r2   Ú_traceback_filterzNode._traceback_filter•  s   € Ø× Ñ Ð r4   c           	     óª  — ddl m} t        |j                  t        «      r)t        j                  |j                  j                  «      }t        |j                  t        j                  «      r|j                  j                  sd}t        |j                  |«      r|j                  j                  «       S | j                  j                  dd«      rd}d}n| j                  }|dk(  rd}|€$| j                  j                  dd«      d	k(  rd	}nd}| j                  j                  «       d
kD  rd}nd}| j                  j                  «       dkD  rdnd}	 t!        t#        j$                  «       «      | j                  j&                  j(                  k7  }|j-                  d|| j                  j                  dd«      ||||¬«      S # t*        $ r d}Y Œ?w xY w)Nr   )ÚFixtureLookupErrorÚvalueÚ	fulltraceFÚlongÚautoÚtbstyleÚshortrG   Té   Ú
showlocals)ÚfuncargsÚabspathrÂ   ÚstyleÚtbfilterÚtruncate_localsÚtruncate_args)Ú_pytest.fixturesrº   rw   r»   r   r   Úfrom_exceptionÚcauser   Ú	Exceptionr>   Ú
formatreprr\   Ú	getoptionr¸   Úget_verbosityr   ÚosÚgetcwdÚinvocation_paramsÚdirÚOSErrorÚgetrepr)ri   r·   rÅ   rº   rÆ   rÇ   rÈ   rÄ   s           r2   Ú_repr_failure_pyzNode._repr_failure_py˜  s�  € õ
 	8ä�g—m‘mÔ%:Ô;Ü#×2Ñ2°7·=±=×3FÑ3FÓGˆGÜ�g—m‘m¤T§^¡^Ô4Ø—=‘=×(Ò(Ø�Ü�g—m‘mÐ%7Ô8Ø—=‘=×+Ñ+Ó-Ð-ð �;‰;× Ñ  ¨eÔ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                ó&   — | j                  ||«      S )z¯Return a representation of a collection or test failure.

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

        :param excinfo: Exception information for the failure.
        )rÖ   )ri   r·   rÅ   s      r2   Úrepr_failurezNode.repr_failureÒ  s   € ð ×$Ñ$ W¨eÓ4Ð4r4   )NNNNNN)r=   r|   r[   úNode | Noner\   úConfig | Noner]   úSession | Noner1   úLEGACY_PATH | Noner0   úPath | Nonerg   ú
str | NonerU   ÚNone)r[   r6   rU   r#   )rU   zpluggy.HookRelay)rU   r|   )r}   rx   rU   rß   )rU   Úint©rU   rß   )rU   zIterator[Node])rU   z
list[Node])T)r•   zstr | MarkDecoratorr‹   ÚboolrU   rß   r€   )r=   rÞ   rU   zIterator[Mark])r=   rÞ   rU   zIterator[tuple[Node, Mark]])r=   r|   rU   úMark | None)r=   r|   r¦   r   rU   r   )r=   r|   r¦   rã   rU   rã   )rU   zset[str])rU   z	list[str])r²   zCallable[[], object]rU   rß   )r@   ztype[_NodeType]rU   z_NodeType | None©r·   úExceptionInfo[BaseException]rU   r   )r·   rå   rÅ   úTracebackStyle | NonerU   r   )r·   rå   rÅ   ræ   rU   ústr | TerminalRepr)r.   r?   rV   rW   Ú__annotations__Ú	__slots__rF   Úclassmethodrl   Úpropertyrp   rr   r,   rg   r‚   r„   r‡   r‰   r�   r—   rŸ   r�   r   r£   r¬   r®   r±   r´   r¸   rÖ   rØ   rk   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ð 
ô	5r4   )Ú	metaclassc                ó|   — t        | dd«      }|�|dd S t        | dd«      }|�t        |«      S t        | dd«      dfS )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éÿÿÿÿ)rK   r   )r¡   rî   rï   s      r2   rz   rz   à  sW   € ô 4;¸4ÀÈTÓ3R€HØÐØ˜˜ˆ|ÐÜ
�$˜˜tÓ
$€CØ
€Ü˜3ÓÐÜ�4˜Ð!3Ó4°bÐ8Ð8r4   c                  ód   — e Zd ZdZ G d„ de«      Zej                  dd„«       Z	 	 	 	 d	d„Z	d
d„Z
y)Ú	Collectorz‰Base class of all collectors.

    Collector create children through `collect()` and thus iteratively build
    the collection tree.
    c                  ó   — e Zd ZdZy)úCollector.CollectErrorz6An error during collection, contains a custom message.N©r.   r?   rV   rW   rk   r4   r2   ÚCollectErrorrô   ú  s   „ ÚDr4   rö   c                ó   — t        d«      ‚)z;Collect children (items and collectors) for this collector.Úabstract©ÚNotImplementedErrorro   s    r2   ÚcollectzCollector.collectý  s   € ô " *Ó-Ð-r4   c                ó.  — t        |j                  | j                  «      r@| j                  j	                  dd«      s$|j                  }t        |j                  d   «      S | j                  j	                  dd«      }|dk(  rd}| j                  ||¬«      S )zyReturn a representation of a collection failure.

        :param excinfo: Exception information for the failure.
        r¼   Fr   r¿   r¾   rÀ   )rÅ   )rw   r»   rö   r\   rÎ   r|   ÚargsrÖ   )ri   r·   Úexcr¿   s       r2   rØ   zCollector.repr_failure  sˆ   € ô �g—m‘m T×%6Ñ%6Ô7ÀÇÁ×@UÑ@UØ˜ôA
ð —-‘-ˆCÜ�s—x‘x ‘{Ó#Ð#ð —+‘+×'Ñ'¨	°6Ó:ˆØ�fÒØˆGà×$Ñ$ W°GÐ$Ó<Ð<r4   c                óÚ   — t        | d«      rT|j                  }|j                  | j                  ¬«      }||k(  r|j                  t        ¬«      }|j                  |«      S |j                  S )Nr0   ©r0   )Úexcludepath)Úhasattrr¶   Úcutr0   ÚtracebackcutdirÚfilter)ri   r·   r¶   Ú
ntracebacks       r2   r¸   zCollector._traceback_filter  s`   € Ü�4˜Ô Ø×)Ñ)ˆIØ"Ÿ™¨D¯I©I˜Ó6ˆJØ˜YÒ&Ø'Ÿ^™^¼˜^ÓH�
Ø×$Ñ$ WÓ-Ð-Ø× Ñ Ð r4   N)rU   zIterable[Item | Collector])r·   rå   rU   rç   rä   )r.   r?   rV   rW   rÌ   rö   ÚabcÚabstractmethodrû   rØ   r¸   rk   r4   r2   rò   rò   ó  sI   „ ñôE�yô Eð 	×Ñò.ó ð.ð
=Ø3ð=à	ó=ô*!r4   rò   c                ó’   — | j                   D ]8  }t        ||«      |k(  sŒt        |j                  |«      «      }|dk(  rdc S |c S  y )Nr;   Ú )Ú_initialpathsr    r|   Úrelative_to)r]   r0   Úinitial_pathÚrels       r2   Ú_check_initialpaths_for_relpathr  "  sL   € Ø×-Ô-ˆÜ�d˜LÓ)¨\Ó9Ü�d×&Ñ& |Ó4Ó5ˆCØ š�2Ò,¨Ò,ð .ð r4   c                  ó€   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zedddœ	 	 	 	 	 dˆ fd„«       Zˆ xZS )	ÚFSCollectorz%Base class for filesystem collectors.Nc	                ó"  •— |r;t        |t        «      r|�J ‚t        t        |«      }nt        |t        «      r|�J ‚|}t        t        | «      ||¬«      }|€h|j                  }|�Z|j                  |k7  rK	 |j                  |j                  «      }	t        |	«      }|j                  t        j                  t        «      }|| _        |€|€J ‚|j                   }|€v	 t        | j                  j                  |j"                  j$                  «      «      }|r;t        j                  t        k7  r$|j                  t        j                  t        «      }t(        ‰
| �U  ||||||¬«       y # t        $ r Y ŒÖw xY w# t        $ r t'        ||«      }Y Œyw xY w)Nrb   )r=   r[   r\   r]   rg   r0   )rw   r6   r	   r  r   r3   rc   r=   r0   r  r|   ry   ÚreplacerÐ   ÚsepÚSEPr]   r\   Úrootpathr  rI   rF   )ri   r1   Úpath_or_parentr0   r=   r[   r\   r]   rg   r  rS   s             €r2   rF   zFSCollector.__init__-  sr  ø€ ñ Ü˜.¬$Ô/Ø�~Ð%�~Üœk¨>Ó:‘Ü˜N¬DÔ1Ø�|Ð#�|Ø%�äœ4 ›: t°FÔ;ˆØˆ<Ø—9‘9ˆDØÐ! f§k¡k°TÒ&9ð$Ø×*Ñ*¨6¯;©;Ó7�Cô ˜s›8�DØ—|‘|¤B§F¡F¬CÓ0�ØˆŒ	àˆ?ØÐ%Ð%Ð%Ø—n‘nˆGàˆ>ðHÜ˜TŸY™Y×2Ñ2°7·>±>×3JÑ3JÓKÓL�ñ œ"Ÿ&™&¤Cš-ØŸ™¬¯©´Ó4�ä‰ÑØØØØØØð 	õ 	
øô) "ò Ùðûô ò HÜ8¸À$ÓG’ðHús$   Á6E' Ã8E6 Å'	E3Å2E3Å6FÆF)r1   r0   c               ó*   •— t        ‰| �  d|||dœ|¤ŽS )zThe public constructor.)r[   r1   r0   rk   )rI   rl   )r@   r[   r1   r0   rB   rS   s        €r2   rl   zFSCollector.from_parentc  s!   ø€ ô ‰wÑ"ÐQ¨&¸ÀdÑQÈbÑQÐQr4   )NNNNNNNN)r1   rÜ   r  zPath | Node | Noner0   rÝ   r=   rÞ   r[   rÙ   r\   rÚ   r]   rÛ   rg   rÞ   rU   rß   )r1   rÜ   r0   rÝ   rU   r#   )r.   r?   rV   rW   rF   rê   rl   rX   rY   s   @r2   r  r  *  s½   ø„ Ù/ð &*Ø-1Ø ØØ"Ø $Ø"&Ø!ð4
à"ð4
ð +ð4
ð ð	4
ð
 ð4
ð ð4
ð ð4
ð  ð4
ð ð4
ð 
õ4
ðl ð
 &*Ø ñ	Rð #ð		Rð
 ð	Rð 
ô	Ró ô	Rr4   r  c                  ó   — e Zd ZdZy)ÚFilezOBase class for collecting tests from a file.

    :ref:`non-python tests`.
    Nrõ   rk   r4   r2   r  r  p  s   „ òr4   r  c                  ó   — e Zd ZdZy)Ú	Directorya  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`.
    Nrõ   rk   r4   r2   r  r  w  s   „ òr4   r  c                  ó�   ‡ — e Zd ZdZdZ	 	 	 	 d		 	 	 	 	 	 	 d
ˆ fd„Zdd„Zej                  dd„«       Z	dd„Z
dd„Zedd„«       Zˆ xZS )ÚItemz�Base class of all test invocation items.

    Note that for a single function there might be multiple test invocation items.
    Nc                ól   •— t        ‰| �  ||f|||dœ|¤Ž g | _        g | _        | j	                  «        y )N)r\   r]   rg   )rI   rF   Ú_report_sectionsÚuser_propertiesÚ-_check_item_and_collector_diamond_inheritance)ri   r=   r[   r\   r]   rg   rB   rS   s          €r2   rF   zItem.__init__‘  sR   ø€ ô 	‰ÑØØð	
ð ØØñ	
ð ò	
ð =?ˆÔð :<ˆÔà×:Ñ:Õ<r4   c                óò   — t        | «      }d}t        ||d«      ryt        ||d«       dj                  d„ |j                  D «       «      }|r+t        j                  |j                  › d|› d�t        «       yy)	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  óV   K  — | ]!  }t        |t        «      sŒ|j                  –— Œ# y ­wr€   )Ú
issubclassrò   r.   )rš   Úbases     r2   rœ   zEItem._check_item_and_collector_diamond_inheritance.<locals>.<genexpr>¾  s!   è ø€ ð 
Ù&3˜d´zÀ$Ì	Õ7RˆD�M�M¡mùs   ‚)˜)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/)	rc   rK   ÚsetattrÚjoinÚ	__bases__r+   r,   r.   r"   )ri   r@   Ú	attr_nameÚproblemss       r2   r"  z2Item._check_item_and_collector_diamond_inheritance®  s‰   € ô
 �4‹jˆð @ˆ	Ü�3˜	 5Ô)ØÜ��Y Ô%à—9‘9ñ 
Ø&)§m¢mó
ó 
ˆñ Ü�M‰MØ—<‘<�.ð !%Ø%- Jð /gðgô
 õð r4   c                ó   — t        d«      ‚)zƒRun the test case for this item.

        Must be implemented by subclasses.

        .. seealso:: :ref:`non-python tests`
        z,runtest must be implemented by Item subclassrù   ro   s    r2   ÚruntestzItem.runtestË  s   € ô "Ð"PÓQÐQr4   c                óF   — |r| j                   j                  |||f«       yy)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‹   )ri   ÚwhenÚkeyÚcontents       r2   Úadd_report_sectionzItem.add_report_sectionÕ  s'   € ñ Ø×!Ñ!×(Ñ(¨$°°WÐ)=Õ>ð r4   c                ó    — | j                   ddfS )aP  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   ro   s    r2   Ú
reportinfozItem.reportinfoæ  s   € ð �y‰y˜$ Ð"Ð"r4   c                ó¶   — | j                  «       }t        |d   «      }| j                  j                  |«      }t	        |d   «      t
        u sJ ‚||d   |d   fS )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Á   rG   )r5  r   r]   Ú_node_location_to_relpathrc   r|   )ri   rî   r0   Ú	relfspaths       r2   rî   zItem.locationó  s^   € ð —?‘?Ó$ˆÜ˜H Q™KÓ(ˆØ—L‘L×:Ñ:¸4Ó@ˆ	Ü�H˜Q‘KÓ ¤CÑ'Ð'Ð'Ø˜8 A™;¨°©Ð4Ð4r4   )NNNN)r\   rÚ   r]   rÛ   rg   rÞ   rU   rß   rá   )r0  r|   r1  r|   r2  r|   rU   rß   )rU   z.tuple[os.PathLike[str] | str, int | None, str])rU   ztuple[str, int | None, str])r.   r?   rV   rW   ÚnextitemrF   r"  r  r  r.  r3  r5  r   rî   rX   rY   s   @r2   r  r  ‰  s‰   ø„ ñð
 €Hð
 Ø $Ø"&Ø!ð=ð ð	=ð
  ð=ð ð=ð 
õ=ó:ð: 	×ÑòRó ðRó?ó"#ð ò
5ó ô
5r4   r  )r/   z
type[Node]r0   rÝ   r1   rÜ   rU   r   )r¡   r6   rU   ztuple[str | Path, int | None])r]   r$   r0   r   rU   rÞ   )KÚ
__future__r   r  Ú	functoolsr   Úinspectr   rÐ   Úpathlibr   Útypingr   r   r	   r
   r   r   r   r   r   r   r+   ÚpluggyÚ_pytest._codeÚ_pytestr   Ú_pytest._code.coder   r   r   r   Ú_pytest.compatr   Ú_pytest.configr   r   Ú_pytest.config.compatr   Ú_pytest.deprecatedr   Ú_pytest.mark.structuresr   r   r   Ú_pytest.outcomesr   Ú_pytest.pathlibr   r    Ú_pytest.stashr!   Ú_pytest.warning_typesr"   Útyping_extensionsr#   Ú_pytest.mainr$   r  Ú__file__r[   r  r&   r3   r5   ÚABCMetar9   ÚABCr6   rz   rò   r  r  r  r  r  rk   r4   r2   Ú<module>rQ     su  ðå "ã 
Ý %Ý Û 	Û Ý Ý Ý Ý Ý Ý Ý !Ý Ý Ý  Ý Û ã ã Ý %Ý ,Ý +Ý (Ý -Ý &Ý !Ý 0Ý -Ý 3Ý (Ý 1Ý 0Ý !Ý (Ý &Ý Ý /ñ Ý&õ %ð 
€á�w×'Ñ'Ó(×/Ñ/€ñ ˆTƒ]€ðØðà
ðð ðð 
ó	ñ* �K vÔ.€	ô)4ˆs�{‰{ô )4ôX]5ˆ3�7‰7˜hõ ]5ó@9ô&,!��c—g‘gô ,!ó^ôCR�)˜SŸW™Wô CRôLˆ;˜Ÿ™ô ô�˜SŸW™Wô ô$u5ˆ4�—‘õ u5r4   