
    J/Ph3/                        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mZ d dlmZmZ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$d Z% G d de          Z& G d de&          Z' G d de'          Z( G d de&          Z) G d de&          Z* G d de'          Z+ G d de          Z,e-dk    r ej.                     dS dS )     N)TestCaseoverride_configoverride_env_configcaptured_stdoutforbid_codegenskip_parfors_unsupported
needs_blas)jitnjit)typescompilerutils)NumbaPerformanceWarning)prange)jitclassc                     | dz   }|S )N    )someargretvals     V/var/www/html/test/jupyter/venv/lib/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_parforr2   &   s    6!Q<<r   c                     t          j        |           }t          |           D ]"}||         t          j        |          z   ||<   #|S r   r.   onesr   sinnr0   is      r   supported_parforr:   )   sE    


AAYY    tbfQii!Hr   c                     t          j        |           }t          |           D ]-}||         t          j        |          z   ||<   |dz   dk     sJ .|S )N   i r4   r7   s      r   unsupported_pranger=   /   sV    


AAYY  tbfQii!2vHr   c                   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getattrrM   )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v r|                     d|           d S t           j        dv r|                     d|           d S t          t           j                  )N))      )r]      )r]   r<   	BINARY_OP))r]   
   
BINARY_ADD)r   	PYVERSIONassertInNotImplementedErrorr%   rU   s     r   _check_dump_bytecodez"DebugTestBase._check_dump_bytecodeK   sa    ?999MM+s+++++_
**MM,,,,,,%eo666r   c                 2    |                      d|           d S )NzCFG dominatorsrd   rf   s     r   _check_dump_cfgzDebugTestBase._check_dump_cfgS   s    &,,,,,r   c                 B    |                      d| j        z  |           d S )Nz--IR DUMP: %s--rd   	func_namerf   s     r   _check_dump_irzDebugTestBase._check_dump_irV   s$    '$.8#>>>>>r   c                 2    |                      d|           d S )Nz--propagate--ri   rf   s     r   _check_dump_typeinferz#DebugTestBase._check_dump_typeinferY   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")rd   r   FlagsoptionsdefaultrY   assertRegexrf   s     r   _check_dump_llvmzDebugTestBase._check_dump_llvm\   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, 1rl   rf   s     r   _check_dump_func_opt_llvmz'DebugTestBase._check_dump_func_opt_llvma   s9    4t~EsKKK3S99999r   c                 n    |                      d| j        z  |           |                      d|           d S )Nz--OPTIMIZED DUMP %sry   rl   rf   s     r   _check_dump_optimized_llvmz(DebugTestBase._check_dump_optimized_llvmf   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)rd   rm   platformmachinerf   s     r   _check_dump_assemblyz"DebugTestBase._check_dump_assemblyj   sU    o6<<<!DDDMM&#&&&&& EDr   N)r'   r(   r)   setrQ   rM   r[   rg   rj   rn   rp   rw   rz   r|   r   r   r   r   r?   r?   7   s         D D D E EI; ; ;
3 
3 
37 7 7- - -? ? ?, , ,O O O
: : :
: : :' ' ' ' 'r   r?   c                       e Zd ZdZd ZdS )FunctionDebugTestBaser   c                    t                      5 } t          t          j        f          t                    }|                      |d          d           d d d            n# 1 swxY w Y   |                                S )N   r]   )r   r   r   int64r   assertPreciseEqualgetvaluer%   rU   cfuncs      r   compile_simple_nopythonz-FunctionDebugTestBase.compile_simple_nopythont   s     	1#(D%+((99E##EE!HHa000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 ||~~s   AA##A'*A'N)r'   r(   r)   rm   r   r   r   r   r   r   p   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   r[   rf   s     r   test_dump_bytecodez*TestFunctionDebugOutput.test_dump_bytecode~       _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_IRTrB   r   rf   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_CFGTrA   r   rf   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_LLVMTrD   r   rf   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_OPTTrE   r   rf   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_OPTIMIZEDTrF   r   rf   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_ASSEMBLYTrG   r   rf   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   |   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          j        t          j        f          t                    }|                     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   s      r   compile_simple_genz+TestGeneratorDebugOutput.compile_simple_gen   s     	?#4D%+u{344Z@@E##Dq!$5$51v>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? ||~~s   A#A>>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   TrB   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   r[   rd   rm   textwrapdedent)r%   rU   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)   rm   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   r]   )r   r   r
   r   r   )r%   r   s     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)rB   rC   rD   rE   rF   rG   )r   assertFalser   r[   rf   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                       e Zd ZdZdZd Zd Zee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.FT 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                 x    d}d}|D ]}|t          |j                  v rd} n|                     |d           d S )Nzprange or pndindex loop will not be executed in parallel due to there being more than one entry to or exit from the loop (e.g., an assertion).FTr   r   r   s        r   (check_parfors_unsupported_prange_warningz9TestParforsDebug.check_parfors_unsupported_prange_warning   s^    ,  	 	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          ||fd          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parallelN)
r   Arrayfloat64warningscatch_warningssimplefilterr   r   r2   r   )r%   arr_tyr   s      r   
test_warnszTestParforsDebug.test_warns  s     U]As33$D111 	FQ!(,CDDD1D&&!D1112DEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	""1%%%%%s   <A>>BBc                    t          j        d          5 }t          j        dt                      t	          t
          j        fd          t                     ddd           n# 1 swxY w Y   |                     |           dS )zG
        Test that prange with multiple exits issues a warning
        Tr   r   r   N)	r   r   r   r   r   r   r   r=   r   )r%   r   s     r   test_unsupported_prange_warnsz.TestParforsDebug.test_unsupported_prange_warns  s     $D111 	DQ!(,CDDD/D%+$///0BCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	55a88888s   AA''A+.A+c                 8    t          t          j        fd          t                     t	          dd          5  t                      5 } t          t          j        fd          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
        Tr   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>1  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   splitintrecompilesearchgrouprangelenzipformatrd   r'   r   )r%   rU   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    	,ek^d+++,<=== !>DD *	0 *	0 "" Fc3ek^d3334DEEEF F F F F F F F F F F F F F F \\^^))$//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////0Q*	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0 *	0s6   H
+B5HB	HB		E8HHHN)r'   r(   r)   r   r   r   r   r	   r   r   r   r	  r   r   r   r   r      s         
 "K K K	K 	K 	K 	& 	&  Z	& 9 9  Z9 40 40 40 40 40r   r   __main__)/osr   r   r   r   numpyr.   numba.tests.supportr   r   r   r   r   r   r	   numbar
   r   
numba.corer   r   r   numba.core.errorsr   r   numba.experimentalr   unittestr   r   objectr    int32r   r,   r2   r:   r=   r?   r   r   r   r   r   r   r'   mainr   r   r   <module>r     s   				  				      " " " " " " " " " " " " " " " " " "         - - - - - - - - - - 5 5 5 5 5 5       ' ' ' ' ' '     
    &    5;'(         6' 6' 6' 6' 6'H 6' 6' 6'r	 	 	 	 	M 	 	 	#3 #3 #3 #3 #33 #3 #3 #3L. . . . .} . . .07 7 7 7 7] 7 7 7.    3   *j0 j0 j0 j0 j0x j0 j0 j0Z zHMOOOOO r   