§
    ƒÛgŠ  ã                   ó¤  — 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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                     d	¦  «        pe                     d
¦  «        pdev Z ej        ed¦  «        Z ej        ed¦  «        Z ej         ¦   «         Z!e!dv Z" ej        e"d¦  «        Z#ej$         %                    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¦  «        ¦   «         ¦   «         ¦   «         Z/e/ 0                    ¦   «          e#ee G d„ de¦  «        ¦   «         ¦   «         ¦   «         Z1e G d „ d!e¦  «        ¦   «         Z2e3d"k    r ej4        ¦   «          dS dS )#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                 óp   — t          dddddd¦  «         | dz   }| dz  }| ||f}t          | |||¦  «         d S ©Nú-exúset confirm offÚcÚqé   ç¸…ëQ¸@)r   Úprint©ÚaÚbr   Úds       úS/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_gdb_bindings.pyÚimpl_gdb_callr(   +   sR   € ÝˆÐ  %¨¨e°SÑ9Ô9Ð9Ø	ˆA‰€AØ	ˆD‰€AØ	
ˆAˆqˆ	€AÝ	ˆ!ˆQ��1ÑÔÐÐÐó    c                 óŒ   — t          dddddd¦  «         | dz   }| dz  }| ||f}t          ¦   «          t          | |||¦  «         d S r   )r   r   r"   r#   s       r'   Úimpl_gdb_call_w_bpr+   3   s^   € Ýˆ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 ]1}| dz   }| dz  }| ||f}t          ¦   «          t          | |||¦  «         Œ2d S )	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Œ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dS )Ú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                 ór   — t          ¦   «         5  t          d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S ©Né
   )r   r(   ©Úselfs    r'   Ú$test_gdb_cmd_lang_cpython_quick_implz5TestGdbBindImpls.test_gdb_cmd_lang_cpython_quick_implT   s€   € åÑÔð 	ð 	Ý˜"ÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ó   �,¬0³0c                 óŽ   — t          ¦   «         5   t          t          ¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r4   )r   Ú	_dbg_njitr(   r6   s    r'   Ú%test_gdb_cmd_lang_nopython_quick_implz6TestGdbBindImpls.test_gdb_cmd_lang_nopython_quick_implY   sŠ   € åÑÔð 	)ð 	)Ø$�I•mÑ$Ô$ RÑ(Ô(Ð(ð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð 	)ð 	)ó   �:º>Á>c                 óŽ   — t          ¦   «         5   t          t          ¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S 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                 ór   — t          ¦   «         5  t          d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r4   )r   r+   r6   s    r'   Ú*test_gdb_split_init_and_break_cpython_implz;TestGdbBindImpls.test_gdb_split_init_and_break_cpython_implc   s€   € åÑÔð 	#ð 	#Ý˜rÑ"Ô"Ð"ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#r9   c                 óŽ   — t          ¦   «         5   t          t          ¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r4   )r   r;   r+   r6   s    r'   Ú+test_gdb_split_init_and_break_nopython_implz<TestGdbBindImpls.test_gdb_split_init_and_break_nopython_implh   s‹   € åÑÔð 	.ð 	.Ø)�IÕ(Ñ)Ô)¨"Ñ-Ô-Ð-ð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð 	.ð 	.r=   c                 óŽ   — t          ¦   «         5   t          t          ¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r4   )r   r?   r+   r6   s    r'   Ú*test_gdb_split_init_and_break_objmode_implz;TestGdbBindImpls.test_gdb_split_init_and_break_objmode_implm   s‹   € åÑÔð 	-ð 	-Ø(�HÕ'Ñ(Ô(¨Ñ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð 	-ð 	-r=   c                 ór   — t          ¦   «         5  t          d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S 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_implr   s‚   € õ ÑÔð 	9ð 	9Ý4°RÑ8Ô8Ð8ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð 	9ð 	9r9   c                 óŽ   — t          ¦   «         5   t          t          ¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S 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_implx   s¡   € õ ÑÔð 	Dð 	DØ?�IÕ>Ñ?Ô?ÀÑCÔCÐCð	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dð 	Dð 	Dr=   c                 óŽ   — t          ¦   «         5   t          t          ¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S 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¡   € õ ÑÔð 	Cð 	CØ>�HÕ=Ñ>Ô>¸rÑBÔBÐBð	Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cøøøð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cr=   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úneeds_gdb_harnessr8   r<   r@   rB   rD   rF   r   rH   rJ   rL   © r)   r'   r2   r2   G   sC  € € € € € ðð ð ðð ñ Ôðð ð)ð )ñ Ôð)ð ð(ð (ñ Ôð(ð ð#ð #ñ Ôð#ð ð.ð .ñ Ôð.ð ð-ð -ñ Ôð-ð Øð9ð 9ñ Ôñ Ôð9ð ØðDð Dñ Ôñ ÔðDð ØðCð Cñ Ôñ ÔðCð Cð Cr)   r2   c                   óT   — e Zd ZdZdZdZd	d„Zd„ Zed„ ¦   «         Z	ed„ ¦   «         Z
dS )
Ú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        }|dk    r<t          d|›d| 	                    ¦   «         ›d| 	                    ¦   «         ›�¦  «        ‚| 	                    ¦   «         | 	                    ¦   «         f| 
                    ¦   «          S # | 
                    ¦   «          w xY w)	NT)ÚstdoutÚstderrÚenvÚshellc                  ó”   •— ‰ j                              ¦   «          ‰ j                             ¦   «          ‰                      ¦   «          d S ©N)rV   ÚflushrW   Úkill)Úpopens   €r'   r]   z$TestGdbBinding.run_cmd.<locals>.killœ   s<   ø€ ØŒL×ÒÑ Ô Ð ØŒL×ÒÑ Ô Ð Ø�JŠJ‰LŒLˆLˆLˆ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ŒOˆOØ×(Ò(Ñ*Ô*‰HˆC�ØÔ&ˆGØ˜!Š|ˆ|Ý$�nð %, G G¨S¯ZªZ©\¬\¨\¨\¸3¿:º:¹<¼<¸<ðIñJô Jð Jð —:’:‘<”< §¢¡¤Ð-à�NŠNÑÔÐÐøˆG�NŠNÑÔÐÐøøøs   Á
BC: Ã:Dc                 ó¶   — t           j                             ¦   «         }d|d<   d|d<   t          j        dd|g} | j        d                     |¦  «        |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¯   sb   € Ý”:—?’?Ñ$Ô$ˆØ #ˆ�Ñð  #ˆ�ÑÝ”> 4Ð)9¸4Ð@ˆØˆtŒ|˜CŸHšH WÑ-Ô-¨xÐBÐB¸6ÐBÐBÐBr)   c                 ó  ‡— t           j        }t           j        }|                     d¦  «        sJ ‚|                     dd¦  «        }|›d|›d|›�Šˆfd„}d|v rt          | ||¦  «         d S t          | |t          |¦  «        ¦  «         d S )NÚ_implÚ ú.c                 ó
  •— |                       ‰¦  «        \  }}d|› d|› d�}|                      d||¬¦  «         |                      d||¬¦  «         |                      d||¬¦  «         |                      d||¬¦  «         d S )	Nz
STDOUT=z
STDERR=ú
zGNU gdb)ÚmsgÚOKÚFAILÚERROR)r}   ÚassertInÚassertNotIn)r7   ÚoÚeÚdbgmsgÚinjected_methods       €r'   Útest_templatez-TestGdbBinding._inject.<locals>.test_templateÁ   sž   ø€ Ø×4Ò4°_ÑEÔE‰DˆAˆqØ2 Ð2Ð2¨QÐ2Ð2Ð2ˆFØ�MŠM˜) Q¨FˆMÑ3Ô3Ð3Ø�MŠM˜$  vˆMÑ.Ô.Ð.Ø×Ò˜V Q¨FÐÑ3Ô3Ð3Ø×Ò˜W a¨VÐÑ4Ô4Ð4Ð4Ð4r)   Úquick)r2   rN   rM   ÚendswithÚreplaceÚsetattrr   )ÚclsÚnameÚthemodÚtheclsÚmethnamerŽ   r�   s         @r'   Ú_injectzTestGdbBinding._inject¸   s°   ø€ å!Ô,ˆÝ!Ô*ˆà�}Š}˜WÑ%Ô%Ð%Ð%Ð%Ø—<’< ¨Ñ,Ô,ˆØ(.¨¨°°°¸¸Ð=ˆð	5ð 	5ð 	5ð 	5ð 	5ð �dˆ?ˆ?Ý�C˜ =Ñ1Ô1Ð1Ð1Ð1å�C˜¥<°Ñ#>Ô#>Ñ?Ô?Ð?Ð?Ð?r)   c                 óˆ   — t          t          ¦  «        D ],}|                     d¦  «        r|                      |¦  «         Œ-d S )NÚtest_gdb)Údirr2   Ú
startswithr˜   )r“   r”   s     r'   ÚgeneratezTestGdbBinding.generateÍ   sK   € åÕ(Ñ)Ô)ð 	"ð 	"ˆDØ�Š˜zÑ*Ô*ð "Ø—’˜DÑ!Ô!Ð!øð	"ð 	"r)   N)F)rM   rN   rO   rP   Ú_numba_parallel_test_Ú_DEBUGrp   r}   Úclassmethodr˜   r�   rR   r)   r'   rT   rT   …   sŠ   € € € € € ðð ð "Ðà€Fðð ð ð ð6Cð Cð Cð ð@ð @ñ „[ð@ð( ð"ð "ñ „[ð"ð "ð "r)   rT   c                   ó$   — e Zd Zed„ ¦   «         ZdS )ÚTestGdbMiscc                 óÆ   ‡ ‡— d„ }dŠˆˆ fd„}t          t          t          g¦  «        D ]\  }} |||¦  «        } ||¦  «         Œt          d„ ¦   «         } ||¦  «         d S )Nc                 ó0   ‡ ‡— t           ˆ ˆfd„¦   «         }|S )Nc                  ó>   •— 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Þ   s3   øø€ Ýðð ð ð ð ñ ŒTðð ˆKr)   z8Calling either numba.gdb() or numba.gdb_init() more thanc                 óÚ   •— ‰                      t          j        ¦  «        5 } | ¦   «          d d d ¦  «         n# 1 swxY w Y   ‰                     ‰t	          |j        ¦  «        ¦  «         d S r[   )ÚassertRaisesr	   ÚUnsupportedErrorrˆ   ÚstrÚ	exception)ÚfuncÚraisesÚmsg_headr7   s     €€r'   Úcheckz.TestGdbMisc.test_call_gdb_twice.<locals>.checkê   sœ   ø€ Ø×"Ò"¥6Ô#:Ñ;Ô;ð ¸vØ�‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à�MŠM˜(¥C¨Ô(8Ñ$9Ô$9Ñ:Ô:Ð:Ð:Ð:s   ¡8¸<¿<c                  óL   — 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ŒEˆEØˆAÝ‰JŒJˆ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Ô3ð 	ð 	‰FˆB�Ø�3�r˜2‘;”;ˆDØˆE�$‰KŒKˆKˆKå	ð	ð 	ñ 
Œð	ð 	ˆˆkÑÔÐÐÐr)   N)rM   rN   rO   r   r¹   rR   r)   r'   r¢   r¢   ×   s/   € € € € € ð
 ðð ñ „\ðð ð r)   r¢   c                   ó   — e Zd Zd„ ZdS )ÚTestGdbExceptionsc                 óX  ‡— d„ }|t          d¬¦  «        t          fD ]Œ}t          t          fD ]{Šˆfd„}|                      t
          j        ¦  «        5 }  ||¦  «        ¦   «          d d d ¦  «         n# 1 swxY w Y   d}|                      |t          |j	        ¦  «        ¦  «         Œ|Œ�d S )Nc                 ó   — | S r[   rR   )Úxs    r'   Únop_compilerz5TestGdbExceptions.test_call_gdb.<locals>.nop_compiler  s   € ØˆHr)   T)r   c                  ó   •—  ‰ ¦   «          d S r[   rR   )Úmeths   €r'   Úpython_funcz4TestGdbExceptions.test_call_gdb.<locals>.python_func  s   ø€ Ø�D‘F”F�F�F�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Ñ'9Ô'9½4Ð@ð 	:ð 	:ˆHÝ�h˜ð :ð :�ðð ð ð ð à×&Ò&¥vÔ'9Ñ:Ô:ð ,¸fØ)�H�H˜[Ñ)Ô)Ñ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,àJ�Ø—’˜c¥3 vÔ'7Ñ#8Ô#8Ñ9Ô9Ð9Ð9ð:ð	:ð 	:s   ÁA3Á3A7Á:A7N)rM   rN   rO   rÅ   rR   r)   r'   r»   r»   þ   s#   € € € € € ð
:ð 
:ð 
:ð 
:ð 
:r)   r»   Ú__main__)5rP   rt   Úplatformr_   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€	à×"Ò" 7Ñ+Ô+ð &Ø×%Ò% hÑ/Ô/ð&à˜9Ð$ð ð  ˆHÔ 
Ð,FÑGÔG€	Øˆ8Œ?˜:Ð'EÑFÔF€àˆXÔÑÔ€
Ø
Ð-Ð
-€Ø
ˆ(Œ/˜'Ð#<Ñ
=Ô
=€àŒJ�NŠN˜: tÑ,Ô,°Ò3€	Ø'�HÔ'¨	Ð3FÑGÔGÐ àˆs�>Ñ"Ô"€àˆD�tÐÑÔ€	Øˆ3˜ DÐ)Ñ)Ô)€ðð ð ðð ð ðð ð ð 	Ø
ð9Cð 9Cð 9Cð 9Cð 9C�xñ 9Cô 9Cñ „ñ 	„ð9Cðx 	Ø
Ø
ðI"ð I"ð I"ð I"ð I"�Xñ I"ô I"ñ „ñ „ñ 	„ðI"ðX × Ò Ñ Ô Ð ð 	Ø
Ø
ð!ð !ð !ð !ð !�(ñ !ô !ñ „ñ „ñ 	„ð!ðH 
ð:ð :ð :ð :ð :˜ñ :ô :ñ 
„ð:ð ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr)   