§
    ƒÛg)Š  ã                   óž  — d dl Z d dlZd dlZd dlmZmZmZm	Z	 d dl
mZmZmZ d dlmZ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mZ d dlmZmZ d d	l m!Z!m"Z"m#Z#m$Z$m%Z% d d
lm&Z&m'Z'm(Z( da) e¦   «         Z*de*_+        d„ Z, G d„ dee¦  «        Z- G d„ de-e¦  «        Z. G d„ de-e¦  «        Z/ G d„ dee¦  «        Z0 G d„ de-¦  «        Z1dS )é    N)Úcompile_isolatedÚrun_frontendÚFlagsÚ	StateDict)ÚjitÚnjitÚliteral_unroll)ÚtypesÚerrorsÚirÚrewritesÚir_utilsÚutilsÚcpu)Úpostproc)ÚInlineClosureCallPass)ÚTestCaseÚMemoryLeakMixinÚSerialMixinÚIRPreservingTestPipeline)Údead_branch_pruneÚrewrite_semantic_constants)ÚReconstructSSAÚTranslateByteCodeÚIRProcessingÚDeadBranchPruneÚ
PreserveIR)ÚDefaultPassBuilderÚCompilerBaseÚPassManageré{   Tc                 óì   — t          | ¦  «        }t          ¦   «         }||_        d |_        d |_        t          ¦   «                              |¦  «         t          j         	                    d|¦  «         |S )Nzbefore-inference)
r   r   Úfunc_irÚtypemapÚ	calltypesr   Úrun_passr   Úrewrite_registryÚapply)Úfuncr#   Ústates      úO/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_analysis.pyÚcompile_to_irr,      sf   € Ý˜4Ñ Ô €GÝ‰KŒK€EØ€E„MØ€E„MØ€E„OåÑÔ×Ò˜eÑ$Ô$Ð$åÔ×#Ò#Ð$6¸Ñ>Ô>Ð>Ø€Nó    c                   ó"   — e Zd ZdZdZd„ Zd„ ZdS )ÚTestBranchPruneBasez
    Tests branch pruning
    Fc                 óÀ   — g }|j                              ¦   «         D ]A}d„ |                     t          j        ¬¦  «        D ¦   «         }|                     |¦  «         ŒB|S )Nc                 ó   — g | ]}|‘ŒS © r2   ©Ú.0Ú_s     r+   ú
<listcomp>z5TestBranchPruneBase.find_branches.<locals>.<listcomp>1   s   € Ð<Ð<Ð<˜�1Ð<Ð<Ð<r-   )Úcls)ÚblocksÚvaluesÚ
find_instsr   ÚBranchÚextend)ÚselfÚthe_irÚbranchesÚblkÚtmps        r+   Úfind_branchesz!TestBranchPruneBase.find_branches.   sa   € ØˆØ”=×'Ò'Ñ)Ô)ð 	!ð 	!ˆCØ<Ð<˜cŸnšnµ´˜nÑ;Ô;Ð<Ñ<Ô<ˆCØ�OŠO˜CÑ Ô Ð Ð Øˆr-   c                 ó   — t          |¦  «        }|                     ¦   «         }| j        r2t          d¦  «         t          d¦  «         |                     ¦   «          t          |t          j        d¦  «        ¦  «        }|                     ¦   «          t          j
        |¦  «        }	|	                     ¦   «          t          ||¦  «         | j        r2t          d¦  «         t          d¦  «         |                     ¦   «          t          ||¦  «         |}
| j        r#t          d¦  «         |                     ¦   «          |                      |¦  «        }|                      t          |¦  «        t          |¦  «        ¦  «         g }t!          |¦  «        D ]’\  }}||         }|du r|                     |j        ¦  «         Œ,|du r|                     |j        ¦  «         ŒK|€ŒN|dk    r5|                     |j        ¦  «         |                     |j        ¦  «         Œ‰J d	¦   «         ‚t)          d
„ |j                             ¦   «         D ¦   «         ¦  «        }t)          d„ |
j                             ¦   «         D ¦   «         ¦  «        }	 |                      ||t)          |¦  «        z
  ¦  «         nk# t.          $ r^}t          dt1          |¦  «        ¦  «         t          dt1          |¦  «        ¦  «         t          dt1          |¦  «        ¦  «         |‚d }~ww xY w|                     dd¦  «        }|rd|ini }t5          ||fi |¤Ž}|€|                     ¦   «         } |¦   «         }n |j        |Ž } ||Ž }|                      ||¦  «         d S )NúP================================================================================zbefore inlineFúbefore pruneúafter pruneTÚbothr   Úunreachablec                 ó   — g | ]}|‘ŒS r2   r2   r3   s     r+   r6   z4TestBranchPruneBase.assert_prune.<locals>.<listcomp>u   s   € Ð?Ð?Ð? Q˜qÐ?Ð?Ð?r-   c                 ó   — g | ]}|‘ŒS r2   r2   r3   s     r+   r6   z4TestBranchPruneBase.assert_prune.<locals>.<listcomp>v   s   € Ð9Ð9Ð9 ˜!Ð9Ð9Ð9r-   Ú
new_labelsÚoriginal_labelsÚexpect_removedÚflags)r,   ÚcopyÚ_DEBUGÚprintÚdumpr   r   ÚParallelOptionsÚrunr   ÚPostProcessorr   r   rB   ÚassertEqualÚlenÚ	enumerateÚappendÚtruebrÚfalsebrÚsetr8   ÚkeysÚAssertionErrorÚsortedÚpopr   Úentry_point)r=   r)   Úargs_tysÚpruneÚargsÚkwargsr#   ÚbeforeÚinline_passÚ	post_procÚafterÚbefore_branchesrM   ÚidxÚbranchrL   rK   ÚeÚsupplied_flagsÚcompiler_kwsÚcresÚresÚexpecteds                          r+   Úassert_prunez TestBranchPruneBase.assert_prune5   s—  € õ   Ñ%Ô%ˆØ—’‘”ˆØŒ;ð 	Ý�(‰OŒOˆOÝ�/Ñ"Ô"Ð"Ø�LŠL‰NŒNˆNõ ,¨GÝ,/Ô,?ÀÑ,FÔ,FñIô Iˆà�ŠÑÔÐõ Ô*¨7Ñ3Ô3ˆ	Ø�Š‰Œˆå" 7¨HÑ5Ô5Ð5ØŒ;ð 	Ý�(‰OŒOˆOÝ�.Ñ!Ô!Ð!Ø�LŠL‰NŒNˆNå˜' 8Ñ,Ô,Ð,àˆØŒ;ð 	Ý�-Ñ Ô Ð Ø�LŠL‰NŒNˆNà×,Ò,¨VÑ4Ô4ˆØ×Ò�˜_Ñ-Ô-­s°5©z¬zÑ:Ô:Ð:ð ˆÝ# EÑ*Ô*ð 	(ð 	(‰JˆC�Ø$ SÔ)ˆFØ˜ˆ}ˆ}Ø×%Ò% f¤mÑ4Ô4Ð4Ð4Ø˜%��Ø×%Ò% f¤nÑ5Ô5Ð5Ð5Ø�ØØ˜&’�Ø×%Ò% f¤nÑ5Ô5Ð5Ø×%Ò% f¤mÑ4Ô4Ð4Ð4à'˜-Ñ'Ô'Ð'õ Ð?Ð?¨&¬-×*<Ò*<Ñ*>Ô*>Ð?Ñ?Ô?Ñ@Ô@ˆÝÐ9Ð9 U¤\×%6Ò%6Ñ%8Ô%8Ð9Ñ9Ô9Ñ:Ô:ˆ
ð	Ø×Ò˜Z¨½3¸~Ñ;NÔ;NÑ)NÑOÔOÐOÐOøÝð 	ð 	ð 	Ý�,¥ zÑ 2Ô 2Ñ3Ô3Ð3ÝÐ#¥V¨OÑ%<Ô%<Ñ=Ô=Ð=ÝÐ"¥F¨>Ñ$:Ô$:Ñ;Ô;Ð;ØˆGøøøøð		øøøð  Ÿš G¨UÑ3Ô3ˆØ4BÐJ˜ Ð0Ð0ÈˆÝ  hÐ?Ð?°,Ð?Ð?ˆØˆ<Ø×"Ò"Ñ$Ô$ˆCØ�t‘v”vˆHˆHà"�$Ô" DÐ)ˆCØ�t˜T�{ˆHØ×Ò˜˜hÑ'Ô'Ð'Ð'Ð's   Ê
&J1 Ê1
LÊ;ALÌLN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rP   rB   rs   r2   r-   r+   r/   r/   '   sH   € € € € € ðð ð €Fðð ð ðU(ð U(ð U(ð U(ð U(r-   r/   c                   óŒ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestBranchPrunec                 óš  — d„ }|                       |t          j        d¦  «        fdgd ¦  «         d„ }|                       |t          j        d¦  «        fdgd ¦  «         d„ }|                       |t          j        d¦  «        fdgd ¦  «         |                       |t          j        d¦  «        fdgd¦  «         d„ }|                       |t          j        d¦  «        fdgd ¦  «         |                       |t          j        d¦  «        fd gd¦  «         d	„ }|                       |t          j        d¦  «        fdgd ¦  «         |                       |t          j        d¦  «        fd gd¦  «         d
„ }|                       |t          j        d¦  «        fdgd ¦  «         |                       |t          j        d¦  «        fdgd¦  «         d S )Nc                 ó   — ddk    rdS d S )Né   r   çn†ðù!	@r2   ©Úxs    r+   Úimplz,TestBranchPrune.test_single_if.<locals>.impl‘   ó   € Ø�AŠvˆvØ�wð ˆvr-   ÚnoneTc                 ó   — ddk    rdS d S )Nr|   r}   r2   r~   s    r+   r€   z,TestBranchPrune.test_single_if.<locals>.impl—   r�   r-   Fc                 ó   — | €dS d S ©Nr}   r2   r~   s    r+   r€   z,TestBranchPrune.test_single_if.<locals>.impl�   s   € ØˆyØ�wð ˆyr-   é
   c                 ó   — | dk    rdS d S ©Nr†   r}   r2   r~   s    r+   r€   z,TestBranchPrune.test_single_if.<locals>.impl¤   s   € Ø�BŠwˆwØ�wð ˆwr-   c                 ó   — | dk    rd}d S d S rˆ   r2   )r   Úzs     r+   r€   z,TestBranchPrune.test_single_if.<locals>.impl«   s   € Ø�BŠwˆwØ���ð ˆwr-   c                 ó   — d }|}| |k    rdS d S )Néd   r2   )r   rŠ   Úys      r+   r€   z,TestBranchPrune.test_single_if.<locals>.impl²   s!   € ØˆAØˆAØ�AŠvˆvØ�sð ˆvr-   ©rs   r
   ÚNoneTypeÚIntegerLiteral©r=   r€   s     r+   Útest_single_ifzTestBranchPrune.test_single_if�   s  € ð	ð 	ð 	ð 	×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸D¸6À4ÑHÔHÐHð	ð 	ð 	ð 	×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸E¸7ÀDÑIÔIÐIð	ð 	ð 	ð 	×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸E¸7ÀDÑIÔIÐIØ×Ò˜$¥Ô!5°bÑ!9Ô!9Ð ;¸d¸VÀRÑHÔHÐHð	ð 	ð 	ð 	×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸D¸6À4ÑHÔHÐHØ×Ò˜$¥Ô!5°bÑ!9Ô!9Ð ;¸d¸VÀRÑHÔHÐHð	ð 	ð 	ð 	×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸D¸6À4ÑHÔHÐHØ×Ò˜$¥Ô!5°bÑ!9Ô!9Ð ;¸d¸VÀRÑHÔHÐHð	ð 	ð 	ð 	×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸E¸7ÀDÑIÔIÐIØ×Ò˜$¥Ô!5°bÑ!9Ô!9Ð ;¸d¸VÀRÑHÔHÐHÐHÐHr-   c                 ó¼   — d„ }|                       |t          j        d¦  «        fdgd ¦  «         |                       |t          j        d¦  «        fdgd¦  «         d S )Nc                 ó   — | €dS dS ©Nr}   çl&ßlsãù?r2   r~   s    r+   r€   z1TestBranchPrune.test_single_if_else.<locals>.impl½   s   € ØˆyØ�wà�wr-   r‚   Fr†   TrŽ   r‘   s     r+   Útest_single_if_elsez#TestBranchPrune.test_single_if_else»   sl   € ð	ð 	ð 	ð 	×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸E¸7ÀDÑIÔIÐIØ×Ò˜$¥Ô!5°bÑ!9Ô!9Ð ;¸d¸VÀRÑHÔHÐHÐHÐHr-   c                 ór  — d„ }|                       |t          j        d¦  «        fdgd ¦  «         |                       |t          j        d¦  «        fd gd¦  «         d„ }|                       |t          j        d¦  «        fdgd ¦  «         |                       |t          j        d¦  «        fd gd¦  «         d S )Nc                 ó   — | dk    rdS d S ©NrŒ   r}   r2   r~   s    r+   r€   z6TestBranchPrune.test_single_if_const_val.<locals>.implÈ   s   € Ø�CŠxˆxØ�wð ˆxr-   r‚   TrŒ   c                 ó   — d| k    rdS d S rš   r2   r~   s    r+   r€   z6TestBranchPrune.test_single_if_const_val.<locals>.implÏ   s   € à�aŠxˆxØ�wð ˆxr-   rŽ   r‘   s     r+   Útest_single_if_const_valz(TestBranchPrune.test_single_if_const_valÆ   sÐ   € ð	ð 	ð 	ð 	×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸D¸6À4ÑHÔHÐHØ×Ò˜$¥Ô!5°cÑ!:Ô!:Ð <¸t¸fÀcÑJÔJÐJð	ð 	ð 	ð
 	×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸D¸6À4ÑHÔHÐHØ×Ò˜$¥Ô!5°cÑ!:Ô!:Ð <¸t¸fÀcÑJÔJÐJÐJÐJr-   c                 óÌ  — d„ }|                       |t          j        d¦  «        fdz  d gdd¦  «         |                       |t          j        d¦  «        fdz  dgd d ¦  «         |                       |t          j        d¦  «        t          j        d¦  «        fdgdd ¦  «         |                       |t          j        d¦  «        t          j        d¦  «        fd gdd¦  «         d S )Nc                 ó   — | |k    rdS dS r•   r2   )r   r�   s     r+   r€   z?TestBranchPrune.test_single_if_else_two_const_val.<locals>.implÙ   s   € Ø�AŠvˆvØ�wà�wr-   rŒ   é   r‚   FTéè  )rs   r
   r�   r�   r‘   s     r+   Ú!test_single_if_else_two_const_valz1TestBranchPrune.test_single_if_else_two_const_val×   s  € ð	ð 	ð 	ð 	×Ò˜$¥Ô!5°cÑ!:Ô!:Ð <¸qÑ @À4À&È#Øñ	ô 	ð 	à×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸AÑ =À¸wÈØñ	 ô 	 ð 	 à×Ò˜$¥Ô!5°cÑ!:Ô!:Ý!&¤°Ñ!7Ô!7ð!:Ø<@¸6À3Èñ	Nô 	Nð 	Nà×Ò˜$¥Ô!5°cÑ!:Ô!:Ý!&Ô!5°dÑ!;Ô!;ð!=Ø?C¸fÀcÈ4ñ	Qô 	Qð 	Qð 	Qð 	Qr-   c                 óö  — d„ }|                       |t          j        d¦  «        fdd gd ¦  «         |                       |t          j        d¦  «        fdd gd¦  «         d„ }t          j        dk    r.|                       |t          j        d¦  «        fdd gd ¦  «         n-|                       |t          j        d¦  «        fd d gd ¦  «         |                       |t          j        d¦  «        fdd gd¦  «         d S )Nc                 ó&   — d}| €d}nd}|rd}nd}|S )NFTé   r†   éýÿÿÿr2   )r   Úx_is_none_workÚdeadr�   s       r+   r€   zJTestBranchPrune.test_single_if_else_w_following_undetermined.<locals>.implê   s1   € Ø"ˆNØˆyØ!%��à�àð Ø��à�ØˆHr-   r‚   Fr†   Tc                 ó$   — d}| €d}n	 |rd}nd}|S )NFTr†   r¥   r2   )r   r¦   r�   s      r+   r€   zJTestBranchPrune.test_single_if_else_w_following_undetermined.<locals>.implú   s/   € Ø"ˆNØˆyØ!%��ààð Ø��à�ØˆHr-   )é   r†   )rs   r
   r�   r�   r   Ú	PYVERSIONr‘   s     r+   Ú,test_single_if_else_w_following_undeterminedz<TestBranchPrune.test_single_if_else_w_following_undeterminedè   s)  € ð	ð 	ð 	ð 	×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸EÀ4¸=È$ÑOÔOÐOØ×Ò˜$¥Ô!5°bÑ!9Ô!9Ð ;¸dÀD¸\È2ÑNÔNÐNð	ð 	ð 	õ Œ?˜gÒ%Ð%ð ×Ò˜d¥U¤^°FÑ%;Ô%;Ð$=ÀÀt¸}Ø"ñ$ô $ð $ð $ð ×Ò˜d¥U¤^°FÑ%;Ô%;Ð$=ÀÀd¸|Ø"ñ$ô $ð $ð 	×Ò˜$¥Ô!5°bÑ!9Ô!9Ð ;¸dÀD¸\È2ÑNÔNÐNÐNÐNr-   c                 óÀ   — d„ }|                       |t          j        d¦  «        fdd gd ¦  «         |                       |t          j        d¦  «        fdd gd¦  «         d S )Nc                 ó6   — d}d}| €d}nd}||k    rd}nd}||fS )NrŒ   é   r¤   r†   r¥   r2   )r   Úone_hundredr¦   r§   r�   s        r+   r€   z:TestBranchPrune.test_double_if_else_rt_const.<locals>.impl  s?   € ØˆKØˆNØˆyØ!$��à�à Ò,Ð,Ø��à�à�nÐ$Ð$r-   r‚   Fr†   TrŽ   r‘   s     r+   Útest_double_if_else_rt_constz,TestBranchPrune.test_double_if_else_rt_const  sp   € ð	%ð 	%ð 	%ð 	×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸EÀ4¸=È$ÑOÔOÐOØ×Ò˜$¥Ô!5°bÑ!9Ô!9Ð ;¸dÀD¸\È2ÑNÔNÐNÐNÐNr-   c                 ó¼   — d„ }|                       |t          j        d¦  «        fd gd¦  «         |                       |t          j        d¦  «        fd gd¦  «         d S )Nc                 ó    — d}| |k    rd}nd}|S )NrŒ   r}   r–   r2   )r   r¯   r�   s      r+   r€   zCTestBranchPrune.test_double_if_else_non_literal_const.<locals>.impl(  s#   € ØˆKØ�KÒÐØ��à�ØˆHr-   r†   rŒ   ©rs   r
   r�   r‘   s     r+   Ú%test_double_if_else_non_literal_constz5TestBranchPrune.test_double_if_else_non_literal_const&  sm   € ð	ð 	ð 	ð 	×Ò˜$¥Ô!5°bÑ!9Ô!9Ð ;¸d¸VÀRÑHÔHÐHØ×Ò˜$¥Ô!5°cÑ!:Ô!:Ð <¸t¸fÀcÑJÔJÐJÐJÐJr-   c                 óÀ   — d„ }|                       |t          j        d¦  «        fddgd ¦  «         |                       |t          j        d¦  «        fddgd¦  «         d S )Nc                 ó&   — | €d}nd}| �d}nd}||fS ©Nr†   é(   rŒ   é�  r2   ©r   r�   rŠ   s      r+   r€   z@TestBranchPrune.test_single_two_branches_same_cond.<locals>.impl6  ó-   € ØˆyØ��à�àˆ}Ø��à�à�a�4ˆKr-   r‚   FTr†   rŽ   r‘   s     r+   Ú"test_single_two_branches_same_condz2TestBranchPrune.test_single_two_branches_same_cond4  sp   € ð	ð 	ð 	ð 	×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸EÀ4¸=È$ÑOÔOÐOØ×Ò˜$¥Ô!5°bÑ!9Ô!9Ð ;¸dÀE¸]ÈBÑOÔOÐOÐOÐOr-   c                 ó  — dd„}|                       |t          j        d ¦  «        fddgd ¦  «         |                       |t          j        d¦  «        fddgd ¦  «         |                       |t          j        d¦  «        fddgd¦  «         d S )Nc                 ó&   — | €d}nd}| �d}nd}||fS r·   r2   rº   s      r+   r€   z5TestBranchPrune.test_cond_is_kwarg_none.<locals>.implH  r»   r-   FTr‚   r†   ©N)rs   r
   ÚOmittedr�   r�   r‘   s     r+   Útest_cond_is_kwarg_nonez'TestBranchPrune.test_cond_is_kwarg_noneF  s§   € ð	ð 	ð 	ð 	ð 	×Ò˜$¥¤¨tÑ!4Ô!4Ð 6Ø  $˜-¨ñ	/ô 	/ð 	/à×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸EÀ4¸=È$ÑOÔOÐOØ×Ò˜$¥Ô!5°bÑ!9Ô!9Ð ;¸dÀE¸]ÈBÑOÔOÐOÐOÐOr-   c                 óv  — dd„}|                       |t          j        d¦  «        fd d gd¦  «         |                       |t          j        d¦  «        fd d gd¦  «         |                       |t          j        d¦  «        fd d gd¦  «         |                       |t          j        d¦  «        fddgd ¦  «         d S )Nr    c                 ó6   — | dk    rd}nd}| dk    rd}nd}||fS )Nr    r†   r¸   rŒ   r¹   r2   rº   s      r+   r€   z6TestBranchPrune.test_cond_is_kwarg_value.<locals>.impl\  s5   € Ø�DŠyˆyØ��à�à�DŠyˆyØ��à�à�a�4ˆKr-   r   r‚   TF)r    )rs   r
   rÀ   r�   r�   r‘   s     r+   Útest_cond_is_kwarg_valuez(TestBranchPrune.test_cond_is_kwarg_valueZ  sÓ   € ð	ð 	ð 	ð 	ð 	×Ò˜$¥¤¨tÑ!4Ô!4Ð 6¸¸t¸ÀdÑKÔKÐKØ×Ò˜$¥Ô!5°dÑ!;Ô!;Ð =ÀÀd¸|Øñ	 ô 	 ð 	 à×Ò˜$¥Ô!5°aÑ!8Ô!8Ð :¸TÀ4¸LÈ!ÑLÔLÐLØ×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸DÀ%¸=È$ÑOÔOÐOÐOÐOr-   c                 ó˜   ‡ — d„ }ˆ fd„} ||t          j        d¦  «        fd¦  «          ||t          j        d¦  «        fd¦  «         d S )Nc                 ó   — | €dS dS )Nr†   é   r2   r~   s    r+   Úfnz8TestBranchPrune.test_cond_rewrite_is_correct.<locals>.fnr  s   € ØˆyØ�rØ�2r-   c                 óH  •— t          | ¦  «        }‰
                     |¦  «        }‰
                     t          |¦  «        d¦  «         |d         j        }t          j        ||¦  «        }‰
                     |j        d¦  «         |j        d         }t          j        ||¦  «        }‰
                     |j        d¦  «         ‰
j	        r2t          d¦  «         t          d¦  «         |                     ¦   «          t          ||¦  «         ‰
j	        r2t          d¦  «         t          d¦  «         |                     ¦   «          t          j        ||¦  «        }	‰
                     t          |	t          j        ¦  «        ¦  «         ‰
                     |	j        |¦  «         d S )Nr|   r   ÚcallÚbinoprD   rE   rF   )r,   rB   rV   rW   Úcondr   Úget_definitionÚoprd   rP   rQ   rR   r   Ú
assertTrueÚ
isinstancer   ÚConstÚvalue)r)   Úarg_tysÚbit_valr#   rj   Úpred_varÚ	pred_defnÚcondition_varÚcondition_opÚnew_condition_defnr=   s             €r+   Úcheckz;TestBranchPrune.test_cond_rewrite_is_correct.<locals>.checkw  sx  ø€ Ý# DÑ)Ô)ˆGð #×0Ò0°Ñ9Ô9ˆOØ×Ò�S Ñ1Ô1°1Ñ5Ô5Ð5ð ' qÔ)Ô.ˆHÝ Ô/°¸ÑBÔBˆIØ×Ò˜Yœ\¨6Ñ2Ô2Ð2Ø%œN¨1Ô-ˆMÝ#Ô2°7¸MÑJÔJˆLØ×Ò˜\œ_¨gÑ6Ô6Ð6ð Œ{ð Ý�h‘”�Ý�nÑ%Ô%Ð%Ø—’‘”�Ý˜g wÑ/Ô/Ð/ØŒ{ð Ý�h‘”�Ý�mÑ$Ô$Ð$Ø—’‘”�õ "*Ô!8¸À-Ñ!PÔ!PÐØ�OŠO�JÐ'9½2¼8ÑDÔDÑEÔEÐEØ×ÒÐ/Ô5°wÑ?Ô?Ð?Ð?Ð?r-   r‚   r|   r†   r   )r
   r�   r�   )r=   rÈ   rÚ   s   `  r+   Útest_cond_rewrite_is_correctz,TestBranchPrune.test_cond_rewrite_is_correcto  s|   ø€ ð	ð 	ð 	ð
	@ð 	@ð 	@ð 	@ð 	@ð@ 	ˆˆb•5”> &Ñ)Ô)Ð+¨QÑ/Ô/Ð/Øˆˆb•5Ô'¨Ñ+Ô+Ð-¨qÑ1Ô1Ð1Ð1Ð1r-   c                 óN  — t           d„ ¦   «         }|                       |t          j        d¦  «        d¦  «        d¦  «         |                       |t          j        d¦  «        d ¦  «        t          ¦   «         ¦  «         |                       |t          j        d¦  «                             d¦  «        d¦  «        g ¦  «         |                       |t          j        d¦  «                             d¦  «        d ¦  «        g ¦  «         |                      |j        ¦  «         d S )Nc                 ó@   — | j         dk    r|€t          ¦   «         S dS g S )Nr|   rÇ   )ÚndimÚdict©ÚaÚbs     r+   Úbugz3TestBranchPrune.test_obj_mode_fallback.<locals>.bugž  s%   € àŒv˜Š{ˆ{Ø�9Ý™6œ6�MØ�rØˆIr-   r†   r®   rÇ   )rŸ   é   )	r   rV   ÚnpÚzerosÚarangerß   ÚreshapeÚassertFalseÚnopython_signatures)r=   rã   s     r+   Útest_obj_mode_fallbackz&TestBranchPrune.test_obj_mode_fallbackš  s  € õ 
ð	ð 	ñ 
Œð	ð 	×Ò˜˜�RœX b™\œ\¨1Ñ-Ô-¨rÑ2Ô2Ð2Ø×Ò˜˜�RœY r™]œ]¨DÑ1Ô1µ4±6´6Ñ:Ô:Ð:Ø×Ò˜˜�RœY r™]œ]×2Ò2°6Ñ:Ô:¸BÑ?Ô?ÀÑDÔDÐDØ×Ò˜˜�RœY r™]œ]×2Ò2°6Ñ:Ô:¸DÑAÔAÀ2ÑFÔFÐFØ×Ò˜Ô0Ñ1Ô1Ð1Ð1Ð1r-   c                 óè   — d„ }|                       |t          j        d¦  «        fdgd¦  «         t          }	 dad„ }|                       |t          j        d¦  «        fdgd¦  «         |ad S # |aw xY w)Nc                 ó&   — t           dk    r| S | dz   S ©Nr!   r†   ©Ú_GLOBALr~   s    r+   r€   z1TestBranchPrune.test_global_bake_in.<locals>.impl®  s   € Ý˜#Š~ˆ~Ø�à˜2‘v�r-   r|   Frä   c                 ó&   — t           dk    r| S | dz   S rî   rï   r~   s    r+   r€   z1TestBranchPrune.test_global_bake_in.<locals>.impl¼  s   € Ý˜c’>�>Ø�Hà˜r™6�Mr-   T)rs   r
   r�   rð   )r=   r€   rA   s      r+   Útest_global_bake_inz#TestBranchPrune.test_global_bake_in¬  sŸ   € ð	ð 	ð 	ð 	×Ò˜$¥Ô!5°aÑ!8Ô!8Ð :¸U¸GÀQÑGÔGÐGõ ˆð	ØˆGð"ð "ð "ð ×Ò˜d¥UÔ%9¸!Ñ%<Ô%<Ð$>ÀÀÈÑJÔJÐJàˆGˆGˆGø�cˆGˆMˆMˆMˆMs   ¸1A- Á-A1c                 óÔ   ‡— dŠˆfd„}|                       |t          j        d¦  «        fdgd¦  «         dŠˆfd„}|                       |t          j        d¦  «        fdgd¦  «         d S )Nr!   c                 ó   •— ‰dk    r| S | dz   S rî   r2   ©r   Ú_FREEVARs    €r+   r€   z2TestBranchPrune.test_freevar_bake_in.<locals>.implÊ  ó   ø€ Ø˜3ŠˆØ�à˜2‘v�r-   r|   FrÇ   c                 ó   •— ‰dk    r| S | dz   S rî   r2   rõ   s    €r+   r€   z2TestBranchPrune.test_freevar_bake_in.<locals>.implÔ  r÷   r-   Tr³   )r=   r€   rö   s     @r+   Útest_freevar_bake_inz$TestBranchPrune.test_freevar_bake_inÆ  s�   ø€ àˆð	ð 	ð 	ð 	ð 	ð 	×Ò˜$¥Ô!5°aÑ!8Ô!8Ð :¸U¸GÀQÑGÔGÐGàˆð	ð 	ð 	ð 	ð 	ð 	×Ò˜$¥Ô!5°aÑ!8Ô!8Ð :¸T¸FÀAÑFÔFÐFÐFÐFr-   c                 óÌ   — dd„}|                       |t          j        t          j        dd¦  «        t          j        d¦  «        fd d gt          j        d¦  «        d ¦  «         d S )Nc                 ó   — |€d}|dk     rdS dS )Nr   r†   é   r2   )Úarrayrá   s     r+   r€   zRTestBranchPrune.test_redefined_variables_are_not_considered_in_prune.<locals>.implà  s   € ØˆyØ�Ø�1ŠuˆuØ�rØ�2r-   rŸ   ÚCr‚   ©rŸ   r©   r¿   ©rs   r
   ÚArrayÚfloat64r�   rå   ræ   r‘   s     r+   Ú4test_redefined_variables_are_not_considered_in_prunezDTestBranchPrune.test_redefined_variables_are_not_considered_in_pruneÜ  sw   € ð	ð 	ð 	ð 	ð 	×Ò˜$Ý œ;¥u¤}°a¸Ñ=Ô=Ý œ>¨&Ñ1Ô1ð4à ˜,Ýœ( 6Ñ*Ô*¨Dñ		2ô 	2ð 	2ð 	2ð 	2r-   c                 óz  — d	d„}|                       |t          j        t          j        dd¦  «        t          j        d¦  «        fddgt          j        d¦  «        d ¦  «         |                       |t          j        t          j        dd¦  «        t          j        fd d gt          j        d¦  «        d¦  «         d S )
Nc                 ó"   — d}|€dS |dk     rdS |S ©Nr   r†   é   r2   )rý   rá   r   s      r+   r€   z7TestBranchPrune.test_comparison_operators.<locals>.implò  s&   € ØˆAØˆyØ�rð �1ŠuˆuØ�rØˆHr-   rŸ   rþ   r‚   FrG   rÿ   g      (@r¿   r   r‘   s     r+   Útest_comparison_operatorsz)TestBranchPrune.test_comparison_operatorsí  sÆ   € ð
	ð 	ð 	ð 	ð 	×Ò˜$Ý œ;¥u¤}°a¸Ñ=Ô=Ý œ>¨&Ñ1Ô1ð4à  &˜/Ýœ( 6Ñ*Ô*¨Dñ		2ô 	2ð 	2ð 	×Ò˜$Ý œ;¥u¤}°a¸Ñ=Ô=Ý œ=ð+à ˜,Ýœ( 6Ñ*Ô*¨Cñ		1ô 	1ð 	1ð 	1ð 	1r-   c                 óä   — dd„}|                       |t          j        t          j        dd¦  «        t          j        t          j        d¦  «        fg d¢t          j        d¦  «        dd ¦  «         d S )	Nc                 óD   — d}|dk     rd}|€d}nd}|dk     rdS d|z   |z   S )	NrŸ   r®   rÇ   r¤   é   r   r†   rü   r2   ©rý   r   rá   râ   s       r+   r€   zCTestBranchPrune.test_redefinition_analysis_same_block.<locals>.impl  sB   € ØˆAØ�1ŠuˆuØ�ØˆyØ��à�Ø�1ŠuˆuØ�rØ˜‘6˜A‘:Ðr-   rŸ   rþ   r‚   )NFNrÿ   ç      ð?r¿   r   r‘   s     r+   Ú%test_redefinition_analysis_same_blockz5TestBranchPrune.test_redefinition_analysis_same_block  s€   € ð
	ð 
	ð 
	ð 
	ð 	×Ò˜$Ý œ;¥u¤}°a¸Ñ=Ô=Ý œ=­%¬.¸Ñ*@Ô*@ðCà-Ð-Ð-Ýœ( 6Ñ*Ô*¨B°ñ		6ô 	6ð 	6ð 	6ð 	6r-   c                 óä   — dd„}|                       |t          j        t          j        dd¦  «        t          j        t          j        d¦  «        fg d¢t          j        d¦  «        dd ¦  «         d S )	Nc                 óZ   — d}|dk    rd}|dk     rd}|€|dz  }n|dz  }|dk     rdS d|z   S )	Nr   rä   é   r®   rÇ   r¤   r†   rü   r2   r  s       r+   r€   zQTestBranchPrune.test_redefinition_analysis_different_block_can_exec.<locals>.impl"  sS   € ØˆAØ�1ŠuˆuØ�Ø�1ŠuˆuØ�ØˆyØ�Q‘��à�Q‘�Ø�q’5�5Ø˜2Ø˜‘6ˆMr-   rŸ   rþ   r‚   )NNNNrÿ   r  r¿   r   r‘   s     r+   Ú3test_redefinition_analysis_different_block_can_execzCTestBranchPrune.test_redefinition_analysis_different_block_can_exec  s€   € ð	ð 	ð 	ð 	ð 	×Ò˜$Ý œ;¥u¤}°a¸Ñ=Ô=Ý œ=­%¬.¸Ñ*@Ô*@ðCà2Ð2Ð2Ýœ( 6Ñ*Ô*¨B°ñ		6ô 	6ð 	6ð 	6ð 	6r-   c                 ó   — dd„}|                       |t          j        t          j        dd¦  «        t          j        d¦  «        t          j        d¦  «        fdd gt          j        d¦  «        d d ¦  «         |                       |t          j        t          j        dd¦  «        t          j        d¦  «        t          j        fdd gt          j        d¦  «        d d¦  «         |                       |t          j        t          j        dd¦  «        t          j        t          j        d¦  «        fd d gt          j        d¦  «        dd ¦  «         d S )	Nc                 ó2   — d}|�d}|€|dz  }n|dz  }d|z   S )Nr   r  rä   r¤   rü   r2   r  s       r+   r€   zTTestBranchPrune.test_redefinition_analysis_different_block_cannot_exec.<locals>.impl:  s3   € ØˆAØˆ}Ø�ØˆyØ�Q‘��à�Q‘�Ø˜‘6ˆMr-   rŸ   rþ   r‚   Trÿ   g333333ó?©NNr   r‘   s     r+   Ú6test_redefinition_analysis_different_block_cannot_execzFTestBranchPrune.test_redefinition_analysis_different_block_cannot_exec6  sB  € ð	ð 	ð 	ð 	ð 	×Ò˜$Ý œ;¥u¤}°a¸Ñ=Ô=Ý œ>¨&Ñ1Ô1µ5´>À&Ñ3IÔ3IðKà ˜,Ýœ( 6Ñ*Ô*¨D°$ñ		8ô 	8ð 	8ð 	×Ò˜$Ý œ;¥u¤}°a¸Ñ=Ô=Ý œ>¨&Ñ1Ô1µ5´=ðBà ˜,Ýœ( 6Ñ*Ô*¨D°#ñ		7ô 	7ð 	7ð 	×Ò˜$Ý œ;¥u¤}°a¸Ñ=Ô=Ý œ=­%¬.¸Ñ*@Ô*@ðBà ˜,Ýœ( 6Ñ*Ô*¨C°ñ		7ô 	7ð 	7ð 	7ð 	7r-   c                 ó<   — d„ }|                       |ddg¦  «         d S )Nc                  ó:   ‡— dŠˆfd„}  | ¦   «          ‰dk    rdS dS )Nr    c                  ó   •— dŠ d S ©Nr   r2   r~   s   €r+   ÚclosurezRTestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.impl.<locals>.closure\  ó   ø€ à���r-   r   TFr2   )r  r   s    @r+   r€   zATestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.implY  sA   ø€ ØˆAðð ð ð ð ð ˆG‰IŒIˆIà�AŠvˆvØ�tà�ur-   r2   F)rs   r‘   s     r+   Ú#test_closure_and_nonlocal_can_prunez3TestBranchPrune.test_closure_and_nonlocal_can_pruneV  s3   € ð	ð 	ð 	ð 	×Ò˜$  U HÑ.Ô.Ð.Ð.Ð.r-   c                 óT   — d„ }|                       |t          j        fd gd¦  «         d S )Nc                 ó<   ‡— dŠˆfd„} || ¦  «         ‰dk    rdS dS )Nr    c                 ó   •— | Šd S r¿   r2   )Útr   s    €r+   r  zUTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.impl.<locals>.closureo  r  r-   r   TFr2   )Únr  r   s     @r+   r€   zDTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.impll  sC   ø€ ØˆAðð ð ð ð ð ˆG�A‰JŒJˆJà�AŠvˆvØ�tà�ur-   r|   )rs   r
   Úint64r‘   s     r+   Ú&test_closure_and_nonlocal_cannot_prunez6TestBranchPrune.test_closure_and_nonlocal_cannot_prunei  s9   € ð	ð 	ð 	ð 	×Ò˜$¥¤ °°¸Ñ;Ô;Ð;Ð;Ð;r-   N)rt   ru   rv   r’   r—   rœ   r¡   r«   r°   r´   r¼   rÁ   rÄ   rÛ   rë   rò   rù   r  r  r  r  r  r  r$  r2   r-   r+   ry   ry   �   st  € € € € € ð*Ið *Ið *IðX	Ið 	Ið 	IðKð Kð Kð"Qð Qð Qð"(Oð (Oð (OðTOð Oð Oð(Kð Kð KðPð Pð Pð$Pð Pð Pð(Pð Pð Pð*)2ð )2ð )2ðV2ð 2ð 2ð$ð ð ð4Gð Gð Gð,2ð 2ð 2ð"1ð 1ð 1ð66ð 6ð 6ð,6ð 6ð 6ð07ð 7ð 7ð@/ð /ð /ð&<ð <ð <ð <ð <r-   ry   c                   óp   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestBranchPrunePredicates)r|   ÚStringTgš™™™™™@y              @)r   Ú Fg        y                Nc                 óh  — |j         }d„ t          |j        ¦  «        D ¦   «         }|                     ¦   «         D ]
\  }}|||<   Œt	          d„ t          |                     ¦   «         ¦  «        D ¦   «         ¦  «        }|                     |¬¦  «        }t          j        |t          ¦   «         ¦  «        S )aK  
        This takes a python function, pyfunc, and manipulates its co_const
        __code__ member to create a new function with different co_consts as
        supplied in argument consts.

        consts is a dict {index: value} of co_const tuple index to constant
        value used to update a pyfunc clone's co_const.
        c                 ó   — i | ]\  }}||“Œ	S r2   r2   )r4   ÚkÚvs      r+   ú
<dictcomp>zMTestBranchPrunePredicates._literal_const_sample_generator.<locals>.<dictcomp>’  s   € ÐGÐGÐG™d˜a �Q˜ÐGÐGÐGr-   c                 ó   — g | ]\  }}|‘ŒS r2   r2   )r4   r5   r,  s      r+   r6   zMTestBranchPrunePredicates._literal_const_sample_generator.<locals>.<listcomp>•  s   € ÐDÐDÐD¡$ ! Q˜AÐDÐDÐDr-   )Ú	co_consts)
Ú__code__rX   r/  ÚitemsÚtupler_   ÚreplaceÚpytypesÚFunctionTypeÚglobals)	r=   ÚpyfuncÚconstsÚpyfunc_coder/  r+  r,  Ú
new_constsÚnew_codes	            r+   Ú_literal_const_sample_generatorz9TestBranchPrunePredicates._literal_const_sample_generator†  s±   € ð ”oˆð HÐG¥i°Ô0EÑ&FÔ&FÐGÑGÔGˆ	Ø—L’L‘N”Nð 	ð 	‰DˆAˆqØˆI�a‰LˆLÝÐDÐD­&°·²Ñ1BÔ1BÑ*CÔ*CÐDÑDÔDÑEÔEˆ
ð ×&Ò&°Ð&Ñ<Ô<ˆõ Ô# H­g©i¬iÑ8Ô8Ð8r-   c                 óB  — d„ }|                       |dddœ¦  «        }|j        j        }|j        j        }|                      |d¦  «         |                      |d¦  «         |                       |d ¦  «        d¦  «         |                       |d ¦  «        d¦  «         d S )	Nc                 ó   — d}|rdS d}|dz   S ©NÚPLACEHOLDER1r}   ÚPLACEHOLDER2r®   r2   )r   Ú_CONST1Ú_CONST2s      r+   r€   zCTestBranchPrunePredicates.test_literal_const_code_gen.<locals>.implž  s#   € Ø$ˆGØð )Ø�wà(�Ø˜Q‘;Ðr-   r   r  )r|   r©   r?  )Nr   r}   r  r®   r}   é   )r<  r0  r/  rV   )r=   r€   ÚnewÚiconstÚnconsts        r+   Útest_literal_const_code_genz5TestBranchPrunePredicates.test_literal_const_code_gen�  sº   € ð	ð 	ð 	ð ×2Ò2°4¸AÀ¸¸ÑEÔEˆØ”Ô(ˆØ”Ô'ˆØ×Ò˜ð "5ñ 	6ô 	6ð 	6à×Ò˜Ð!;Ñ<Ô<Ð<Ø×Ò˜˜˜d™œ WÑ-Ô-Ð-Ø×Ò˜˜˜T™œ BÑ'Ô'Ð'Ð'Ð'r-   c                 óÎ   — d„ }| j         df| j        dffD ]N\  }}|D ]F}|                      |d|i¦  «        }|                      |t	          j        d¦  «        f|gd ¦  «         ŒGŒOd S )Nc                 ó   — d}|rdS d S ©Nr@  r}   r2   ©r   rB  s     r+   r€   z<TestBranchPrunePredicates.test_single_if_const.<locals>.impl±  s   € Ø$ˆGØð Ø�wðð r-   FTr|   r‚   ©Ú_TRUTHYÚ_FALSEYr<  rs   r
   r�   ©r=   r€   Úc_inprc   Úconstr)   s         r+   Útest_single_if_constz.TestBranchPrunePredicates.test_single_if_const¯  ó¥   € ð	ð 	ð 	ð
 "œ\¨5Ð1°D´LÀ$Ð3GÐGð 	(ð 	(‰LˆE�5Øð (ð (�Ø×;Ò;¸DÀ1ÀeÀ*ÑMÔM�Ø×!Ò! $­¬¸Ñ)?Ô)?Ð(AÀEÀ7Ø"&ñ(ô (ð (ð (ð(ð	(ð 	(r-   c                 óÎ   — d„ }| j         df| j        dffD ]N\  }}|D ]F}|                      |d|i¦  «        }|                      |t	          j        d¦  «        f|gd ¦  «         ŒGŒOd S )Nc                 ó   — d}|sdS d S rK  r2   rL  s     r+   r€   zCTestBranchPrunePredicates.test_single_if_negate_const.<locals>.impl¾  s   € Ø$ˆGØð Ø�wðð r-   FTr|   r‚   rM  rP  s         r+   Útest_single_if_negate_constz5TestBranchPrunePredicates.test_single_if_negate_const¼  rT  r-   c                 óÎ   — d„ }| j         df| j        dffD ]N\  }}|D ]F}|                      |d|i¦  «        }|                      |t	          j        d¦  «        f|gd ¦  «         ŒGŒOd S )Nc                 ó   — d}|rdS dS ©Nr@  r}   r–   r2   rL  s     r+   r€   zATestBranchPrunePredicates.test_single_if_else_const.<locals>.implË  s   € Ø$ˆGØð Ø�wà�wr-   FTr|   r‚   rM  rP  s         r+   Útest_single_if_else_constz3TestBranchPrunePredicates.test_single_if_else_constÉ  ó¥   € ð	ð 	ð 	ð "œ\¨5Ð1°D´LÀ$Ð3GÐGð 	(ð 	(‰LˆE�5Øð (ð (�Ø×;Ò;¸DÀ1ÀeÀ*ÑMÔM�Ø×!Ò! $­¬¸Ñ)?Ô)?Ð(AÀEÀ7Ø"&ñ(ô (ð (ð (ð(ð	(ð 	(r-   c                 óÎ   — d„ }| j         df| j        dffD ]N\  }}|D ]F}|                      |d|i¦  «        }|                      |t	          j        d¦  «        f|gd ¦  «         ŒGŒOd S )Nc                 ó   — d}|sdS dS rZ  r2   rL  s     r+   r€   zHTestBranchPrunePredicates.test_single_if_else_negate_const.<locals>.implÚ  s   € Ø$ˆGØð Ø�wà�wr-   FTr|   r‚   rM  rP  s         r+   Ú test_single_if_else_negate_constz:TestBranchPrunePredicates.test_single_if_else_negate_constØ  r\  r-   c                 ó¤   ‡— | j         df| j        dffD ];\  }}|D ]3Šˆfd„}|                      |t          j        d¦  «        f|gd ¦  «         Œ4Œ<d S )NFTc                 ó   •— ‰rd‰fS d S r…   r2   ©r   rR  s    €r+   r)   z>TestBranchPrunePredicates.test_single_if_freevar.<locals>.funcë  s   ø€ Øð .Ø&¨˜~Ð-ð.ð .r-   r‚   ©rN  rO  rs   r
   r�   ©r=   rQ  rc   r)   rR  s       @r+   Útest_single_if_freevarz0TestBranchPrunePredicates.test_single_if_freevarç  ó—   ø€ Ø!œ\¨5Ð1°D´LÀ$Ð3GÐGð 	(ð 	(‰LˆE�5Øð (ð (�ð.ð .ð .ð .ð .ð ×!Ò! $­¬¸Ñ)?Ô)?Ð(AÀEÀ7Ø"&ñ(ô (ð (ð (ð(ð	(ð 	(r-   c                 ó¤   ‡— | j         df| j        dffD ];\  }}|D ]3Šˆfd„}|                      |t          j        d¦  «        f|gd ¦  «         Œ4Œ<d S )NFTc                 ó   •— ‰sd‰fS d S r…   r2   rb  s    €r+   r)   zETestBranchPrunePredicates.test_single_if_negate_freevar.<locals>.funcõ  s   ø€ Ø ð .Ø&¨˜~Ð-ð.ð .r-   r‚   rc  rd  s       @r+   Útest_single_if_negate_freevarz7TestBranchPrunePredicates.test_single_if_negate_freevarñ  rf  r-   c                 ó¤   ‡— | j         df| j        dffD ];\  }}|D ]3Šˆfd„}|                      |t          j        d¦  «        f|gd ¦  «         Œ4Œ<d S )NFTc                 ó   •— ‰rd‰fS d‰fS r•   r2   rb  s    €r+   r)   zCTestBranchPrunePredicates.test_single_if_else_freevar.<locals>.funcÿ  s   ø€ Øð .Ø&¨˜~Ð-à&¨˜~Ð-r-   r‚   rc  rd  s       @r+   Útest_single_if_else_freevarz5TestBranchPrunePredicates.test_single_if_else_freevarû  ó—   ø€ Ø!œ\¨5Ð1°D´LÀ$Ð3GÐGð 		(ð 		(‰LˆE�5Øð (ð (�ð.ð .ð .ð .ð .ð
 ×!Ò! $­¬¸Ñ)?Ô)?Ð(AÀEÀ7Ø"&ñ(ô (ð (ð (ð(ð		(ð 		(r-   c                 ó¤   ‡— | j         df| j        dffD ];\  }}|D ]3Šˆfd„}|                      |t          j        d¦  «        f|gd ¦  «         Œ4Œ<d S )NFTc                 ó   •— ‰sd‰fS d‰fS r•   r2   rb  s    €r+   r)   zJTestBranchPrunePredicates.test_single_if_else_negate_freevar.<locals>.func  s   ø€ Ø ð .Ø&¨˜~Ð-à&¨˜~Ð-r-   r‚   rc  rd  s       @r+   Ú"test_single_if_else_negate_freevarz<TestBranchPrunePredicates.test_single_if_else_negate_freevar  rm  r-   c                 ó¢   — | j         df| j        dffD ];\  }}|D ]3}|ad„ }|                      |t	          j        d¦  «        f|gd ¦  «         Œ4Œ<d S )NFTc                 ó&   — t           r	dt           fS d S r…   )Úc_test_single_if_globalr~   s    r+   r)   z=TestBranchPrunePredicates.test_single_if_global.<locals>.func  s#   € Ý.ð @Ø&Õ(?Ð?Ð?ð@ð @r-   r‚   )rN  rO  rs  rs   r
   r�   ©r=   rQ  rc   Úcr)   s        r+   Útest_single_if_globalz/TestBranchPrunePredicates.test_single_if_global  s—   € ð "œ\¨5Ð1°D´LÀ$Ð3GÐGð 		(ð 		(‰LˆE�5Øð (ð (�Ø*+Ð'ð@ð @ð @ð ×!Ò! $­¬¸Ñ)?Ô)?Ð(AÀEÀ7Ø"&ñ(ô (ð (ð (ð(ð		(ð 		(r-   c                 ó¢   — | j         df| j        dffD ];\  }}|D ]3}|ad„ }|                      |t	          j        d¦  «        f|gd ¦  «         Œ4Œ<d S )NFTc                 ó&   — t           r	dt           fS d S r…   )Úc_test_single_if_negate_globalr~   s    r+   r)   zDTestBranchPrunePredicates.test_single_if_negate_global.<locals>.func*  s#   € Ý5ð GØ&Õ(FÐFÐFðGð Gr-   r‚   )rN  rO  ry  rs   r
   r�   rt  s        r+   Útest_single_if_negate_globalz6TestBranchPrunePredicates.test_single_if_negate_global#  s—   € ð "œ\¨5Ð1°D´LÀ$Ð3GÐGð 		(ð 		(‰LˆE�5Øð (ð (�Ø12Ð.ðGð Gð Gð ×!Ò! $­¬¸Ñ)?Ô)?Ð(AÀEÀ7Ø"&ñ(ô (ð (ð (ð(ð		(ð 		(r-   c                 ó¢   — | j         df| j        dffD ];\  }}|D ]3}|ad„ }|                      |t	          j        d¦  «        f|gd ¦  «         Œ4Œ<d S )NFTc                 ó4   — t           r	dt           fS dt           fS r•   )Úc_test_single_if_else_globalr~   s    r+   r)   zBTestBranchPrunePredicates.test_single_if_else_global.<locals>.func8  s#   € Ý3ð EØ&Õ(DÐDÐDà&Õ(DÐDÐDr-   r‚   )rN  rO  r}  rs   r
   r�   rt  s        r+   Útest_single_if_else_globalz4TestBranchPrunePredicates.test_single_if_else_global1  s—   € ð "œ\¨5Ð1°D´LÀ$Ð3GÐGð 
	(ð 
	(‰LˆE�5Øð 	(ð 	(�Ø/0Ð,ðEð Eð Eð
 ×!Ò! $­¬¸Ñ)?Ô)?Ð(AÀEÀ7Ø"&ñ(ô (ð (ð (ð	(ð
	(ð 
	(r-   c                 ó¢   — | j         df| j        dffD ];\  }}|D ]3}|ad„ }|                      |t	          j        d¦  «        f|gd ¦  «         Œ4Œ<d S )NFTc                 ó4   — t           s	dt           fS dt           fS r•   )Ú#c_test_single_if_else_negate_globalr~   s    r+   r)   zITestBranchPrunePredicates.test_single_if_else_negate_global.<locals>.funcG  s#   € Ý>ð LØ&Õ(KÐKÐKà&Õ(KÐKÐKr-   r‚   )rN  rO  r�  rs   r
   r�   rt  s        r+   Ú!test_single_if_else_negate_globalz;TestBranchPrunePredicates.test_single_if_else_negate_global@  s—   € ð "œ\¨5Ð1°D´LÀ$Ð3GÐGð 
	(ð 
	(‰LˆE�5Øð 	(ð 	(�Ø67Ð3ðLð Lð Lð
 ×!Ò! $­¬¸Ñ)?Ô)?Ð(AÀEÀ7Ø"&ñ(ô (ð (ð (ð	(ð
	(ð 
	(r-   c                 óÊ   — t           d„ ¦   «         }|                      |                     ¦   «         d         d¦  «         |                       |¦   «         d         d¦  «         d S )Nc                  ó@   — t          j        d¦  «        } d}|r|| d<   | S )Nr|   iš  r   )rå   ræ   )r9   rA   s     r+   Úfooz6TestBranchPrunePredicates.test_issue_5618.<locals>.fooQ  s*   € å”X˜a‘[”[ˆFØˆCØð  Ø��q‘	ØˆMr-   r   g     Ð„@)r   ÚassertPreciseEqualÚpy_func)r=   r…  s     r+   Útest_issue_5618z)TestBranchPrunePredicates.test_issue_5618O  sf   € å	ð	ð 	ñ 
Œð	ð 	×Ò §¢¡¤¨aÔ 0°$Ñ7Ô7Ð7Ø×Ò  ¡¤ a¤¨$Ñ/Ô/Ð/Ð/Ð/r-   N)rt   ru   rv   rN  rO  r<  rH  rS  rW  r[  r_  re  ri  rl  rp  rv  rz  r~  r‚  rˆ  r2   r-   r+   r&  r&  }  s  € € € € € ð +€GØ+€Gð9ð 9ð 9ð.(ð (ð (ð$(ð (ð (ð(ð (ð (ð(ð (ð (ð(ð (ð (ð(ð (ð (ð(ð (ð (ð
(ð 
(ð 
(ð
(ð 
(ð 
(ð(ð (ð (ð(ð (ð (ð(ð (ð (ð(ð (ð (ð0ð 0ð 0ð 0ð 0r-   r&  c                   ó6   — e Zd Z G d„ de¦  «        Zd„ Zd„ ZdS )ÚTestBranchPruneSSAc                   ó   — e Zd Zd„ ZdS )ú$TestBranchPruneSSA.SSAPrunerCompilerc                 óN  — t          d¦  «        }|                     t          d¦  «         |                     t          d¦  «         |                     t          d¦  «         |                     t
          d¦  «         |                     t          d¦  «         t          }|                     | j	        ¦  «        }|j
                             |j
        ¦  «         |                     | j	        ¦  «        }|j
                             |j
        ¦  «         |                     ¦   «          |gS )Nz
testing pmzanalyzing bytecodezprocessing IRÚssazdead branch pruningzpreserves the IR as metadata)r    Úadd_passr   r   r   r   r   r   Údefine_typed_pipeliner*   Úpassesr<   Ú!define_nopython_lowering_pipelineÚfinalize)r=   ÚpmÚdpbÚtyped_passesÚlowering_passess        r+   Údefine_pipelinesz5TestBranchPruneSSA.SSAPrunerCompiler.define_pipelinesa  sî   € õ ˜\Ñ*Ô*ˆBØ�KŠKÕ)Ð+?Ñ@Ô@Ð@Ø�KŠK� oÑ6Ô6Ð6à�KŠK�¨Ñ.Ô.Ð.Ø�KŠK�Ð)>Ñ?Ô?Ð?à�KŠK�
Ð$BÑCÔCÐCÝ$ˆCØ×4Ò4°T´ZÑ@Ô@ˆLØŒI×Ò˜\Ô0Ñ1Ô1Ð1Ø!×CÒCÀDÄJÑOÔOˆOØŒI×Ò˜_Ô3Ñ4Ô4Ð4Ø�KŠK‰MŒMˆMØ�4ˆKr-   N)rt   ru   rv   r˜  r2   r-   r+   ÚSSAPrunerCompilerrŒ  `  s#   € € € € € ð	ð 	ð 	ð 	ð 	r-   r™  c                 ó¤   — t          | j        ¬¦  «        dd„¦   «         }|                       |¦   «         |                     ¦   «         ¦  «         d S )N©Úpipeline_classc                 ó&   — d}d}| €d}|r|�d}||fS )Nr|   FTr  r2   )ÚpÚqrŠ   Úrs       r+   r€   z4TestBranchPruneSSA.test_ssa_update_phi.<locals>.implx  s2   € àˆAØˆAØˆyØ�àð �Q�]Ø�ð
 �a�4ˆKr-   r  )r   r™  r†  r‡  r‘   s     r+   Útest_ssa_update_phiz&TestBranchPruneSSA.test_ssa_update_phit  s]   € õ 
˜TÔ3Ð	4Ñ	4Ô	4ð	ð 	ð 	ñ 
5Ô	4ð	ð 	×Ò  ¡¤¨¯ª©¬Ñ7Ô7Ð7Ð7Ð7r-   c                 óv  — t          | j        ¬¦  «        dd„¦   «         }|                       |¦   «         |                     ¦   «         ¦  «         |j        |j        d                  j        d         }|j                             ¦   «         D ],}|  	                    g | 
                    d¦  «        ¢¦  «         Œ-d S )Nr›  c                 ó   — d}| €d}nd}|S r  r2   )rž  rŠ   s     r+   r€   z5TestBranchPruneSSA.test_ssa_replace_phi.<locals>.impl�  s   € àˆAØˆyØ��à�àˆHr-   r   Úpreserved_irÚphir¿   )r   r™  r†  r‡  Ú	overloadsÚ
signaturesÚmetadatar8   r9   ré   Ú
find_exprs)r=   r€   r#   r@   s       r+   Útest_ssa_replace_phiz'TestBranchPruneSSA.test_ssa_replace_phi‰  sÄ   € õ 
˜TÔ3Ð	4Ñ	4Ô	4ð	ð 	ð 	ñ 
5Ô	4ð	ð 	×Ò  ¡¤¨¯ª©¬Ñ7Ô7Ð7Ø”. ¤°Ô!3Ô4Ô=¸nÔMˆð ”>×(Ò(Ñ*Ô*ð 	7ð 	7ˆCØ×ÒÐ5˜sŸ~š~¨eÑ4Ô4Ð5Ñ6Ô6Ð6Ð6ð	7ð 	7r-   N)rt   ru   rv   r   r™  r¡  rª  r2   r-   r+   rŠ  rŠ  ]  s\   € € € € € ðð ð ð ð ˜Lñ ô ð ð(8ð 8ð 8ð*7ð 7ð 7ð 7ð 7r-   rŠ  c                   ó2   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú(TestBranchPrunePostSemanticConstRewritesc                 ó8  — d„ }|                       |t          j        t          j        dd¦  «        fdd gt	          j        d¦  «        ¦  «         |                       |t          j        t          j        dd¦  «        fddgt	          j        d	¦  «        ¦  «         d S )
Nc                 óF   — | j         dk    r| j        d         dk    rdS d S dS )NrŸ   r|   r†   )rÞ   Úshape)rý   s    r+   r€   zKTestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr.<locals>.impl¤  s2   € ØŒz˜QŠˆØ”;˜q”> QÒ&Ð&Ø˜1ð 'Ð&ð �rr-   rŸ   rþ   Frÿ   r|   TrG   )rŸ   )rs   r
   r  r  rå   ræ   r‘   s     r+   Útest_array_ndim_attrz=TestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr¢  s­   € ð	ð 	ð 	ð 	×Ò˜$¥¤­U¬]¸A¸sÑ!CÔ!CÐ EÈØHLðHNåœ( 6Ñ*Ô*ñ	,ô 	,ð 	,ð 	×Ò˜$¥¤­U¬]¸A¸sÑ!CÔ!CÐ EÈØHNðHPåœ( 4™.œ.ñ	*ô 	*ð 	*ð 	*ð 	*r-   c           	      ó(  — d„ }|                       |t          j        t          j        d¦  «        fdd gt	          g d¢¦  «        ¦  «         |                       |t          j        t          j        d¦  «        fddgt	          ddg¦  «        ¦  «         d S )	Nc                 óL   — t          | ¦  «        dk    r| d         dk    rdS d S dS )Nr©   rŸ   r|   r   ©rW   )Útups    r+   r€   zETestBranchPrunePostSemanticConstRewrites.test_tuple_len.<locals>.impl´  s1   € Ý�3‰xŒx˜1Š}ˆ}Ø�q”6˜Q’;�;Ø˜1ð �;ð �qr-   r©   F©r|   rŸ   r©   rŸ   TrG   r|   )rs   r
   ÚUniTupler#  r2  r‘   s     r+   Útest_tuple_lenz7TestBranchPrunePostSemanticConstRewrites.test_tuple_len²  s­   € ð	ð 	ð 	ð 	×Ò˜$¥¤µ´¸QÑ!?Ô!?Ð AÀEØDHðDJå 	 	 	Ñ*Ô*ñ	,ô 	,ð 	,ð 	×Ò˜$¥¤µ´¸QÑ!?Ô!?Ð AÀDØDJðDLå  A ™-œ-ñ	)ô 	)ð 	)ð 	)ð 	)r-   c                 óø   — t           d„ ¦   «         }|                      t          j        ¦  «        5 } |¦   «          d d d ¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         d S )Nc                  ó:   — t                                d¦  «         d S )Ng®Gáz®ó?)ÚfloatÚas_integer_ratior2   r-   r+   ÚtestzHTestBranchPrunePostSemanticConstRewrites.test_attr_not_len.<locals>.testÈ  s   € å×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r-   z$Unknown attribute 'as_integer_ratio')r   ÚassertRaisesr   ÚTypingErrorÚassertInÚstrÚ	exception)r=   r¼  rm   s      r+   Útest_attr_not_lenz:TestBranchPrunePostSemanticConstRewrites.test_attr_not_lenÂ  sº   € õ 
ð	)ð 	)ñ 
Œð	)ð ×Ò�vÔ1Ñ2Ô2ð 	°aØˆD‰FŒFˆFð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	�ŠÐ<½cÀ!Ä+Ñ>NÔ>NÑOÔOÐOÐOÐOs   °AÁAÁAc                 óf  — t          j        ddg¦  «        } |d¬¦  «        }d„ }|                      |t          j        t          j        dd¦  «        fdgt          j        d¦  «        ¦  «         t          j        t          j	        d	|¦  «        }|                      ||fd g|t          ¬
¦  «         d S )NÚ	FakeArrayrÞ   rŸ   )rÞ   c                 óF   — | j         dk    r| j         S t          ¦   «          d S )NrŸ   )rÞ   Úobject)Úfas    r+   r€   zMTestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_array.<locals>.impl×  s!   € ØŒw˜!Š|ˆ|Ø”w�å‘”���r-   rþ   Frÿ   r|   )rN   )ÚcollectionsÚ
namedtuplers   r
   r  r  rå   ræ   ÚNamedUniTupler#  Úenable_pyobj_flags)r=   rÄ  rÇ  r€   ÚFakeArrayTypes        r+   Útest_ndim_not_on_arrayz?TestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_arrayÒ  sÈ   € åÔ*¨;¸¸ÑAÔAˆ	ØˆY˜AÐÑÔˆð	ð 	ð 	ð 	×Ò˜$¥¤­U¬]¸A¸sÑ!CÔ!CÐ EÈÀwÝœ( 6Ñ*Ô*ñ	,ô 	,ð 	,õ Ô+­E¬K¸¸IÑFÔFˆØ×Ò˜$ Ð 0°4°&¸"Ý 2ð 	ñ 	4ô 	4ð 	4ð 	4ð 	4r-   c                 ó¸   — t           d„ ¦   «         }t          j        d¦  «        t          j        d¦  «        f}|                       ||Ž  |j        |Ž ¦  «         d S )Nc                 ó*   — | j         d |j        …         S r¿   )r¯  rÞ   rà   s     r+   r€   zlTestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewrites.<locals>.implé  s   € à”7˜7˜AœF˜7Ô#Ð#r-   )rä   r®   r©   rŸ   )r|   r|   )r   rå   ræ   r†  r‡  )r=   r€   rd   s      r+   Ú5test_semantic_const_propagates_before_static_rewritesz^TestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewritesæ  sh   € õ 
ð	$ð 	$ñ 
Œð	$õ ”˜Ñ&Ô&­¬°Ñ(8Ô(8Ð9ˆà×Ò   d ¨\¨T¬\¸4Ð-@ÑAÔAÐAÐAÐAr-   c                 ó\  — t          t          ¬¦  «        d„ ¦   «         }d}|                       ||Ž  |j        |Ž ¦  «         |j        |j        d                  }|j        d         }t          ¦   «         }|j         	                    ¦   «         D ]}}| 
                    d¦  «        D ]e}|                     |j        j        ¦  «        }|                      |j        t           j        ¦  «         |                     |j        j        ¦  «         ŒfŒ~|                      |d„ |D ¦   «         ¦  «         d S )Nr›  c                  óR   — d}t          | ¦  «        D ]}|t          |¦  «        z  }Œ|S r  )r	   rW   )rd   ÚsÚargs      r+   r€   zSTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.implò  s4   € àˆAÝ% dÑ+Ô+ð ð �Ø•S˜‘X”X‘��ØˆHr-   )r2   rµ  r2   r   r¤  Úinplace_binopc                 ó,   — h | ]}t          |¦  «        ’ŒS r2   r³  )r4   r   s     r+   ú	<setcomp>zXTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.<setcomp>  s   € Ð'<Ð'<Ð'<°1­¨A©¬Ð'<Ð'<Ð'<r-   )r   r   r†  r‡  r¦  r§  r¨  r\   r8   r9   r©  Úfind_variable_assignmentÚrhsÚnameÚassertIsInstancerÒ   r   rÑ   ÚaddrV   )	r=   r€   ÚinpÚolr#   Úbinop_constsr@   ÚexprÚinsts	            r+   Útest_tuple_const_propagationzETestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagationñ  s3  € Ý	Õ5Ð	6Ñ	6Ô	6ð	ð 	ñ 
7Ô	6ð	ð "ˆØ×Ò   c 
¨L¨D¬L¸#Ð,>Ñ?Ô?Ð?àŒ^˜DœO¨AÔ.Ô/ˆØ”+˜nÔ-ˆå‘u”uˆØ”>×(Ò(Ñ*Ô*ð 	3ð 	3ˆCØŸš Ñ7Ô7ð 3ð 3�Ø×3Ò3°D´H´MÑBÔB�Ø×%Ò% d¤jµ"´(Ñ;Ô;Ð;Ø× Ò  ¤Ô!1Ñ2Ô2Ð2Ð2ð3ð 	×Ò˜Ð'<Ð'<¸Ð'<Ñ'<Ô'<Ñ=Ô=Ð=Ð=Ð=r-   N)	rt   ru   rv   r°  r·  rÂ  rÍ  rÐ  râ  r2   r-   r+   r¬  r¬  Ÿ  st   € € € € € ð*ð *ð *ð )ð )ð )ð Pð Pð Pð 4ð 4ð 4ð(	Bð 	Bð 	Bð>ð >ð >ð >ð >r-   r¬  )2rÈ  r
   r4  Únumpyrå   Únumba.core.compilerr   r   r   r   Únumbar   r   r	   Ú
numba.corer   r   r   r   r   r   r   Únumba.core.inline_closurecallr   Únumba.tests.supportr   r   r   r   Únumba.core.analysisr   r   Únumba.core.untyped_passesr   r   r   r   r   r   r   r    rð   rË  Úenable_pyobjectr,   r/   ry   r&  rŠ  r¬  r2   r-   r+   ú<module>rì     s¸  ðà Ð Ð Ð Ø Ð Ð Ð à Ð Ð Ð Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ Ð Ð Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;à MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mð3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð NÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mð €à�U‘W”WÐ Ø%)Ð Ô "ð
ð 
ð 
ðc(ð c(ð c(ð c(ð c(˜/¨8ñ c(ô c(ð c(ðLm<ð m<ð m<ð m<ð m<Ð)¨;ñ m<ô m<ð m<ð`]0ð ]0ð ]0ð ]0ð ]0Ð 3°[ñ ]0ô ]0ð ]0ð@?7ð ?7ð ?7ð ?7ð ?7˜¨(ñ ?7ô ?7ð ?7ðDf>ð f>ð f>ð f>ð f>Ð/Bñ f>ô f>ð f>ð f>ð f>r-   