§
    öyIfúJ  ã            
       ó  — d 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$ 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'ed(dfd)„Z3dNd,„Z4dOd/„Z5dOd0„Z6d1e%d2ee%         d(e7fd3„Z8	 dPd1e%d5e7d2ee%         d(ee         fd6„Z9d1e%d(dfd7„Z:d1e%d(dfd8„Z;d1e%d(dfd9„Z<d1e%d2ee%         d(dfd:„Z=d1e%d;eed<                  d(dfd=„Z>d>ed(eee?e?e?f                  fd?„Z@	 dQd1e%d;ed<         d5e7d(efd@„ZAdAdBd>ed(e7fdC„ZB edDd4¬E¦  «        ZCe	ejD         G dF„ dGe
eC         ¦  «        ¦   «         ¦   «         ZEd1e%dAeEd         d(efdH„ZFdIe#d(efdJ„ZG G dK„ dL¦  «        ZHdIe#d(efdM„ZIdS )Rz3Basic collect and runtest protocol implementations.é    N)ÚCallable)Úcast)ÚDict)Úfinal)ÚGeneric)ÚList)ÚLiteral)ÚOptional)ÚTuple)ÚType)ÚTYPE_CHECKING)ÚTypeVar)ÚUnioné   )Ú
BaseReport)ÚCollectErrorRepr)ÚCollectReport)Ú
TestReport)Útiming)ÚExceptionChainRepr)ÚExceptionInfo)ÚTerminalRepr)ÚParser)Úcheck_ispytest)Ú	Collector)Ú	Directory)ÚItem)ÚNode)ÚExit)ÚOutcomeException)ÚSkipped)ÚTEST_OUTCOME)é   é   )ÚBaseExceptionGroup)ÚSession)ÚTerminalReporterÚparserÚreturnc                 ó¶   — |                       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-ming{®Gázt?zJMinimal duration in seconds for inclusion in slowest list. Default: 0.005.)ÚgetgroupÚ	addoptionÚintÚfloat)r(   Úgroups     úB/var/www/piapp/venv/lib/python3.11/site-packages/_pytest/runner.pyÚpytest_addoptionr;   5   s‚   € Ø�OŠOÐ0°+ÀYˆOÑOÔO€EØ	‡O‚OØØÝØØØ@ð ñ ô ð ð 
‡O‚OØØÝØØðð ñ ô ð ð ð ó    Úterminalreporterr'   c                 óü  — | j         j        j        }| j         j        j        }| j                              d¦  «        }|€d S | }g }|j                             ¦   «         D ],}|D ]'}t          |d¦  «        r|                     |¦  «         Œ(Œ-|sd S | 	                    d„ d¬¦  «         |s| 
                    dd¦  «         n#| 
                    dd|z  ¦  «         |d |…         }t          |¦  «        D ]‰\  }}|d	k     rP|j        |k     rE|                     d
¦  «         |                     dt          |¦  «        |z
  › d|d›d�¦  «          d S |                     |j        d›d|j        d›d|j        › �¦  «         ŒŠd S )NÚverboseÚdurationc                 ó   — | j         S ©N)r@   )Úxs    r:   ú<lambda>z)pytest_terminal_summary.<locals>.<lambda>X   s   € ˜QœZ€ r<   T)ÚkeyÚreverseú=zslowest durationszslowest %s durationsé   Ú ú(z durations < Úgz,s hidden.  Use -vv to show these durations.)z02.2fzs z<8ú )ÚconfigÚoptionÚ	durationsÚdurations_minÚgetvalueÚstatsÚvaluesÚhasattrÚappendÚsortÚ	write_sepÚ	enumerater@   Ú
write_lineÚlenÚwhenÚnodeid)	r=   rO   rP   r?   ÚtrÚdlistÚreplistÚrepÚis	            r:   Úpytest_terminal_summaryrb   J   s×  € Ø Ô'Ô.Ô8€IØ$Ô+Ô2Ô@€MØÔ%×.Ò.¨yÑ9Ô9€GØÐØˆØ	€BØ€EØ”8—?’?Ñ$Ô$ð "ð "ˆØð 	"ð 	"ˆCÝ�s˜JÑ'Ô'ð "Ø—’˜SÑ!Ô!Ð!øð	"ð ð ØˆØ	‡J‚JÐ'Ð'°€JÑ6Ô6Ð6Øð "Ø
�Š�SÐ-Ñ.Ô.Ð.Ð.à
�Š�SÐ0°9Ñ<Ñ=Ô=Ð=Ø�j�y�jÔ!ˆå˜EÑ"Ô"ð Kð K‰ˆˆ3Ø�QŠ;ˆ;˜3œ<¨-Ò7Ð7Ø�MŠM˜"ÑÔÐØ�MŠMØn•C˜‘J”J ‘NÐnÐn°ÐnÐnÐnÐnñô ð ð ˆEˆEØ
�Š˜œÐIÐIÐI¨s¬xÐIÐIÐI¸S¼ZÐIÐIÑJÔJÐJÐJðKð Kr<   Úsessionr&   c                 ó,   — t          ¦   «         | _        d S rB   )Ú
SetupStateÚ_setupstate©rc   s    r:   Úpytest_sessionstartrh   i   s   € Ý$™,œ,€GÔÐÐr<   c                 ó:   — | j                              d ¦  «         d S rB   )rf   Úteardown_exactrg   s    r:   Úpytest_sessionfinishrk   m   s   € ØÔ×&Ò& tÑ,Ô,Ð,Ð,Ð,r<   ÚitemÚnextitemc                 óº   — | j         }|                     | j        | j        ¬¦  «         t	          | |¬¦  «         |                     | j        | j        ¬¦  «         dS )N)r\   Úlocation©rm   T)ÚihookÚpytest_runtest_logstartr\   ro   ÚruntestprotocolÚpytest_runtest_logfinish)rl   rm   rq   s      r:   Úpytest_runtest_protocolru   q   s[   € ØŒJ€EØ	×!Ò!¨¬¸t¼}Ð!ÑMÔMÐMÝ�D 8Ð,Ñ,Ô,Ð,Ø	×"Ò"¨$¬+ÀÄÐ"ÑNÔNÐNØˆ4r<   TÚlogc                 óÔ  — t          | d¦  «        }|r| j        s|                      ¦   «          t          | d|¦  «        }|g}|j        ri| j                             dd¦  «        rt          | ¦  «         | j                             dd¦  «        s$|                     t          | d|¦  «        ¦  «         |                     t          | d||¬¦  «        ¦  «         |rd| _        d | _	        |S )	NÚ_requestÚsetupÚ	setupshowFÚ	setuponlyÚcallÚteardownrp   )
rT   rx   Ú_initrequestÚcall_and_reportÚpassedrM   Ú	getoptionÚshow_test_itemrU   Úfuncargs)rl   rv   rm   Ú
hasrequestr`   Úreportss         r:   rs   rs   y   sú   € õ ˜˜zÑ*Ô*€JØð ˜$œ-ð ð 	×ÒÑÔÐÝ
˜$ ¨Ñ
-Ô
-€CØˆe€GØ
„zð ?ØŒ;× Ò  ¨eÑ4Ô4ð 	!Ý˜4Ñ Ô Ð ØŒ{×$Ò$ [°%Ñ8Ô8ð 	?Ø�NŠN�?¨4°¸Ñ=Ô=Ñ>Ô>Ð>Ø‡N‚N•? 4¨°SÀ8ÐLÑLÔLÑMÔMÐMð ð ØˆŒØˆŒØ€Nr<   c                 óœ  — | j                              ¦   «         }|                     ¦   «          |                     d¦  «         |                     | j        ¦  «         t          t          | dg ¦  «        ¦  «        }|r;|                     d                     d                     |¦  «        ¦  «        ¦  «         | 	                    ¦   «          dS )zAShow test function, parameters and the fixtures of the test item.z        Úfixturenamesz (fixtures used: {})z, N)
rM   Úget_terminal_writerÚlineÚwriter\   ÚsortedÚgetattrÚformatÚjoinÚflush)rl   ÚtwÚused_fixturess      r:   r‚   r‚   ‘   s¨   € à	Œ×	(Ò	(Ñ	*Ô	*€BØ‡G‚G�I„I€IØ‡H‚HˆWÑÔÐØ‡H‚HˆTŒ[ÑÔÐÝ�7 4¨¸Ñ<Ô<Ñ=Ô=€MØð JØ
�ŠÐ'×.Ò.¨t¯yªy¸Ñ/GÔ/GÑHÔHÑIÔIÐIØ‡H‚H�J„J€J€J€Jr<   c                 ód   — t          | d¦  «         | j        j                             | ¦  «         d S )Nry   )Ú_update_current_test_varrc   rf   ry   )rl   s    r:   Úpytest_runtest_setupr”   �   s1   € Ý˜T 7Ñ+Ô+Ð+Ø„LÔ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r<   c                 ó´  — t          | d¦  «         	 t          `t          `t          `t          j        dk    rt          `n# t          $ r Y nw xY w	 |                      ¦   «          d S # t          $ rg}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Ú	Exceptionr1   Ú__traceback__Útb_next)rl   Úes     r:   Ú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“   rc   rf   rj   )rl   rm   s     r:   Úpytest_runtest_teardownr¥   º   sA   € Ý˜T :Ñ.Ô.Ð.Ø„LÔ×+Ò+¨HÑ5Ô5Ð5Ý˜T 4Ñ(Ô(Ð(Ð(Ð(r<   r[   )ry   r|   r}   c                 ó´   — 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 (ú)ú z(null)N)r\   ÚreplaceÚosÚenvironÚpop)rl   r[   Úvar_nameÚvalues       r:   r“   r“   À   sh   € ð %€HØð !Ø”;Ð)Ð) $Ð)Ð)Ð)ˆà—’˜f hÑ/Ô/ˆØ$�Œ
�8ÑÐÐå
Œ
�Š�xÑ Ô Ð Ð Ð r<   Úreportc                 ó@   — | j         dv r| j        rdS | j        rdS dS d S )N)ry   r}   )ÚerrorÚEÚERROR)ÚskippedÚsÚSKIPPED)rI   rI   rI   )r[   Úfailedrµ   ©r°   s    r:   Úpytest_report_teststatusrº   Ñ   s:   € Ø„{Ð+Ð+Ð+ØŒ=ð 	à(Ð(ØŒ^ð 	Ø,Ð,à�:Øˆ4r<   c                 óÖ  ‡ ‡‡— ‰ j         }|dk    r|j        Šn)|dk    r|j        Šn|dk    r|j        ŠnJ d|› �¦   «         ‚t          f}‰ j                             dd¦  «        s|t          fz  }t           	                    ˆ ˆˆfd„||¬¦  «        }| 
                    ‰ |¬	¦  «        }|r|                     |¬
¦  «         t          ||¦  «        r|                     ‰ ||¬¦  «         |S )Nry   r|   r}   FzUnhandled runtest hook case: Úusepdbc                  ó   •—  ‰dd‰ i‰¤ŽS )Nrl   © r¾   )rl   ÚkwdsÚruntest_hooks   €€€r:   rD   z!call_and_report.<locals>.<lambda>ñ   s   ø€ ��Ð/Ð/ $Ð/¨$Ð/Ð/€ r<   )r[   Úreraise©rl   r|   r¹   ©Únoder|   r°   )rq   r”   r£   r¥   r   rM   r�   ÚKeyboardInterruptÚCallInfoÚ	from_callÚpytest_runtest_makereportÚpytest_runtest_logreportÚcheck_interactive_exceptionÚpytest_exception_interact)	rl   r[   rv   r¿   rq   rÁ   r|   r°   rÀ   s	   `  `    @r:   r   r   á   s+  øøø€ ð ŒJ€EØˆw‚€Ø,1Ô,FˆˆØ	�ŠˆØÔ0ˆˆØ	�Ò	Ð	ØÔ4ˆˆà<Ð<°dÐ<Ð<Ñ<Ô<Ð<Ý04¨w€GØŒ;× Ò  ¨5Ñ1Ô1ð (ØÕ%Ð'Ñ'ˆÝ×ÒØ/Ð/Ð/Ð/Ð/Ð/°dÀGð ñ ô €Dð ×8Ò8¸dÈÐ8ÑNÔN€FØ
ð 6Ø×&Ò&¨fÐ&Ñ5Ô5Ð5Ý" 4¨Ñ0Ô0ð MØ×'Ò'¨T¸ÀVÐ'ÑLÔLÐLØ€Mr<   r|   zCallInfo[object]c                 ó–   — | j         €dS t          |d¦  «        rdS t          | j         j        t          t
          j        f¦  «        rdS dS )zVCheck whether the call raised an exception that should be reported as
    interactive.NFÚwasxfailT)ÚexcinforT   Ú
isinstancer¯   r!   ÚbdbÚBdbQuit)r|   r°   s     r:   rÊ   rÊ   û   sP   € ð „|ÐàˆuÝˆv�zÑ"Ô"ð àˆuÝ�$”,Ô$¥wµ´Ð&<Ñ=Ô=ð àˆuØˆ4r<   ÚTResult)Ú	covariantc                   ó’  — e Zd ZU dZee         ed<   eee                  ed<   e	ed<   e	ed<   e	ed<   e
d         ed<   d	d
œdee         deee                  de	de	de	de
d         deddfd„Zedefd„¦   «         Ze	 ddeg ef         de
d         deeee         eee         df         f                  ddfd„¦   «         Zdefd„ZdS )rÆ   z/Result/Exception info of a function invocation.Ú_resultrÎ   ÚstartÚstopr@   )Úcollectry   r|   r}   r[   F)Ú	_ispytestÚresultrÙ   r)   Nc                óx   — t          |¦  «         || _        || _        || _        || _        || _        || _        d S rB   )r   rÕ   rÎ   rÖ   r×   r@   r[   )ÚselfrÚ   rÎ   rÖ   r×   r@   r[   rÙ   s           r:   Ú__init__zCallInfo.__init__  s@   € õ 	�yÑ!Ô!Ð!ØˆŒØˆŒØˆŒ
ØˆŒ	Ø ˆŒØˆŒ	ˆ	ˆ	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    r:   rÚ   zCallInfo.result1  s7   € ð Œ<Ð#Ý  DÐ!@Ð!@Ð!@ÑAÔAÐAõ •G˜Tœ\Ñ*Ô*Ð*r<   ÚfuncrÁ   .zCallInfo[TResult]c           	      ó^  — d}t          j        ¦   «         }t          j        ¦   «         }	  |¦   «         }n=# t          $ r0 t	          j        ¦   «         }|�t          |j        |¦  «        r‚ d}Y nw xY wt          j        ¦   «         }||z
  }	t          j        ¦   «         }
 | ||
|	|||d¬¦  «        S )av  Call func, wrapping the result in a CallInfo.

        :param func:
            The function to call. Called without arguments.
        :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@   r[   rÚ   rÎ   rÙ   )r   ÚtimeÚperf_counterÚBaseExceptionr   Úfrom_currentrÏ   r¯   )Úclsrà   r[   rÁ   rÎ   rÖ   Úprecise_startrÚ   Úprecise_stopr@   r×   s              r:   rÇ   zCallInfo.from_call>  sÓ   € ð& ˆÝ”‘”ˆÝÔ+Ñ-Ô-ˆð	Ø(,¨©¬ˆFˆFøÝð 	ð 	ð 	Ý#Ô0Ñ2Ô2ˆGØÐ"¥z°'´-ÀÑ'IÔ'IÐ"ØØˆFˆFˆFð		øøøõ Ô*Ñ,Ô,ˆØ -Ñ/ˆÝŒ{‰}Œ}ˆØˆsØØØØØØØð
ñ 
ô 
ð 	
s   ª
5 µ7A/Á.A/c                 ó\   — | j         €d| j        ›d| j        ›d�S d| j        ›d| j         ›d�S )Nz<CallInfo when=z	 result: ú>z	 excinfo=)rÎ   r[   rÕ   rß   s    r:   Ú__repr__zCallInfo.__repr__i  sD   € ØŒ<ÐØL T¤YÐLÐL¸4¼<ÐLÐLÐLÐLØH ¤ÐHÐH°t´|ÐHÐHÐHÐHr<   rB   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   rÒ   Ú__annotations__r   rä   r8   r	   ÚboolrÝ   ÚpropertyrÚ   Úclassmethodr   r   r   r   rÇ   Ústrrë   r¾   r<   r:   rÆ   rÆ     sÇ  € € € € € € ð :Ð9à�gÔÐÐÑà�m MÔ2Ô3Ð3Ð3Ñ3à€L€L�Là
€K€K�Kà€O€O�Oà
Ð8Ô
9Ð9Ð9Ñ9ð  ðð ð à˜Ô!ðð ˜-¨Ô6Ô7ðð ð	ð
 ðð ðð Ð<Ô=ðð ðð 
ðð ð ð ð& ð
+˜ð 
+ð 
+ð 
+ñ „Xð
+ð ð ð(
ð (
à�r˜7�{Ô#ð(
ð Ð<Ô=ð(
ð Ø�$�}Ô% u¨T°-Ô-@À#Ð-EÔ'FÐFÔGô
ð	(
ð 
ð(
ð (
ð (
ñ „[ð(
ðTI˜#ð Ið Ið Ið Ið Ið Ir<   rÆ   c                 ó,   — t          j        | |¦  «        S rB   )r   Úfrom_item_and_callrÂ   s     r:   rÈ   rÈ   o  s   € ÝÔ(¨¨tÑ4Ô4Ð4r<   Ú	collectorc                 óp  ‡ — dt           t          t          t          f                  fˆ fd„}t                               |d¦  «        }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        ¦  «        }	t3          |	d	¦  «        s&t          |	t(          ¦  «        sJ ‚t5          |	¦  «        }	|	}|j        s|j        nd }
t9          ‰ j        |||
¦  «        }||_        |S )
Nr)   c                  ó4  •— t          ‰ t          ¦  «        rb‰ j        j                             ‰ j        ‰ j                             d¦  «        ‰ j        j        ‰ j                             d¦  «        ¬¦  «         t          ‰  
                    ¦   «         ¦  «        S )NÚ
importmodeÚconsider_namespace_packages)Úrootpathrû   )rÏ   r   rM   ÚpluginmanagerÚ_loadconftestmodulesÚpathr�   rü   ÚgetiniÚlistrØ   ©r÷   s   €r:   rØ   z+pytest_make_collect_report.<locals>.collectt  s’   ø€ õ �i¥Ñ+Ô+ð 	ØÔÔ*×?Ò?Ø”ØÔ ×*Ò*¨<Ñ8Ô8Ø"Ô)Ô2Ø,5Ô,<×,CÒ,CØ1ñ-ô -ð	 @ñ ô ð õ �I×%Ò%Ñ'Ô'Ñ(Ô(Ð(r<   rØ   r€   Úunittestrµ   r‰   r¸   Ú
toterminal)r   r   r   r   rÆ   rÇ   rÎ   r!   r—   ÚmodulesÚgetrU   ÚSkipTestrÏ   r¯   ÚtupleÚ_repr_failure_pyr   ÚreprÚ	reprcrashrô   rÿ   ÚlinenoÚmessageÚrepr_failurerT   r   rÚ   r   r\   r|   )r÷   rØ   r|   ÚlongreprÚoutcomeÚskip_exceptionsr  Úr_ÚrÚ	errorinforÚ   r`   s   `           r:   Úpytest_make_collect_reportr  s  s¬  ø€ ð)•T�%¥¥i Ô0Ô1ð )ð )ð )ð )ð )ð )õ& ×Ò˜g yÑ1Ô1€DØEI€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Ñ?Ô?Ð?Ø”ˆAØˆHˆHˆHÝ˜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Ø€Jr<   c                   ój   — e Zd ZdZdd„Zdeddfd„Zdeg ef         de	ddfd	„Z
d
ee         ddfd„ZdS )re   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)   Nc                 ó   — i | _         d S rB   )Ústackrß   s    r:   rÝ   zSetupState.__init__ä  s   € ð ð 	Œ
ˆ
ˆ
r<   rl   c                 óš  — |                      ¦   «         }| j                             ¦   «         D ]\  }\  }}||v s
J d¦   «         ‚|r|‚Œ|t          | j        ¦  «        d…         D ]e}|| j        vsJ ‚|j        gdf| j        |<   	 |                     ¦   «          Œ5# t          $ r$}| j        |         d         |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 properlyNr   )Ú	listchainr  ÚitemsrZ   r}   ry   r"   )rÜ   rl   Úneeded_collectorsÚcolÚ
finalizersÚexcs         r:   ry   zSetupState.setupð  s  € à ŸNšNÑ,Ô,Ðð '+¤j×&6Ò&6Ñ&8Ô&8ð 	ð 	Ñ"ˆCÑ"�*˜cØÐ+Ð+Ð+Ð+Ð-WÑ+Ô+Ð+Øð Ø�	ðð %¥S¨¬¡_¤_Ð%6Ð%6Ô7ð 	ð 	ˆCØ˜dœjÐ(Ð(Ð(Ð(à #¤˜~¨tÐ4ˆDŒJ�s‰OðØ—	’	‘”��øÝð ð ð Ø#'¤:¨c¤?°1Ô#5°sÐ";�”
˜3‘Ø�	øøøøðøøøð	ð 	s   ÂBÂ
CÂ$CÃCÚ	finalizerrÄ   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  rU   )rÜ   r   rÄ   s      r:   ÚaddfinalizerzSetupState.addfinalizer  s{   € ð
 Ð3�J t­UÑ3Ô3Ð3Ð3Ð3Ý˜	Ñ"Ô"Ð"Ð"Ð"Ø�t”zÐ!Ð!Ð! D¨$¬*Ð#5Ñ!Ô!Ð!ØŒ
�4Ô˜Ô×"Ò" 9Ñ-Ô-Ð-Ð-Ð-r<   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)r  r  r  ÚkeysrZ   Úpopitemr­   r"   rU   Úextendr%   )rÜ   rm   r  Ú
exceptionsrÄ   r  Ú_Úthese_exceptionsÚfinr¢   Úmsgs              r:   rj   zSetupState.teardown_exact  sÞ  € ð %Ð=¨×);Ò);Ñ)=Ô)=ÐCÀÐØ*,ˆ
ØŒ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)r)   N)rì   rí   rî   rï   rÝ   r   ry   r   Úobjectr   r#  r
   rj   r¾   r<   r:   re   re   ¤  s­   € € € € € ð=ð =ð~
ð 
ð 
ð 
ð˜$ð  4ð ð ð ð ð*. h¨r°6¨zÔ&:ð .À$ð .È4ð .ð .ð .ð .ð " x°¤~ð  "¸$ð  "ð  "ð  "ð  "ð  "ð  "r<   re   c                 óö   — | j         }|                     | ¬¦  «         |                     | ¬¦  «        }|j                             dd ¦  «        }|r(t          ||¦  «        r|                     | ||¬¦  «         |S )Nr  r|   rÃ   )rq   Úpytest_collectstartr  Ú__dict__r­   rÊ   rË   )r÷   rq   r`   r|   s       r:   Úcollect_one_noder2  2  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Ø€Jr<   )r=   r'   r)   N)rc   r&   r)   N)TN)T)Jrï   rÐ   Údataclassesr«   r—   Útypingr   r   r   r   r   r   r	   r
   r   r   r   r   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'   r;   rb   rh   rk   rñ   ru   rs   r‚   r”   r£   r¥   r“   rô   rº   r   rÊ   rÒ   Ú	dataclassrÆ   rÈ   r  re   r2  r¾   r<   r:   ú<module>r?     s  ðà 9Ð 9à 
€
€
€
Ø Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø +Ð +Ð +Ð +Ð +Ð +Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø -Ð -Ð -Ð -Ð -Ð -Ø #Ð #Ð #Ð #Ð #Ð #Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø -Ð -Ð -Ð -Ð -Ð -Ø $Ð $Ð $Ð $Ð $Ð $Ø )Ð )Ð )Ð )Ð )Ð )ð Ô�gÒÐØ1Ð1Ð1Ð1Ð1Ð1àð 2Ø$Ð$Ð$Ð$Ð$Ð$Ø1Ð1Ð1Ð1Ð1Ð1ð˜Vð ¨ð ð ð ð ð*Kð Kð Kð Kð>'ð 'ð 'ð 'ð-ð -ð -ð -ð $ð °(¸4´.ð ÀTð ð ð ð ð >Bðð Ø
ðØðØ,4°T¬Nðà	ˆ*Ôðð ð ð ð0	˜ð 	 $ð 	ð 	ð 	ð 	ð)˜tð )¨ð )ð )ð )ð )ð
˜dð  tð ð ð ð ð0) $ð )°(¸4´.ð )ÀTð )ð )ð )ð )ð!Ø
ð!Ø˜wÐ'BÔCÔDð!à	ð!ð !ð !ð !ð"	 Zð 	°H¸UÀ3ÈÈSÀ=Ô=QÔ4Rð 	ð 	ð 	ð 	ð" IMðð Ø
ðØÐ9Ô:ðØAEðàðð ð ð ð4Ð&8ð À*ð ÐQUð ð ð ð ð ˆ'�) tÐ
,Ñ
,Ô
,€ð ØÔð]Ið ]Ið ]Ið ]Ið ]Iˆw�wÔñ ]Iô ]Iñ Ôñ „ð]Ið@5 Dð 5°¸´ð 5À:ð 5ð 5ð 5ð 5ð.¨)ð .¸ð .ð .ð .ð .ðbK"ð K"ð K"ð K"ð K"ñ K"ô K"ð K"ð\ 	ð ¨mð ð ð ð ð ð r<   