Ë
    æØjj	  ã                  ó  — d dl m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 erd dlmZ dZdd„Zdd„Zdd„Zej4                   G d„ d«      «       Z G d„ d«      Zy)é    )ÚannotationsN)Údatetime)Ú	timedelta)ÚAny)ÚTYPE_CHECKING)Únodes)ÚCache)ÚConfig)ÚParser)ÚSession)Ú
TestReport)ÚSelfzcache/stepwisec                ó°   — | j                  d«      }|j                  dddddd¬«       |j                  d	d
dddd¬«       |j                  dddddd¬«       y )NÚgeneralz--swz
--stepwiseÚ
store_trueFÚstepwisezBExit on test failure and continue from last failing test next time)ÚactionÚdefaultÚdestÚhelpz	--sw-skipz--stepwise-skipÚstepwise_skipz_Ignore the first failing test but stop on the next failing test. Implicitly enables --stepwise.z
--sw-resetz--stepwise-resetÚstepwise_resetzWResets stepwise state, restarting the stepwise workflow. Implicitly enables --stepwise.)ÚgetgroupÚ	addoption)ÚparserÚgroups     úR/opt/eval-harness/bench_task/venv/lib/python3.12/site-packages/_pytest/stepwise.pyÚpytest_addoptionr      s�   € Ø�O‰O˜IÓ&€EØ	‡O�OØØØØØØQð ô ð 
‡O�OØØØØØð)ð ô ð 
‡O�OØØØØØð)ð õ ó    c                óì   — | j                   j                  s| j                   j                  rd| j                   _        | j	                  d«      r&| j
                  j                  t        | «      d«       y y )NTr   Ústepwiseplugin)Úoptionr   r   r   Ú	getoptionÚpluginmanagerÚregisterÚStepwisePlugin)Úconfigs    r   Úpytest_configurer(   5   sV   € à‡}�}×"Ò" f§m¡m×&BÒ&BØ!%ˆ�‰ÔØ×Ñ˜
Ô#Ø×Ñ×%Ñ%¤n°VÓ&<Ð>NÕOð $r   c                óš   — | j                   j                  d«      s0| j                   j                  €J ‚t        | j                   d«      ry y y )Nr   Úworkerinput)r'   r#   ÚcacheÚhasattr©Úsessions    r   Úpytest_sessionfinishr/   =   sG   € Ø�>‰>×#Ñ# JÔ/Ø�~‰~×#Ñ#Ð/Ð/Ð/Ü�7—>‘> =Ô1ð ð 2ð 0r   c                  óX   — e Zd ZU ded<   ded<   ded<   edd„«       Zedd„«       Zdd	„Zy
)ÚStepwiseCacheInfoz
str | NoneÚlast_failedz
int | NoneÚlast_test_countÚstrÚlast_cache_date_strc                ó@   — t        j                  | j                  «      S ©N)r   Úfromisoformatr5   ©Úselfs    r   Úlast_cache_datez!StepwiseCacheInfo.last_cache_dateS   s   € ä×%Ñ% d×&>Ñ&>Ó?Ð?r   c                óX   —  | d d t        j                  «       j                  «       ¬«      S )N)r2   r3   r5   )r   ÚnowÚ	isoformat)Úclss    r   ÚemptyzStepwiseCacheInfo.emptyW   s'   € áØØ Ü (§¡£× 8Ñ 8Ó :ô
ð 	
r   c                óR   — t        j                  «       j                  «       | _        y r7   )r   r=   r>   r5   r9   s    r   Úupdate_date_to_nowz$StepwiseCacheInfo.update_date_to_now_   s   € Ü#+§<¡<£>×#;Ñ#;Ó#=ˆÕ r   N)Úreturnr   )rC   r   ©rC   ÚNone)	Ú__name__Ú
__module__Ú__qualname__Ú__annotations__Úpropertyr;   Úclassmethodr@   rB   © r   r   r1   r1   F   sG   … ð Óð
  Óð Óàò@ó ð@ð ò
ó ð
ô>r   r1   c                  óP   — e Zd Zd	d„Zd
d„Zdd„Z	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Z	y)r&   c                óî   — || _         d | _        g | _        |j                  €J ‚|j                  | _        |j	                  d«      | _        |j	                  d«      | _        | j                  «       | _        y )Nr   r   )	r'   r.   Úreport_statusr+   r#   ÚskipÚresetÚ_load_cached_infoÚcached_info)r:   r'   s     r   Ú__init__zStepwisePlugin.__init__d   si   € ØˆŒØ'+ˆŒØ(*ˆÔØ�|‰|Ð'Ð'Ð'Ø"ŸL™LˆŒ
Ø ×*Ñ*¨?Ó;ˆŒ	Ø!×+Ñ+Ð,<Ó=ˆŒ
Ø×1Ñ1Ó3ˆÕr   c                ól  — | j                   j                  t        d «      }|r	 t        |d   |d   |d   «      S t        j                  «       S # t        t
        f$ rV}t        |«      j                  › d|› �}| j                  j                  d|› d�«       Y d }~t        j                  «       S d }~ww xY w)Nr2   r3   r5   z: z!error reading cache, discarding (ú))r+   ÚgetÚSTEPWISE_CACHE_DIRr1   ÚKeyErrorÚ	TypeErrorÚtyperF   rO   Úappendr@   )r:   Úcached_dictÚeÚerrors       r   rR   z StepwisePlugin._load_cached_infon   sÀ   € Ø-1¯Z©Z¯^©^Ô<NÐPTÓ-UˆÙðXÜ(Ø Ñ.ØÐ 1Ñ2ØÐ 5Ñ6óð ô !×&Ñ&Ó(Ð(øô œiÐ(ò XÜ ›7×+Ñ+Ð,¨B¨q¨cÐ2�Ø×"Ñ"×)Ñ)Ð,MÈeÈWÐTUÐ*V×WÐWô !×&Ñ&Ó(Ð(ûðXús   ¤A ÁB3Á9B.Â.B3c                ó   — || _         y r7   r-   )r:   r.   s     r   Úpytest_sessionstartz"StepwisePlugin.pytest_sessionstart~   s	   € Øˆ�r   c                ó´  — | j                   j                  }t        |«      | j                   _        | j                  r-| j                  j                  d«       d | j                   _        y | j                   j                  s| j                  j                  d«       y |�K|t        |«      k7  r=| j                  j                  dt        |«      › d|› d�«       d | j                   _        y d }t        |«      D ],  \  }}|j                  | j                   j                  k(  sŒ*|} n |€| j                  j                  d«       y t        j                  «       | j                   j                  z
  }t        t        |j                  «       «      ¬«      }| j                  j                  d|› d	|› d
�«       |d | }|d |…= |j                  j!                  |¬«       y )Nzresetting state, not skipping.z)no previously failed tests, not skipping.z&test count changed, not skipping (now z tests, previously z).z/previously failed test not found, not skipping.)Úsecondsz	skipping z" already passed items (cache from z! ago, use --sw-reset to discard).)Úitems)rS   r3   ÚlenrQ   rO   r\   r2   Ú	enumerateÚnodeidr   r=   r;   r   ÚintÚtotal_secondsÚhookÚpytest_deselected)	r:   r'   rd   r3   Úfailed_indexÚindexÚitemÚ	cache_ageÚ
deselecteds	            r   Úpytest_collection_modifyitemsz,StepwisePlugin.pytest_collection_modifyitems�   s¹  € ð ×*Ñ*×:Ñ:ˆÜ+.¨u«:ˆ×ÑÔ(à�:Š:Ø×Ñ×%Ñ%Ð&FÔGØ+/ˆD×ÑÔ(Øà×Ñ×+Ò+Ø×Ñ×%Ñ%Ð&QÔRØàÐ&¨?¼cÀ%»jÒ+HØ×Ñ×%Ñ%Ø8¼¸U»¸ÐDWÐXgÐWhÐhjÐkôð ,0ˆD×ÑÔ(Øð ˆÜ$ UÓ+ò 	‰KˆE�4Ø�{‰{˜d×.Ñ.×:Ñ:Ó:Ø$�Ùð	ð ÐØ×Ñ×%Ñ%Ð&WÕXä Ÿ™›¨×)9Ñ)9×)IÑ)IÑIˆIä!¬#¨i×.EÑ.EÓ.GÓ*HÔIˆIØ×Ñ×%Ñ%Ø˜L˜>Ð)KÈIÈ;ð W/ð 0ôð ˜} Ð-ˆJØ�m�|�mÐ$Ø�K‰K×)Ñ)°
Ð)Õ;r   c                ó¬  — |j                   rƒ| j                  r<|j                  | j                  j                  k(  rd | j                  _        d| _        y |j                  | j                  _        | j
                  €J ‚d| j
                  _        y |j                  dk(  r6|j                  | j                  j                  k(  rd | j                  _        y y y )NFz0Test failed, continuing from this test next run.Úcall)ÚfailedrP   rg   rS   r2   r.   Ú
shouldstopÚwhen)r:   Úreports     r   Úpytest_runtest_logreportz'StepwisePlugin.pytest_runtest_logreport®   s±   € Ø�=Š=Ø�yŠyð —=‘= D×$4Ñ$4×$@Ñ$@Ò@Ø37�D×$Ñ$Ô0à!�•	ð 06¯}©}�× Ñ Ô,Ø—|‘|Ð/Ð/Ð/àFð —‘Õ'ð �{‰{˜fÒ$à—=‘= D×$4Ñ$4×$@Ñ$@Ò@Ø37�D×$Ñ$Õ0ð Að %r   c                óš   — | j                   j                  «       dk\  r)| j                  r| j                  D �cg c]  }d|› �‘Œ	 c}S y c c}w )Nr   z
stepwise: )r'   Úget_verbosityrO   )r:   Úxs     r   Úpytest_report_collectionfinishz-StepwisePlugin.pytest_report_collectionfinishÆ   sF   € Ø�;‰;×$Ñ$Ó&¨!Ò+°×0BÒ0BØ.2×.@Ñ.@ÖA¨�j  Ò$ÒAÐAØùò Bs   ¸Ac                óà   — t        | j                  d«      ry | j                  j                  «        | j                  j                  t        t        j                  | j                  «      «       y )Nr*   )	r,   r'   rS   rB   r+   ÚsetrX   ÚdataclassesÚasdictr9   s    r   r/   z#StepwisePlugin.pytest_sessionfinishË   sK   € Ü�4—;‘; Ô.ð Ø×Ñ×+Ñ+Ô-Ø�
‰
�‰Ô)¬;×+=Ñ+=¸d×>NÑ>NÓ+OÕPr   N©r'   r
   rC   rE   )rC   r1   ©r.   r   rC   rE   )r'   r
   rd   zlist[nodes.Item]rC   rE   )rw   r   rC   rE   )rC   zlist[str] | NonerD   )
rF   rG   rH   rT   rR   ra   rq   rx   r|   r/   rL   r   r   r&   r&   c   s?   „ ó4ó)ó ð+<Øð+<Ø%5ð+<à	ó+<óZ8ó0ô
Qr   r&   )r   r   rC   rE   r�   r‚   )Ú
__future__r   r   r   r   Útypingr   r   Ú_pytestr   Ú_pytest.cacheproviderr	   Ú_pytest.configr
   Ú_pytest.config.argparsingr   Ú_pytest.mainr   Ú_pytest.reportsr   Útyping_extensionsr   rX   r   r(   r/   Ú	dataclassr1   r&   rL   r   r   ú<module>r�      st   ðÝ "ã Ý Ý Ý Ý  å Ý 'Ý !Ý ,Ý  Ý &ñ Ý&à%Ð óó<Póð ×Ñ÷>ð >ó ð>÷8nQò nQr   