o
    i                     @   s   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mZmZmZ d dlmZmZmZ d dlmZ d dlmZ G d	d
 d
eZG dd deZdS )    )CompilerDefaultPassBuilder)FunctionPassAnalysisPassregister_pass)InlineInlinables)IRLegalization)jitobjmodenjitcfunc)typespostprocerrors)
FunctionIR)TestCasec                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	TestCustomPipelinec                    s,   t t|   G  fdddt  | _d S )Nc                       s0   e Zd Zg Z fddZ fddZ  ZS )z0TestCustomPipeline.setUp.<locals>.CustomPipelinec                    s   | j | t | |S N)custom_pipeline_cacheappendsupercompile_extra)selffuncCustomPipeline	__class__ V/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/numba/tests/test_pipeline.pyr      s   z>TestCustomPipeline.setUp.<locals>.CustomPipeline.compile_extrac                    s*   | j | t | j|g|R i |S r   )r   r   r   
compile_ir)r   func_irargskwargsr   r   r   r      s   
z;TestCustomPipeline.setUp.<locals>.CustomPipeline.compile_ir)__name__
__module____qualname__r   r   r   __classcell__r   r   r   r   r      s    r   )r   r   setUpr   pipeline_classr   r(   r'   r   r)      s   
zTestCustomPipeline.setUpc                 C   sL   |  | jjg  t| jddd }| |dd |  | jj|jg d S )Nr*   c                 S      | S r   r   xr   r   r   foo$      z8TestCustomPipeline.test_jit_custom_pipeline.<locals>.foo   )assertListEqualr*   r   r	   assertEqualpy_funcr   r0   r   r   r   test_jit_custom_pipeline!   s   


z+TestCustomPipeline.test_jit_custom_pipelinec                 C   sV   |  | jjg  tttj| jddd }| |dd |  | jj|jg d S )Nr,   c                 S   r-   r   r   r.   r   r   r   r0   /   r1   z:TestCustomPipeline.test_cfunc_custom_pipeline.<locals>.foor2   )r3   r*   r   r   r   int64r4   __wrapped__r6   r   r   r   test_cfunc_custom_pipeline,   s   

z-TestCustomPipeline.test_cfunc_custom_pipelinec                 C   s   |  | jjg  t| jddd }d}| |||d  | t| jjd | jjd }| ||j | jjd }| |t	 d S )Nr,   c                 S   s<   t dd | td7 } W d    | S 1 sw   Y  | S )Nintpr.      )r
   intr.   r   r   r   r0   :   s   
z<TestCustomPipeline.test_objmode_custom_pipeline.<locals>.foo{   r<      r   )
r3   r*   r   r	   r4   lenassertIsr5   assertIsInstancer   )r   r0   argfirstsecondr   r   r   test_objmode_custom_pipeline7   s   

z/TestCustomPipeline.test_objmode_custom_pipeline)r#   r$   r%   r)   r7   r:   rF   r&   r   r   r(   r   r      s
    r   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	TestPassManagerFunctionalityNc                    sV   |  du |  du tdddG fddd G  fdddt}|S )z
        Creates a new compiler pipeline with the _InjectDelsPass injected after
        the pass supplied in kwarg 'inject_after'.
        NF)mutates_CFGanalysis_onlyc                       s0   e Zd ZdZde  Z fddZdd ZdS )zLTestPassManagerFunctionality._create_pipeline_w_del.<locals>._InjectDelsPasszD
            This pass injects ir.Del nodes into the IR
            zinject_dels_%sc                    s     |  d S r   )__init__r+   baser   r   rJ   ]   s   zUTestPassManagerFunctionality._create_pipeline_w_del.<locals>._InjectDelsPass.__init__c                 S   s   t |j}|jdd dS )NT)	emit_dels)r   PostProcessorr    run)r   stateppr   r   r   run_pass`   s   zUTestPassManagerFunctionality._create_pipeline_w_del.<locals>._InjectDelsPass.run_passN)r#   r$   r%   __doc__str_namerJ   rR   r   rK   r   r   _InjectDelsPassV   s
    rV   c                       s   e Zd Z fddZdS )zITestPassManagerFunctionality._create_pipeline_w_del.<locals>.TestCompilerc                    s&   t | j}|  |  |gS r   )r   define_nopython_pipelinerP   add_pass_afterfinalize)r   pmrV   inject_afterr   r   define_pipelinesg   s   zZTestPassManagerFunctionality._create_pipeline_w_del.<locals>.TestCompiler.define_pipelinesN)r#   r$   r%   r]   r   r[   r   r   TestCompilere   s    r^   )
assertTruer   r   )r   rL   r\   r^   r   )rV   rL   r\   r   _create_pipeline_w_delN   s   
z3TestPassManagerFunctionality._create_pipeline_w_delc                 C   sx   |  tt}t|ddd }| tj}|d W d    n1 s$w   Y  t|j}| 	d| | 	d| d S )Nr,   c                 S      | d S Nr<   r   r.   r   r   r   r0   s      zYTestPassManagerFunctionality.test_compiler_error_on_ir_del_from_functionpass.<locals>.foo
   zIllegal IR, del found at:zdel x)
r`   r   r   r   assertRaisesr   CompilerErrorrT   	exceptionassertIn)r   new_compilerr0   raiseserrstrr   r   r   /test_compiler_error_on_ir_del_from_functionpasso   s   


zLTestPassManagerFunctionality.test_compiler_error_on_ir_del_from_functionpassc                 C   s8   |  tt}t|ddd }| |d|d d S )Nr,   c                 S   ra   rb   r   r.   r   r   r   r0      rc   z]TestPassManagerFunctionality.test_no_compiler_error_on_ir_del_after_legalization.<locals>.foord   )r`   r   r   r   r_   r5   )r   ri   r0   r   r   r   3test_no_compiler_error_on_ir_del_after_legalization   s   	
zPTestPassManagerFunctionality.test_no_compiler_error_on_ir_del_after_legalization)NN)r#   r$   r%   r`   rl   rm   r   r   r   r   rG   L   s    
!rG   N)numba.core.compilerr   r   numba.core.compiler_machineryr   r   r   numba.core.untyped_passesr   numba.core.typed_passesr   numbar	   r
   r   r   
numba.corer   r   r   numba.core.irr   numba.tests.supportr   r   rG   r   r   r   r   <module>   s    @