o
    0 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__ e/home/app/PaddleOCR-VL-test/.venv_paddleocr/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   Z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 )NZintpr.      )r
   intr.   r   r   r   r0   :   s   
z<TestCustomPipeline.test_objmode_custom_pipeline.<locals>.foo{   r:      r   )
r3   r*   r   r	   r4   lenZassertIsr5   ZassertIsInstancer   )r   r0   argfirstsecondr   r   r   test_objmode_custom_pipeline7   s   

z/TestCustomPipeline.test_objmode_custom_pipeline)r#   r$   r%   r)   r7   r9   rB   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   rD   ]   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_pass`   s   zUTestPassManagerFunctionality._create_pipeline_w_del.<locals>._InjectDelsPass.run_passN)r#   r$   r%   __doc__str_namerD   rJ   r   rE   r   r   _InjectDelsPassV   s
    rN   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_pipelinerH   Zadd_pass_afterfinalize)r   ZpmrN   inject_afterr   r   define_pipelinesg   s   zZTestPassManagerFunctionality._create_pipeline_w_del.<locals>.TestCompiler.define_pipelinesN)r#   r$   r%   rR   r   rP   r   r   TestCompilere   s    rS   )
assertTruer   r   )r   rF   rQ   rS   r   )rN   rF   rQ   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)
rU   r   r   r   assertRaisesr   ZCompilerErrorrL   	exceptionZassertIn)r   new_compilerr0   ZraisesZ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   rV   rW   r   r.   r   r   r   r0      rX   z]TestPassManagerFunctionality.test_no_compiler_error_on_ir_del_after_legalization.<locals>.foorY   )rU   r   r   r   rT   r5   )r   r\   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%   rU   r]   r^   r   r   r   r   rC   L   s    
!rC   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   Z
numba.corer   r   r   Znumba.core.irr   Znumba.tests.supportr   r   rC   r   r   r   r   <module>   s    @