
    ܙd],                     D   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m	Z	m
Z
mZmZmZmZ d dlmZ d dlmZmZmZ d dlmZ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Zd
 Z d Z! G d de"          Z#dej$        fgZ%d Z&d Z'd Z( e            Z) ed          e)_*        de)_+         G d de          Z, G d de,          Z- G d de-          Z. G d de,          Z/ G d de,          Z0 G d de-          Z1 G d d e          Z2e3d!k    r ej4                     dS dS )"    N)TestCaseoverride_configoverride_env_configcaptured_stdoutforbid_codegenskip_parfors_unsupported
needs_blas)jit)typescompilerutils)compile_isolatedFlags)ParallelOptions)NumbaPerformanceWarning)prange)jitclassc                     | dz   }|S )N    )someargretvals     6lib/python3.11/site-packages/numba/tests/test_debug.pysimple_nopythonr      s    q[FM    c              #      K   | V  |V  d S Nr   )xys     r   
simple_genr       s      
GGG
GGGGGr   c                       e Zd Zd ZdS )SimpleClassc                     d| _         d S )N   h)selfs    r   __init__zSimpleClass.__init__    s    r   N)__name__
__module____qualname__r(   r   r   r   r"   r"      s#            r   r"   r&   c                     | j         S r   r%   )objs    r   simple_class_userr.   %   s	    5Lr   c                 ,    t          j        | |          S r   )npdot)abs     r   unsupported_parforr4   (   s    6!Q<<r   c                     t          j        |           }t          |           D ]"}||         t          j        |          z   ||<   #|S r   )r0   onesr   sin)nr2   is      r   supported_parforr:   +   sE    


AAYY    tbfQii!Hr   Tc                   d    e Zd Z eg d          Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd ZdS )DebugTestBase)bytecodecfgir	typeinferllvmfunc_opt_llvmoptimized_llvmassemblyc                 2     | j         t          g|R i | d S r   )assertRaisesAssertionError)r'   argskwargss      r   assert_failszDebugTestBase.assert_fails:   s+    .:4:::6:::::r   c                 "   t                               | j        d          }|D ]}||v sJ d||<   t          |                                          D ]<\  }}t          | d|z            }|r ||           &|                     ||           =d S )NFTz_check_dump_%s)dictfromkeys	all_dumpssorteditemsgetattrrJ   )r'   out
dump_namesenabled_dumpsnameenabled
check_meths          r   check_debug_outputz DebugTestBase.check_debug_output=   s    dne<< 	' 	'D=(((("&M$#M$7$7$9$9:: 	3 	3MD' '7$'>??J 3
3!!*c2222	3 	3r   c                     t           j        dk    r|                     d|           d S |                     d|           d S )N)      	BINARY_OP
BINARY_ADD)r   	PYVERSIONassertInr'   rR   s     r   _check_dump_bytecodez"DebugTestBase._check_dump_bytecodeI   sC    ?g%%MM+s+++++MM,,,,,,r   c                 2    |                      d|           d S )NzCFG dominatorsr_   r`   s     r   _check_dump_cfgzDebugTestBase._check_dump_cfgO   s    &,,,,,r   c                 B    |                      d| j        z  |           d S )Nz--IR DUMP: %s--r_   	func_namer`   s     r   _check_dump_irzDebugTestBase._check_dump_irR   s$    '$.8#>>>>>r   c                 2    |                      d|           d S )Nz--propagate--rc   r`   s     r   _check_dump_typeinferz#DebugTestBase._check_dump_typeinferU   s    os+++++r   c                     |                      d|           t          j        j        d         j        j        dk    r|                     |d|           d S d S )Nz--LLVM DUMPauto_parallelFz#store i64 %\"\.\d", i64\* %"retptr")r_   r   r   optionsdefaultrV   assertRegexr`   s     r   _check_dump_llvmzDebugTestBase._check_dump_llvmX   sY    mS)))>!/2:BeKKS"H#NNNNN LKr   c                 n    |                      d| j        z  |           |                      d|           d S )Nz--FUNCTION OPTIMIZED DUMP %sadd nsw i64 %arg.somearg, 1rf   r`   s     r   _check_dump_func_opt_llvmz'DebugTestBase._check_dump_func_opt_llvm]   s9    4t~EsKKK3S99999r   c                 n    |                      d| j        z  |           |                      d|           d S )Nz--OPTIMIZED DUMP %srr   rf   r`   s     r   _check_dump_optimized_llvmz(DebugTestBase._check_dump_optimized_llvmb   s9    +dn<cBBB3S99999r   c                     |                      d| j        z  |           t          j                    dv r|                      d|           d S d S )Nz--ASSEMBLY %s)x86_64AMD64i386i686xorl)r_   rg   platformmachiner`   s     r   _check_dump_assemblyz"DebugTestBase._check_dump_assemblyf   sU    o6<<<!DDDMM&#&&&&& EDr   N)r)   r*   r+   setrN   rJ   rX   ra   rd   rh   rj   rp   rs   ru   r~   r   r   r   r<   r<   5   s         D D D E EI; ; ;
3 
3 
3- - -- - -? ? ?, , ,O O O
: : :
: : :' ' ' ' 'r   r<   c                       e Zd ZdZd ZdS )FunctionDebugTestBaser   c                    t                      5 }t          t          t          j        f          }|                     |                    d          d           d d d            n# 1 swxY w Y   |                                S )N   rZ   )r   r   r   r   int64assertPreciseEqualentry_pointgetvaluer'   rR   cress      r   compile_simple_nopythonz-FunctionDebugTestBase.compile_simple_nopythonp   s     	<##Oek^DDD##D$4$4Q$7$7;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< ||~~s   A
A%%A),A)N)r)   r*   r+   rg   r   r   r   r   r   r   l   s(        !I    r   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestFunctionDebugOutputc                     t          dd          5  |                                 }d d d            n# 1 swxY w Y   |                     |dg           d S )NDUMP_BYTECODETr=   r   r   rX   r`   s     r   test_dump_bytecodez*TestFunctionDebugOutput.test_dump_bytecodez       _d33 	1 	1..00C	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1j\22222   266c                     t          dd          5  |                                 }d d d            n# 1 swxY w Y   |                     |dg           d S )NDUMP_IRTr?   r   r`   s     r   test_dump_irz$TestFunctionDebugOutput.test_dump_ir   s    Y-- 	1 	1..00C	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1dV,,,,,r   c                     t          dd          5  |                                 }d d d            n# 1 swxY w Y   |                     |dg           d S )NDUMP_CFGTr>   r   r`   s     r   test_dump_cfgz%TestFunctionDebugOutput.test_dump_cfg   s    Z.. 	1 	1..00C	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1eW-----r   c                     t          dd          5  |                                 }d d d            n# 1 swxY w Y   |                     |dg           d S )N	DUMP_LLVMTrA   r   r`   s     r   test_dump_llvmz&TestFunctionDebugOutput.test_dump_llvm   s    [$// 	1 	1..00C	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1fX.....r   c                     t          dd          5  |                                 }d d d            n# 1 swxY w Y   |                     |dg           d S )NDUMP_FUNC_OPTTrB   r   r`   s     r   test_dump_func_opt_llvmz/TestFunctionDebugOutput.test_dump_func_opt_llvm   s    _d33 	1 	1..00C	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1o%677777r   c                     t          dd          5  |                                 }d d d            n# 1 swxY w Y   |                     |dg           d S )NDUMP_OPTIMIZEDTrC   r   r`   s     r   test_dump_optimized_llvmz0TestFunctionDebugOutput.test_dump_optimized_llvm   s    -t44 	1 	1..00C	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1&6%788888r   c                     t          dd          5  |                                 }d d d            n# 1 swxY w Y   |                     |dg           d S )NDUMP_ASSEMBLYTrD   r   r`   s     r   test_dump_assemblyz*TestFunctionDebugOutput.test_dump_assembly   r   r   N)
r)   r*   r+   r   r   r   r   r   r   r   r   r   r   r   r   x   s}        3 3 3
- - -
. . .
/ / /
8 8 8
9 9 9
3 3 3 3 3r   r   c                       e Zd ZdZd Zd ZdS )TestGeneratorDebugOutputr    c           	      >   t                      5 }t          t          t          j        t          j        f          }|                     t          |                    dd                    ddg           d d d            n# 1 swxY w Y   |                                S )Nr   r$   )	r   r   r    r   r   r   listr   r   r   s      r   compile_simple_genz+TestGeneratorDebugOutput.compile_simple_gen   s     	J##Jek0JKKD##D)9)9!Q)?)?$@$@1a&III	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J ||~~s   A%B  BBc                 <   t          dd          5  |                                 }d d d            n# 1 swxY w Y   |                     |dg           |                     d| j        z  |           t          j        d          }|                     ||           d S )Nr   Tr?   z--GENERATOR INFO: %sz
            generator state variables: ['x', 'y']
            yield point #1: live variables = ['y'], weak live variables = ['x']
            yield point #2: live variables = [], weak live variables = ['y']
            )r   r   rX   r_   rg   textwrapdedent)r'   rR   expected_gen_infos      r   test_dump_ir_generatorz/TestGeneratorDebugOutput.test_dump_ir_generator   s    Y-- 	, 	,))++C	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,dV,,,,t~=sCCC$O -  
 	'-----r   N)r)   r*   r+   rg   r   r   r   r   r   r   r      s7        I  
. 
. 
. 
. 
.r   r   c                       e Zd ZdZd Zd ZdS )TestDisableJITz:
    Test the NUMBA_DISABLE_JIT environment variable.
    c                    t          dd          5  t                      5   t          d          t                    }|                      |d          d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NDISABLE_JITTnopythonr   rZ   )r   r   r
   r   r   )r'   cfuncs     r   test_jitzTestDisableJIT.test_jit   s   ]D11 	5 	5!! 5 5*T***?;;''a!4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s4   B>A*B*A.	.B1A.	2BB	Bc                    t          dd          5  t                      5   t          t                    t                    } |            }|                     |j        d            t          d          t                    }|                      ||          d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   Tr$   r   )	r   r   r   simple_class_specr"   r   r&   r
   r.   )r'   SimpleJITClassr-   r   s       r   test_jitclasszTestDisableJIT.test_jitclass   sM   ]D11 	7 	7!! 7 7!<*;!<!<[!I!I$n&&''q111*T***+<==''c

A6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s5   C	BB1%C	1B5	5C	8B5	9C		CCN)r)   r*   r+   __doc__r   r   r   r   r   r   r      s<         5 5 5	7 	7 	7 	7 	7r   r   c                       e Zd ZdZdZd ZdS )TestEnvironmentOverridezN
    Test that environment variables are reloaded by Numba when modified.
    Fc                 R   |                                  }|                     |           t          dd          5  |                                  }|                     |g d           d d d            n# 1 swxY w Y   |                                  }|                     |           d S )NNUMBA_DEBUG1)r?   r@   rA   rB   rC   rD   )r   assertFalser   rX   r`   s     r   
test_debugz"TestEnvironmentOverride.test_debug   s   **,, 44 	I 	I..00C ##C *H *H *H I I I		I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I **,,s   -A33A7:A7N)r)   r*   r+   r   _numba_parallel_test_r   r   r   r   r   r      s5         
 "    r   r   c                   X    e Zd ZdZdZd Zeed                         Zed             Z	dS )TestParforsDebugz5
    Tests debug options associated with parfors
    Fc                 x    d}d}|D ]}|t          |j                  v rd} n|                     |d           d S )NzX'parallel=True' was specified but no transformation for parallel execution was possible.FTz Warning message should be found.)strmessage
assertTrue)r'   	warn_listmsgwarning_foundws        r   check_parfors_warningz&TestParforsDebug.check_parfors_warning   s\    2 	 	Ac!)nn$$ $ % 	'IJJJJJr   c                 :   t          j        t           j        dd          }t          j        d          5 }t          j        dt                     t          t          ||ft                    }ddd           n# 1 swxY w Y   | 
                    |           dS )zr
        Test that using parallel=True on a function that does not have parallel
        semantics warns.
        r   CT)recordalwaysflagsN)r   Arrayfloat64warningscatch_warningssimplefilterr   r   r4   force_parallel_flagsr   )r'   arr_tyr   r   s       r   
test_warnszTestParforsDebug.test_warns   s     U]As33$D111 	@Q!(,CDDD#$68H*>@ @ @D	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	""1%%%%%s   9A;;A?A?c                 ,   t          t          t          j        ft                    }t          dd          5  t                      5 }t          t          t          j        ft                    }ddd           n# 1 swxY w Y   |                                                    d          }d |D             }d |D             }d |D             }t          t          j        d	                              |d
                                       d                    }t          ||t          |          z             }d}	d}
t!          |||	          D ]2\  }}}|
                    ||          }|                     ||           3|dz   |d
z   f}	d}
|D ]"} |
j        |	 }|                     ||           #t          j        dt)          |g          f}	d}
|D ]"} |
j        |	 }|                     ||           #	 ddd           dS # 1 swxY w Y   dS )zM
        Test that NUMBA_DEBUG_ARRAY_OPT_STATS produces valid output
        r   NUMBA_DEBUG_ARRAY_OPT_STATSr   N
c                     g | ]}d |v |	S )zis produced from patternr   .0r   s     r   
<listcomp>z?TestParforsDebug.test_array_debug_opt_stats.<locals>.<listcomp>  s#    FFFq&@A&E&E&E&E&Er   c                     g | ]}d |v |	S )zis fused intor   r   s     r   r   z?TestParforsDebug.test_array_debug_opt_stats.<locals>.<listcomp>  s"    ;;;qo&:&:&:&:&:r   c                     g | ]}d |v |	S )zAfter fusion, functionr   r   s     r   r   z?TestParforsDebug.test_array_debug_opt_stats.<locals>.<listcomp>  s#    DDDq&>!&C&C&C&C&Cr   z	#([0-9]+)r   r   )z"('ones function', 'NumPy mapping'))r   user z6Parallel for-loop #{} is produced from pattern '{}' atz1Parallel for-loop #{} is fused into for-loop #{}.z:After fusion, function {} has {} parallel for-loop(s) #{}.)r   r:   r   r   r   r   r   r   splitintrecompilesearchgrouprangelenzipformatr_   r)   r   )r'   r   rR   outputparallel_loop_outputfuse_outputafter_fusion_outputparfor_stateboundspatternfmtr9   trialslpatternto_matchs                  r   test_array_debug_opt_statsz+TestParforsDebug.test_array_debug_opt_stats  s      05;.&:< < < !!>DD +	0 +	0 "" Dc'(85;..BD D DD D D D D D D D D D D D D D D
 \\^^))$//FFFFFFF ! <;F;;;  EDFDDD  
 rz,77>>$Q' )  )).q3 3L<'#.B*C*CCE EF
/GLC'*63G+2(4 (4 0 0#68::a22h//// $a')9:GEC% 0 0%3:w/h//// (0!S,5H5HIGNC- 0 0%3:w/h////0S+	0 +	0 +	0 +	0 +	0 +	0 +	0 +	0 +	0 +	0 +	0 +	0 +	0 +	0 +	0 +	0 +	0 +	0s6   H	(A;/H	;A?	?H	A?	E8H		HHN)
r)   r*   r+   r   r   r   r	   r   r   r   r   r   r   r   r      sz         
 "K K K 
& 
&  Z
& 60 60 60 60 60r   r   __main__)5osr|   r   r   r   numpyr0   numba.tests.supportr   r   r   r   r   r   r	   numbar
   
numba.corer   r   r   numba.core.compilerr   r   numba.core.cpur   numba.core.errorsr   r   numba.experimentalr   unittestr   r    objectr"   int32r   r.   r4   r:   r   rl   nrtr<   r   r   r   r   r   r   r)   mainr   r   r   <module>r     s=   				  				      " " " " " " " " " " " " " " " " " "       - - - - - - - - - - 7 7 7 7 7 7 7 7 * * * * * * 5 5 5 5 5 5       ' ' ' ' ' '     
    &    5;'(        uww %4_T%:%:  "  4' 4' 4' 4' 4'H 4' 4' 4'n	 	 	 	 	M 	 	 	#3 #3 #3 #3 #33 #3 #3 #3L. . . . .} . . .07 7 7 7 7] 7 7 7.    3   *W0 W0 W0 W0 W0x W0 W0 W0t zHMOOOOO r   