Ë
    èÿæi  ã                   ó‚  — 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
 	  ed¬«       dZ e
«       Zej                  j                  d	«      Zd
Z ej$                  ee«      ZdZ ej$                  ee«      Z	 ddlZdZdZ ej$                  ee«      Z G d„ de«      Zy# e$ r dZdZY Œ]w xY w# e$ r dZY Œ9w xY w)z'Helpers for running gdb related testingé    N)Úconfig)Ú_confirm_gdb)Úcollect_gdbinfoF)Úneed_ptrace_attachTÚ3z;functioning gdb with correct ptrace permissions is requiredz gdb with python 3 support neededzpexpect module needed for testc                   ó–   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
dd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„Zdd„Zdd„Zdd„Zd„ Zd„ Zy)ÚGdbMIDriverzs
    Driver class for the GDB machine interface:
    https://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI.html
    Nc                 óü   — t         sd}t        |«      ‚t        sd}t        |«      ‚t        j                  | _        t        j                  | _        || _	        || _
        || _        || _        | j                  «        y )Nz[This driver requires the pexpect module. This can be obtained via:

$ conda install pexpectzWThis driver requires a gdb binary. This can be obtained via the system package manager.)Ú_HAVE_PEXPECTÚRuntimeErrorÚ	_HAVE_GDBr   Ú
GDB_BINARYÚ_gdb_binaryÚsysÚ
executableÚ_pythonÚ_debugÚ
_file_nameÚ_timeoutÚ
_init_cmdsÚ_drive)ÚselfÚ	file_nameÚdebugÚtimeoutÚ	init_cmdsÚmsgs         úl/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/gdb_support.pyÚ__init__zGdbMIDriver.__init__+   sj   € Ýð>ˆCä˜sÓ#Ð#Ýð>ˆCä˜sÓ#Ð#Ü!×,Ñ,ˆÔÜ—~‘~ˆŒØˆŒØ#ˆŒØˆŒØ#ˆŒØ�‰�ó    c                 ó¶  — t         j                  j                  | j                  «      sJ ‚| j                  ddg}| j
                  �|t        | j
                  «      z  }|d| j                  | j                  gz  }t        j                  dj                  |«      «      | _        | j                  r*t        j                  j                  | j                  _        yy)z0This function sets up the caputured gdb instancez--interpreterÚmiNz--argsÚ )ÚosÚpathÚisfiler   r   r   Úlistr   ÚpexpectÚspawnÚjoinÚ	_capturedr   r   ÚstdoutÚbufferÚlogfile©r   Úcmds     r   r   zGdbMIDriver._drive<   sž   € ä�w‰w�~‰~˜dŸo™oÔ.Ð.Ð.Ø×Ñ °$Ð7ˆØ�?‰?Ð&Ø”4˜Ÿ™Ó(Ñ(ˆCØ�˜$Ÿ,™,¨¯©Ð8Ñ8ˆÜ Ÿ™ s§x¡x°£}Ó5ˆŒØ�;Š;Ü%(§Z¡Z×%6Ñ%6ˆD�N‰NÕ"ð r    c                 ó&   — d| j                  «       v S )z_Returns True if the underlying gdb implementation has python support
           False otherwiseÚpython)Úlist_features©r   s    r   Úsupports_pythonzGdbMIDriver.supports_pythonG   s   € ð ˜4×-Ñ-Ó/Ð/Ð/r    c                 ó˜   — | j                  «       syd}| j                  d|«       d| j                  j                  j	                  «       v S )z€Returns True if the underlying gdb implementation has NumPy support
           (and by extension Python support) False otherwiseFzGpython from __future__ import print_function;import numpy; print(numpy)Úconsolezmodule 'numpy' from)r5   Úinterpreter_execr+   ÚbeforeÚdecoder/   s     r   Úsupports_numpyzGdbMIDriver.supports_numpyL   sH   € ð ×#Ñ#Ô%Øð,ˆà×Ñ˜i¨Ô-Ø&¨$¯.©.×*?Ñ*?×*FÑ*FÓ*HÐHÐHr    c                 óÂ   — 	 | j                   j                  || j                  ¬«       y # t        j                  j
                  $ r}d|› d�}t        |«      |‚d }~ww xY w)N)r   zExpected value did not arrive: Ú.)r+   Úexpectr   r(   Ú
exceptionsÚTIMEOUTÚ
ValueError)r   r>   Úer   s       r   Ú_captured_expectzGdbMIDriver._captured_expectW   sX   € ð	)Ø�N‰N×!Ñ! &°$·-±-Ð!Õ@øÜ×!Ñ!×)Ñ)ò 	)Ø3°F°8¸1Ð=ˆCÜ˜S“/ qÐ(ûð	)ús   ‚'* ªAÁAÁAc                 óv   — | j                   j                  }|j                  d«      }||v sJ d|› d|› d�«       ‚y)z=Asserts that the current output string contains the expected.úutf-8údecoded=ú

expected=Ú)N)r+   Úafterr:   )r   ÚexpectedÚoutputÚdecodeds       r   Úassert_outputzGdbMIDriver.assert_output^   sA   € à—‘×%Ñ%ˆØ—-‘- Ó(ˆØ˜7Ñ"ÐN h¨w¨i°{À8À*ÈAÐ$NÓNÑ"r    c                 óÄ   — | j                   j                  }|j                  d«      }|j                  «       d   }t	        j
                  ||«      }|sJ d|› d|› d�«       ‚y)zKAsserts that the current output string contains the expected
        regex.rE   r   rF   rG   rH   N)r+   rI   r:   Ú
splitlinesÚreÚmatch)r   rJ   rK   rL   Údone_strÚfounds         r   Úassert_regex_outputzGdbMIDriver.assert_regex_outputd   s`   € ð —‘×%Ñ%ˆØ—-‘- Ó(ˆØ×%Ñ%Ó'¨Ñ*ˆÜ—‘˜ 8Ó,ˆÙÐ@˜  	¨°X°J¸aÐ@Ó@‰ur    c                 ó\   — | j                   j                  |«       | j                  |«       y )N)r+   ÚsendlinerC   )r   Úcommandr>   s      r   Ú_run_commandzGdbMIDriver._run_commandm   s"   € Ø�‰×Ñ Ô(Ø×Ñ˜fÕ%r    c                 ó*   — | j                  dd¬«       y)zgdb command ~= 'run'z	-exec-runú\^running.*\r\n©r>   N©rX   r4   s    r   ÚrunzGdbMIDriver.runq   s   € à×Ñ˜+Ð.@ÐÕAr    c                 ó*   — | j                  dd¬«       y)zgdb command ~= 'continue'z-exec-continuerZ   r[   Nr\   r4   s    r   ÚcontzGdbMIDriver.contu   s   € à×ÑÐ*Ð3EÐÕFr    c                 ó^   — | j                  dd¬«       | j                  j                  «        y)zgdb command ~= 'quit'z	-gdb-exitr[   N)rX   r+   Ú	terminater4   s    r   ÚquitzGdbMIDriver.quity   s%   € à×Ñ˜+¨lÐÔ;Ø�‰× Ñ Õ"r    c                 ó*   — | j                  dd¬«       y)zgdb command ~= 'next'z
-exec-nextú\*stopped,.*\r\nr[   Nr\   r4   s    r   ÚnextzGdbMIDriver.next~   ó   € à×Ñ˜,Ð/BÐÕCr    c                 ó*   — | j                  dd¬«       y)zgdb command ~= 'step'z
-exec-steprd   r[   Nr\   r4   s    r   ÚstepzGdbMIDriver.step‚   rf   r    c                 óð   — |�|�t        d«      ‚d}|�	|d|› d�z  }|�(t        |t        «      sJ ‚|d| j                  › d|› d�z  }|�t        |t        «      sJ ‚|d|› d�z  }| j                  |d	¬
«       y)zgdb command ~= 'break'Nz%Can only supply one of line or symbolz-break-insert z-c "z" z-f Ú:r#   z\^doner[   )rA   Ú
isinstanceÚintr   ÚstrrX   )r   ÚlineÚsymbolÚ	conditionÚbps        r   Úset_breakpointzGdbMIDriver.set_breakpoint†   s¦   € àÐ Ð 2ÜÐDÓEÐEØˆØÐ Ø�D˜˜ 2Ð&Ñ&ˆBØÐÜ˜d¤CÔ(Ð(Ð(Ø�C˜Ÿ™Ð(¨¨$¨¨qÐ1Ñ1ˆBØÐÜ˜f¤cÔ*Ð*Ð*Ø�C˜�x˜q�/Ñ!ˆBØ×Ñ˜" YÐÕ/r    c                 óî   — | j                  d«       | j                  d«       |�'t        |t        «      sJ ‚| j                  d|› d�«       |�(t        |t        «      sJ ‚| j                  d|› d�«       yy)z%Checks that a breakpoint has been hitrd   z!*stopped,reason="breakpoint-hit",Nzbkptno="Ú"zline=")rC   rM   rk   rl   )r   Únumberrn   s      r   Úcheck_hit_breakpointz GdbMIDriver.check_hit_breakpoint•   s   € à×ÑÐ1Ô2Ø×ÑÐ>Ô?ØÐÜ˜f¤cÔ*Ð*Ð*Ø×Ñ ¨&¨°Ð3Ô4ØÐÜ˜d¤CÔ(Ð(Ð(Ø×Ñ ¨ v¨QÐ/Õ0ð r    c                 ó€   — |||fD ]  }t        |t        «      r|dv rŒJ ‚ d|› d|› d|› �}| j                  |d¬«       y)zgdb command ~= 'info args'©r   é   é   z-stack-list-arguments r#   ú\^done,.*\r\nr[   N©rk   rl   rX   )r   Úprint_valuesÚ	low_frameÚ
high_frameÚxr0   s         r   Ústack_list_argumentsz GdbMIDriver.stack_list_arguments    sU   € à 	¨:Ó6ˆAÜ˜a¤Ô%¨!¨yª.Ð8Ð8ð 7à& | n°A°i°[ÀÀ*ÀÐNˆØ×Ñ˜#Ð&6ÐÕ7r    c                 ó`   — t        |t        «      r|dv sJ ‚d|› �}| j                  |d¬«       y)zgdb command ~= 'info locals'rx   z-stack-list-variables r{   r[   Nr|   )r   r}   r0   s      r   Ústack_list_variablesz GdbMIDriver.stack_list_variables§   s9   € ä˜,¬Ô,°ÀÑ1JÐJÐJØ& | nÐ5ˆØ×Ñ˜#Ð&6ÐÕ7r    c                 óp   — |€t        d«      ‚|€t        d«      ‚d|› d|› d�}| j                  |d¬«       y)	z!gdb command ~= 'interpreter-exec'Nzinterpreter cannot be Nonezcommand cannot be Nonez-interpreter-exec z "rt   z\^(done|error).*\r\nr[   )rA   rX   )r   ÚinterpreterrW   r0   s       r   r8   zGdbMIDriver.interpreter_exec­   sM   € àÐÜÐ9Ó:Ð:Øˆ?ÜÐ5Ó6Ð6Ø" ; -¨r°'°¸!Ð<ˆØ×Ñ˜#Ð&=ÐÕ>r    c                 ó.   — d}| j                  |d¬«       y )Nz-list-featuresr{   r[   r\   r/   s     r   Ú_list_features_rawzGdbMIDriver._list_features_raw¶   s   € ØˆØ×Ñ˜#Ð&6ÐÕ7r    c                 ó@  — | j                  «        | j                  j                  }|j                  d«      }t	        j
                  d|«      }|€J d«       ‚|j                  «       }t        |«      dk(  sJ d«       ‚|d   j                  dd«      j                  d	«      S )
zXNo equivalent gdb command? Returns a list of supported gdb
           features.
        rE   z.*features=\[(.*)\].*z"No match found for features stringry   z$Invalid number of match groups foundr   rt   Ú Ú,)
r‡   r+   rI   r:   rP   rQ   ÚgroupsÚlenÚreplaceÚsplit)r   rK   rL   ÚmÚgs        r   r3   zGdbMIDriver.list_featuresº   s�   € ð 	×ÑÔ!Ø—‘×%Ñ%ˆØ—-‘- Ó(ˆÜ�H‰HÐ.°Ó8ˆØˆ}ÐBÐBÓBˆ}Ø�H‰H‹JˆÜ�1‹v˜Š{ÐBÐBÓBˆ{Ø�‰t�|‰|˜C Ó$×*Ñ*¨3Ó/Ð/r    )Féx   N)r‰   )NNN)NN)ry   r   r   )ry   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r5   r;   rC   rM   rT   rX   r]   r_   rb   re   rh   rr   rv   r�   rƒ   r8   r‡   r3   © r    r   r	   r	   &   sr   „ ñóò"	7ò0ò
	Iò)òOòAó&òBòGò#ò
DòDó0ó	1ó8ó8ó?ò8ó0r    r	   )r•   r$   rP   r   ÚunittestÚ
numba.corer   Únumba.misc.gdb_hookr   Únumba.misc.numba_gdbinfor   r   Ú	_gdb_infoÚpy_verÚ
startswithÚ_GDB_HAS_PY3Ú	ExceptionÚ_msgÚ
skipUnlessÚ	needs_gdbÚneeds_gdb_py3r(   r   ÚImportErrorÚskip_unless_pexpectÚobjectr	   r–   r    r   Ú<module>r§      sé   ðÙ -Û 	Û 	Û 
Û Ý Ý ,Ý 4ðÙ EÕ*Ø€IÙÓ!€IØ×#Ñ#×.Ñ.¨sÓ3€Lð
 E€ØˆH×Ñ 	¨4Ó0€	à)€Ø#�×#Ñ# L°$Ó7€ðÛØ€Mð
 (€Ø)�h×)Ñ)¨-¸Ó>Ð ô_0�&õ _0øð- ò Ø€IØ‚Lðûð ò Ø‚Mðús#   ¦-B% Á>B4 Â%	B1Â0B1Â4B>Â=B>