o
    0 i3/                     @   sx  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d	 Zd
d ZG dd deZdej fgZ!dd Z"dd Z#dd Z$dd Z%G dd deZ&G dd de&Z'G dd de'Z(G dd de&Z)G dd  d e&Z*G d!d" d"e'Z+G d#d$ d$eZ,e-d%kre.  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                 C   s   | d }|S )N    )Zsomeargretvalr   r   b/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/numba/tests/test_debug.pysimple_nopython   s   r   c                 c   s    | V  |V  d S Nr   )xyr   r   r   
simple_gen   s   
r   c                   @   s   e Zd Zdd ZdS )SimpleClassc                 C   s
   d| _ d S )N   h)selfr   r   r   __init__   s   
zSimpleClass.__init__N)__name__
__module____qualname__r   r   r   r   r   r      s    r   r   c                 C   s   | j S r   r   )objr   r   r   simple_class_user#   s   r$   c                 C   s   t | |S r   )npdot)abr   r   r   unsupported_parfor&   s   r)   c                 C   s2   t | }t| D ]}|| t | ||< q	|S r   r%   Zonesr   sinnr'   ir   r   r   supported_parfor)   s   
r/   c                 C   sB   t | }t| D ]}|| t | ||< |d dk sJ q	|S )N   i r*   r,   r   r   r   unsupported_prange/   s
   
r1   c                   @   sh   e Zd Zeg dZdd Zdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd ZdS )DebugTestBase)bytecodecfgir	typeinferllvmfunc_opt_llvmoptimized_llvmassemblyc                 O   s   | j tg|R i | d S r   )assertRaisesAssertionError)r   argskwargsr   r   r   assert_fails<   s   zDebugTestBase.assert_failsc                 C   sn   t | jd}|D ]}||v sJ d||< q	t| D ]\}}t| d| }|r.|| q| || qd S )NFTz_check_dump_%s)dictfromkeys	all_dumpssorteditemsgetattrr?   )r   outZ
dump_namesZenabled_dumpsnameenabledZ
check_methr   r   r   check_debug_output?   s   

z DebugTestBase.check_debug_outputc                 C   s>   t jdv r| d| d S t jdv r| d| d S tt j)N))      )rJ      )rJ   r0   Z	BINARY_OP))rJ   
   
BINARY_ADD)r   Z	PYVERSIONassertInNotImplementedErrorr   rF   r   r   r   _check_dump_bytecodeK   s
   


z"DebugTestBase._check_dump_bytecodec                 C      |  d| d S )NzCFG dominatorsrO   rQ   r   r   r   _check_dump_cfgS      zDebugTestBase._check_dump_cfgc                 C   s   |  d| j | d S )Nz--IR DUMP: %s--rO   	func_namerQ   r   r   r   _check_dump_irV   s   zDebugTestBase._check_dump_irc                 C   rS   )Nz--propagate--rT   rQ   r   r   r   _check_dump_typeinferY   rV   z#DebugTestBase._check_dump_typeinferc                 C   s6   |  d| tjjd jjdkr| |d| d S d S )Nz--LLVM DUMPZauto_parallelFz#store i64 %\"\.\d", i64\* %"retptr")rO   r   FlagsoptionsdefaultrH   assertRegexrQ   r   r   r   _check_dump_llvm\   s   zDebugTestBase._check_dump_llvmc                 C   "   |  d| j | |  d| d S )Nz--FUNCTION OPTIMIZED DUMP %sadd nsw i64 %arg.somearg, 1rW   rQ   r   r   r   _check_dump_func_opt_llvma   s   z'DebugTestBase._check_dump_func_opt_llvmc                 C   r`   )Nz--OPTIMIZED DUMP %sra   rW   rQ   r   r   r   _check_dump_optimized_llvmf   s   z(DebugTestBase._check_dump_optimized_llvmc                 C   s2   |  d| j | t dv r|  d| d S d S )Nz--ASSEMBLY %s)x86_64ZAMD64i386i686Zxorl)rO   rX   platformmachinerQ   r   r   r   _check_dump_assemblyj   s   z"DebugTestBase._check_dump_assemblyN)r    r!   r"   setrB   r?   rI   rR   rU   rY   rZ   r_   rb   rc   ri   r   r   r   r   r2   7   s    r2   c                   @   s   e Zd ZdZdd ZdS )FunctionDebugTestBaser   c                 C   sT   t  }ttjft}| |dd W d    | S 1 s!w   Y  | S )N   rJ   )r   r
   r   int64r   assertPreciseEqualgetvaluer   rF   cfuncr   r   r   compile_simple_nopythont   s   
z-FunctionDebugTestBase.compile_simple_nopythonN)r    r!   r"   rX   rr   r   r   r   r   rk   p   s    rk   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestFunctionDebugOutputc                 C   D   t dd |  }W d    n1 sw   Y  | |dg d S )NZDUMP_BYTECODETr3   r   rr   rI   rQ   r   r   r   test_dump_bytecode~      
z*TestFunctionDebugOutput.test_dump_bytecodec                 C   rt   )NDUMP_IRTr5   ru   rQ   r   r   r   test_dump_ir   rw   z$TestFunctionDebugOutput.test_dump_irc                 C   rt   )NZDUMP_CFGTr4   ru   rQ   r   r   r   test_dump_cfg   rw   z%TestFunctionDebugOutput.test_dump_cfgc                 C   rt   )NZ	DUMP_LLVMTr7   ru   rQ   r   r   r   test_dump_llvm   rw   z&TestFunctionDebugOutput.test_dump_llvmc                 C   rt   )NZDUMP_FUNC_OPTTr8   ru   rQ   r   r   r   test_dump_func_opt_llvm   rw   z/TestFunctionDebugOutput.test_dump_func_opt_llvmc                 C   rt   )NZDUMP_OPTIMIZEDTr9   ru   rQ   r   r   r   test_dump_optimized_llvm   rw   z0TestFunctionDebugOutput.test_dump_optimized_llvmc                 C   rt   )NZDUMP_ASSEMBLYTr:   ru   rQ   r   r   r   test_dump_assembly   rw   z*TestFunctionDebugOutput.test_dump_assemblyN)
r    r!   r"   rv   ry   rz   r{   r|   r}   r~   r   r   r   r   rs   |   s    rs   c                   @       e Zd ZdZdd Zdd ZdS )TestGeneratorDebugOutputr   c                 C   sb   t  "}ttjtjft}| t|ddddg W d    | S 1 s(w   Y  | S )Nrl   r   )r   r
   r   rm   r   rn   listro   rp   r   r   r   compile_simple_gen   s   
z+TestGeneratorDebugOutput.compile_simple_genc                 C   sl   t dd |  }W d    n1 sw   Y  | |dg | d| j | td}| || d S )Nrx   Tr5   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   rI   rO   rX   textwrapdedent)r   rF   Zexpected_gen_infor   r   r   test_dump_ir_generator   s   

z/TestGeneratorDebugOutput.test_dump_ir_generatorN)r    r!   r"   rX   r   r   r   r   r   r   r      s    r   c                   @   r   )TestDisableJITz:
    Test the NUMBA_DISABLE_JIT environment variable.
    c              	   C   s   t dd3 t  tddt}| |dd W d    n1 s#w   Y  W d    d S W d    d S 1 s;w   Y  d S )NDISABLE_JITTZnopythonrl   rJ   )r   r   r	   r   rn   )r   rq   r   r   r   test_jit   s   "zTestDisableJIT.test_jitc              	   C   s   t ddC t ' ttt}| }| |jd tddt}| ||d W d    n1 s3w   Y  W d    d S W d    d S 1 sKw   Y  d S )Nr   Tr   r   )	r   r   r   simple_class_specr   rn   r   r	   r$   )r   ZSimpleJITClassr#   rq   r   r   r   test_jitclass   s   "zTestDisableJIT.test_jitclassN)r    r!   r"   __doc__r   r   r   r   r   r   r      s    r   c                   @   s   e Zd ZdZdZdd ZdS )TestEnvironmentOverridezN
    Test that environment variables are reloaded by Numba when modified.
    Fc                 C   sj   |   }| | tdd |   }| |g d W d    n1 s%w   Y  |   }| | d S )NZNUMBA_DEBUG1)r5   r6   r7   r8   r9   r:   )rr   ZassertFalser   rI   rQ   r   r   r   
test_debug   s   
z"TestEnvironmentOverride.test_debugN)r    r!   r"   r   _numba_parallel_test_r   r   r   r   r   r      s    r   c                   @   sP   e Zd ZdZdZdd Zdd Zeedd Z	eed	d
 Z
edd ZdS )TestParforsDebugz5
    Tests debug options associated with parfors
    Fc                 C   8   d}d}|D ]}|t |jv rd} nq| |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   Z	warn_listmsgZwarning_foundwr   r   r   check_parfors_warning   s   z&TestParforsDebug.check_parfors_warningc                 C   r   )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   r   r   r   (check_parfors_unsupported_prange_warning   s   z9TestParforsDebug.check_parfors_unsupported_prange_warningc                 C   sj   t t jdd}tjdd}tdt t||fddt W d   n1 s)w   Y  | 	| dS )zr
        Test that using parallel=True on a function that does not have parallel
        semantics warns.
        rl   CTrecordalwaysZparallelN)
r   ZArrayZfloat64warningscatch_warningssimplefilterr   r
   r)   r   )r   Zarr_tyr   r   r   r   
test_warns  s   zTestParforsDebug.test_warnsc                 C   sZ   t jdd}t dt ttjfddt W d   n1 s!w   Y  | | dS )zG
        Test that prange with multiple exits issues a warning
        Tr   r   r   N)	r   r   r   r   r
   r   rm   r1   r   )r   r   r   r   r   test_unsupported_prange_warns  s
   z.TestParforsDebug.test_unsupported_prange_warnsc              	   C   s  t tjfddt tdd t }t tjfddt W d   n1 s(w   Y  | d}dd |D }d	d |D }d
d |D }tt	
d|d d}t||t| }d}d}	t|||D ]\}
}}|	|
|}| || qk|d |d f}d}	|D ]}|	j| }| || qtjdt|gf}d}	|D ]}|	j| }| || qW d   dS 1 sw   Y  dS )zM
        Test that NUMBA_DEBUG_ARRAY_OPT_STATS produces valid output
        Tr   ZNUMBA_DEBUG_ARRAY_OPT_STATSr   N
c                 S      g | ]}d |v r|qS )zis produced from patternr   .0r   r   r   r   
<listcomp>-      z?TestParforsDebug.test_array_debug_opt_stats.<locals>.<listcomp>c                 S   r   )zis fused intor   r   r   r   r   r   /  r   c                 S   r   )zAfter fusion, functionr   r   r   r   r   r   1  r   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   rm   r/   r   r   ro   splitintrecompilesearchgrouprangelenzipformatrO   r    rj   )r   rF   outputZparallel_loop_outputZfuse_outputZafter_fusion_outputZparfor_stateZboundspatternfmtr.   ZtrialsZlpatternZto_matchr   r   r   test_array_debug_opt_stats  sN   	


"z+TestParforsDebug.test_array_debug_opt_statsN)r    r!   r"   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    
	r   __main__)/osrg   r   r   r   numpyr%   Znumba.tests.supportr   r   r   r   r   r   r   Znumbar	   r
   Z
numba.corer   r   r   Znumba.core.errorsr   r   Znumba.experimentalr   Zunittestr   r   objectr   Zint32r   r$   r)   r/   r1   r2   rk   rs   r   r   r   r   r    mainr   r   r   r   <module>   s>    $9&m