Ë
    èÿæi}   ã                   óX  — d Z ddlZddl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
mZmZmZmZ ddlmZ ddl	mZ ddlmZmZmZmZ ddlmZ ddlZej                  Zej7                  d	«      xs ej7                  d
«      xs dev Z ej:                  ed«      Z ej>                  ed«      Z  ejB                  «       Z"e"dv Z# ej>                  e#d«      Z$ejJ                  jM                  dd«      dk(  Z' ej:                  e'd«      Z( ed«      Z) e
d¬«      Z* edd¬«      Z+d„ Z,d„ Z-d„ Z.e$e G d„ de«      «       «       Z/e$ee G d„ de«      «       «       «       Z0e0jc                  «        e$ee G d„ de«      «       «       «       Z2e  G d „ d!e«      «       Z3e4d"k(  r ejj                  «        yy)#z
Tests gdb bindings
é    N)Úpermutations)ÚnjitÚgdbÚgdb_initÚgdb_breakpointÚprange)Úerrors)Újit)ÚTestCaseÚcaptured_stdoutÚtagÚskip_parfors_unsupported)Ú	needs_gdbÚlinuxÚdarwinÚbsdzunix-like OS is requiredznon unix-like OS is required>   Úarmv7lÚaarch64ztesting disabled on ARMÚGDB_TESTÚ1zneeds gdb harnessÚlong_runningT)Údebug)Úforceobjr   c                 ó^   — t        dddddd«       | dz   }| dz  }| ||f}t        | |||«       y ©Nú-exúset confirm offÚcÚqé   ç¸…ëQ¸@)r   Úprint©ÚaÚbr   Úds       úr/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_gdb_bindings.pyÚimpl_gdb_callr(   ,   s@   € ÜˆÐ  %¨¨e°SÔ9Ø	ˆA‰€AØ	ˆD‰€AØ	
ˆAˆqˆ	€AÜ	ˆ!ˆQ��1Õó    c                 ór   — t        dddddd«       | dz   }| dz  }| ||f}t        «        t        | |||«       y r   )r   r   r"   r#   s       r'   Úimpl_gdb_call_w_bpr+   4   sF   € ÜˆUÐ% u¨c°5¸#Ô>Ø	ˆA‰€AØ	ˆD‰€AØ	
ˆAˆqˆ	€AÜÔÜ	ˆ!ˆQ��1Õr)   c                 óœ   — t        dddddd«       | dz  } t        d«      D ])  }| dz   }| dz  }| ||f}t        «        t        | |||«       Œ+ y )	Nr   r   r   r   é   é   r    r!   )r   r   r   r"   )r$   Úir%   r   r&   s        r'   Ú(impl_gdb_split_init_and_break_w_parallelr0   =   s]   € ÜˆUÐ% u¨c°5¸#Ô>Øˆ�F€AÜ�AŽYˆØ�‰EˆØ�‰HˆØ��1ˆIˆÜÔÜˆa��A�qÕñ r)   c                   ó¾   — e Zd ZdZed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
eed„ «       «       Zeed	„ «       «       Zeed
„ «       «       Zy)ÚTestGdbBindImplsa  
    Contains unit test implementations for gdb binding testing. Test must be
    decorated with `@needs_gdb_harness` to prevent their running under normal
    test conditions, the test methods must also end with `_impl` to be
    considered for execution. The tests themselves are invoked by the
    `TestGdbBinding` test class through the parsing of this class for test
    methods and then running the discovered tests in a separate process. Test
    names not including the word `quick` will be tagged as @tag('long_running')
    c                 óX   — t        «       5  t        d«       d d d «       y # 1 sw Y   y xY w©Né
   )r   r(   ©Úselfs    r'   Ú$test_gdb_cmd_lang_cpython_quick_implz5TestGdbBindImpls.test_gdb_cmd_lang_cpython_quick_implU   s   € äÕÜ˜"Ô÷ ×Ñúó   ‹  )c                 ól   — t        «       5   t        t        «      d«       d d d «       y # 1 sw Y   y xY wr4   )r   Ú	_dbg_njitr(   r6   s    r'   Ú%test_gdb_cmd_lang_nopython_quick_implz6TestGdbBindImpls.test_gdb_cmd_lang_nopython_quick_implZ   s#   € äÕØ$ŒI”mÓ$ RÔ(÷ ×Ñúó   ‹*ª3c                 ól   — t        «       5   t        t        «      d«       d d d «       y # 1 sw Y   y xY wr4   )r   Ú_dbg_jitr(   r6   s    r'   Ú$test_gdb_cmd_lang_objmode_quick_implz5TestGdbBindImpls.test_gdb_cmd_lang_objmode_quick_impl_   s#   € äÕØ#ŒH”]Ó# BÔ'÷ ×Ñúr=   c                 óX   — t        «       5  t        d«       d d d «       y # 1 sw Y   y xY wr4   )r   r+   r6   s    r'   Ú*test_gdb_split_init_and_break_cpython_implz;TestGdbBindImpls.test_gdb_split_init_and_break_cpython_impld   s   € äÕÜ˜rÔ"÷ ×Ñúr9   c                 ól   — t        «       5   t        t        «      d«       d d d «       y # 1 sw Y   y xY wr4   )r   r;   r+   r6   s    r'   Ú+test_gdb_split_init_and_break_nopython_implz<TestGdbBindImpls.test_gdb_split_init_and_break_nopython_impli   s$   € äÕØ)ŒIÔ(Ó)¨"Ô-÷ ×Ñúr=   c                 ól   — t        «       5   t        t        «      d«       d d d «       y # 1 sw Y   y xY wr4   )r   r?   r+   r6   s    r'   Ú*test_gdb_split_init_and_break_objmode_implz;TestGdbBindImpls.test_gdb_split_init_and_break_objmode_impln   s$   € äÕØ(ŒHÔ'Ó(¨Ô,÷ ×Ñúr=   c                 óX   — t        «       5  t        d«       d d d «       y # 1 sw Y   y xY wr4   )r   r0   r6   s    r'   Ú5test_gdb_split_init_and_break_w_parallel_cpython_implzFTestGdbBindImpls.test_gdb_split_init_and_break_w_parallel_cpython_impls   s   € ô ÕÜ4°RÔ8÷ ×Ñúr9   c                 ól   — t        «       5   t        t        «      d«       d d d «       y # 1 sw Y   y xY wr4   )r   r;   r0   r6   s    r'   Ú6test_gdb_split_init_and_break_w_parallel_nopython_implzGTestGdbBindImpls.test_gdb_split_init_and_break_w_parallel_nopython_imply   s&   € ô ÕØ?ŒIÔ>Ó?ÀÔC÷ ×Ñúr=   c                 ól   — t        «       5   t        t        «      d«       d d d «       y # 1 sw Y   y xY wr4   )r   r?   r0   r6   s    r'   Ú5test_gdb_split_init_and_break_w_parallel_objmode_implzFTestGdbBindImpls.test_gdb_split_init_and_break_w_parallel_objmode_impl   s&   € ô ÕØ>ŒHÔ=Ó>¸rÔB÷ ×Ñúr=   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úneeds_gdb_harnessr8   r<   r@   rB   rD   rF   r   rH   rJ   rL   © r)   r'   r2   r2   H   s×   „ ñð ñó ðð ñ)ó ð)ð ñ(ó ð(ð ñ#ó ð#ð ñ.ó ð.ð ñ-ó ð-ð Øñ9ó ó ð9ð ØñDó ó ðDð ØñCó ó ñCr)   r2   c                   óF   — e Zd ZdZdZdZd	d„Zd„ Zed„ «       Z	ed„ «       Z
y)
ÚTestGdbBindingz¿
    This test class is used to generate tests which will run the test cases
    defined in TestGdbBindImpls in isolated subprocesses, this is for safety
    in case something goes awry.
    FTc           	      óú  ‡	— t        j                  |t         j                  t         j                  |d¬«      Š	ˆ	fd„}t        j                  d|«      }	 |j                  «        ‰	j                  «       \  }}‰	j                  }|dk7  r0t        d|›d|j                  «       ›d|j                  «       ›�«      ‚|j                  «       |j                  «       f|j                  «        S # |j                  «        w xY w)	NT)ÚstdoutÚstderrÚenvÚshellc                  óŽ   •— ‰ j                   j                  «        ‰ j                  j                  «        ‰ j                  «        y ©N)rV   ÚflushrW   Úkill)Úpopens   €r'   r]   z$TestGdbBinding.run_cmd.<locals>.kill�   s,   ø€ Ø�L‰L×ÑÔ Ø�L‰L×ÑÔ Ø�J‰J�Lr)   g      4@r   zprocess failed with code z: stderr follows
z	
stdout :)Ú
subprocessÚPopenÚPIPEÚ	threadingÚTimerÚstartÚcommunicateÚ
returncodeÚAssertionErrorÚdecodeÚcancel)
r7   ÚcmdlinerX   Ú
kill_is_okr]   ÚtimeoutÚoutÚerrÚretcoder^   s
            @r'   Úrun_cmdzTestGdbBinding.run_cmd•   sÇ   ø€ Ü× Ñ  Ü(2¯©Ü(2¯©Ø%(Ø'+ô	-ˆô	ô —/‘/ # tÓ,ˆð	Ø�M‰MŒOØ×(Ñ(Ó*‰HˆC�Ø×&Ñ&ˆGØ˜!Š|Ý$ò %,¨S¯Z©Z­\¸3¿:¹:¼<ðIóJð Jð —:‘:“< §¡£Ð-à�N‰NÕøˆG�N‰NÕús   ÁBC( Ã(C:c                 óÀ   — t         j                  j                  «       }d|d<   d|d<   t        j                  dd|g} | j
                  dj                  |«      |fi |¤ŽS )Nr   Ú	NUMBA_OPTr   z-mznumba.runtestsÚ )ÚosÚenvironÚcopyÚsysÚ
executablerp   Újoin)r7   ÚtestÚkwargsÚenv_copyrj   s        r'   Úrun_test_in_separate_processz+TestGdbBinding.run_test_in_separate_process°   s\   € Ü—:‘:—?‘?Ó$ˆØ #ˆ�Ñð  #ˆ�ÑÜ—>‘> 4Ð)9¸4Ð@ˆØˆt�|‰|˜CŸH™H WÓ-¨xÑB¸6ÑBÐBr)   c                 óþ   ‡— t         j                  }t         j                  }|j                  d«      sJ ‚|j	                  dd«      }|›d|›d|›�Šˆfd„}d|v rt        | ||«       y t        | |t        |«      «       y )NÚ_implÚ Ú.c                 óP  •— | j                  ‰«      \  }}d|› d|› d�}t        j                  d|«      }|� | j                  |j	                  d«      «       | j                  d||¬«       | j                  d||¬«       | j                  d	||¬«       | j                  d
||¬«       y )Nz
STDOUT=z
STDERR=Ú
z\.\.\. skipped '(.*?)'r    zGNU gdb)ÚmsgÚOKÚFAILÚERROR)r}   ÚreÚsearchÚskipTestÚgroupÚassertInÚassertNotIn)r7   ÚoÚeÚdbgmsgÚmÚinjected_methods        €r'   Útest_templatez-TestGdbBinding._inject.<locals>.test_templateÂ   s¥   ø€ Ø×4Ñ4°_ÓE‰DˆAˆqØ    9¨Q¨C¨rÐ2ˆFô —	‘	Ð3°QÓ7ˆAØˆ}Ø—‘˜aŸg™g a›jÔ)Ø�M‰M˜) Q¨FˆMÔ3Ø�M‰M˜$  vˆMÔ.Ø×Ñ˜V Q¨FÐÔ3Ø×Ñ˜W a¨VÐÕ4r)   Úquick)r2   rN   rM   ÚendswithÚreplaceÚsetattrr   )ÚclsÚnameÚthemodÚtheclsÚmethnamer“   r’   s         @r'   Ú_injectzTestGdbBinding._inject¹   sr   ø€ ä!×,Ñ,ˆÜ!×*Ñ*ˆà�}‰}˜WÔ%Ð%Ð%Ø—<‘< ¨Ó,ˆÚ(.²¹Ð=ˆô	5ð �d‰?Ü�C˜ =Õ1ä�C˜¤<°Ó#>Õ?r)   c                 ór   — t        t        «      D ]%  }|j                  d«      sŒ| j                  |«       Œ' y )NÚtest_gdb)Údirr2   Ú
startswithr�   )r˜   r™   s     r'   ÚgeneratezTestGdbBinding.generateÓ   s*   € äÔ(Ö)ˆDØ�‰˜zÕ*Ø—‘˜DÕ!ñ *r)   N)F)rM   rN   rO   rP   Ú_numba_parallel_test_Ú_DEBUGrp   r}   Úclassmethodr�   r¢   rR   r)   r'   rT   rT   †   sI   „ ñð "Ðà€Fóò6Cð ñ@ó ð@ð2 ñ"ó ñ"r)   rT   c                   ó   — e Zd Zed„ «       Zy)ÚTestGdbMiscc                 ó¢   ‡ ‡— d„ }dŠˆˆ fd„}t        t        t        g«      D ]  \  }} |||«      } ||«       Œ t        d„ «       } ||«       y )Nc                 ó(   ‡ ‡— t         ˆ ˆfd„«       }|S )Nc                  ó2   •— d}  ‰«        d} ‰«        | |z   S ©Nr    é   rR   )r$   r%   Úf1Úf2s     €€r'   Úimplz:TestGdbMisc.test_call_gdb_twice.<locals>.gen.<locals>.implå   s    ø€ à�Ù”Ø�Ù”Ø˜1‘u�r)   )r   )r­   r®   r¯   s   `` r'   Úgenz,TestGdbMisc.test_call_gdb_twice.<locals>.genä   s   ù€ Üôó ðð ˆKr)   z8Calling either numba.gdb() or numba.gdb_init() more thanc                 óÆ   •— ‰j                  t        j                  «      5 } | «        d d d «       ‰j                  ‰t	        j
                  «      «       y # 1 sw Y   Œ/xY wr[   )ÚassertRaisesr	   ÚUnsupportedErrorrŒ   ÚstrÚ	exception)ÚfuncÚraisesÚmsg_headr7   s     €€r'   Úcheckz.TestGdbMisc.test_call_gdb_twice.<locals>.checkð   sE   ø€ Ø×"Ñ"¤6×#:Ñ#:Ô;¸vÙ”÷ <à�M‰M˜(¤C¨×(8Ñ(8Ó$9Õ:÷ <Ð;ús   ¡AÁA c                  ó<   — d} t        «        d}t        «        | |z   S r«   )r   r   )r$   r%   s     r'   Úuse_globalsz4TestGdbMisc.test_call_gdb_twice.<locals>.use_globalsù   s   € àˆAÜŒEØˆAÜŒJØ�q‘5ˆLr)   )r   r   r   r   )r7   r°   r¹   Úg1Úg2r¶   r»   r¸   s   `      @r'   Útest_call_gdb_twicezTestGdbMisc.test_call_gdb_twiceâ   s^   ù€ ò	ð Nˆõ	;ô
 #¤C¬ ?Ö3‰FˆB�Ù�r˜2“;ˆDÙ�$�Kð 4ô 
ñ	ó 
ð	ñ 	ˆkÕr)   N)rM   rN   rO   r   r¾   rR   r)   r'   r§   r§   Ý   s   „ ð
 ñó ñr)   r§   c                   ó   — e Zd Zd„ Zy)ÚTestGdbExceptionsc                 ó8  ‡— d„ }|t        d¬«      t        fD ]t  }t        t        fD ]c  Šˆfd„}| j	                  t
        j                  «      5 }  ||«      «        d d d «       d}| j                  |t        j                  «      «       Œe Œv y # 1 sw Y   Œ5xY w)Nc                 ó   — | S r[   rR   )Úxs    r'   Únop_compilerz5TestGdbExceptions.test_call_gdb.<locals>.nop_compiler  s   € ØˆHr)   T)r   c                  ó   •—  ‰ «        y r[   rR   )Úmeths   €r'   Úpython_funcz4TestGdbExceptions.test_call_gdb.<locals>.python_func  s   ø€ Ù•Fr)   z2gdb support is only available on unix-like systems)
r
   r   r   r   r²   r	   ÚTypingErrorrŒ   r´   rµ   )r7   rÄ   ÚcompilerrÇ   r·   r„   rÆ   s         @r'   Útest_call_gdbzTestGdbExceptions.test_call_gdb  s�   ø€ ò	à%¤s°DÔ'9¼4Ó@ˆHÜœh›�ôà×&Ñ&¤v×'9Ñ'9Ô:¸fØ)‘H˜[Ó)Ô+÷ ;àJ�Ø—‘˜c¤3 v×'7Ñ'7Ó#8Õ9ñ (ñ A÷ ;Ð:ús   ÁBÂBN)rM   rN   rO   rÊ   rR   r)   r'   rÀ   rÀ     s   „ ó
:r)   rÀ   Ú__main__)6rP   rt   Úplatformrˆ   r_   rw   rb   Ú	itertoolsr   Únumbar   r   r   r   r   Ú
numba.corer	   r
   Únumba.tests.supportr   r   r   r   Únumba.tests.gdb_supportr   ÚunittestÚ	_platformr¡   Ú
_unix_likeÚ
skipUnlessÚ	unix_onlyÚskipIfÚnot_unixÚmachineÚ
_arch_nameÚ_is_armÚnot_armru   ÚgetÚ	_gdb_condrQ   r   r;   r?   r(   r+   r0   r2   rT   r¢   r§   rÀ   rM   ÚmainrR   r)   r'   Ú<module>rà      sö  ðñó 
Û Û 	Û Û 
Û Ý "ç =Õ =Ý Ý ÷;ó ;å -Û ð �L‰L€	à×"Ñ" 7Ó+ò &Ø×%Ñ% hÓ/ò&à˜9Ð$ð ð  ˆH×Ñ 
Ð,FÓG€	Øˆ8�?‰?˜:Ð'EÓF€àˆX×ÑÓ€
Ø
Ð-Ð
-€Ø
ˆ(�/‰/˜'Ð#<Ó
=€à�J‰J�N‰N˜: tÓ,°Ñ3€	Ø'�H×'Ñ'¨	Ð3FÓGÐ á�>Ó"€á�tÔ€	Ù˜ DÔ)€òòòð 	Ø
ô9C�xó 9Có ó 	ð9Cðx 	Ø
Ø
ôN"�Xó N"ó ó ó 	ðN"ðb × Ñ Ô ð 	Ø
Ø
ô!�(ó !ó ó ó 	ð!ðH 
ô:˜ó :ó 
ð:ð ˆzÒØ€H‡M�M…Oð r)   