§
    öyIfRh  ã                   ó  — 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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/m0Z0 d d"l1m2Z2 d d#l1m3Z3 d d$l4m5Z5 d d%l6m7Z7 erd d&lm8Z8 d d'lm9Z9 d d(l:m;Z; d)Z< eej=        ¦  «        j>        Z? ed*¦  «        Z@d+ed,         d-ee         d.ee#         d/efd0„ZA ed1d,¬2¦  «        ZB G d3„ d4e jC        ¦  «        ZD G d5„ d,e jE        eD¬6¦  «        ZFd7d,d/eeeGef         eeH         f         fd8„ZI G d9„ d:eFe jE        ¦  «        ZJd;d<d-ed/eeG         fd=„ZK G d>„ d?eJe jE        ¦  «        ZL G d@„ dAeLe jE        ¦  «        ZM G dB„ dCeLe jE        ¦  «        ZN G dD„ dEeFe jE        ¦  «        ZOdS )Fé    N)Úcached_property)Ú	signature)ÚPath)ÚAny)ÚCallable)Úcast)ÚIterable)ÚIterator)ÚList)ÚMutableMapping)ÚNoReturn)ÚOptional)Úoverload)ÚSet)ÚTuple)ÚType)ÚTYPE_CHECKING)ÚTypeVar)ÚUnion)Úgetfslineno)ÚExceptionInfo)ÚTerminalRepr)Ú	Traceback)ÚLEGACY_PATH)ÚConfig)ÚConftestImportFailure)Ú_check_path)ÚNODE_CTOR_FSPATH_ARG)ÚMark)ÚMarkDecorator)ÚNodeKeywords)Úfail)Úabsolutepath)Ú
commonpath)ÚStash)ÚPytestWarning)ÚSelf)Ú_TracebackStyle)ÚSessionú/Ú_TÚ	node_typeÚNodeÚpathÚfspathÚreturnc                 ó´   — |�.t          j        t          j        | j        ¬¦  «        d¬¦  «         |�|�t          ||¦  «         |S |€J ‚t          |¦  «        S )N)Únode_type_nameé   )Ú
stacklevel)ÚwarningsÚwarnr   ÚformatÚ__name__r   r   )r,   r.   r/   s      úA/var/www/piapp/venv/lib/python3.11/site-packages/_pytest/nodes.pyÚ_imply_pathr:   @   s~   € ð
 ÐÝŒÝ Ô'Ø(Ô1ðñ ô ð ð		
ñ 	
ô 	
ð 	
ð ÐØÐÝ˜˜fÑ%Ô%Ð%ØˆàÐ!Ð!Ð!Ý�F‰|Œ|Ðó    Ú	_NodeType)Úboundc                   óD   ‡ — e Zd ZdZdefd„Zdee         defˆ 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.
    r0   c                 ór   — d                      | j        › d| j        › �¬¦  «        }t          |d¬¦  «         d S )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)r7   Ú
__module__r8   r"   )ÚclsÚkÚkwÚmsgs       r9   Ú__call__zNodeMeta.__call__g   sJ   € ð!÷ Š&˜œÐ8Ð8¨#¬,Ð8Ð8ˆ&Ñ
9Ô
9ð 	õ 	ˆS˜%Ð Ñ Ô Ð Ð Ð r;   rF   c           
      ór  •‡— 	  t          ¦   «         j        |i |¤ŽS # t          $ r� t          t	          | d¦  «        ¦  «        Šˆfd„|                     ¦   «         D ¦   «         }ddlm} t          j	         || › dt          |¦  «        › d�¦  «        ¦  «          t          ¦   «         j        |i |¤ŽcY S w xY w)NÚ__init__c                 ó.   •— i | ]\  }}|‰j         v ¯||“ŒS © )Ú
parameters)Ú.0rG   ÚvÚsigs      €r9   ú
<dictcomp>z$NodeMeta._create.<locals>.<dictcomp>u   s+   ø€ ÐKÐKÐK¡  A°q¸C¼NÐ7JÐ7J˜˜1Ð7JÐ7JÐ7Jr;   é   )Ú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.)ÚsuperrJ   Ú	TypeErrorr   ÚgetattrÚitemsÚwarning_typesrU   r5   r6   Úset)rF   rG   rH   Úknown_kwrU   rR   Ú	__class__s        @€r9   Ú_createzNodeMeta._createp   sú   øø€ ð	4Ø#•5‘7”7Ô# QÐ-¨"Ð-Ð-Ð-øÝð 	4ð 	4ð 	4Ý�G C¨Ñ4Ô4Ñ5Ô5ˆCØKÐKÐKÐK¨¯ª©¬ÐKÑKÔKˆHØ?Ð?Ð?Ð?Ð?Ð?åŒMØ(Ð(Øð (ð (ÕSVÐW_ÑS`ÔS`ð (ð (ð (ñô ñô ð ð $•5‘7”7Ô# QÐ3¨(Ð3Ð3Ð3Ð3Ð3ð	4øøøs   „ �BB6Â5B6)
r8   rE   Ú__qualname__Ú__doc__r   rJ   r   r+   r^   Ú__classcell__©r]   s   @r9   r?   r?   X   st   ø€ € € € € ðð ð! 8ð !ð !ð !ð !ð4�T˜"”Xð 4¨Bð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r;   r?   c                   óD  — e Zd ZU dZeed<   dZ	 	 	 	 	 	 d1dedddee	         d	d
dee         dee
         dee         ddfd„Zed2d„¦   «         Zedej        fd„¦   «         Zdefd„Zdeddfd„Zedefd„¦   «         Zdefd„Zd3d„Zd3d„Zded          fd„Zded          fd„Z	 d4deeef         de ddfd„Z!d5dee         dee"         fd„Z#	 d5dee         dee$d e"f                  fd „Z%e&dedee"         fd!„¦   «         Z'e&ded"e"de"fd#„¦   «         Z'	 d5ded"ee"         dee"         fd$„Z'de(e         fd%„Z)dee         fd&„Z*d'e+g e,f         ddfd(„Z-d)e.e/         dee/         fd*„Z0d+e1e2         de3fd,„Z4	 d5d+e1e2         d-d.de5fd/„Z6	 d5d+e1e2         d-d.deee5f         fd0„Z7dS )6r-   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/   )rC   ÚparentÚconfigÚsessionr.   Ú_nodeidÚ_storeÚ__dict__NrC   rd   zOptional[Node]re   rf   zOptional[Session]r.   Únodeidr0   c                 óN  — || _         || _        |r|| _        n|st          d¦  «        ‚|j        | _        |r|| _        n|st          d¦  «        ‚|j        | _        |€|€t          |dd ¦  «        }t          t          | ¦  «        ||¬¦  «        | _        t          | ¦  «        | _
        g | _        t          ¦   «         | _        |�d|vsJ ‚|| _        n2| j        st          d¦  «        ‚| j        j        dz   | j         z   | _        t!          ¦   «         | _        | j        | _        d S )Nz!config or parent must be providedz"session or parent must be providedr.   ©r/   z::()z!nodeid or parent must be providedz::)rC   rd   re   rW   rf   rX   r:   Útyper.   r!   ÚkeywordsÚown_markersr[   Úextra_keyword_matchesrg   rj   r%   Ústashrh   )ÚselfrC   rd   re   rf   r/   r.   rj   s           r9   rL   zNode.__init__    sC  € ð ˆŒ	ð ˆŒàð 	(à"(ˆDŒKˆKàð EÝÐ CÑDÔDÐDØ œ-ˆDŒKàð 	*à$+ˆDŒLˆLàð FÝÐ DÑEÔEÐEØ!œ>ˆDŒLàˆ<˜F˜NÝ˜6 6¨4Ñ0Ô0ˆDå"-­d°4©j¬j¸$ÀvÐ"NÑ"NÔ"NˆŒ	õ 3?¸tÑ2DÔ2DˆŒð (*ˆÔõ 03©u¬uˆÔ"àÐØ Ð'Ð'Ð'Ð'Ø!ˆDŒLˆLà”;ð EÝÐ CÑDÔDÐDØœ;Ô-°Ñ4°t´yÑ@ˆDŒLõ "™GœGˆŒ
à”jˆŒˆˆr;   r'   c                 ól   — 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.
        re   z.config is not a valid argument for from_parentrf   z/session is not a valid argument for from_parentrd   rN   )rW   r^   )rF   rd   rH   s      r9   Úfrom_parentzNode.from_parentÝ   sQ   € ð �rˆ>ˆ>ÝÐLÑMÔMÐMØ˜ˆ?ˆ?ÝÐMÑNÔNÐNØˆsŒ{Ð/Ð/ &Ð/¨BÐ/Ð/Ð/r;   c                 ó@   — | j                              | j        ¦  «        S )z6fspath-sensitive hook proxy used to call pytest hooks.)rf   Úgethookproxyr.   ©rr   s    r9   Úihookz
Node.ihookï   s   € ð Œ|×(Ò(¨¬Ñ3Ô3Ð3r;   c                 ó`   — d                      | j        j        t          | dd ¦  «        ¦  «        S )Nz<{} {}>rC   )r7   r]   r8   rX   rw   s    r9   Ú__repr__zNode.__repr__ô   s)   € Ø×Ò ¤Ô 7½ÀÀvÈtÑ9TÔ9TÑUÔUÐUr;   Úwarningc                 óÐ   — t          |t          ¦  «        st          d|›�¦  «        ‚t          | ¦  «        \  }}|€J ‚t	          j        |dt          |¦  «        |dz   ¬¦  «         dS )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 NrT   )ÚcategoryÚfilenameÚlineno)Ú
isinstanceÚWarningÚ
ValueErrorÚget_fslocation_from_itemr5   Úwarn_explicitÚstr)rr   r{   r.   r   s       r9   r6   z	Node.warn÷   sŒ   € õ, ˜'¥7Ñ+Ô+ð 	ÝØVÈ7ÐVÐVñô ð õ 0°Ñ5Ô5‰ˆˆfØÐ!Ð!Ð!ÝÔØØÝ˜‘Y”YØ˜A‘:ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r;   c                 ó   — | j         S )z;A ::-separated string denoting its collection tree address.)rg   rw   s    r9   rj   zNode.nodeid  s   € ð Œ|Ðr;   c                 ó*   — t          | j        ¦  «        S ©N)Úhashrg   rw   s    r9   Ú__hash__zNode.__hash__!  s   € Ý�D”LÑ!Ô!Ð!r;   c                 ó   — d S rˆ   rN   rw   s    r9   Úsetupz
Node.setup$  ó   € Øˆr;   c                 ó   — d S rˆ   rN   rw   s    r9   ÚteardownzNode.teardown'  r�   r;   c              #   ó0   K  — | }|�|V — |j         }|­dS dS )zšIterate over all parent collectors starting from and including self
        up to the root of the collection tree.

        .. versionadded:: 8.1
        N)rd   )rr   rd   s     r9   Úiter_parentszNode.iter_parents*  s7   è è € ð "&ˆØÐ ØˆLˆLˆLØ”]ˆFð Ð Ð Ð Ð Ð r;   c                 óv   — g }| }|�|                      |¦  «         |j        }|­|                     ¦   «          |S )zxReturn a list of all parent collectors starting from the root of the
        collection tree down to and including self.)Úappendrd   Úreverse)rr   ÚchainÚitems      r9   Ú	listchainzNode.listchain5  sI   € ð ˆØ#ˆØÐØ�LŠL˜ÑÔÐØ”;ˆDð Ðð 	�Š‰ŒˆØˆr;   TÚmarkerr“   c                 óP  — ddl m} t          |t          ¦  «        r|}n5t          |t          ¦  «        rt          ||¦  «        }nt          d¦  «        ‚|| j        |j        <   |r!| j	         
                    |j        ¦  «         dS | j	                             d|j        ¦  «         dS )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…   rX   r‚   rn   rC   ro   r“   ÚmarkÚinsert)rr   r˜   r“   rš   Úmarker_s        r9   Ú
add_markerzNode.add_marker@  s¹   € ð 	*Ð)Ð)Ð)Ð)Ð)å�f�mÑ,Ô,ð 	HØˆGˆGÝ˜¥Ñ$Ô$ð 	HÝ˜h¨Ñ/Ô/ˆGˆGåÐFÑGÔGÐGØ&-ˆŒ�g”lÑ#Øð 	5ØÔ×#Ò# G¤LÑ1Ô1Ð1Ð1Ð1àÔ×#Ò# A w¤|Ñ4Ô4Ð4Ð4Ð4r;   c                 óB   — d„ |                       |¬¦  «        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          V — ŒdS )rT   NrN   ©rP   Úxs     r9   ú	<genexpr>z$Node.iter_markers.<locals>.<genexpr>^  s&   è è € ÐEÐE˜��!”ÐEÐEÐEÐEÐEÐEr;   rB   )Úiter_markers_with_node©rr   rC   s     r9   Úiter_markerszNode.iter_markersX  s*   € ð FÐE˜d×9Ò9¸tÐ9ÑDÔDÐEÑEÔEÐEr;   c              #   ó†   K  — |                       ¦   «         D ])}|j        D ]}|�t          |dd¦  «        |k    r||fV — Œ Œ*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 (node, mark) tuples.
        NrC   )r‘   ro   rX   )rr   rC   Únoderœ   s       r9   r¥   zNode.iter_markers_with_node`  sp   è è € ð ×%Ò%Ñ'Ô'ð 	%ð 	%ˆDØÔ(ð %ð %�Ø�<¥7¨4°¸Ñ#>Ô#>À$Ò#FÐ#FØ ˜*Ð$Ð$Ð$øð%ð	%ð 	%r;   c                 ó   — d S rˆ   rN   r¦   s     r9   Úget_closest_markerzNode.get_closest_markerm  s   € Ø?B¸sr;   Údefaultc                 ó   — d S rˆ   rN   ©rr   rC   r¬   s      r9   r«   zNode.get_closest_markerp  s   € ØDGÀCr;   c                 óJ   — t          |                      |¬¦  «        |¦  «        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.
        rB   )Únextr§   r®   s      r9   r«   zNode.get_closest_markers  s%   € õ �D×%Ò%¨4Ð%Ñ0Ô0°'Ñ:Ô:Ð:r;   c                 ó„   — t          ¦   «         }|                      ¦   «         D ]}|                     |j        ¦  «         Œ|S )z;Return a set of all extra keywords in self and any parents.)r[   r—   Úupdaterp   )rr   Úextra_keywordsr–   s      r9   ÚlistextrakeywordszNode.listextrakeywords~  sD   € å#&¡5¤5ˆØ—N’NÑ$Ô$ð 	>ð 	>ˆDØ×!Ò! $Ô"<Ñ=Ô=Ð=Ð=ØÐr;   c                 ó>   — d„ |                       ¦   «         D ¦   «         S )Nc                 ó   — g | ]	}|j         ‘Œ
S rN   rB   r¢   s     r9   ú
<listcomp>z"Node.listnames.<locals>.<listcomp>†  s   € Ð1Ð1Ð1˜1�”Ð1Ð1Ð1r;   )r—   rw   s    r9   Ú	listnameszNode.listnames…  s    € Ø1Ð1 §¢Ñ 0Ô 0Ð1Ñ1Ô1Ð1r;   Úfinc                 óF   — | j         j                             || ¦  «         dS )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)rr   r¹   s     r9   r¼   zNode.addfinalizerˆ  s%   € ð 	ŒÔ ×-Ò-¨c°4Ñ8Ô8Ð8Ð8Ð8r;   rF   c                 ó\   — |                       ¦   «         D ]}t          ||¦  «        r|c S ŒdS )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€   )rr   rF   r©   s      r9   Ú	getparentzNode.getparent‘  sD   € ð ×%Ò%Ñ'Ô'ð 	ð 	ˆDÝ˜$ Ñ$Ô$ð Ø���ðàˆtr;   Úexcinfoc                 ó   — |j         S rˆ   )Ú	traceback)rr   r¿   s     r9   Ú_traceback_filterzNode._traceback_filter�  s   € ØÔ Ð r;   ÚstylezOptional[_TracebackStyle]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                             ¦   «         S | j                             dd¦  «        rd}d}n| j        }|dk    rd}|€$| j                             dd¦  «        d	k    rd	}nd}| j                             d
d¦  «        dk    rd}nd}	 t          t!          j        ¦   «         ¦  «        | j        j        j        k    }n# t(          $ r d}Y nw xY w|                     d|| j                             dd¦  «        |||¬¦  «        S )Nr   )ÚFixtureLookupErrorÚvalueÚ	fulltraceFÚlongÚautoÚtbstyleÚshortÚverboserT   TÚ
showlocals)ÚfuncargsÚabspathrÍ   rÃ   ÚtbfilterÚtruncate_locals)Ú_pytest.fixturesrÅ   r€   rÆ   r   r   Úfrom_exceptionÚcauser"   Ú	ExceptionrD   Ú
formatreprre   Ú	getoptionrÂ   r   ÚosÚgetcwdÚinvocation_paramsÚdirÚOSErrorÚgetrepr)rr   r¿   rÃ   rÅ   rÐ   rÑ   rÏ   s          r9   Ú_repr_failure_pyzNode._repr_failure_py   s³  € ð
 	8Ð7Ð7Ð7Ð7Ð7å�g”mÕ%:Ñ;Ô;ð 	HÝ#Ô2°7´=Ô3FÑGÔGˆGÝ�g”m¥T¤^Ñ4Ô4ð 	 Ø”=Ô(ð  Ø�Ý�g”mÐ%7Ñ8Ô8ð 	.Ø”=×+Ò+Ñ-Ô-Ð-ð Œ;× Ò  ¨eÑ4Ô4ð 	ØˆEØˆHˆHàÔ-ˆHØ˜ŠˆØ�àˆ=ØŒ{×$Ò$ Y°Ñ7Ô7¸7ÒBÐBØ��à�àŒ;× Ò  ¨AÑ.Ô.°Ò2Ð2Ø#ˆOˆOà"ˆOð	Ý�2œ9™;œ;Ñ'Ô'¨4¬;Ô+HÔ+LÒLˆGˆGøÝð 	ð 	ð 	ØˆGˆGˆGð	øøøð �ŠØØØ”{×,Ò,¨\¸5ÑAÔAØØØ+ð ñ 
ô 
ð 	
s   Ä3E ÅEÅEc                 ó.   — |                       ||¦  «        S )z¯Return a representation of a collection or test failure.

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

        :param excinfo: Exception information for the failure.
        )rÞ   )rr   r¿   rÃ   s      r9   Úrepr_failurezNode.repr_failure×  s   € ð ×$Ò$ W¨eÑ4Ô4Ð4r;   )NNNNNN)rd   r-   r0   r'   ©r0   N)Trˆ   )8r8   rE   r_   r`   r   Ú__annotations__Ú	__slots__r…   r   r   r   rL   Úclassmethodrt   ÚpropertyÚpluggyÚ	HookRelayrx   rz   r�   r6   rj   ÚintrŠ   rŒ   r�   r
   r‘   r   r—   r   r    ÚboolrŸ   r   r§   r   r¥   r   r«   r   r´   r¸   r   Úobjectr¼   r   r<   r¾   r   ÚBaseExceptionr   rÂ   r   rÞ   rà   rN   r;   r9   r-   r-   „   s~  € € € € € € ðð ð ÐÐÑð	€Ið $(Ø#'Ø'+Ø(,Ø#Ø $ð;!ð ;!àð;!ð !ð;!ð ˜Ô ð	;!ð
 %ð;!ð ˜Ô%ð;!ð �tŒnð;!ð ˜”ð;!ð 
ð;!ð ;!ð ;!ð ;!ðz ð0ð 0ð 0ñ „[ð0ð" ð4�vÔ'ð 4ð 4ð 4ñ „Xð4ðV˜#ð Vð Vð Vð Vð!
˜Gð !
¨ð !
ð !
ð !
ð !
ðJ ð˜ð ð ð ñ „Xðð"˜#ð "ð "ð "ð "ðð ð ð ðð ð ð ð	#˜h vÔ.ð 	#ð 	#ð 	#ð 	#ð	˜4 œ<ð 	ð 	ð 	ð 	ð AEð5ð 5Ø˜C Ð.Ô/ð5Ø9=ð5à	ð5ð 5ð 5ð 5ð0Fð F ¨#¤ð F¸(À4¼.ð Fð Fð Fð Fð %)ð%ð %Ø˜S”Mð%à	�%˜ ˜Ô%Ô	&ð%ð %ð %ð %ð ØB sÐB¨x¸¬~ÐBÐBÐBñ „XØBàØG sÐG°TÐG¸dÐGÐGÐGñ „XØGð 48ð	;ð 	;Øð	;Ø"*¨4¤.ð	;à	�$Œð	;ð 	;ð 	;ð 	;ð 3 s¤8ð ð ð ð ð2˜4 œ9ð 2ð 2ð 2ð 2ð9 ¨¨V¨Ô 4ð 9¸ð 9ð 9ð 9ð 9ð
˜T )œ_ð 
°¸)Ô1Dð 
ð 
ð 
ð 
ð!¨°}Ô)Eð !È)ð !ð !ð !ð !ð .2ð5
ð 5
à˜}Ô-ð5
ð +ð5
ð 
ð	5
ð 5
ð 5
ð 5
ðt .2ð5ð 5à˜}Ô-ð5ð +ð5ð 
ˆs�LÐ Ô	!ð	5ð 5ð 5ð 5ð 5ð 5r;   )Ú	metaclassr©   c                 ó¦   — 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.
    ÚlocationNé   Úobjr.   zunknown locationéÿÿÿÿ)rX   r   )r©   rî   rð   s      r9   rƒ   rƒ   å  sg   € õ :AÀÀzÐSWÑ9XÔ9X€HØÐØ˜˜˜Œ|ÐÝ
�$˜˜tÑ
$Ô
$€CØ
€Ý˜3ÑÔÐÝ�4˜Ð!3Ñ4Ô4°bÐ8Ð8r;   c                   ó´   — e Zd ZdZ G d„ de¦  «        Zej        dee	d                  fd„¦   «         Z
dee         de	eef         fd„Zdee         defd	„Zd
S )Ú	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dS )úCollector.CollectErrorz6An error during collection, contains a custom message.N©r8   rE   r_   r`   rN   r;   r9   ÚCollectErrorrõ   ÿ  s   € € € € € ØDÐDÐDÐDr;   r÷   r0   )ÚItemró   c                 ó    — t          d¦  «        ‚)z;Collect children (items and collectors) for this collector.Úabstract©ÚNotImplementedErrorrw   s    r9   ÚcollectzCollector.collect  s   € õ " *Ñ-Ô-Ð-r;   r¿   c                 ó"  — t          |j        | j        ¦  «        r<| j                             dd¦  «        s!|j        }t          |j        d         ¦  «        S | j                             dd¦  «        }|dk    rd}|                      ||¬¦  «        S )zyReturn 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Þ   )rr   r¿   ÚexcrÊ   s       r9   rà   zCollector.repr_failure  sš   € õ �g”m TÔ%6Ñ7Ô7ð 	$ÀÄ×@UÒ@UØ˜ñA
ô A
ð 	$ð ”-ˆCÝ�s”x ”{Ñ#Ô#Ð#ð ”+×'Ò'¨	°6Ñ:Ô:ˆØ�fÒÐØˆGà×$Ò$ W°GÐ$Ñ<Ô<Ð<r;   c                 óà   — t          | d¦  «        rX|j        }|                     | j        ¬¦  «        }||k    r|                     t          ¬¦  «        }|                     |¦  «        S |j        S )Nr.   ©r.   )Úexcludepath)ÚhasattrrÁ   Úcutr.   ÚtracebackcutdirÚfilter)rr   r¿   rÁ   Ú
ntracebacks       r9   rÂ   zCollector._traceback_filter  sl   € Ý�4˜Ñ Ô ð 	.ØÔ)ˆIØ"Ÿš¨D¬I˜Ñ6Ô6ˆJØ˜YÒ&Ð&Ø'Ÿ^š^½˜^ÑHÔH�
Ø×$Ò$ WÑ-Ô-Ð-ØÔ Ð r;   N)r8   rE   r_   r`   rÕ   r÷   ÚabcÚabstractmethodr	   r   rý   r   rë   r…   r   rà   r   rÂ   rN   r;   r9   ró   ró   ø  sà   € € € € € ðð ðEð Eð Eð Eð E�yñ Eô Eð Eð 	Ôð.˜ %Ð(;Ô"<Ô=ð .ð .ð .ñ Ôð.ð
=Ø$ ]Ô3ð=à	ˆs�LÐ Ô	!ð=ð =ð =ð =ð*!¨°}Ô)Eð !È)ð !ð !ð !ð !ð !ð !r;   ró   rf   r)   c                 óž   — | j         D ]D}t          ||¦  «        |k    r.t          |                     |¦  «        ¦  «        }|dk    rdn|c S ŒEd S )NrA   Ú )Ú_initialpathsr$   r…   Úrelative_to)rf   r.   Úinitial_pathÚrels       r9   Ú_check_initialpaths_for_relpathr  '  sh   € ØÔ-ð -ð -ˆÝ�d˜LÑ)Ô)¨\Ò9Ð9Ý�d×&Ò& |Ñ4Ô4Ñ5Ô5ˆCØ š˜�2�2¨Ð,Ð,Ð,ð :ð ˆ4r;   c                   ó  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 ddee         deeeef                  dee         dee	         dee         dee
         d	ed
         dee	         ddfˆ fd„Zedddœdee         dee         ddfˆ fd„¦   «         Zˆ xZS )ÚFSCollectorz%Base class for filesystem collectors.Nr/   Úpath_or_parentr.   rC   rd   re   rf   r)   rj   r0   c	                 ób  •— |rJt          |t          ¦  «        r|�J ‚t          t          |¦  «        }nt          |t          ¦  «        r|�J ‚|}t          t          | ¦  «        ||¬¦  «        }|€t|j        }|�k|j        |k    r`	 | 	                    |j        ¦  «        }	t          |	¦  «        }n# t          $ r Y nw xY w|                     t          j        t          ¦  «        }|| _        |€|€J ‚|j        }|€�	 t          | j         	                    |j        j        ¦  «        ¦  «        }n # t          $ r t'          ||¦  «        }Y nw xY w|r:t          j        t          k    r%|                     t          j        t          ¦  «        }t)          ¦   «                              ||||||¬¦  «         d S )Nrl   )rC   rd   re   rf   rj   r.   )r€   r-   r   r  r   r:   rm   rC   r.   r  r…   r‚   ÚreplacerØ   ÚsepÚSEPrf   re   Úrootpathr  rV   rL   )rr   r/   r  r.   rC   rd   re   rf   rj   r  r]   s             €r9   rL   zFSCollector.__init__2  sÙ  ø€ ð ð 	&Ý˜.­$Ñ/Ô/ð &Ø�~�~�~Ý�k¨>Ñ:Ô:��Ý˜N­DÑ1Ô1ð &Ø�|�|�|Ø%�å�4 ™:œ: t°FÐ;Ñ;Ô;ˆØˆ<Ø”9ˆDØÐ! f¤k°TÒ&9Ð&9ð$Ø×*Ò*¨6¬;Ñ7Ô7�Cõ ˜s™8œ8�D�Døõ "ð ð ð Ø�Dðøøøð —|’|¥B¤F­CÑ0Ô0�ØˆŒ	àˆ?ØÐ%Ð%Ð%Ø”nˆGàˆ>ðHÝ˜TœY×2Ò2°7´>Ô3JÑKÔKÑLÔL��øÝð Hð Hð HÝ8¸À$ÑGÔG���ðHøøøð ð 5�"œ&¥Cš-˜-ØŸš­¬µÑ4Ô4�å‰Œ×ÒØØØØØØð 	ñ 	
ô 	
ð 	
ð 	
ð 	
s$   ÂB. Â.
B;Â:B;Ã:1D, Ä,E	ÅE	)r/   r.   r'   c                ó>   •—  t          ¦   «         j        d|||dœ|¤ŽS )zThe public constructor.)rd   r/   r.   rN   )rV   rt   )rF   rd   r/   r.   rH   r]   s        €r9   rt   zFSCollector.from_parenth  s+   ø€ ð #�u‰wŒwÔ"ÐQ¨&¸ÀdÐQÐQÈbÐQÐQÐQr;   )NNNNNNNN)r8   rE   r_   r`   r   r   r   r   r-   r…   r   rL   rä   rt   ra   rb   s   @r9   r  r  /  sZ  ø€ € € € € Ø/Ð/ð )-Ø6:Ø#Ø"Ø!%Ø#'Ø'+Ø $ð4
ð 4
à˜Ô%ð4
ð !  t¨T zÔ!2Ô3ð4
ð �tŒnð	4
ð
 �sŒmð4
ð ˜”ð4
ð ˜Ô ð4
ð ˜)Ô$ð4
ð ˜”ð4
ð 
ð4
ð 4
ð 4
ð 4
ð 4
ð 4
ðl ð
 )-Ø#ð	Rð 	Rð 	Rð ˜Ô%ð		Rð
 �tŒnð	Rð 
ð	Rð 	Rð 	Rð 	Rð 	Rñ „[ð	Rð 	Rð 	Rð 	Rð 	Rr;   r  c                   ó   — e Zd ZdZdS )ÚFilezOBase class for collecting tests from a file.

    :ref:`non-python tests`.
    Nrö   rN   r;   r9   r  r  u  s   € € € € € ðð ð ð r;   r  c                   ó   — e Zd ZdZdS )Ú	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ö   rN   r;   r9   r  r  |  s   € € € € € ðð ð ð r;   r  c            	       ó  ‡ — e Zd ZdZdZ	 	 	 	 ddee         ded         dee         ddfˆ fd„Zdd	„Z	e
j        dd
„¦   «         Zdedededdfd„Zdeedef         ee         ef         fd„Zedeeee         ef         fd„¦   «         Zˆ xZS )rø   z�Base class of all test invocation items.

    Note that for a single function there might be multiple test invocation items.
    Nre   rf   r)   rj   r0   c                 óŠ   •—  t          ¦   «         j        ||f|||dœ|¤Ž g | _        g | _        |                      ¦   «          d S )N)re   rf   rj   )rV   rL   Ú_report_sectionsÚuser_propertiesÚ-_check_item_and_collector_diamond_inheritance)rr   rC   rd   re   rf   rj   rH   r]   s          €r9   rL   zItem.__init__–  sq   ø€ ð 	�‰ŒÔØØð	
ð ØØð	
ð 	
ð ð	
ð 	
ð 	
ð =?ˆÔð :<ˆÔà×:Ò:Ñ<Ô<Ð<Ð<Ð<r;   c                 ó
  — t          | ¦  «        }d}t          ||d¦  «        rdS t          ||d¦  «         d                     d„ |j        D ¦   «         ¦  «        }|r't          j        |j        › d|› d�t          ¦  «         dS dS )	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   óN   K  — | ] }t          |t          ¦  «        ¯|j        V — Œ!d S rˆ   )Ú
issubclassró   r8   )rP   Úbases     r9   r¤   zEItem._check_item_and_collector_diamond_inheritance.<locals>.<genexpr>Ã  sG   è è € ð 
ð 
Ø"µzÀ$Í	Ñ7RÔ7Rð
ØŒMð
ð 
ð 
ð 
ð 
ð 
r;   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/)	rm   rX   ÚsetattrÚjoinÚ	__bases__r5   r6   r8   r&   )rr   rF   Ú	attr_nameÚproblemss       r9   r#  z2Item._check_item_and_collector_diamond_inheritance³  sÐ   € õ
 �4‰jŒjˆð @ˆ	Ý�3˜	 5Ñ)Ô)ð 	ØˆFÝ��Y Ñ%Ô%Ð%à—9’9ð 
ð 
Ø&)¤mð
ñ 
ô 
ñ 
ô 
ˆð ð 	ÝŒMØ”<ð gð gØ%-ðgð gð gõ
 ñô ð ð ð ð	ð 	r;   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û   rw   s    r9   ÚruntestzItem.runtestÐ  s   € õ "Ð"PÑQÔQÐQr;   ÚwhenÚkeyÚcontentc                 óH   — |r| j                              |||f¦  «         dS dS )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“   )rr   r0  r1  r2  s       r9   Úadd_report_sectionzItem.add_report_sectionÚ  s:   € ð ð 	?ØÔ!×(Ò(¨$°°WÐ)=Ñ>Ô>Ð>Ð>Ð>ð	?ð 	?r;   zos.PathLike[str]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  rw   s    r9   Ú
reportinfozItem.reportinfoë  s   € ð Œy˜$ Ð"Ð"r;   c                 óæ   — |                       ¦   «         }t          |d         ¦  «        }| 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ï   rT   )r6  r#   rf   Ú_node_location_to_relpathrm   r…   )rr   rî   r.   Ú	relfspaths       r9   rî   zItem.locationø  sk   € ð —?’?Ñ$Ô$ˆÝ˜H QœKÑ(Ô(ˆØ”L×:Ò:¸4Ñ@Ô@ˆ	Ý�H˜Q”KÑ Ô ¥CÐ'Ð'Ð'Ð'Ø˜8 Aœ;¨°¬Ð4Ð4r;   )NNNNrá   )r8   rE   r_   r`   Únextitemr   r   r…   rL   r#  r	  r
  r/  r4  r   r   rè   r6  r   rî   ra   rb   s   @r9   rø   rø   Ž  sq  ø€ € € € € ðð ð
 €Hð
 Ø#'Ø'+Ø $ð=ð =ð ˜Ô ð	=ð
 ˜)Ô$ð=ð ˜”ð=ð 
ð=ð =ð =ð =ð =ð =ð:ð ð ð ð: 	ÔðRð Rð Rñ ÔðRð? sð ?°ð ?¸sð ?Àtð ?ð ?ð ?ð ?ð"#˜E %Ð(:¸CÐ(?Ô"@À(È3Ä-ÐQTÐ"TÔUð #ð #ð #ð #ð ð
5˜%  X¨c¤]°CÐ 7Ô8ð 
5ð 
5ð 
5ñ „_ð
5ð 
5ð 
5ð 
5ð 
5r;   rø   )Pr	  Ú	functoolsr   Úinspectr   rØ   Úpathlibr   Útypingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r5   ræ   Ú_pytest._codeÚ_pytestr   Ú_pytest._code.coder   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&   r'   r(   Ú_pytest.mainr)   r  Ú__file__rd   r  r+   r:   r<   ÚABCMetar?   ÚABCr-   r…   rè   rƒ   ró   r  r  r  r  rø   rN   r;   r9   ú<module>rO     sk  ðà 
€
€
€
Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€à €€€à Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø +Ð +Ð +Ð +Ð +Ð +Ø (Ð (Ð (Ð (Ð (Ð (Ø &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø -Ð -Ð -Ð -Ð -Ð -Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø (Ð (Ð (Ð (Ð (Ð (Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø !Ð !Ð !Ð !Ð !Ð !Ø (Ð (Ð (Ð (Ð (Ð (Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /ð ð %ØÐÐÐÐÐð 3Ð2Ð2Ð2Ð2Ð2Ø$Ð$Ð$Ð$Ð$Ð$ð 
€à�$�wÔ'Ñ(Ô(Ô/€ð €WˆT�]„]€ðØ�FŒ|ðà
�4Œ.ðð �[Ô!ðð 
ð	ð ð ð ð* ˆG�K vÐ.Ñ.Ô.€	ð)4ð )4ð )4ð )4ð )4ˆsŒ{ñ )4ô )4ð )4ðX^5ð ^5ð ^5ð ^5ð ^5ˆ3Œ7˜hð ^5ñ ^5ô ^5ð ^5ðB9 6ð 9¨e°E¸#¸t¸)Ô4DÀhÈsÄmÐ4SÔ.Tð 9ð 9ð 9ð 9ð&,!ð ,!ð ,!ð ,!ð ,!��c”gñ ,!ô ,!ð ,!ð^¨Yð ¸dð ÀxÐPSÄ}ð ð ð ð ðCRð CRð CRð CRð CR�)˜SœWñ CRô CRð CRðLð ð ð ð ˆ;˜œñ ô ð ðð ð ð ð �˜SœWñ ô ð ð$u5ð u5ð u5ð u5ð u5ˆ4�”ñ u5ô u5ð u5ð u5ð u5r;   