
    J/Ph                         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	 Zd
 Zd Zd Zd Z G d dej                  Zedk    r ej                     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                 <    d}|}| dk    r||z   }nd}d|z  }|| k     S )N   r       )bzwxx1yas          _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_copy_propagate.pytest_will_propagater      s7    	A	
B1uuE	BAq5L    c                 <    d}| dk    r||z   }d}nd}d|z  }|| k     S )Nr   r      r   r   )r   r   r   r   r   r   s         r   test_wont_propagater       s7    	A1uuE	AAq5Lr   c                     d S )Nr   )r   r   cds       r   	null_funcr$   (   s    	Er   c                 ,    | D ]}|j         |k    r dS dS NTF)name)list_varvaris      r   	inListVarr+   ,   s-      6S==44 5r   c                    | j                                         D ]q\  }}t          |j                  D ]W\  }}t	          |t
          j                  r8|j        j        |k    r(|	                                }t          ||          r  dS XrdS r&   )blocksitems	enumeratebody
isinstancer   Assigntargetr'   	list_varsr+   )func_irr)   labelblockr*   install_vars          r   
findAssignr:   3   s    ,,..    u ,, 	  	 GAt$	**  t{/?/D/D..**Wc**  444		  5r   c                   &    e Zd Zd Zd Zd Zd ZdS )TestCopyPropagatec           
      D   t           j        }t           j        }t          j        t
                    }|                                 |                                 t          j        t          j        t          j        f}t          ||||d           \  }}}}t          j        |||dd ||t          j                  }	t          |j        |          \  }
}t!          |j        |
t#          |j                  ||           |                     t'          |d                     d S )Nr   r5   typemap	calltypesliftedlifted_fromargsreturn_typehtml_outputr   )r	   typing_contexttarget_contextr   run_frontendr   refreshr   int64r   r
   TypeAnnotationr   HTMLr   r-   r   r   assertFalser:   self	typingctx	targetctxtest_irrC   r?   rD   r@   _type_annotationin_cpsout_cpss               r   test1zTestCopyPropagate.test1?   s   -	-	'(;<<U[%+6-A)DMDKDHDH	.J .J*i
 +9#% % % )AAW^V 27> B BG )	+ 	+ 	+ 	GT2233333r   c           
      D   t           j        }t           j        }t          j        t
                    }|                                 |                                 t          j        t          j        t          j        f}t          ||||d           \  }}}}t          j        |||dd ||t          j                  }	t          |j        |          \  }
}t!          |j        |
t#          |j                  ||           |                     t'          |d                     d S )Nr   r>   r   )r	   rF   rG   r   rH   r    rI   r   rJ   r   r
   rK   r   rL   r   r-   r   r   
assertTruer:   rN   s               r   test2zTestCopyPropagate.test2[   s   -	-	'(;<<U[%+6-A)DMDKDHDH	.J .J*i
 +9#% % % )AAW^V5G5W5WY`bklll
7C0011111r   c                    d } t          t                    |          }|                      |d           |d                     |j        |j        d                  j        d         }|                     t          |j                  dk               t          t          |j                                                            }d}|j        D ]}t          |t          j                  ri|j        j        dk    rYd	}|                     t          |j        t          j                  o$|j        j        d
k    o|j        j        j        dk               |                     |           dS )zmake sure Interpreter._remove_unused_temporaries() has removed extra copies
        in the IR in simple cases so copy propagation is faster
        c                     | dz   }|S )Nr   r   )r   r   s     r   	test_implz?TestCopyPropagate.test_input_ir_extra_copies.<locals>.test_imply   s    AAHr   )pipeline_class   r   preserved_irr   Fr   Tbinopr   N)r   r   assertEqual	overloads
signaturesmetadatarY   lenr-   nextitervaluesr0   r1   r   r2   r3   r'   valueExproplhs)rO   r]   j_funcfirr7   b_foundstmts          r   test_input_ir_extra_copiesz,TestCopyPropagate.test_input_ir_extra_copiesu   sa   	 	 	 ?%=>>>yII1vvayy111 v034=nMCJ1,---T#*++--..//J 	Q 	QD$	** Qt{/?3/F/F
4:rw ? ? !P
0!P59Z^5HC5OQ Q Q 	     r   c                    d }d }d } G d d          }|                       |d           t          |          d                     |                       |t          j        d          dd           t          |          t          j        d          dd                     |                       | |            d            t	          d	
          |           |            d                     dS )zmake sure Interpreter._remove_unused_temporaries() does not generate
        invalid code for rare chained assignment cases
        c                     | dz   x}}||fS )Nr   r   )r   r   r"   s      r   impl1zDTestCopyPropagate.test_input_ir_copy_remove_transform.<locals>.impl1   s    EMAq6Mr   c                 0    |dz   x}| |<   || |         dz   fS Nr   r   r   )Ar*   r   r   s       r   impl2zDTestCopyPropagate.test_input_ir_copy_remove_transform.<locals>.impl2   s&    1uA!adQh;r   c                 2    |dz   x}| _         || j         dz   fS rw   )r   )rx   r   r   s      r   impl3zDTestCopyPropagate.test_input_ir_copy_remove_transform.<locals>.impl3   s!    !eOAacAg:r   c                       e Zd ZdS )@TestCopyPropagate.test_input_ir_copy_remove_transform.<locals>.CN)__name__
__module____qualname__r   r   r   Cr}      s        Dr   r   r_   r   r   T)forceobjN)rb   r   nponesr   )rO   ru   ry   r{   r   s        r   #test_input_ir_copy_remove_transformz5TestCopyPropagate.test_input_ir_copy_remove_transform   s"   
	 	 	
	 	 	
	 	 		 	 	 	 	 	 	 	 	q;4;;q>>222rwqzz1a00+$u++bgajj!Q2O2OPPPqqssA(A(:T(:(:(:5(A(A!!##q(I(IJJJJJr   N)r~   r   r   rW   rZ   rr   r   r   r   r   r<   r<   >   sU        4 4 482 2 24! ! !0K K K K Kr   r<   __main__) numbar   r   
numba.corer   r   r   r   numba.core.registryr	   numba.core.annotationsr
   numba.core.ir_utilsr   r   r   numba.core.typed_passesr   numba.tests.supportr   numpyr   unittestr   r    r$   r+   r:   TestCaser<   r~   mainr   r   r   <module>r      s           2 2 2 2 2 2 2 2 2 2 2 2 * * * * * * 3 3 3 3 3 30 0 0 0 0 0 0 0 0 0 8 8 8 8 8 8 8 8 8 8 8 8         
 
 
    gK gK gK gK gK) gK gK gKT zHMOOOOO r   