
    sh                         S SK JrJr  S SKJrJrJrJr  S SKJ	r	  S SK
Jr  S SKJrJrJr  S SKJr  S SKJr  S SKrS SKrS	 rS
 rS rS rS r " S S\R8                  5      r\S:X  a  \R>                  " 5         gg)    )jitnjit)typesirconfigcompiler)
cpu_target)type_annotations)copy_propagateapply_copy_propagateget_name_var_table)type_inference_stage)IRPreservingTestPipelineNc                 6    SnUnU S:  a  X-   nOSnSU-  nX`:  $ )N   r       )bzwxx1yas          s/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_copy_propagate.pytest_will_propagater      s/    	A	
B1uE	BA5L    c                 6    SnU S:  a  X-   nSnOSnSU-  nXP:  $ )Nr   r      r   r   )r   r   r   r   r   r   s         r   test_wont_propagater       s/    	A1uE	AA5Lr   c                     g )Nr   )r   r   cds       r   	null_funcr$   (   s    	r   c                 :    U  H  nUR                   U:X  d  M    g   gNTF)name)list_varvaris      r   	inListVarr+   ,   s    66S=  r   c                 F   U R                   R                  5        H  u  p#[        UR                  5       He  u  pE[	        U[
        R                  5      (       d  M&  UR                  R                  U:w  d  MB  UR                  5       n[        Xa5      (       d  Md      g   M     gr&   )blocksitems	enumeratebody
isinstancer   Assigntargetr'   	list_varsr+   )func_irr)   labelblockr*   install_vars          r   
findAssignr:   3   sq    ,,. ,GA$		**t{{/?/?/D..*W**	 - / r   c                   ,    \ rS rSrS rS rS rS rSrg)TestCopyPropagate>   c                 J   [         R                  n[         R                  n[        R                  " [
        5      nUR                  5         UR                  5         [        R                  [        R                  [        R                  4n[        UUUUS 5      u  pVpx[        R                  " UUUSS UU[        R                  S9n	[        UR                  U5      u  p[!        UR                  U
[#        UR                  5      UU5        U R%                  ['        US5      5        g )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_irrD   r@   rE   rA   _type_annotationin_cpsout_cpss               r   test1TestCopyPropagate.test1?   s    --	--	''(;<U[[%++6-A)DMDKDHDH	.J*i
 +99#% )AW^^V 27>> BG )	+ 	GT23r   c                 H   [         R                  n[         R                  n[        R                  " [
        5      nUR                  5         UR                  5         [        R                  [        R                  [        R                  4n[        UUUUS 5      u  pVpx[        R                  " UUUSS UU[        R                  S9n	[        UR                  U5      u  p[!        UR                  U
[#        UR                  5      XW5        U R%                  ['        US5      5        g )Nr   r?   r   )r	   rG   rH   r   rI   r    rJ   r   rK   r   r
   rL   r   rM   r   r-   r   r   
assertTruer:   rO   s               r   test2TestCopyPropagate.test2[   s    --	--	''(;<U[[%++6-A)DMDKDHDH	.J*i
 +99#% )AW^^V5G5WY`l
7C01r   c                 (   S n[        [        S9" U5      nU R                  U" S5      U" S5      5        UR                  UR                  S      R
                  S   nU R                  [        UR                  5      S:H  5        [        [        UR                  R                  5       5      5      nSnUR                   H  n[        U[        R                  5      (       d  M$  UR                   R"                  S:X  d  M@  S	nU R                  [        UR$                  [        R&                  5      =(       aC    UR$                  R(                  S
:H  =(       a#    UR$                  R*                  R"                  S:H  5        M     U R                  U5        g)zmake sure Interpreter._remove_unused_temporaries() has removed extra copies
in the IR in simple cases so copy propagation is faster
c                     U S-   nU$ )Nr   r   )r   r   s     r   	test_impl?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metadatar[   lenr-   nextitervaluesr0   r1   r   r2   r3   r'   valueExproplhs)rP   r`   j_funcfirr7   b_foundstmts          r   test_input_ir_extra_copies,TestCopyPropagate.test_input_ir_extra_copiesu   s&   	 %=>yI1vay1 v0034==nMCJJ1,-T#**++-./JJD$		**t{{/?/?3/F
4::rww ? !P

0!P59ZZ^^5H5HC5OQ  	 r   c                    S nS nS n " S S5      nU R                  U" S5      [        U5      " S5      5        U R                  U" [        R                  " S5      SS5      [        U5      " [        R                  " S5      SS5      5        U R                  U" U" 5       S5      [	        S	S
9" U5      " U" 5       S5      5        g)ztmake sure Interpreter._remove_unused_temporaries() does not generate
invalid code for rare chained assignment cases
c                     U S-   =pX4$ )Nr   r   )r   r   r"   s      r   impl1DTestCopyPropagate.test_input_ir_copy_remove_transform.<locals>.impl1   s    EMA6Mr   c                 &    US-   =o0U'   X0U   S-   4$ Nr   r   r   )Ar*   r   r   s       r   impl2DTestCopyPropagate.test_input_ir_copy_remove_transform.<locals>.impl2   s"    1uA!dQh;r   c                 8    US-   =o l         X R                   S-   4$ r}   )r   )r~   r   r   s      r   impl3DTestCopyPropagate.test_input_ir_copy_remove_transform.<locals>.impl3   s    !eOAccAg:r   c                       \ rS rSrSrg)@TestCopyPropagate.test_input_ir_copy_remove_transform.<locals>.C   r   N)__name__
__module____qualname____firstlineno____static_attributes__r   r   r   Cr      s    r   r   rc   r   r   T)forceobjN)rf   r   nponesr   )rP   rz   r   r   r   s        r   #test_input_ir_copy_remove_transform5TestCopyPropagate.test_input_ir_copy_remove_transform   s    
	
	
		 	 	q4;q>2rwwqz1a0$u+bggaj!Q2OPqsAT(:5(A!#q(IJr   r   N)	r   r   r   r   rX   r\   rv   r   r   r   r   r   r<   r<   >   s    4824!0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      st     2 2 * 30 0 8 8  
gK)) gKT zMMO r   