o
    0 i                     @   s   d dl mZmZ d dlmZ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 d dlmZ d dlmZ d dlZd dlZd	d
 Zdd Zdd Zdd Zdd ZG dd dejZedkree  dS dS )    )jitnjit)typesirconfigcompiler)
cpu_target)type_annotations)copy_propagateapply_copy_propagateget_name_var_table)type_inference_stage)IRPreservingTestPipelineNc                 C   s.   d}|}| dkr|| }nd}d| }|| k S )N   r       )bzwxx1yar   r   k/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/numba/tests/test_copy_propagate.pytest_will_propagate   s   
r   c                 C   s.   d}| dkr|| }d}nd}d| }|| k S )Nr   r      r   r   )r   r   r   r   r   r   r   r   r   test_wont_propagate   s   r   c                 C   s   d S )Nr   )r   r   cdr   r   r   	null_func(   s   r   c                 C   s   | D ]
}|j |kr dS qdS NTF)name)Zlist_varvarir   r   r   	inListVar,   s
   
r$   c                 C   s^   | j  D ]'\}}t|jD ]\}}t|tjr+|jj|kr+|	 }t
||r+  dS qqdS r    )blocksitems	enumeratebody
isinstancer   Assigntargetr!   Z	list_varsr$   )func_irr"   labelblockr#   instZall_varr   r   r   
findAssign3   s   
r0   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestCopyPropagatec              
   C      t j}t j}tt}|  |  tjtjtjf}t	||||d \}}}}t
j|||dd ||tjd}	t|j|\}
}t|j|
t|j|| | t|d d S )Nr   r,   typemap	calltypesZliftedZlifted_fromargsreturn_typeZhtml_outputr   )r   typing_contexttarget_contextr   run_frontendr   refreshr   int64r   r	   TypeAnnotationr   HTMLr
   r%   r   r   ZassertFalser0   selfZ	typingctxZ	targetctxZtest_irr6   r4   r7   r5   _Ztype_annotationZin_cpsZout_cpsr   r   r   test1?   s8   
	
zTestCopyPropagate.test1c              
   C   r2   )Nr   r3   r   )r   r8   r9   r   r:   r   r;   r   r<   r   r	   r=   r   r>   r
   r%   r   r   
assertTruer0   r?   r   r   r   test2[   s2   
	zTestCopyPropagate.test2c                 C   s   dd }t td|}| |d|d |j|jd  jd }| t|jdk t	t
|j }d}|jD ]'}t|tjr_|jjd	kr_d
}| t|jtjo]|jjdko]|jjjdk q8| | dS )zmake sure Interpreter._remove_unused_temporaries() has removed extra copies
        in the IR in simple cases so copy propagation is faster
        c                 S   s   | d }|S )Nr   r   )r   r   r   r   r   	test_imply   s   z?TestCopyPropagate.test_input_ir_extra_copies.<locals>.test_impl)Zpipeline_class   r   Zpreserved_irr   Fr   Tbinopr   N)r   r   assertEqualZ	overloadsZ
signaturesmetadatarC   lenr%   nextitervaluesr(   r)   r   r*   r+   r!   valueExproplhs)r@   rE   Zj_funcZfirr.   Zb_foundstmtr   r   r   test_input_ir_extra_copiesu   s"   

z,TestCopyPropagate.test_input_ir_extra_copiesc                 C   s   dd }dd }dd }G dd d}|  |d	t|d	 |  |td
dd	t|td
dd	 |  || d	tdd|| d	 dS )zmake sure Interpreter._remove_unused_temporaries() does not generate
        invalid code for rare chained assignment cases
        c                 S   s   | d  }}||fS )Nr   r   )r   r   r   r   r   r   impl1   s   zDTestCopyPropagate.test_input_ir_copy_remove_transform.<locals>.impl1c                 S   s    |d  }| |< || | d fS Nr   r   r   )Ar#   r   r   r   r   r   impl2   s   zDTestCopyPropagate.test_input_ir_copy_remove_transform.<locals>.impl2c                 S   s   |d  }| _ || j d fS rU   )r   )rV   r   r   r   r   r   impl3   s   zDTestCopyPropagate.test_input_ir_copy_remove_transform.<locals>.impl3c                   @   s   e Zd ZdS )z@TestCopyPropagate.test_input_ir_copy_remove_transform.<locals>.CN)__name__
__module____qualname__r   r   r   r   C   s    r\   rF   r   r   T)ZforceobjN)rH   r   npZonesr   )r@   rT   rW   rX   r\   r   r   r   #test_input_ir_copy_remove_transform   s   ,*z5TestCopyPropagate.test_input_ir_copy_remove_transformN)rY   rZ   r[   rB   rD   rS   r^   r   r   r   r   r1   >   s
    r1   __main__) Znumbar   r   Z
numba.corer   r   r   r   Znumba.core.registryr   Znumba.core.annotationsr	   Znumba.core.ir_utilsr
   r   r   Znumba.core.typed_passesr   Znumba.tests.supportr   numpyr]   Zunittestr   r   r   r$   r0   ZTestCaser1   rY   mainr   r   r   r   <module>   s$   j