
    xKg                         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j8                        Zedk(  r ej>                          yy)    )jitnjit)typesirconfigcompiler)
cpu_target)type_annotations)copy_propagateapply_copy_propagateget_name_var_table)type_inference_stage)IRPreservingTestPipelineNc                 8    d}|}| dkD  r||z   }nd}d|z  }|| k  S )N   r       )bzwxx1yas          c/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_copy_propagate.pytest_will_propagater      s3    	A	
B1uE	BAq5L    c                 8    d}| dkD  r||z   }d}nd}d|z  }|| k  S )Nr   r      r   r   )r   r   r   r   r   r   s         r   test_wont_propagater       s3    	A1uE	AAq5Lr   c                      y )Nr   )r   r   cds       r   	null_funcr$   (   s    	r   c                 4    | D ]  }|j                   |k(  s y yNTF)name)list_varvaris      r   	inListVarr+   ,   s    66S=  r   c                 *   | j                   j                         D ]v  \  }}t        |j                        D ]Y  \  }}t	        |t
        j                        s!|j                  j                  |k7  s;|j                         }t        ||      sX  y x yr&   )blocksitems	enumeratebody
isinstancer   Assigntargetr'   	list_varsr+   )func_irr)   labelblockr*   install_vars          r   
findAssignr:   3   sq    ,,.u ,GAt$		*t{{/?/?/D..*Wc*	 - / r   c                   $    e Zd Zd Zd Zd Zd Zy)TestCopyPropagatec           
      R   t         j                  }t         j                  }t        j                  t
              }|j                          |j                          t        j                  t        j                  t        j                  f}t        ||||d       \  }}}}t        j                  |||dd ||t        j                        }	t        |j                  |      \  }
}t!        |j                  |
t#        |j                        ||       | j%                  t'        |d             y )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*i
 +99#% )AW^^V 27>> BG )	+ 	GT23r   c           
      R   t         j                  }t         j                  }t        j                  t
              }|j                          |j                          t        j                  t        j                  t        j                  f}t        ||||d       \  }}}}t        j                  |||dd ||t        j                        }	t        |j                  |      \  }
}t!        |j                  |
t#        |j                        ||       | j%                  t'        |d             y )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*i
 +99#% )AW^^V5G5WY`bkl
7C01r   c                    d } t        t              |      }| j                   |d       |d             |j                  |j                  d      j
                  d   }| j                  t        |j                        dk(         t        t        |j                  j                                     }d}|j                  D ]  }t        |t        j                        s|j                   j"                  dk(  s8d	}| j                  t        |j$                  t        j&                        xr> |j$                  j(                  d
k(  xr# |j$                  j*                  j"                  dk(          | j                  |       y)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   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                    d }d }d } G d d      }| j                   |d       t        |      d             | j                   |t        j                  d      dd       t        |      t        j                  d      dd             | j                   | |       d        t	        d	
      |       |       d             y)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                 *    |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                 <    |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accAg:r   c                       e Zd Zy)@TestCopyPropagate.test_input_ir_copy_remove_transform.<locals>.CN)__name__
__module____qualname__r   r   r   Cr}      s    r   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rwwqz1a0+$u+bggaj!Q2OPqsA(A(:T(:5(A!#q(IJr   N)r~   r   r   rW   rZ   rr   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      sv     2 2 * 30 0 8 8  
gK)) gKT zHMMO r   