
    xKg1/                        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\                          yy)     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     Z/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_debug.pysimple_nopythonr      s    q[FM    c              #      K   |  | y wNr   )xys     r   
simple_genr      s     
G
Gs   
c                       e Zd Zd Zy)SimpleClassc                     d| _         y )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    55Lr   c                 .    t        j                  | |      S r   )npdot)abs     r   unsupported_parforr2   &   s    66!Q<r   c                     t        j                  |       }t        |       D ]   }||   t        j                  |      z   ||<   " |S r   r.   onesr   sinnr0   is      r   supported_parforr:   )   s<    

AAYtbffQi! Hr   c                     t        j                  |       }t        |       D ]*  }||   t        j                  |      z   ||<   |dz   dk  r*J  |S )N   i r4   r7   s      r   unsupported_pranger=   /   sN    

AAYtbffQi!2v  Hr   c                   \    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y)DebugTestBase)bytecodecfgir	typeinferllvmfunc_opt_llvmoptimized_llvmassemblyc                 8     | j                   t        g|i | y r   )assertRaisesAssertionError)r%   argskwargss      r   assert_failszDebugTestBase.assert_fails<   s    .:4:6:r   c                    t         j                  | j                  d      }|D ]  }||v sJ d||<    t        |j	                               D ]1  \  }}t        | d|z        }|r	 ||        | j                  ||       3 y )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    dnne<D=((("&M$  $M$7$7$9:MD' '7$'>?J3!!*c2 ;r   c                     t         j                  dv r| j                  d|       y t         j                  dv r| j                  d|       y t        t         j                        )N))      )r]      	BINARY_OP))r]   	   )r]   
   
BINARY_ADD)r   	PYVERSIONassertInNotImplementedErrorr%   rU   s     r   _check_dump_bytecodez"DebugTestBase._check_dump_bytecodeK   sG    ??00MM+s+__ 11MM,,%eoo66r   c                 (    | j                  d|       y )NzCFG dominatorsre   rg   s     r   _check_dump_cfgzDebugTestBase._check_dump_cfgS   s    &,r   c                 B    | j                  d| j                  z  |       y )Nz--IR DUMP: %s--re   	func_namerg   s     r   _check_dump_irzDebugTestBase._check_dump_irV   s    '$..8#>r   c                 (    | j                  d|       y )Nz--propagate--rj   rg   s     r   _check_dump_typeinferz#DebugTestBase._check_dump_typeinferY   s    os+r   c                     | j                  d|       t        j                  j                  d   j                  j
                  dk(  r| j                  |d|       y y )Nz--LLVM DUMPauto_parallelFz#store i64 %\"\.\d", i64\* %"retptr")re   r   FlagsoptionsdefaultrY   assertRegexrg   s     r   _check_dump_llvmzDebugTestBase._check_dump_llvm\   sL    mS)>>!!/2::BBeKS"H#N Lr   c                 f    | j                  d| j                  z  |       | j                  d|       y )Nz--FUNCTION OPTIMIZED DUMP %sadd nsw i64 %arg.somearg, 1rm   rg   s     r   _check_dump_func_opt_llvmz'DebugTestBase._check_dump_func_opt_llvma   s)    4t~~EsK3S9r   c                 f    | j                  d| j                  z  |       | j                  d|       y )Nz--OPTIMIZED DUMP %srz   rm   rg   s     r   _check_dump_optimized_llvmz(DebugTestBase._check_dump_optimized_llvmf   s)    +dnn<cB3S9r   c                     | j                  d| j                  z  |       t        j                         dv r| j                  d|       y y )Nz--ASSEMBLY %s)x86_64AMD64i386i686xorl)re   rn   platformmachinerg   s     r   _check_dump_assemblyz"DebugTestBase._check_dump_assemblyj   s?    o6<!DDMM&#& Er   N)r'   r(   r)   setrQ   rM   r[   rh   rk   ro   rq   rx   r{   r}   r   r   r   r   r?   r?   7   sF     D EI;
37-?,O
:
:'r   r?   c                       e Zd ZdZd Zy)FunctionDebugTestBaser   c                     t               5 } t        t        j                  f      t              }| j                   |d      d       d d d        |j                         S # 1 sw Y   j                         S xY w)N   r]   )r   r   r   int64r   assertPreciseEqualgetvaluer%   rU   cfuncs      r   compile_simple_nopythonz-FunctionDebugTestBase.compile_simple_nopythont   s\    #(D%++(9E##E!Ha0  ||~	  ||~s   =A  A8N)r'   r(   r)   rn   r   r   r   r   r   r   p   s    !Ir   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestFunctionDebugOutputc                     t        dd      5  | j                         }d d d        | j                  dg       y # 1 sw Y   xY w)NDUMP_BYTECODETr@   r   r   r[   rg   s     r   test_dump_bytecodez*TestFunctionDebugOutput.test_dump_bytecode~   :    _d3..0C 4j\2 43	   :Ac                     t        dd      5  | j                         }d d d        | j                  dg       y # 1 sw Y   xY w)NDUMP_IRTrB   r   rg   s     r   test_dump_irz$TestFunctionDebugOutput.test_dump_ir   s:    Y-..0C .dV, .-r   c                     t        dd      5  | j                         }d d d        | j                  dg       y # 1 sw Y   xY w)NDUMP_CFGTrA   r   rg   s     r   test_dump_cfgz%TestFunctionDebugOutput.test_dump_cfg   s:    Z...0C /eW- /.r   c                     t        dd      5  | j                         }d d d        | j                  dg       y # 1 sw Y   xY w)N	DUMP_LLVMTrD   r   rg   s     r   test_dump_llvmz&TestFunctionDebugOutput.test_dump_llvm   s:    [$/..0C 0fX. 0/r   c                     t        dd      5  | j                         }d d d        | j                  dg       y # 1 sw Y   xY w)NDUMP_FUNC_OPTTrE   r   rg   s     r   test_dump_func_opt_llvmz/TestFunctionDebugOutput.test_dump_func_opt_llvm   s;    _d3..0C 4o%67 43r   c                     t        dd      5  | j                         }d d d        | j                  dg       y # 1 sw Y   xY w)NDUMP_OPTIMIZEDTrF   r   rg   s     r   test_dump_optimized_llvmz0TestFunctionDebugOutput.test_dump_optimized_llvm   s=    -t4..0C 5&6%78 54r   c                     t        dd      5  | j                         }d d d        | j                  dg       y # 1 sw Y   xY w)NDUMP_ASSEMBLYTrG   r   rg   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
-
.
/
8
9
3r   r   c                       e Zd ZdZd Zd Zy)TestGeneratorDebugOutputr   c           	      ,   t               5 } t        t        j                  t        j                  f      t              }| j                  t         |dd            ddg       d d d        |j                         S # 1 sw Y   j                         S xY w)Nr   r"   )r   r   r   r   r   r   listr   r   s      r   compile_simple_genz+TestGeneratorDebugOutput.compile_simple_gen   sn    #4D%++u{{34Z@E##Dq!$51v>  ||~	  ||~s   AA;;Bc                    t        dd      5  | j                         }d d d        | j                  dg       | j                  d| j                  z  |       t        j                  d      }| j                  ||       y # 1 sw Y   cxY w)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[   re   rn   textwrapdedent)r%   rU   expected_gen_infos      r   test_dump_ir_generatorz/TestGeneratorDebugOutput.test_dump_ir_generator   sw    Y-))+C .dV,,t~~=sC$OO - 
 	'- .-s   B  B	N)r'   r(   r)   rn   r   r   r   r   r   r   r      s    I
.r   r   c                       e Zd ZdZd Zd Zy)TestDisableJITz:
    Test the NUMBA_DISABLE_JIT environment variable.
    c                     t        dd      5  t               5   t        d      t              }| j	                   |d      d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NDISABLE_JITTnopythonr   r]   )r   r   r
   r   r   )r%   r   s     r   test_jitzTestDisableJIT.test_jit   sT    ]D1!*T*?;''a!4 " 21!! 21s"   A$/AA$A!	A$$A-c                 X   t        dd      5  t               5   t        t              t              } |       }| j                  |j                  d        t        d      t              }| j                   ||      d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   Tr"   r   )	r   r   r   simple_class_specr    r   r$   r
   r,   )r%   SimpleJITClassr+   r   s       r   test_jitclasszTestDisableJIT.test_jitclass   s    ]D1!!<*;!<[!I$&''q1*T*+<=''c
A6 " 21!! 21s#   B A+BB B	B  B)N)r'   r(   r)   __doc__r   r   r   r   r   r   r      s    5	7r   r   c                       e Zd ZdZdZd Zy)TestEnvironmentOverridezN
    Test that environment variables are reloaded by Numba when modified.
    Fc                    | j                         }| j                  |       t        dd      5  | j                         }| j                  |g d       d d d        | j                         }| j                  |       y # 1 sw Y   +xY w)NNUMBA_DEBUG1)rB   rC   rD   rE   rF   rG   )r   assertFalser   r[   rg   s     r   
test_debugz"TestEnvironmentOverride.test_debug   s{    **, 4..0C ##C *H I	 5 **, 54s   %A==BN)r'   r(   r)   r   _numba_parallel_test_r   r   r   r   r   r      s    
 "r   r   c                   d    e Zd ZdZdZd Zd Zeed               Z	eed               Z
ed        Zy)	TestParforsDebugz5
    Tests debug options associated with parfors
    Fc                 t    d}d}|D ]  }|t        |j                        v sd} n | j                  |d       y )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   sA    2Ac!))n$ $  	'IJr   c                 t    d}d}|D ]  }|t        |j                        v sd} n | j                  |d       y )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   sC    , Ac!))n$ $  	'IJr   c                 ,   t        j                  t         j                  dd      }t        j                  d      5 }t        j
                  dt                t        ||fd      t               ddd       | j                         y# 1 sw Y   xY w)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  sp     U]]As3$$D1Q!!(,CD1D&&!D12DE 2 	""1% 21s   4B

Bc                     t        j                  d      5 }t        j                  dt                t	        t
        j                  fd      t               ddd       | j                         y# 1 sw Y   xY w)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1Q!!(,CD/D%++$/0BC 2 	55a8 21s   AA22A;c                     t        t        j                  fd      t               t	        dd      5  t               5 } t        t        j                  fd      t               ddd       j                         j                  d      }|D cg c]	  }d|v s| c}}|D cg c]	  }d|v s| c}}|D cg c]	  }d	|v s| c}}t        t        j                  d
      j                  |d         j                  d            }t        ||t        |      z         }d}	d}
t        |||	      D ]*  \  }}}|
j!                  ||      }| j#                  ||       , |dz   |dz   f}	d}
|D ]#  } |
j                   |	 }| j#                  ||       % t        j$                  dt'        |g      f}	d}
|D ]#  } |
j                   |	 }| j#                  ||       % 	 ddd       y# 1 sw Y   xY wc c}w c c}w c c}w # 1 sw Y   yxY w)zM
        Test that NUMBA_DEBUG_ARRAY_OPT_STATS produces valid output
        Tr   NUMBA_DEBUG_ARRAY_OPT_STATSr   N
zis produced from patternzis fused intozAfter fusion, functionz	#([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formatre   r'   r   )r%   rU   outputr   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    	,ekk^d+,<= !>D "c3ekk^d34DE # \\^))$/F"FFq&@A&EFF ! #;Fqo&:F;  #DFq&>!&CFD  
 rzz,7>>$Q' )).q3L<'#.B*CCEF
/GLC'*63G+2(4#68::a2h/(4 $a')9:GEC%%3::w/h/ &
 (00!S,5HIGNC-%3::w/h/ .Q ED"" G;D EDsY   H'G%%+H	G2G2H%	G7/G73H:	G<G<DH%G/	*HH
N)r'   r(   r)   r   r   r   r   r	   r   r   r   r  r   r   r   r   r      sg    
 "K	K 	&  	& 9  9 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;;'( 6'H 6'r	M 	#33 #3L.} .07] 7.3 *j0x j0Z zHMMO r   