§
    ƒÛg1  ã                   óü   — 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          úU/granary/edev/quantum/lib/python3.11/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                 óÀ  — 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Ñ$Ô$ˆ	Ý”N 9¨eÑ4Ô4ˆ	ÝÔ'Õ(;Ñ<Ô<ˆÝÔ& y°)Ñ<Ô<ð 	8ð 	8Ø×ÒÑÔÐØ×ÒÑÔÐÝ”K¥¤­e¬kÐ:ˆDÝ1EÀiØFOØFMØFJØFJñ	2Lô 2LÑ.ˆG�[ )¨Qõ
 /Ô=ØØØ#ØØ ØØ'Ý"œKð)ñ )ô )ˆOõ -¨W¬^¸WÑEÔE‰OˆF�GÝ  ¤°Ý!3°G´NÑ!CÔ!CÀWØ!*ñ,ô ,ð ,ð ×Ò�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Ñ$Ô$ˆ	Ý”N 9¨eÑ4Ô4ˆ	ÝÔ'Õ(;Ñ<Ô<ˆÝÔ& y°)Ñ<Ô<ð 	6ð 	6Ø×ÒÑÔÐØ×ÒÑÔÐÝ”K¥¤­e¬kÐ:ˆDÝ1EÀiØFOØFMØFJØFJñ	2Lô 2LÑ.ˆG�[ )¨Qõ
 /Ô=ØØØ#ØØ ØØ'Ý"œKð)ñ )ô )ˆOõ -¨W¬^¸WÑEÔE‰OˆF�GÝ  ¤°Õ9KÈGÌNÑ9[Ô9[Ð]dÐfoÑpÔpÐpà�OŠO�J w°Ñ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 )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_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™œ 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 r{   )r   )r|   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…   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Ø×Ò˜˜�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„   rZ   r^   rv   r‰   r   r   r   r>   r>   >   sU   € € € € € ð8ð 8ð 8ð:6ð 6ð 6ð6!ð !ð !ð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ÒÐØ€H„M�O„O€O€O€Oð Ðr   