§
    2@ÄjÃ  ã                   óô   — 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          úPC:\Projects\Historical\venv\Lib\site-packages\numba/tests/test_copy_propagate.pyÚtest_will_propagater      s7   € Ø	€AØ	
€BØˆ1‚u€uØ�‰EˆˆàˆØ	ˆB‰€AØˆqŠ5€Ló    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Øˆ1‚u€uØ�‰EˆØˆˆàˆØ	ˆA‰€AØˆqŠ5€Lr   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-   € Øð ð ˆØŒ6�SŠ=ˆ=Ø�4�4ð àˆ5r   c                 ó  — | j                              ¦   «         D ]q\  }}t          |j        ¦  «        D ]W\  }}t	          |t
          j        ¦  «        r8|j        j        |k    r(| 	                    ¦   «         }t          ||¦  «        r  dS ŒXŒrdS r&   )ÚblocksÚitemsÚ	enumerateÚbodyÚ
isinstancer   ÚAssignÚtargetr'   Ú	list_varsr+   )Úfunc_irr)   ÚlabelÚblockr*   ÚinstÚall_vars          r   Ú
findAssignr:   3   sš   € Øœ×,Ò,Ñ.Ô.ð  ð  ‰ˆˆuÝ  ¤Ñ,Ô,ð 	 ð 	 ‰GˆAˆtÝ˜$¥¤	Ñ*Ô*ð  ¨t¬{Ô/?ÀÒ/DÐ/DØŸ.š.Ñ*Ô*�Ý˜W cÑ*Ô*ð  Ø˜4˜4˜4øð		 ð ˆ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À)ØDMØDKØDHØDHñ	.Jô .JÑ*ˆ�˜i¨õ
 +Ô9ØØØØØØØ#Ýœð%ñ %ô %ˆõ )¨¬¸ÑAÔA‰ˆ�Ý˜Wœ^¨VÝ 2°7´>Ñ BÔ BÀGØ )ñ	+ô 	+ð 	+ð 	×Ò� G¨TÑ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À)ØDMØDKØDHØDHñ	.Jô .JÑ*ˆ�˜i¨õ
 +Ô9ØØØØØØØ#Ýœð%ñ %ô %ˆõ )¨¬¸ÑAÔA‰ˆ�Ý˜Wœ^¨VÕ5GÈÌÑ5WÔ5WÐY`ÐbkÑlÔlÐlà�Š�
 7¨CÑ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 )z”make 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™œ v v¨a¡y¤yÑ1Ô1Ð1ð Ô˜vÔ0°Ô3Ô4Ô=¸nÔMˆØ�Š�˜CœJ™œ¨1Ò,Ñ-Ô-Ð-Ý•T˜#œ*×+Ò+Ñ-Ô-Ñ.Ô.Ñ/Ô/ˆØˆØ”Jð 	Qð 	QˆDÝ˜$¥¤	Ñ*Ô*ð Q¨t¬{Ô/?À3Ò/FÐ/FØ�Ø—’¥
¨4¬:µr´wÑ ?Ô ?ð !PØœ
œ¨Ò0ð!PØ59´Z´^Ô5HÈCÒ5Oñ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 )z„make 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   € Ø˜‘EˆMˆA�Ø�q�6ˆMr   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&   € Ø˜1‘uÐˆA��!‘Ø�a˜”d˜Q‘h�;Ð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!   € Ø˜!‘eˆOˆA�”Ø�a”c˜A‘g�:Ð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Ø×Ò˜˜�rœw q™zœz¨1¨aÑ0Ô0°+µ$°u±+´+½b¼gÀa¹j¼jÈ!ÈQÑ2OÔ2OÑPÔPÐPØ×Ò˜˜˜q˜q™sœs A™œÐ(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ð 4ð82ð 2ð 2ð4!ð !ð !ð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ÒÐØ€H„M�O„O€O€O€Oð Ðr   