o
    im                     @   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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generated_jitobjmodenjitcfunc)typespostprocerrors)
FunctionIR)TestCasec                       s<   e Zd Z fddZ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__ h/var/www/html/eduruby.in/lip-sync/lip-sync-env/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   r1   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   r1   /   r2   z:TestCustomPipeline.test_cfunc_custom_pipeline.<locals>.foor3   )r4   r+   r   r   r   Zint64r5   __wrapped__r7   r   r   r   test_cfunc_custom_pipeline,   s   

z-TestCustomPipeline.test_cfunc_custom_pipelinec                    sV   |  | jjg  dd  t| jd fdd}| |dd |  | jj g d S )Nc                 S   r.   r   r   r/   r   r   r   inner:   s   zDTestCustomPipeline.test_generated_jit_custom_pipeline.<locals>.innerr-   c                    s   t | tjr S d S r   )
isinstancer   Integerr/   r;   r   r   r1   =   s   zBTestCustomPipeline.test_generated_jit_custom_pipeline.<locals>.foo   )r4   r+   r   r
   r5   r7   r   r>   r   "test_generated_jit_custom_pipeline7   s   

z5TestCustomPipeline.test_generated_jit_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 )NZintpr/      )r   intr/   r   r   r   r1   I   s   
z<TestCustomPipeline.test_objmode_custom_pipeline.<locals>.foo{   rA      r   )
r4   r+   r   r	   r5   lenZassertIsr6   ZassertIsInstancer   )r   r1   argfirstsecondr   r   r   test_objmode_custom_pipelineF   s   

z/TestCustomPipeline.test_objmode_custom_pipeline)	r$   r%   r&   r*   r8   r:   r@   rI   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)Zmutates_CFGZ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   rK   l   s   zUTestPassManagerFunctionality._create_pipeline_w_del.<locals>._InjectDelsPass.__init__c                 S   s   t |j}|jdd dS )NT)Z	emit_dels)r   ZPostProcessorr!   run)r   stateppr   r   r   run_passo   s   zUTestPassManagerFunctionality._create_pipeline_w_del.<locals>._InjectDelsPass.run_passN)r$   r%   r&   __doc__str_namerK   rQ   r   rL   r   r   _InjectDelsPasse   s
    rU   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   Zdefine_nopython_pipelinerO   Zadd_pass_afterfinalize)r   pmrU   inject_afterr   r   define_pipelinesv   s   zZTestPassManagerFunctionality._create_pipeline_w_del.<locals>.TestCompiler.define_pipelinesN)r$   r%   r&   rZ   r   rX   r   r   TestCompilert   s    r[   )
assertTruer   r   )r   rM   rY   r[   r   )rU   rM   rY   r   _create_pipeline_w_del]   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 NrA   r   r/   r   r   r   r1         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   ZCompilerErrorrS   	exceptionZassertIn)r   new_compilerr1   ZraisesZerrstrr   r   r   /test_compiler_error_on_ir_del_from_functionpass~   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   r^   r_   r   r/   r   r   r   r1      r`   z]TestPassManagerFunctionality.test_no_compiler_error_on_ir_del_after_legalization.<locals>.foora   )r]   r   r   r   r\   r6   )r   rd   r1   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]   re   rf   r   r   r   r   rJ   [   s    
!rJ   N)Znumba.core.compilerr   r   Znumba.core.compiler_machineryr   r   r   Znumba.core.untyped_passesr   Znumba.core.typed_passesr   Znumbar	   r
   r   r   r   Z
numba.corer   r   r   Znumba.core.irr   Znumba.tests.supportr   r   rJ   r   r   r   r   <module>   s    O