
    ܙd1                         d dl mZmZ d dlmZmZ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typingirconfigcompilercpu)
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          ?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                    t          j                    }t          j        |d          }t	          j        t                    }t          j        ||          5  |	                                 |	                                 t          j        t          j        t          j        f}t          ||||d           \  }}}}t          j        |||dd ||t          j                  }	t#          |j        |          \  }
}t'          |j        |
t)          |j                  ||           |                     t-          |d                     d d d            d S # 1 swxY w Y   d S )Nr
   r   r7   typemap	calltypesliftedlifted_fromargsreturn_typehtml_outputr   )r   Contextr
   
CPUContextr	   run_frontendr   r   nested_contextrefreshr   int64r   r   TypeAnnotationr   HTMLr   r/   r   r   assertFalser<   self	typingctx	targetctxtest_irrE   rA   rF   rB   _type_annotationin_cpsout_cpss               r   test1zTestCopyPropagate.test1?   s   N$$	N9e44	'(;<<&y)<< 	8 	8Kek:D1EiFOFMFJFJ	2L 2L.G[)Q
 /=# '"K) ) )O -W^WEEOFG !3GN!C!CW!*, , , Z66777/	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8   C/EEEc                    t          j                    }t          j        |d          }t	          j        t                    }t          j        ||          5  |	                                 |	                                 t          j        t          j        t          j        f}t          ||||d           \  }}}}t          j        |||dd ||t          j                  }	t#          |j        |          \  }
}t'          |j        |
t)          |j                  ||           |                     t-          |d                     d d d            d S # 1 swxY w Y   d S )Nr
   r   r@   r   )r   rH   r
   rI   r	   rJ   r"   r   rK   rL   r   rM   r   r   rN   r   rO   r   r/   r   r   
assertTruer<   rQ   s               r   test2zTestCopyPropagate.test2\   s   N$$	N9e44	'(;<<&y)<< 	6 	6Kek:D1EiFOFMFJFJ	2L 2L.G[)Q
 /=# '"K) ) )O -W^WEEOFG 9KGN9[9[]dfopppOOJw44555+	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6r[   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_impl{   s    AAHr   )pipeline_class   r   preserved_irr!   Fr   Tbinopr   N)r   r   assertEqual	overloads
signaturesmetadatar]   lenr/   nextitervaluesr2   r3   r   r4   r5   r)   valueExproplhs)rR   ra   j_funcfirr9   b_foundstmts          r   test_input_ir_extra_copiesz,TestCopyPropagate.test_input_ir_extra_copiesw   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 r{   )r   )r|   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   rc   r   r   T)forceobjN)rf   r   nponesr   )rR   ry   r}   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   rZ   r^   rv   r   r   r   r   r>   r>   >   sU        8 8 8:6 6 66! ! !0K K K K Kr   r>   __main__)"numbar   r   
numba.corer   r   r   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           ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? * * * * * * 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         
 
 
    iK iK iK iK iK) iK iK iKX zHMOOOOO r   