§
    s
ÊjzO  ã                  óÒ  — d Z ddlmZ ddlZddlmZ ddl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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+ ej,        dk     rdd l-m.Z. erdd!l/m0Z0 dd"l1m2Z2 d\d'„Z3d]d*„Z4d^d-„Z5d^d.„Z6d_d4„Z7	 d`dad8„Z8dbd:„Z9dcd;„Z:dcd<„Z;ddd=„Z<ded@„Z=dfdD„Z>	 dgdhdG„Z?didK„Z@djdN„ZA edOd5¬P¦  «        ZBeejC         G dQ„ dReeB         ¦  «        ¦   «         ¦   «         ZDdkdT„ZEdldX„ZF G dY„ dZ¦  «        ZGdld[„ZHdS )mz3Basic collect and runtest protocol implementations.é    )ÚannotationsN)ÚCallable)Úcast)Úfinal)ÚGeneric)ÚLiteral)ÚTYPE_CHECKING)ÚTypeVaré   )ÚConfig)Ú
BaseReport)ÚCollectErrorRepr)ÚCollectReport)Ú
TestReport)Útiming)ÚExceptionChainRepr)ÚExceptionInfo)ÚTerminalRepr)ÚParser)Úcheck_ispytest)Ú	Collector)Ú	Directory)ÚItem)ÚNode)ÚExit)ÚOutcomeException)ÚSkipped)ÚTEST_OUTCOME)é   é   )ÚBaseExceptionGroup)ÚSession)ÚTerminalReporterÚparserr   ÚreturnÚNonec                ó¶   — |                       ddd¬¦  «        }|                     ddt          d dd¬	¦  «         |                     d
dt          d dd¬	¦  «         d S )Nzterminal reportingÚ	ReportingÚgeneral)Úafterz--durationsÚstoreÚNz1Show N slowest setup/test durations (N=0 for all))ÚactionÚtypeÚdefaultÚmetavarÚhelpz--durations-minzcMinimal duration in seconds for inclusion in slowest list. Default: 0.005 (or 0.0 if -vv is given).)ÚgetgroupÚ	addoptionÚintÚfloat)r$   Úgroups     ú>C:\Projects\Muse2API\.venv\Lib\site-packages\_pytest/runner.pyÚpytest_addoptionr8   3   s‚   € Ø�OŠOÐ0°+ÀYˆOÑOÔO€EØ	‡O‚OØØÝØØØ@ð ñ ô ð ð 
‡O‚OØØÝØØð3ð ñ ô ð ð ð ó    Úterminalreporterr#   c                óB  — | j         j        j        }| j         j        j        }| j                              ¦   «         }|€d S |€
|dk     rdnd}| }g }|j                             ¦   «         D ],}|D ]'}t          |d¦  «        r|                     |¦  «         Œ(Œ-|sd S | 	                    d„ d¬¦  «         |s| 
                    dd	¦  «         n$| 
                    dd
|› d�¦  «         |d |…         }t          |¦  «        D ] \  }}|j        |k     rb|                     d¦  «         dt          |¦  «        |z
  › d|d›d�}	| j         j        j        €|	dz  }	|	dz  }	|                     |	¦  «          d S |                     |j        d›d|j        d›d|j        › �¦  «         Œ¡d S )Né   g{®Gázt?g        Údurationc                ó   — | j         S ©N)r=   )Úxs    r7   ú<lambda>z)pytest_terminal_summary.<locals>.<lambda>X   s   € ˜QœZ€ r9   T)ÚkeyÚreverseú=zslowest durationszslowest z
 durationsÚ ú(z durations < Úgz	s hidden.z"  Use -vv to show these durations.ú)z02.2fzs z<8ú )ÚconfigÚoptionÚ	durationsÚdurations_minÚget_verbosityÚstatsÚvaluesÚhasattrÚappendÚsortÚ	write_sepÚ	enumerater=   Ú
write_lineÚlenÚwhenÚnodeid)
r:   rL   rM   ÚverboseÚtrÚdlistÚreplistÚrepÚiÚmessages
             r7   Úpytest_terminal_summaryra   H   s	  € Ø Ô'Ô.Ô8€IØ$Ô+Ô2Ô@€MØÔ%×3Ò3Ñ5Ô5€GØÐØˆØÐØ!(¨1¢ ˜˜°#ˆØ	€BØ€EØ”8—?’?Ñ$Ô$ð "ð "ˆØð 	"ð 	"ˆCÝ�s˜JÑ'Ô'ð "Ø—’˜SÑ!Ô!Ð!øð	"ð ð ØˆØ	‡J‚JÐ'Ð'°€JÑ6Ô6Ð6Øð "Ø
�Š�SÐ-Ñ.Ô.Ð.Ð.à
�Š�SÐ: YÐ:Ð:Ð:Ñ;Ô;Ð;Ø�j�y�jÔ!ˆå˜EÑ"Ô"ð 	Kð 	K‰ˆˆ3ØŒ<˜-Ò'Ð'Ø�MŠM˜"ÑÔÐØQ�#˜e™*œ* q™.ÐQÐQ°}ÐQÐQÐQÐQˆGØÔ&Ô-Ô;ÐCØÐ?Ñ?�Ø�s‰NˆGØ�MŠM˜'Ñ"Ô"Ð"ØˆEˆEØ
�Š˜œÐIÐIÐI¨s¬xÐIÐIÐI¸S¼ZÐIÐIÑJÔJÐJÐJð	Kð 	Kr9   Úsessionr"   c                ó,   — t          ¦   «         | _        d S r?   )Ú
SetupStateÚ_setupstate©rb   s    r7   Úpytest_sessionstartrg   k   s   € Ý$™,œ,€GÔÐÐr9   c                ó:   — | j                              d ¦  «         d S r?   )re   Úteardown_exactrf   s    r7   Úpytest_sessionfinishrj   o   s   € ØÔ×&Ò& tÑ,Ô,Ð,Ð,Ð,r9   Úitemr   ÚnextitemúItem | NoneÚboolc                óº   — | j         }|                     | j        | j        ¬¦  «         t	          | |¬¦  «         |                     | j        | j        ¬¦  «         dS )N)rY   Úlocation©rl   T)ÚihookÚpytest_runtest_logstartrY   rp   ÚruntestprotocolÚpytest_runtest_logfinish)rk   rl   rr   s      r7   Úpytest_runtest_protocolrv   s   s[   € ØŒJ€EØ	×!Ò!¨¬¸t¼}Ð!ÑMÔMÐMÝ�D 8Ð,Ñ,Ô,Ð,Ø	×"Ò"¨$¬+ÀÄÐ"ÑNÔNÐNØˆ4r9   TÚlogúlist[TestReport]c                ó@  — t          | d¦  «        }|r| j        s|                      ¦   «          	 t          | d|¦  «        }|g}|j        rn| j                             dd¦  «        }| j                             dd¦  «        rt          | | ¬¦  «         |s$|                     t          | d|¦  «        ¦  «         | j	        j
        s| j	        j        rd }|                     t          | d||¬	¦  «        ¦  «         |rd| _        d | _        n# |rd| _        d | _        w xY w|S )
NÚ_requestÚsetupÚ	setuponlyFÚ	setupshow)Ú	add_spaceÚcallÚteardownrq   )rQ   rz   Ú_initrequestÚcall_and_reportÚpassedrJ   Ú	getoptionÚshow_test_itemrR   rb   Ú
shouldfailÚ
shouldstopÚfuncargs)rk   rw   rl   Ú
hasrequestr^   ÚreportsÚ
setup_onlys          r7   rt   rt   {   sS  € õ ˜˜zÑ*Ô*€JØð ˜$œ-ð ð 	×ÒÑÔÐð!Ý˜d G¨SÑ1Ô1ˆØ�%ˆØŒ:ð 	CØœ×.Ò.¨{¸EÑBÔBˆJØŒ{×$Ò$ [°%Ñ8Ô8ð ?Ý˜t°:¨~Ð>Ñ>Ô>Ð>Øð CØ—’�¨t°V¸SÑAÔAÑBÔBÐBð Œ<Ô"ð 	 d¤lÔ&=ð 	ØˆHØ�Š• t¨Z¸ÀxÐPÑPÔPÑQÔQÐQð ð 	!Ø!ˆDŒMØ ˆDŒMøøð ð 	!Ø!ˆDŒMØ ˆDŒMÐ Ð Ð Ð Ø€Ns   ¯C	D	 Ä	Dr~   c               ó¬  — | j                              ¦   «         }|                     ¦   «          |                     d¦  «         |                     | j        ¦  «         t          t          | dg ¦  «        ¦  «        }|r,|                     dd                     |¦  «        › d�¦  «         |r|                     d¦  «         |                     ¦   «          dS )zAShow test function, parameters and the fixtures of the test item.z        Úfixturenamesz (fixtures used: z, rH   rI   N)	rJ   Úget_terminal_writerÚlineÚwriterY   ÚsortedÚgetattrÚjoinÚflush)rk   r~   ÚtwÚused_fixturess       r7   r…   r…   š   s¼   € à	Œ×	(Ò	(Ñ	*Ô	*€BØ‡G‚G�I„I€IØ‡H‚HˆWÑÔÐØ‡H‚HˆTŒ[ÑÔÐÝ�7 4¨¸Ñ<Ô<Ñ=Ô=€MØð BØ
�ŠÐ@ T§Y¢Y¨}Ñ%=Ô%=Ð@Ð@Ð@ÑAÔAÐAØð Ø
�Š�‰ŒˆØ‡H‚H�J„J€J€J€Jr9   c                ód   — t          | d¦  «         | j        j                             | ¦  «         d S )Nr{   )Ú_update_current_test_varrb   re   r{   )rk   s    r7   Úpytest_runtest_setupr™   ¨   s1   € Ý˜T 7Ñ+Ô+Ð+Ø„LÔ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r9   c                ó²  — t          | d¦  «         	 t          `t          `t          `t          j        dk    rt          `n# t          $ r Y nw xY w	 |                      ¦   «          d S # t          $ rf}t          |¦  «        t          _        |t          _        t          j        dk    r|t          _        |j        €J ‚|j        j        t          _        ‚ d }~ww xY w)Nr   )r   é   r   )r˜   ÚsysÚ	last_typeÚ
last_valueÚlast_tracebackÚversion_infoÚlast_excÚAttributeErrorÚruntestÚ	Exceptionr.   Ú__traceback__Útb_next)rk   Úes     r7   Úpytest_runtest_callr¨   ­   s×   € Ý˜T 6Ñ*Ô*Ð*ðÝˆMÝˆNÝÐÝÔ˜zÒ)Ð)Ý�øøÝð ð ð ØˆðøøøðØ�Š‰ŒˆˆˆøÝð 	ð 	ð 	å˜Q™œ�ŒØ�ŒÝÔ˜zÒ)Ð)Ø�CŒLØŒÐ*Ð*Ð*àœ_Ô4�ÔØøøøøð	øøøs(   ’,? ¿
AÁAÁA& Á&
CÁ0A!CÃCc                ó„   — t          | d¦  «         | j        j                             |¦  «         t          | d ¦  «         d S )Nr€   )r˜   rb   re   ri   )rk   rl   s     r7   Úpytest_runtest_teardownrª   Å   sA   € Ý˜T :Ñ.Ô.Ð.Ø„LÔ×+Ò+¨HÑ5Ô5Ð5Ý˜T 4Ñ(Ô(Ð(Ð(Ð(r9   rX   ú+Literal['setup', 'call', 'teardown'] | Nonec                ó´   — d}|r4| j         › d|› d�}|                     dd¦  «        }|t          j        |<   dS t          j                             |¦  «         dS )zŸUpdate :envvar:`PYTEST_CURRENT_TEST` to reflect the current item and stage.

    If ``when`` is None, delete ``PYTEST_CURRENT_TEST`` from the environment.
    ÚPYTEST_CURRENT_TESTz (rH   ú z(null)N)rY   ÚreplaceÚosÚenvironÚpop)rk   rX   Úvar_nameÚvalues       r7   r˜   r˜   Ë   sh   € ð %€HØð !Ø”;Ð)Ð) $Ð)Ð)Ð)ˆà—’˜f hÑ/Ô/ˆØ$�Œ
�8ÑÐÐå
Œ
�Š�xÑ Ô Ð Ð Ð r9   Úreportr   útuple[str, str, str] | Nonec                ó@   — | j         dv r| j        rdS | j        rdS dS d S )N)r{   r€   )ÚerrorÚEÚERROR)ÚskippedÚsÚSKIPPED)rE   rE   rE   )rX   Úfailedr»   ©rµ   s    r7   Úpytest_report_teststatusrÀ   Ü   s:   € Ø„{Ð+Ð+Ð+ØŒ=ð 	à(Ð(ØŒ^ð 	Ø,Ð,à�:Øˆ4r9   ú$Literal['setup', 'call', 'teardown']r   c                óž  ‡ ‡‡— ‰ j         }|dk    r|j        Šn)|dk    r|j        Šn|dk    r|j        ŠnJ d|› �¦   «         ‚t                               ˆ ˆˆfd„|t          ‰ j        ¦  «        ¬¦  «        }|                     ‰ |¬¦  «        }|r| 	                    |¬	¦  «         t          ||¦  «        r|                     ‰ ||¬
¦  «         |S )Nr{   r   r€   FzUnhandled runtest hook case: c                 ó   •—  ‰dd‰ i‰¤ŽS )Nrk   © rÄ   )rk   ÚkwdsÚruntest_hooks   €€€r7   rA   z!call_and_report.<locals>.<lambda>ú   s   ø€ ��Ð/Ð/ $Ð/¨$Ð/Ð/€ r9   )rX   Úreraise©rk   r   r¿   ©Únoder   rµ   )rr   r™   r¨   rª   ÚCallInfoÚ	from_callÚget_reraise_exceptionsrJ   Úpytest_runtest_makereportÚpytest_runtest_logreportÚcheck_interactive_exceptionÚpytest_exception_interact)rk   rX   rw   rÅ   rr   r   rµ   rÆ   s   `  `   @r7   r‚   r‚   ì   s  øøø€ ð ŒJ€EØˆw‚€Ø,1Ô,FˆˆØ	�ŠˆØÔ0ˆˆØ	�Ò	Ð	ØÔ4ˆˆà<Ð<°dÐ<Ð<Ñ<Ô<ˆuå×ÒØ/Ð/Ð/Ð/Ð/Ð/ØÝ& t¤{Ñ3Ô3ð ñ ô €Dð
 ×8Ò8¸dÈÐ8ÑNÔN€FØ
ð 6Ø×&Ò&¨fÐ&Ñ5Ô5Ð5Ý" 4¨Ñ0Ô0ð MØ×'Ò'¨T¸ÀVÐ'ÑLÔLÐLØ€Mr9   rJ   r   útuple[type[BaseException], ...]c                óX   — t           f}|                      dd¦  «        s|t          fz  }|S )z@Return exception types that should not be suppressed in general.ÚusepdbF)r   r„   ÚKeyboardInterrupt)rJ   rÇ   s     r7   rÍ   rÍ     s4   € å04¨w€GØ×Ò˜H eÑ,Ô,ð (ØÕ%Ð'Ñ'ˆØ€Nr9   r   úCallInfo[object]c                ó  — | j         €dS t          |d¦  «        rdS t          j                             d¦  «        }t          | j         j        t          t          j	        z  ¦  «        s!|�!t          | j         j        |j
        ¦  «        rdS dS )zVCheck whether the call raised an exception that should be reported as
    interactive.NFÚwasxfailÚunittestT)ÚexcinforQ   rœ   ÚmodulesÚgetÚ
isinstancer´   r   ÚbdbÚBdbQuitÚSkipTest)r   rµ   rÙ   s      r7   rÐ   rÐ     s‚   € ð „|ÐàˆuÝˆv�zÑ"Ô"ð àˆuÝŒ{�Š˜zÑ*Ô*€HÝ�$”,Ô$¥gµ´Ñ&;Ñ<Ô<ð ØÐ¥¨D¬LÔ,>ÀÔ@QÑ!RÔ!RÐð ˆuØˆ4r9   ÚTResult)Ú	covariantc                  óš   — e Zd ZU dZded<   ded<   ded<   ded<   ded	<   d
ed<   ddœdd„Zed d„¦   «         Ze	 d!d"d„¦   «         Z	d#d„Z
dS )$rË   z/Result/Exception info of a function invocation.úTResult | NoneÚ_resultú#ExceptionInfo[BaseException] | NonerÚ   r5   ÚstartÚstopr=   ú/Literal['collect', 'setup', 'call', 'teardown']rX   F)Ú	_ispytestÚresultrê   rn   r%   r&   c               óx   — t          |¦  «         || _        || _        || _        || _        || _        || _        d S r?   )r   rå   rÚ   rç   rè   r=   rX   )Úselfrë   rÚ   rç   rè   r=   rX   rê   s           r7   Ú__init__zCallInfo.__init__4  s@   € õ 	�yÑ!Ô!Ð!ØˆŒØˆŒØˆŒ
ØˆŒ	Ø ˆŒØˆŒ	ˆ	ˆ	r9   rá   c                óh   — | j         �t          | ›d�¦  «        ‚t          t          | j        ¦  «        S )zlThe return value of the call, if it didn't raise.

        Can only be accessed if excinfo is None.
        Nz has no valid result)rÚ   r¢   r   rá   rå   ©rí   s    r7   rë   zCallInfo.resultG  s7   € ð Œ<Ð#Ý  DÐ!@Ð!@Ð!@ÑAÔAÐAõ •G˜Tœ\Ñ*Ô*Ð*r9   NÚfuncúCallable[[], TResult]rÇ   ú<type[BaseException] | tuple[type[BaseException], ...] | NoneúCallInfo[TResult]c           	     ó<  — d}t          j        ¦   «         }	  |¦   «         }n=# t          $ r0 t          j        ¦   «         }|�t          |j        |¦  «        r‚ d}Y nw xY w|                     ¦   «         } | |j        j	        |j
        j	        |j        |||d¬¦  «        S )a¯  Call func, wrapping the result in a CallInfo.

        :param func:
            The function to call. Called without arguments.
        :type func: Callable[[], _pytest.runner.TResult]
        :param when:
            The phase in which the function is called.
        :param reraise:
            Exception or exceptions that shall propagate if raised by the
            function, instead of being wrapped in the CallInfo.
        NT)rç   rè   r=   rX   rë   rÚ   rê   )r   ÚInstantÚBaseExceptionr   Úfrom_currentrÝ   r´   Úelapsedrç   Útimerè   Úseconds)Úclsrñ   rX   rÇ   rÚ   Úinstantrë   r=   s           r7   rÌ   zCallInfo.from_callT  sÀ   € ð$ ˆÝ”.Ñ"Ô"ˆð	Ø%) T¡V¤VˆFˆFøÝð 	ð 	ð 	Ý#Ô0Ñ2Ô2ˆGØÐ"¥z°'´-ÀÑ'IÔ'IÐ"ØØˆFˆFˆFð		øøøð
 —?’?Ñ$Ô$ˆØˆsØ”.Ô%Ø”Ô#ØÔ%ØØØØð
ñ 
ô 
ð 	
s   —
" ¢7AÁAÚstrc                ó\   — | j         €d| j        ›d| j        ›d�S d| j        ›d| j         ›d�S )Nz<CallInfo when=z	 result: ú>z	 excinfo=)rÚ   rX   rå   rð   s    r7   Ú__repr__zCallInfo.__repr__z  sD   € ØŒ<ÐØL T¤YÐLÐL¸4¼<ÐLÐLÐLÐLØH ¤ÐHÐH°t´|ÐHÐHÐHÐHr9   )rë   rä   rÚ   ræ   rç   r5   rè   r5   r=   r5   rX   ré   rê   rn   r%   r&   )r%   rá   r?   )rñ   rò   rX   ré   rÇ   ró   r%   rô   )r%   rþ   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__rî   Úpropertyrë   ÚclassmethodrÌ   r  rÄ   r9   r7   rË   rË   #  sç   € € € € € € ð :Ð9àÐÐÑà0Ð0Ð0Ñ0à€L€L�Là€K€K�Kà€O€O�Oà9Ð9Ð9Ñ9ð  ðð ð ð ð ð ð& ð
+ð 
+ð 
+ñ „Xð
+ð ð
 QUð	#
ð #
ð #
ð #
ñ „[ð#
ðJIð Ið Ið Ið Ið Ir9   rË   úCallInfo[None]c                ó,   — t          j        | |¦  «        S r?   )r   Úfrom_item_and_callrÈ   s     r7   rÎ   rÎ   €  s   € ÝÔ(¨¨tÑ4Ô4Ð4r9   Ú	collectorr   r   c                óD  ‡ — dˆ fd„}t                                |dt          t          f¬¦  «        }d }|j        sd}�n4t
          g}t          j                             d¦  «        }|�| 	                    |j
        ¦  «         t          |j        j        t          |¦  «        ¦  «        rvd}‰                      |j        d	¦  «        }t          |t          ¦  «        sJ t!          |¦  «        ¦   «         ‚|j        }|sJ ‚t%          |j        ¦  «        |j        |j        f}nTd
}‰                      |j        ¦  «        }	t/          |	d¦  «        s&t          |	t$          ¦  «        sJ ‚t1          |	¦  «        }	|	}|j        s|j        nd }
t5          ‰ j        |||
¦  «        }||_        |S )Nr%   úlist[Item | Collector]c                 ó4  •— t          ‰ t          ¦  «        rb‰ j        j                             ‰ j        ‰ j                             d¦  «        ‰ j        j        ‰ j                             d¦  «        ¬¦  «         t          ‰  
                    ¦   «         ¦  «        S )NÚ
importmodeÚconsider_namespace_packages)Úrootpathr  )rÝ   r   rJ   ÚpluginmanagerÚ_loadconftestmodulesÚpathr„   r  ÚgetiniÚlistÚcollect©r  s   €r7   r  z+pytest_make_collect_report.<locals>.collect…  s’   ø€ õ �i¥Ñ+Ô+ð 	ØÔÔ*×?Ò?Ø”ØÔ ×*Ò*¨<Ñ8Ô8Ø"Ô)Ô2Ø,5Ô,<×,CÒ,CØ1ñ-ô -ð	 @ñ ô ð õ �I×%Ò%Ñ'Ô'Ñ(Ô(Ð(r9   r  )rÇ   rƒ   rÙ   r»   r�   r¾   Ú
toterminal)r%   r  )rË   rÌ   rÕ   Ú
SystemExitrÚ   r   rœ   rÛ   rÜ   rR   rà   rÝ   r´   ÚtupleÚ_repr_failure_pyr   ÚreprÚ	reprcrashrþ   r  Úlinenor`   Úrepr_failurerQ   r   rë   r   rY   r   )r  r  r   ÚlongreprÚoutcomeÚskip_exceptionsrÙ   Úr_ÚrÚ	errorinforë   r^   s   `           r7   Úpytest_make_collect_reportr(  „  s­  ø€ ð)ð )ð )ð )ð )ð )õ& ×ÒØ�Õ%6½
Ð$Cð ñ ô €Dð BF€HØŒ<ð !Ø:Bˆ‰å"˜)ˆÝ”;—?’? :Ñ.Ô.ˆØÐØ×"Ò" 8Ô#4Ñ5Ô5Ð5Ý�d”lÔ(­%°Ñ*@Ô*@ÑAÔAð 	!ØˆGØ×+Ò+¨D¬L¸&ÑAÔAˆBÝ˜bÕ"4Ñ5Ô5Ð?Ð?µt¸B±x´xÑ?Ô?Ð5Ø”ˆAØˆHˆH�1Ý˜AœF™œ Q¤X¨q¬yÐ9ˆHˆHàˆGØ!×.Ò.¨t¬|Ñ<Ô<ˆIÝ˜9 lÑ3Ô3ð 8Ý! )­SÑ1Ô1Ð1Ð1Ð1Ý,¨YÑ7Ô7�	Ø ˆHØ $¤Ð6ˆTŒ[ˆ[°$€FÝ
˜	Ô(¨'°8¸VÑ
DÔ
D€CØ€C„HØ€Jr9   c                  ó:   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„ZdS )rd   aE  Shared state for setting up/tearing down test items or collectors
    in a session.

    Suppose we have a collection tree as follows:

    <Session session>
        <Module mod1>
            <Function item1>
        <Module mod2>
            <Function item2>

    The SetupState maintains a stack. The stack starts out empty:

        []

    During the setup phase of item1, setup(item1) is called. What it does
    is:

        push session to stack, run session.setup()
        push mod1 to stack, run mod1.setup()
        push item1 to stack, run item1.setup()

    The stack is:

        [session, mod1, item1]

    While the stack is in this shape, it is allowed to add finalizers to
    each of session, mod1, item1 using addfinalizer().

    During the teardown phase of item1, teardown_exact(item2) is called,
    where item2 is the next item to item1. What it does is:

        pop item1 from stack, run its teardowns
        pop mod1 from stack, run its teardowns

    mod1 was popped because it ended its purpose with item1. The stack is:

        [session]

    During the setup phase of item2, setup(item2) is called. What it does
    is:

        push mod2 to stack, run mod2.setup()
        push item2 to stack, run item2.setup()

    Stack:

        [session, mod2, item2]

    During the teardown phase of item2, teardown_exact(None) is called,
    because item2 is the last item. What it does is:

        pop item2 from stack, run its teardowns
        pop mod2 from stack, run its teardowns
        pop session from stack, run its teardowns

    Stack:

        []

    The end!
    r%   r&   c                ó   — i | _         d S r?   ©Ústackrð   s    r7   rî   zSetupState.__init__÷  s   € ð ð 	Œ
ˆ
ˆ
r9   rÊ   r   rn   c                ó   — || j         v S )zYCheck if a node is currently active in the stack -- set up and not
        torn down yet.r+  )rí   rÊ   s     r7   Úis_node_activezSetupState.is_node_active  s   € ð �t”zÐ!Ð!r9   rk   r   c                óä  — |                      ¦   «         }| j                             ¦   «         D ]9\  }\  }}||v s
J d¦   «         ‚|r!|d                              |d         ¦  «        ‚Œ:|t	          | j        ¦  «        d…         D ]k}|| j        vsJ ‚|j        gdf| j        |<   	 |                     ¦   «          Œ5# t          $ r*}| j        |         d         ||j        ff| j        |<   ‚ d}~ww xY wdS )z4Setup objects along the collector chain to the item.z(previous item was not torn down properlyr   r   N)	Ú	listchainr,  ÚitemsÚwith_tracebackrW   r€   r{   r   r¥   )rí   rk   Úneeded_collectorsÚcolÚ
finalizersÚexcs         r7   r{   zSetupState.setup  s-  € à ŸNšNÑ,Ô,Ðð '+¤j×&6Ò&6Ñ&8Ô&8ð 	4ð 	4Ñ"ˆCÑ"�*˜cØÐ+Ð+Ð+Ð+Ð-WÑ+Ô+Ð+Øð 4Ø˜!”f×+Ò+¨C°¬FÑ3Ô3Ð3ð4ð %¥S¨¬¡_¤_Ð%6Ð%6Ô7ð 	ð 	ˆCØ˜dœjÐ(Ð(Ð(Ð(à #¤˜~¨tÐ4ˆDŒJ�s‰OðØ—	’	‘”��øÝð ð ð Ø#'¤:¨c¤?°1Ô#5¸¸SÔ=NÐ7OÐ"P�”
˜3‘Øøøøøðøøøð	ð 	s   Â$B9Â9
C-Ã%C(Ã(C-Ú	finalizerúCallable[[], object]c                óÚ   — |rt          |t          ¦  «        rJ ‚t          |¦  «        sJ ‚|| j        v sJ || j        f¦   «         ‚| j        |         d                              |¦  «         dS )zgAttach a finalizer to the given node.

        The node must be currently active in the stack.
        r   N)rÝ   r  Úcallabler,  rR   )rí   r7  rÊ   s      r7   ÚaddfinalizerzSetupState.addfinalizer  s{   € ð
 Ð3�J t­UÑ3Ô3Ð3Ð3Ð3Ý˜	Ñ"Ô"Ð"Ð"Ð"Ø�t”zÐ!Ð!Ð! D¨$¬*Ð#5Ñ!Ô!Ð!ØŒ
�4Ô˜Ô×"Ò" 9Ñ-Ô-Ð-Ð-Ð-r9   rl   rm   c           	     ó  — |r|                      ¦   «         pg }g }| j        �rt          | j                             ¦   «         ¦  «        |dt	          | j        ¦  «        …         k    rnÕ| j                             ¦   «         \  }\  }}g }|rN|                     ¦   «         }	  |¦   «          n,# t          $ r}	|                     |	¦  «         Y d}	~	nd}	~	ww xY w|°Nt	          |¦  «        dk    r| 	                    |¦  «         n3|r1d|›�}
|                     t          |
|ddd…         ¦  «        ¦  «         | j        �°t	          |¦  «        dk    r|d         ‚|rt          d|ddd…         ¦  «        ‚|€	| j        rJ ‚dS dS )zÍTeardown the current stack up until reaching nodes that nextitem
        also descends from.

        When nextitem is None (meaning we're at the last item), the entire
        stack is torn down.
        Nr   zerrors while tearing down éÿÿÿÿr   zerrors during test teardown)r0  r,  r  ÚkeysrW   Úpopitemr²   r   rR   Úextendr!   )rí   rl   r3  Ú
exceptionsrÊ   r5  Ú_Úthese_exceptionsÚfinr§   Úmsgs              r7   ri   zSetupState.teardown_exact'  sÝ  € ð &Ð>¨(×*<Ò*<Ñ*>Ô*>ÐEÀ2ÐØ*,ˆ
ØŒjñ 	SÝ�D”J—O’OÑ%Ô%Ñ&Ô&Ð*;Ð<M½cÀ$Ä*¹o¼oÐ<MÔ*NÒNÐNØØ$(¤J×$6Ò$6Ñ$8Ô$8Ñ!ˆD‘/�:˜qØ!ÐØð /Ø —n’nÑ&Ô&�ð/Ø�C‘E”E�E�EøÝ#ð /ð /ð /Ø$×+Ò+¨AÑ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.øøøøð/øøøð	 ð /õ Ð#Ñ$Ô$¨Ò)Ð)Ø×!Ò!Ð"2Ñ3Ô3Ð3Ð3Ø!ð SØ;°4Ð;Ð;�Ø×!Ò!Õ"4°SÐ:JÈ4È4ÈRÈ4Ô:PÑ"QÔ"QÑRÔRÐRð! Œjñ 	Sõ$ ˆz‰?Œ?˜aÒÐØ˜Q”-ÐØð 	VÝ$Ð%BÀJÈtÈtÐQSÈtÔDTÑUÔUÐUØÐØ”zÐ!Ð!�>ð ÐØ!Ð!s   Â 
B+ Â+
CÂ5CÃCN)r%   r&   )rÊ   r   r%   rn   ©rk   r   r%   r&   )r7  r8  rÊ   r   r%   r&   )rl   rm   r%   r&   )	r  r  r  r  rî   r.  r{   r;  ri   rÄ   r9   r7   rd   rd   ·  sƒ   € € € € € ð=ð =ð~
ð 
ð 
ð 
ð"ð "ð "ð "ð
ð ð ð ð*.ð .ð .ð .ð "ð  "ð  "ð  "ð  "ð  "r9   rd   c                óö   — | j         }|                     | ¬¦  «         |                     | ¬¦  «        }|j                             dd ¦  «        }|r(t          ||¦  «        r|                     | ||¬¦  «         |S )Nr  r   rÉ   )rr   Úpytest_collectstartr(  Ú__dict__r²   rÐ   rÑ   )r  rr   r^   r   s       r7   Úcollect_one_noderJ  J  s‰   € ØŒO€EØ	×Ò¨	ÐÑ2Ô2Ð2Ø×9Ò9ÀIÐ9ÑNÔN€CØŒ<×Ò˜F DÑ)Ô)€DØð OÕ+¨D°#Ñ6Ô6ð OØ×'Ò'¨Y¸TÈ#Ð'ÑNÔNÐNØ€Jr9   )r$   r   r%   r&   )r:   r#   r%   r&   )rb   r"   r%   r&   )rk   r   rl   rm   r%   rn   )TN)rk   r   rw   rn   rl   rm   r%   rx   )rk   r   r~   rn   r%   r&   rF  )rk   r   rl   rm   r%   r&   )rk   r   rX   r«   r%   r&   )rµ   r   r%   r¶   )T)rk   r   rX   rÁ   rw   rn   r%   r   )rJ   r   r%   rÒ   )r   rÖ   rµ   r   r%   rn   )rk   r   r   r	  r%   r   )r  r   r%   r   )Ir  Ú
__future__r   rÞ   Úcollections.abcr   Údataclassesr°   rœ   ÚtypesÚtypingr   r   r   r   r	   r
   rJ   r   rŠ   r   r   r   r   Ú_pytestr   Ú_pytest._code.coder   r   r   Ú_pytest.config.argparsingr   Ú_pytest.deprecatedr   Ú_pytest.nodesr   r   r   r   Ú_pytest.outcomesr   r   r   r   r    Úexceptiongroupr!   Ú_pytest.mainr"   Ú_pytest.terminalr#   r8   ra   rg   rj   rv   rt   r…   r™   r¨   rª   r˜   rÀ   r‚   rÍ   rÐ   rá   Ú	dataclassrË   rÎ   r(  rd   rJ  rÄ   r9   r7   ú<module>rZ     sž  ðà 9Ð 9à "Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø +Ð +Ð +Ð +Ð +Ð +Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø -Ð -Ð -Ð -Ð -Ð -Ø #Ð #Ð #Ð #Ð #Ð #Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø -Ð -Ð -Ð -Ð -Ð -Ø $Ð $Ð $Ð $Ð $Ð $Ø )Ð )Ð )Ð )Ð )Ð )ð Ô�gÒÐØ1Ð1Ð1Ð1Ð1Ð1àð 2Ø$Ð$Ð$Ð$Ð$Ð$Ø1Ð1Ð1Ð1Ð1Ð1ðð ð ð ð* Kð  Kð  Kð  KðF'ð 'ð 'ð 'ð-ð -ð -ð -ðð ð ð ð ;?ðð ð ð ð ð>ð ð ð ð)ð )ð )ð )ð
ð ð ð ð0)ð )ð )ð )ð!ð !ð !ð !ð"	ð 	ð 	ð 	ð" IMðð ð ð ð ð4ð ð ð ðð ð ð ð$ ˆ'�) tÐ
,Ñ
,Ô
,€ð ØÔðXIð XIð XIð XIð XIˆw�wÔñ XIô XIñ Ôñ „ðXIðv5ð 5ð 5ð 5ð0ð 0ð 0ð 0ðfP"ð P"ð P"ð P"ð P"ñ P"ô P"ð P"ðfð ð ð ð ð r9   