Ë
    æØjj6  ã                  ó„  — d Z ddlmZ ddlZddlmZ ddlmZ ddlZddlZddl	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„Z"d"d„Z#d#d„Z$ G d„ d«      Z% G d„ d«      Z& G d„ d«      Z'd$d„Z(d$d„Z)	 	 	 	 	 	 	 	 d%d„Z*	 	 	 	 d&d„Z+d'd „Z,y)(z4Interactive debugging with PDB, the Python Debugger.é    )ÚannotationsN)ÚCallable)Ú	Generator)ÚAny)Úoutcomes)ÚExceptionInfo)ÚCaptureManager)ÚConfig)ÚConftestImportFailure)Úhookimpl)ÚPytestPluginManager)ÚParser)Ú
UsageError)ÚNode)Ú
BaseReport)ÚCallInfoc                óˆ   — 	 | j                  d«      \  }}||fS # t        $ r}t        j                  | ›d�«      |‚d}~ww xY w)z#Validate syntax of --pdbcls option.ú:z) is not in the format 'modname:classname'N)ÚsplitÚ
ValueErrorÚargparseÚArgumentTypeError)ÚvalueÚmodnameÚ	classnameÚes       úS/opt/eval-harness/bench_task/venv/lib/python3.12/site-packages/_pytest/debugging.pyÚ_validate_usepdb_clsr      sZ   € ðØ"Ÿ[™[¨Ó-Ñˆ�ð
 �YÐÐøô	 ò Ü×(Ñ(ØˆiÐ@ÐAó
àð	ûðús   ‚ š	A£<¼Ac                ó®   — | j                  d«      }|j                  dddd¬«       |j                  ddd	t        d
¬«       |j                  dddd¬«       y )NÚgeneralz--pdbÚusepdbÚ
store_truezDStart the interactive Python debugger on errors or KeyboardInterrupt)ÚdestÚactionÚhelpz--pdbclsÚ
usepdb_clszmodulename:classnamez{Specify a custom interactive Python debugger for use with --pdb.For example: --pdbcls=IPython.terminal.debugger:TerminalPdb)r#   ÚmetavarÚtyper%   z--traceÚtracez(Immediately break when running each test)ÚgetgroupÚ	addoptionr   )ÚparserÚgroups     r   Úpytest_addoptionr.   )   sq   € Ø�O‰O˜IÓ&€EØ	‡O�OØØØØSð	 ô ð 
‡O�OØØØ&Ü!ðFð ô ð 
‡O�OØØØØ7ð	 õ ó    c                ó
  ‡— dd l Š| j                  d«      r$| j                  j                  t	        «       d«       | j                  d«      r$| j                  j                  t        «       d«       t        j                  j                  ‰j                  t        j                  t        j                  f«       t        j                  ‰_	        | j                  t        _
        | t        _        dˆfd„}| j                  |«       y )Nr   r)   Úpdbtracer!   Ú	pdbinvokec                 óx   •— t         j                  j                  «       \  ‰ _        t         _        t         _        y ©N)Ú	pytestPDBÚ_savedÚpopÚ	set_traceÚ_pluginmanagerÚ_config)Úpdbs   €r   Úfinzpytest_configure.<locals>.finR   s-   ø€ ô
 ×Ñ× Ñ Ó"ñ		
ØŒMÜÔ$ÜÕr/   ©ÚreturnÚNone)r;   ÚgetvalueÚpluginmanagerÚregisterÚPdbTraceÚ	PdbInvoker5   r6   Úappendr8   r9   r:   Úadd_cleanup)Úconfigr<   r;   s     @r   Úpytest_configurerH   A   s¶   ø€ Ûà‡��wÔØ×Ñ×%Ñ%¤h£j°*Ô=Ø‡��xÔ Ø×Ñ×%Ñ%¤i£k°;Ô?ä×Ñ×ÑØ	�‰œ	×0Ñ0´)×2CÑ2CÐDôô ×'Ñ'€C„MØ%×3Ñ3„IÔØ„IÔõ#ð ×Ñ�sÕr/   c                  ó¦   — e Zd ZU dZdZded<   dZded<   g Zded<   d	ZdZ	d
ed<   e
dd„«       Ze
dd„«       Ze
dd„«       Ze
d„ «       Ze
dd„«       Zy)r5   z'Pseudo PDB that defers to the real pdb.NzPytestPluginManager | Noner9   zConfig | Noner:   zKlist[tuple[Callable[..., None], PytestPluginManager | None, Config | None]]r6   r   z"tuple[type[Any], type[Any]] | NoneÚ_wrapped_pdb_clsc                ó(   — |r|j                  «       S y)NF)Úis_capturing)ÚclsÚcapmans     r   Ú_is_capturingzpytestPDB._is_capturingg   s   € áØ×&Ñ&Ó(Ð(Ør/   c                ó8  — | j                   sdd l}|j                  S | j                   j                  d«      }| j                  r!| j                  d   |k(  r| j                  d   S |rR|\  }}	 t        j                  |«      }|j                  d«      }t        ||d   «      }|dd  D ]  }	t        ||	«      }Œ ndd l}|j                  }| j                  ||«      }||f| _        |S # t        $ r*}
dj                  ||f«      }t        d|›d|
› �«      |
‚d }
~
ww xY w)Nr   r&   é   ú.r   z--pdbcls: could not import z: )r:   r;   ÚPdbr@   rJ   Ú	importlibÚimport_moduler   ÚgetattrÚ	ExceptionÚjoinr   Ú_get_pdb_wrapper_class)rM   rN   r;   r&   r   r   ÚmodÚpartsÚpdb_clsÚpartÚexcr   Úwrapped_clss                r   Ú_import_pdb_clszpytestPDB._import_pdb_clsm   s2  € à�{Š{Ûð —7‘7ˆNà—[‘[×)Ñ)¨,Ó7ˆ
à×Ò C×$8Ñ$8¸Ñ$;¸zÒ$IØ×'Ñ'¨Ñ*Ð*áØ!+ÑˆG�YðÜ×-Ñ-¨gÓ6�ð "Ÿ™¨Ó,�Ü! # u¨Q¡xÓ0�Ø! ! "˜Iò 5�DÜ% g¨tÓ4‘Gñ5ó à—g‘gˆGà×0Ñ0°¸&ÓAˆØ *¨KÐ8ˆÔØÐøô ò ØŸ™ '¨9Ð!5Ó6�Ü Ø1°%°¸"¸S¸EÐBóàðûðús   Á-AC& Ã&	DÃ/%DÄDc                ó6   ‡ ‡‡‡— dd l Š G ˆˆˆ ˆfd„d‰«      }|S )Nr   c                  óN  •‡ — e Zd ZW °ZdZˆ ˆfd„Z eW °d«      rW °j
                  j                  e_        ˆ ˆˆfd„Z eW °d«      rW °j                  j                  e_        exZ	Z
ˆ ˆfd„Z eW °d«      rW °j                  j                  e_        eZeZˆ fd„Zˆ fd	„Zˆ xZS )
ú:pytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapperFc                óz   •— ‰xj                   dz  c_         t        ‰| �	  |«      }‰xj                   dz  c_         |S )NrQ   )Ú_recursive_debugÚsuperÚdo_debug©ÚselfÚargÚretÚ	__class__rM   s      €€r   rg   zCpytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.do_debug›   s9   ø€ Ø×$Ò$¨Ñ)Õ$Ü‘gÑ& sÓ+�Ø×$Ò$¨Ñ)Õ$Ø�
r/   rg   c                óF  •— t         ‰| �  |«      }‰j                  dk(  r»‰j                  €J ‚‰j                  j                  ‰j                  «      }|j                  «        | j                  }t        j                  |«      }|rC|dk(  r|j                  dd«       n|j                  dd|› d�«       |€J ‚|j                  «        n|j                  dd«       ‰j                  €J ‚‰j                  j                  j                  ‰j                  | ¬«       d	| _        |S )
Nr   Úglobalú>z#PDB continue (IO-capturing resumed)z'PDB continue (IO-capturing resumed for ú)zPDB continue©rG   r;   T)rf   Údo_continuere   r:   rG   Úcreate_terminal_writerÚlineÚ_pytest_capmanr5   rO   ÚsepÚresumer9   ÚhookÚpytest_leave_pdbÚ
_continued)	ri   rj   rk   ÚtwrN   Ú	capturingrl   Ú_pytestrM   s	         €€€r   rr   zFpytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.do_continue¤   s	  ø€ Ü‘gÑ)¨#Ó.�Ø×'Ñ'¨1Ò,ØŸ;™;Ð2Ð2Ð2Ø Ÿ™×>Ñ>¸s¿{¹{ÓK�BØ—G‘G”Ià!×0Ñ0�FÜ )× 7Ñ 7¸Ó ?�IÙ Ø$¨Ò0ØŸF™F 3Ð(MÕNàŸF™FØ #Ø"IÈ)ÈÐTUÐ Vôð  &Ð1Ð1Ð1ØŸ™�àŸ™˜s NÔ3Ø×)Ñ)Ð5Ð5Ð5Ø×"Ñ"×'Ñ'×8Ñ8ÀÇÁÐQUÐ8ÔVØ"&�”Ø�
r/   rr   c                ón   •— t         ‰| �  |«      }‰j                  dk(  rt        j                  d«       |S )Nr   úQuitting debugger)rf   Údo_quitre   r   Úexitrh   s      €€r   r€   zBpytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.do_quitÃ   s3   ø€ ô ‘g‘o cÓ*�à×'Ñ'¨1Ò,Ü—M‘MÐ"5Ô6à�
r/   r€   c                ó”   •— t         ‰| �  ||«      }|s4| j                  r(| j                  r| j                  j	                  d¬«       |S )zŽSuspend on setup().

                Needed after do_continue resumed, and entering another
                breakpoint again.
                T©Úin_)rf   Úsetuprz   ru   Úsuspend_global_capture)ri   ÚfÚtbrk   rl   s       €r   r…   z@pytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.setupÖ   sE   ø€ ô ‘g‘m A rÓ*�Ù˜tŸšð ×*Ò*Ø×+Ñ+×BÑBÀtÐBÔLØ�
r/   c                ó  •— t         ‰| �  ||«      \  }}|€ft        dt        |«      dz
  «      }|rL||   d   j                  j                  dd«      r*|dz  }|r#||   d   j                  j                  dd«      rŒ*||fS )Nr   rQ   Ú__tracebackhide__F)rf   Ú	get_stackÚmaxÚlenÚf_localsÚget)ri   r‡   ÚtÚstackÚirl   s        €r   r‹   zDpytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.get_stackä   s‡   ø€ Ü ™7Ñ,¨Q°Ó2‘��qØ�9ä˜Aœs 5›z¨A™~Ó.�AÙ  a¡¨¡× 4Ñ 4× 8Ñ 8Ð9LÈeÔ TØ˜Q™˜ñ   a¡¨¡× 4Ñ 4× 8Ñ 8Ð9LÈeÕ Tà˜a�x�r/   )Ú__name__Ú
__module__Ú__qualname__ru   rz   rg   ÚhasattrÚ__doc__rr   Údo_cÚdo_contr€   Údo_qÚdo_exitr…   r‹   Ú__classcell__)rl   r}   rN   rM   r\   s   @€€€€r   ÚPytestPdbWrapperrc   —   sœ   ù„ Ù#ˆNØˆJõñ ‘w 
Ô+Ù#*×#3Ñ#3×#;Ñ#;�Ô öñ4 ‘w Ô.Ù&-×&9Ñ&9×&AÑ&A�Ô#à(Ð(ˆD�7õñ ‘w 	Ô*Ù")§/¡/×"9Ñ"9�”àˆDØˆGô÷ ð  r/   r�   )Ú_pytest.config)rM   r\   rN   r�   r}   s   ``` @r   rY   z pytestPDB._get_pdb_wrapper_class“   s#   û€ ã÷T	 ñ T	 ˜wô T	 ðl  Ðr/   c                óÜ  — ddl }| j                  €d}n| j                  j                  d«      }|r|j                  d¬«       | j                  rÉ|j
                  j                  | j                  «      }|j                  «        | j                  dk(  r…|j                  dd«      }|�|j                  d|«       n^| j                  |«      }|dk(  r|j                  dd	|› d
�«       n1|r|j                  dd	|› d|› d�«       n|j                  dd	|› �«        | j                  |«      di |¤Ž}	| j                  r1| j                  j                  j                  | j                  |	¬«       |	S )z4Initialize PDB debugging, dropping any IO capturing.r   NÚcapturemanagerTrƒ   Úheaderro   rn   zPDB z (IO-capturing turned off)z (IO-capturing turned off for rp   rq   © )rž   r9   Ú	getpluginÚsuspendr:   rG   rs   rt   re   r7   rv   rO   r`   rx   Úpytest_enter_pdb)
rM   ÚmethodÚargsÚkwargsr}   rN   r{   r¡   r|   Ú_pdbs
             r   Ú	_init_pdbzpytestPDB._init_pdbï   sQ  € ó 	à×ÑÐ%Ø,0‰Fà×'Ñ'×1Ñ1Ð2BÓCˆFÙØ�N‰N˜tˆNÔ$à�;Š;Ø—‘×6Ñ6°s·{±{ÓCˆBØ�G‰GŒIà×#Ñ# qÒ(àŸ™ H¨dÓ3�ØÐ%Ø—F‘F˜3 Õ'à #× 1Ñ 1°&Ó 9�IØ  HÒ,ØŸ™˜s d¨6¨(Ð2LÐ$MÕNÙ"ØŸ™ØØ" 6 (Ð*HÈÈÐSTÐUõð
 Ÿ™˜s d¨6¨( OÔ4à*ˆs×"Ñ" 6Ó*Ñ4¨VÑ4ˆà×ÒØ×Ñ×#Ñ#×4Ñ4¸C¿K¹KÈTÐ4ÔRØˆr/   c                óŽ   — t        j                  «       j                  } | j                  dg|¢­i |¤Ž}|j	                  |«       y)zBInvoke debugging via ``Pdb.set_trace``, dropping any IO capturing.r8   N)ÚsysÚ	_getframeÚf_backrª   r8   )rM   r§   r¨   Úframer©   s        r   r8   zpytestPDB.set_trace  s;   € ô —‘“×&Ñ&ˆØˆs�}‰}˜[Ð:¨4Ò:°6Ñ:ˆØ�‰�uÕr/   )rN   úCaptureManager | Noner>   z
str | bool)rN   r°   r=   )r“   r”   r•   r—   r9   Ú__annotations__r:   r6   re   rJ   ÚclassmethodrO   r`   rY   rª   r8   r¢   r/   r   r5   r5   \   s©   … Ù1à15€NÐ.Ó5Ø!€Gˆ]Ó!ð 	ð ð ó ð ÐØ;?ÐÐ8Ó?àòó ðð
 ò#ó ð#ðJ òY ó ðY ðv ñ$ó ð$ðL òó ñr/   r5   c                  ó,   — e Zd Z	 	 	 	 	 	 	 	 dd„Zdd„Zy)rD   c                ób  — |j                   j                  j                  d«      }|rc|j                  d¬«       |j	                  «       \  }}t
        j                  j                  |«       t
        j                  j                  |«       |j                  €J ‚t        ||j                  |«       y )Nr    Trƒ   )
rG   rA   r£   r†   Úread_global_capturer¬   ÚstdoutÚwriteÚexcinfoÚ
_enter_pdb)ri   ÚnodeÚcallÚreportrN   ÚoutÚerrs          r   Úpytest_exception_interactz#PdbInvoke.pytest_exception_interact  s‰   € ð —‘×*Ñ*×4Ñ4Ð5EÓFˆÙØ×)Ñ)¨dÐ)Ô3Ø×1Ñ1Ó3‰HˆC�Ü�J‰J×Ñ˜SÔ!Ü�J‰J×Ñ˜SÔ!Ø�|‰|Ð'Ð'Ð'Ü�4˜Ÿ™ vÕ.r/   c                ó0   — t        |«      }t        |«       y r4   )Ú_postmortem_exc_or_tbÚpost_mortem)ri   r¸   Ú	exc_or_tbs      r   Úpytest_internalerrorzPdbInvoke.pytest_internalerror+  s   € Ü)¨'Ó2ˆ	Ü�IÕr/   N)rº   r   r»   zCallInfo[Any]r¼   r   r>   r?   )r¸   úExceptionInfo[BaseException]r>   r?   )r“   r”   r•   r¿   rÄ   r¢   r/   r   rD   rD     s,   „ ð
/Øð
/Ø -ð
/Ø7Að
/à	ó
/ôr/   rD   c                  ó,   — e Zd Z ed¬«      dd„«       Zy)rC   T)Úwrapperc              #  ó(   K  — t        |«       d –—S ­wr4   )Ú wrap_pytest_function_for_tracing)ri   Ú
pyfuncitems     r   Úpytest_pyfunc_callzPdbTrace.pytest_pyfunc_call1  s   è ø€ ä(¨Ô4Úˆùs   ‚N)r>   zGenerator[None, object, object])r“   r”   r•   r   rË   r¢   r/   r   rC   rC   0  s   „ Ù�dÔòó ñr/   rC   c                ó–   ‡‡— t         j                  d«      Š| j                  Št        j                  ‰«      dˆˆfd„«       }|| _        y)zñChange the Python function object of the given Function item by a
    wrapper which actually enters pdb before calling the python function
    itself, effectively leaving the user in the pdb prompt in the first
    statement of the function.Úruncallc                 óZ   •— t        j                  ‰g| ¢­i |¤Ž}‰j                  |«       y r4   )Ú	functoolsÚpartialrÍ   )r§   r¨   Úfuncr©   Útestfunctions      €€r   rÇ   z1wrap_pytest_function_for_tracing.<locals>.wrapperB  s)   ø€ ä× Ñ  Ð?°Ò?¸Ñ?ˆØ�‰�TÕr/   Nr=   )r5   rª   ÚobjrÏ   Úwraps)rÊ   rÇ   r©   rÒ   s     @@r   rÉ   rÉ   7  sD   ù€ ô
 ×Ñ˜yÓ)€DØ—>‘>€Lô
 ‡_�_�\Ó"õó #ðð €J…Nr/   c                óR   — | j                   j                  d«      rt        | «       yy)zaWrap the given pytestfunct item for tracing support if --trace was given in
    the command line.r)   N)rG   r@   rÉ   )rÊ   s    r   Ú&maybe_wrap_pytest_function_for_tracingrÖ   J  s%   € ð ×Ñ×!Ñ! 'Ô*Ü(¨Õ4ð +r/   c                óD  — | j                   j                  j                  d«      j                  }|j	                  «        | j                   j
                  j                  }d|j                  fd|j                  fd|j                  ffD ]B  \  }}||dfv sŒ|sŒ|j                  dd|z   «       |dd  d	k(  r|d d }|j	                  |«       ŒD |j                  dd
«       |j                  |«       |j                  dd«       t        |«      }d|_        t        |«       |S )NÚterminalreporterr¶   ÚstderrÚlogÚallro   z	captured éÿÿÿÿú
Ú	tracebackzentering PDBT)rG   rA   r£   Ú_twrt   ÚoptionÚshowcaptureÚ	capstdoutÚ	capstderrÚcaplogrv   Ú
toterminalrÁ   Ú	_pdbshownrÂ   )rº   r¸   Úrepr{   rá   ÚsectionnameÚcontentÚ	tb_or_excs           r   r¹   r¹   Q  s  € ð 
�‰×	"Ñ	"×	,Ñ	,Ð-?Ó	@×	DÑ	D€BØ‡G�G„Ià—+‘+×$Ñ$×0Ñ0€Kð 
�3—=‘=Ð!Ø	�3—=‘=Ð!Ø	�—
‘
Ðð!ò 	Ñˆ�Wð
 ˜;¨Ð.Ò.²7Ø�F‰F�3˜ kÑ1Ô2Ø�r�sˆ|˜tÒ#Ø! # 2˜,�Ø�G‰G�GÕð	ð ‡F�Fˆ3�ÔØ‡N�N�2ÔØ‡F�Fˆ3�ÔÜ% gÓ.€IØ€C„MÜ�	ÔØ€Jr/   c                ó°  — ddl m} t        j                  dk\  }t	        | j
                  |«      r,| j
                  }|r|j                  d   S |j                  d   S t	        | j
                  t        «      r4| j
                  j                  }|r|S |j                  €J ‚|j                  S | j                  €J ‚|r| j                  d   S | j                  d   S )Nr   )ÚUnexpectedException)é   é   rQ   é   )Údoctestrì   r¬   Úversion_infoÚ
isinstancer   Úexc_infor   ÚcauseÚ__traceback__Ú_excinfo)r¸   rì   Úget_excÚunderlying_excrô   s        r   rÁ   rÁ   p  sÓ   € õ ,ä×Ñ 'Ñ)€GÜ�'—-‘-Ð!4Ô5ð !Ÿ™ˆÙØ!×*Ñ*¨1Ñ-Ð-à×&Ñ& qÑ)Ð)Ü	�G—M‘MÔ#8Ô	9ð —‘×#Ñ#ˆÙØˆLà×"Ñ"Ð.Ð.Ð.Ø×"Ñ"Ð"à×ÑÐ+Ð+Ð+ÙØ×#Ñ# AÑ&Ð&à×Ñ Ñ"Ð"r/   c                ó¶   — t         j                  d«      }|j                  «        |j                  d | «       |j                  rt        j                  d«       y y )NrÂ   r   )r5   rª   ÚresetÚinteractionÚquittingr   r�   )rê   Úps     r   rÂ   rÂ   �  sB   € Ü×Ñ˜MÓ*€AØ‡G�G„IØ‡M�M�$˜	Ô"Ø‡z‚zÜ�‰Ð)Õ*ð r/   )r   Ústrr>   ztuple[str, str])r,   r   r>   r?   )rG   r
   r>   r?   r=   )rº   r   r¸   rÅ   rç   r   r>   r   )r¸   rÅ   r>   ú#types.TracebackType | BaseException)rê   rÿ   r>   r?   )-r—   Ú
__future__r   r   Úcollections.abcr   r   rÏ   rT   r¬   ÚtypesÚtypingr   r}   r   Ú_pytest._coder   Ú_pytest.capturer	   rž   r
   r   r   r   Ú_pytest.config.argparsingr   Ú_pytest.config.exceptionsr   Ú_pytest.nodesr   Ú_pytest.reportsr   Ú_pytest.runnerr   r   r.   rH   r5   rD   rC   rÉ   rÖ   r¹   rÁ   rÂ   r¢   r/   r   ú<module>r     sÂ   ðñ ;å "ã Ý $Ý %Û Û Û 
Û Ý å Ý 'Ý *Ý !Ý 0Ý #Ý .Ý ,Ý 0Ý Ý &Ý #ó óó0÷6ñ ÷Dñ ÷$ñ óó&5ðØ
ðØ5ðØ<Fðàóð>#Ø)ð#à(ó#ô>+r/   