§
    2@ÄjÀ•  ã                   ó¢  — d dl Z d dlZd dlZd dl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 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 dl'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)Úrun_frontendÚFlagsÚ	StateDict)ÚjitÚnjitÚliteral_unroll)ÚtypesÚerrorsÚirÚrewritesÚir_utilsÚcpu)Úpostproc)ÚInlineClosureCallPass)ÚTestCaseÚMemoryLeakMixinÚSerialMixinÚIRPreservingTestPipeline)Údead_branch_pruneÚrewrite_semantic_constants)ÚReconstructSSAÚTranslateByteCodeÚIRProcessingÚDeadBranchPruneÚ
PreserveIR)ÚDefaultPassBuilderÚCompilerBaseÚPassManager)Ú	PYVERSIONé{   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      úJC:\Projects\Historical\venv\Lib\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 © r1   ©Ú.0Ú_s     r*   ú
<listcomp>z5TestBranchPruneBase.find_branches.<locals>.<listcomp>2   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di¦  «        } t5          |fi |¤Ž|¦  «        j        |         }|€|                     ¦   «         } |¦   «         }n |j        |Ž } ||Ž }|                      ||¦  «         d S )NúP================================================================================zbefore inlineFúbefore pruneúafter pruneTÚbothr   Úunreachablec                 ó   — g | ]}|‘ŒS r1   r1   r2   s     r*   r5   z4TestBranchPruneBase.assert_prune.<locals>.<listcomp>v   s   € Ð?Ð?Ð? Q˜qÐ?Ð?Ð?r,   c                 ó   — g | ]}|‘ŒS r1   r1   r2   s     r*   r5   z4TestBranchPruneBase.assert_prune.<locals>.<listcomp>w   s   € Ð9Ð9Ð9 ˜!Ð9Ð9Ð9r,   Ú
new_labelsÚoriginal_labelsÚexpect_removedÚflagsÚnopython)r+   ÚcopyÚ_DEBUGÚprintÚdumpr   r   ÚParallelOptionsÚrunr   ÚPostProcessorr   r   rA   ÚassertEqualÚlenÚ	enumerateÚappendÚtruebrÚfalsebrÚsetr7   ÚkeysÚAssertionErrorÚsortedÚpopr   Ú	overloadsÚentry_point)r<   r(   Úargs_tysÚpruneÚargsÚkwargsr"   ÚbeforeÚinline_passÚ	post_procÚafterÚbefore_branchesrL   ÚidxÚbranchrK   rJ   ÚeÚsupplied_flagsÚcresÚresÚexpecteds                         r*   Úassert_prunez TestBranchPruneBase.assert_prune6   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à'˜-Ñ'Ô'�qõ Ð?Ð?¨&¬-×*<Ò*<Ñ*>Ô*>Ð?Ñ?Ô?Ñ@Ô@ˆÝÐ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¨j¸$Ð-?Ñ@Ô@ˆà.�s�8Ð.Ð.˜~Ð.Ð.¨tÑ4Ô4Ô>¸xÔ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   rA   rs   r1   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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†ðù!	@r1   ©Ú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}   r1   r~   s    r*   r€   z,TestBranchPrune.test_single_if.<locals>.impl˜   r�   r,   Fc                 ó   — | €dS d S ©Nr}   r1   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}   r1   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ˆ   r1   )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   r1   )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ãù?r1   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}   r1   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š   r1   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•   r1   )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                 óz  — d„ }|                       |t          j        d¦  «        fdd gd ¦  «         |                       |t          j        d¦  «        fdd gd¦  «         d„ }|                       |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†   éýÿÿÿr1   )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¥   r1   )r   r¦   r�   s      r*   r€   zJTestBranchPrune.test_single_if_else_w_following_undetermined.<locals>.implû   s/   € Ø"ˆNØˆyØ!%��ààð Ø��à�ØˆHr,   rŽ   r‘   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ð	ð 	ð 	ð 	×Ò˜$¥¤°Ñ!7Ô!7Ð 9¸EÀ4¸=Øñ	 ô 	 ð 	 ð 	×Ò˜$¥Ô!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¥   r1   )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–   r1   )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Œ   é�  r1   ©r   r�   rŠ   s      r*   r€   z@TestBranchPrune.test_single_two_branches_same_cond.<locals>.impl3  ó-   € ØˆyØ��à�àˆ}Ø��à�à�a�4ˆKr,   r‚   FTr†   rŽ   r‘   s     r*   Ú"test_single_two_branches_same_condz2TestBranchPrune.test_single_two_branches_same_cond1  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µ   r1   r¸   s      r*   r€   z5TestBranchPrune.test_cond_is_kwarg_none.<locals>.implE  r¹   r,   FTr‚   r†   ©N)rs   r	   ÚOmittedr�   r�   r‘   s     r*   Útest_cond_is_kwarg_nonez'TestBranchPrune.test_cond_is_kwarg_noneC  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·   r1   r¸   s      r*   r€   z6TestBranchPrune.test_cond_is_kwarg_value.<locals>.implY  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_valueW  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†   é   r1   r~   s    r*   Úfnz8TestBranchPrune.test_cond_rewrite_is_correct.<locals>.fno  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ÚbinoprC   rD   rE   )r+   rA   rV   rW   Úcondr   Úget_definitionÚopre   rP   rQ   rR   r   Ú
assertTrueÚ
isinstancer   ÚConstÚvalue)r(   Úarg_tysÚbit_valr"   rk   Úpred_varÚ	pred_defnÚcondition_varÚcondition_opÚnew_condition_defnr<   s             €r*   Úcheckz;TestBranchPrune.test_cond_rewrite_is_correct.<locals>.checkt  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_correctl  s|   ø€ ð	ð 	ð 	ð
	@ð 	@ð 	@ð 	@ð 	@ð@ 	ˆˆb•5”> &Ñ)Ô)Ð+¨QÑ/Ô/Ð/Øˆˆb•5Ô'¨Ñ+Ô+Ð-¨qÑ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|   Fé   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€   r@   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Ü   r1   ©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Ü   r1   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†   é   r1   )ÚarrayÚas     r*   r€   zRTestBranchPrune.test_redefined_variables_are_not_considered_in_prune.<locals>.implË  s   € ØˆyØ�Ø�1ŠuˆuØ�rØ�2r,   rŸ   ÚCr‚   ©rŸ   é   r½   ©rs   r	   ÚArrayÚfloat64r�   ÚnpÚzerosr‘   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†   é   r1   )rì   rí   r   s      r*   r€   z7TestBranchPrune.test_comparison_operators.<locals>.implÝ  s&   € ØˆAØˆyØ�rð �1ŠuˆuØ�rØˆHr,   rŸ   rî   r‚   FrF   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ë   r1   ©rì   r   rí   Úbs       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ë   r1   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ë   r1   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_exec!  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   r1   r~   s   €r*   ÚclosurezRTestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.impl.<locals>.closureG  ó   ø€ à���r,   r   TFr1   )r  r   s    @r*   r€   zATestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.implD  sA   ø€ ØˆAðð ð ð ð ð ˆG‰IŒIˆIà�AŠvˆvØ�tà�ur,   r1   F)rs   r‘   s     r*   Ú#test_closure_and_nonlocal_can_prunez3TestBranchPrune.test_closure_and_nonlocal_can_pruneA  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½   r1   )Útr   s    €r*   r  zUTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.impl.<locals>.closureZ  r  r,   r   TFr1   )Únr  r   s     @r*   r€   zDTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.implW  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_pruneT  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  r1   r,   r*   ry   ry   Ž   se  € € € € € ð*Ið *Ið *IðX	Ið 	Ið 	IðKð Kð Kð"Qð Qð Qð"$Oð $Oð $OðLOð Oð Oð(Kð Kð KðPð Pð Pð$Pð Pð Pð(Pð Pð Pð*)2ð )2ð )2ðVð ð ð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 r1   r1   )r3   ÚkÚvs      r*   ú
<dictcomp>zMTestBranchPrunePredicates._literal_const_sample_generator.<locals>.<dictcomp>}  s   € ÐGÐGÐG™d˜a �Q˜ÐGÐGÐGr,   c                 ó   — g | ]\  }}|‘ŒS r1   r1   )r3   r4   r   s      r*   r5   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_generatorq  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                 ól  — d„ }t           dv r|                      |dddœ¦  «        }n7t           dv r|                      |dddœ¦  «        }nt          t           ¦  «        ‚|j        j        }|j        j        }t           dv r-|                      |d¦  «         |                      |d	¦  «         nJt           dv r-|                      |d
¦  «         |                      |d¦  «         nt          t           ¦  «        ‚|                       |d ¦  «        d¦  «         |                       |d ¦  «        d¦  «         d S )Nc                 ó   — d}|rdS d}|dz   S ©NÚPLACEHOLDER1r}   ÚPLACEHOLDER2r¬   r1   )r   Ú_CONST1Ú_CONST2s      r*   r€   zCTestBranchPrunePredicates.test_literal_const_code_gen.<locals>.impl‰  s#   € Ø$ˆGØð )Ø�wà(�Ø˜Q‘;Ðr,   ©)rð   é   )rð   rþ   r   rú   )r   rŸ   ©)rð   r†   )rð   r  )rð   rÅ   )rð   é   )r|   rð   )r4  r}   r5  )r   r}   rú   r3  )Nr   r}   rú   r¬   r}   é   )r   r0  ÚNotImplementedErrorr$  r#  rV   )r<   r€   ÚnewÚiconstÚnconsts        r*   Útest_literal_const_code_genz5TestBranchPrunePredicates.test_literal_const_code_genˆ  sa  € ð	ð 	ð 	õ Ð*Ð*Ð*à×6Ò6°tÀÀR¸[¸[ÑIÔIˆCˆCÝÐ>Ð>Ð>Ø×6Ò6°tÀÀR¸[¸[ÑIÔIˆCˆCå%¥iÑ0Ô0Ð0à”Ô(ˆØ”Ô'ˆåÐ*Ð*Ð*Ø×Ò˜Vð &6ñ 7ô 7ð 7à×Ò˜VÐ%6Ñ7Ô7Ð7Ð7ÝÐ>Ð>Ð>Ø×Ò˜Vð &9ñ :ô :ð :à×Ò˜VÐ%?Ñ@Ô@Ð@Ð@å%¥iÑ0Ô0Ð0à×Ò˜˜˜d™œ WÑ-Ô-Ð-Ø×Ò˜˜˜T™œ BÑ'Ô'Ð'Ð'Ð'r,   c                 óN  — d„ }| j         df| j        dffD ]Ž\  }}|D ]†}t          dv r|                      |d|i¦  «        }n6t          dv r|                      |d|i¦  «        }nt	          t          ¦  «        ‚|                      |t          j        d¦  «        f|gd ¦  «         Œ‡Œ�d S )	Nc                 ó   — d}|rdS d S ©Nr4  r}   r1   ©r   r6  s     r*   r€   z<TestBranchPrunePredicates.test_single_if_const.<locals>.impl¬  s   € Ø$ˆGØð Ø�wðð r,   FTr8  r   r:  r|   r‚   ©Ú_TRUTHYÚ_FALSEYr   r0  r=  rs   r	   r�   ©r<   r€   Úc_inprd   Úconstr(   s         r*   Útest_single_if_constz.TestBranchPrunePredicates.test_single_if_constª  óø   € ð	ð 	ð 	ð
 "œ\¨5Ð1°D´LÀ$Ð3GÐGð 	(ð 	(‰LˆE�5Øð (ð (�åÐ 2Ð2Ð2à×?Ò?ÀØABÀEÀ
ñLô L�D�DåÐ"FÐFÐFØ×?Ò?ÀØABÀEÀ
ñLô L�D�Dõ .­iÑ8Ô8Ð8à×!Ò! $­¬¸Ñ)?Ô)?Ð(AÀEÀ7Ø"&ñ(ô (ð (ð (ð(ð	(ð 	(r,   c                 óN  — d„ }| j         df| j        dffD ]Ž\  }}|D ]†}t          dv r|                      |d|i¦  «        }n6t          dv r|                      |d|i¦  «        }nt	          t          ¦  «        ‚|                      |t          j        d¦  «        f|gd ¦  «         Œ‡Œ�d S )	Nc                 ó   — d}|sdS d S rD  r1   rE  s     r*   r€   zCTestBranchPrunePredicates.test_single_if_negate_const.<locals>.implÃ  s   € Ø$ˆGØð Ø�wðð r,   FTr8  r   r:  r|   r‚   rF  rI  s         r*   Útest_single_if_negate_constz5TestBranchPrunePredicates.test_single_if_negate_constÁ  rM  r,   c                 óN  — d„ }| j         df| j        dffD ]Ž\  }}|D ]†}t          dv r|                      |d|i¦  «        }n6t          dv r|                      |d|i¦  «        }nt	          t          ¦  «        ‚|                      |t          j        d¦  «        f|gd ¦  «         Œ‡Œ�d S )	Nc                 ó   — d}|rdS dS ©Nr4  r}   r–   r1   rE  s     r*   r€   zATestBranchPrunePredicates.test_single_if_else_const.<locals>.implÚ  s   € Ø$ˆGØð Ø�wà�wr,   FTr8  r   r:  r|   r‚   rF  rI  s         r*   Útest_single_if_else_constz3TestBranchPrunePredicates.test_single_if_else_constØ  óø   € ð	ð 	ð 	ð "œ\¨5Ð1°D´LÀ$Ð3GÐGð 	(ð 	(‰LˆE�5Øð (ð (�åÐ 2Ð2Ð2à×?Ò?ÀØABÀEÀ
ñLô L�D�DåÐ"FÐFÐFØ×?Ò?ÀØABÀEÀ
ñLô L�D�Dõ .­iÑ8Ô8Ð8à×!Ò! $­¬¸Ñ)?Ô)?Ð(AÀEÀ7Ø"&ñ(ô (ð (ð (ð(ð	(ð 	(r,   c                 óN  — d„ }| j         df| j        dffD ]Ž\  }}|D ]†}t          dv r|                      |d|i¦  «        }n6t          dv r|                      |d|i¦  «        }nt	          t          ¦  «        ‚|                      |t          j        d¦  «        f|gd ¦  «         Œ‡Œ�d S )	Nc                 ó   — d}|sdS dS rS  r1   rE  s     r*   r€   zHTestBranchPrunePredicates.test_single_if_else_negate_const.<locals>.impló  s   € Ø$ˆGØð Ø�wà�wr,   FTr8  r   r:  r|   r‚   rF  rI  s         r*   Ú test_single_if_else_negate_constz:TestBranchPrunePredicates.test_single_if_else_negate_constñ  rU  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…   r1   ©r   rK  s    €r*   r(   z>TestBranchPrunePredicates.test_single_if_freevar.<locals>.func  s   ø€ Øð .Ø&¨˜~Ð-ð.ð .r,   r‚   ©rG  rH  rs   r	   r�   ©r<   rJ  rd   r(   rK  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…   r1   r[  s    €r*   r(   zETestBranchPrunePredicates.test_single_if_negate_freevar.<locals>.func  s   ø€ Ø ð .Ø&¨˜~Ð-ð.ð .r,   r‚   r\  r]  s       @r*   Útest_single_if_negate_freevarz7TestBranchPrunePredicates.test_single_if_negate_freevar  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‰fS r•   r1   r[  s    €r*   r(   zCTestBranchPrunePredicates.test_single_if_else_freevar.<locals>.func"  s   ø€ Øð .Ø&¨˜~Ð-à&¨˜~Ð-r,   r‚   r\  r]  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•   r1   r[  s    €r*   r(   zJTestBranchPrunePredicates.test_single_if_else_negate_freevar.<locals>.func.  s   ø€ Ø ð .Ø&¨˜~Ð-à&¨˜~Ð-r,   r‚   r\  r]  s       @r*   Ú"test_single_if_else_negate_freevarz<TestBranchPrunePredicates.test_single_if_else_negate_freevar*  rf  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‚   )rG  rH  rl  rs   r	   r�   ©r<   rJ  rd   Úcr(   s        r*   Útest_single_if_globalz/TestBranchPrunePredicates.test_single_if_global8  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>.funcM  s#   € Ý5ð GØ&Õ(FÐFÐFðGð Gr,   r‚   )rG  rH  rr  rs   r	   r�   rm  s        r*   Útest_single_if_negate_globalz6TestBranchPrunePredicates.test_single_if_negate_globalF  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>.func[  s#   € Ý3ð EØ&Õ(DÐDÐDà&Õ(DÐDÐDr,   r‚   )rG  rH  rv  rs   r	   r�   rm  s        r*   Útest_single_if_else_globalz4TestBranchPrunePredicates.test_single_if_else_globalT  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>.funcj  s#   € Ý>ð LØ&Õ(KÐKÐKà&Õ(KÐKÐKr,   r‚   )rG  rH  rz  rs   r	   r�   rm  s        r*   Ú!test_single_if_else_negate_globalz;TestBranchPrunePredicates.test_single_if_else_negate_globalc  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õ   )r8   r@   s     r*   Úfooz6TestBranchPrunePredicates.test_issue_5618.<locals>.foot  s*   € å”X˜a‘[”[ˆFØˆCØð  Ø��q‘	ØˆMr,   r   g     Ð„@)r   ÚassertPreciseEqualÚpy_func)r<   r~  s     r*   Útest_issue_5618z)TestBranchPrunePredicates.test_issue_5618r  sf   € å	ð	ð 	ñ 
Œð	ð 	×Ò §¢¡¤¨aÔ 0°$Ñ7Ô7Ð7Ø×Ò  ¡¤ a¤¨$Ñ/Ô/Ð/Ð/Ð/r,   N)rt   ru   rv   rG  rH  r0  rA  rL  rP  rT  rX  r^  rb  re  ri  ro  rs  rw  r{  r�  r1   r,   r*   r  r  h  s  € € € € € ð +€GØ+€Gð9ð 9ð 9ð. (ð  (ð  (ðD(ð (ð (ð.(ð (ð (ð.(ð (ð (ð2(ð (ð (ð2(ð (ð (ð(ð (ð (ð
(ð 
(ð 
(ð
(ð 
(ð 
(ð(ð (ð (ð(ð (ð (ð(ð (ð (ð(ð (ð (ð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_pipelines„  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‘  r1   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ú   r1   )ÚpÚqrŠ   Úrs       r*   r€   z4TestBranchPruneSSA.test_ssa_update_phi.<locals>.impl›  s2   € àˆAØˆAØˆyØ�àð �Q�]Ø�ð
 �a�4ˆKr,   r	  )r   r’  r  r€  r‘   s     r*   Útest_ssa_update_phiz&TestBranchPruneSSA.test_ssa_update_phi—  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ù   r1   )r—  rŠ   s     r*   r€   z5TestBranchPruneSSA.test_ssa_replace_phi.<locals>.impl°  s   € àˆAØˆyØ��à�àˆHr,   r   Úpreserved_irÚphir½   )r   r’  r  r€  ra   Ú
signaturesÚmetadatar7   r8   ÚassertFalseÚ
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£  r1   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†   )ÚndimÚshape)rì   s    r*   r€   zKTestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr.<locals>.implÇ  s2   € ØŒz˜QŠˆØ”;˜q”> QÒ&Ð&Ø˜1ð 'Ð&ð �rr,   rŸ   rî   Frï   r|   TrF   )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Ÿ   TrF   r|   )rs   r	   ÚUniTupler  r&  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_ratior1   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¶  rn   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           	      ób  — 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|dd
dœ¬¦  «         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|   T)rN   Úforceobj)rM   )
ÚcollectionsÚ
namedtuplers   r	   rò   ró   rô   rõ   ÚNamedUniTupler  )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°&¸"Ø,1¸dÐ CÐ Cð 	ñ 	Eô 	Eð 	Eð 	Eð 	Er,   c                 ó¸   — t           d„ ¦   «         }t          j        d¦  «        t          j        d¦  «        f}|                       ||Ž  |j        |Ž ¦  «         d S )Nc                 ó*   — | j         d |j        …         S r½   )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€   re   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   )re   ÚsÚargs      r*   r€   zSTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.impl  s4   € àˆAÝ% dÑ+Ô+ð ð �Ø•S˜‘X”X‘��ØˆHr,   )r1   r¯  r1   r   r�  Úinplace_binopc                 ó,   — h | ]}t          |¦  «        ’ŒS r1   r­  )r3   r   s     r*   ú	<setcomp>zXTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.<setcomp>(  s   € Ð'<Ð'<Ð'<°1­¨A©¬Ð'<Ð'<Ð'<r,   )r   r   r  r€  ra   rŸ  r   r\   r7   r8   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Ü  r1   r,   r*   r¥  r¥  Â  sw   € € € € € ð*ð *ð *ð )ð )ð )ð Pð Pð Pð Eð Eð Eð(	Bð 	Bð 	Bð>ð >ð >ð >ð >r,   r¥  )2rÃ  r	   r(  Únumpyrô   Únumba.core.compilerr   r   r   Únumbar   r   r   Ú
numba.corer
   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   Únumba.core.utilsr   rÞ   Úenable_pyobj_flagsÚenable_pyobjectr+   r.   ry   r  rƒ  r¥  r1   r,   r*   ú<module>rè     s¾  ðà Ð Ð Ð Ø Ð Ð Ð à Ð Ð Ð Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ Ð Ð Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;à 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W<ð W<ð W<ð W<ð W<Ð)¨;ñ W<ô W<ð W<ðtU0ð U0ð U0ð U0ð U0Ð 3°[ñ U0ô U0ð U0ðp?7ð ?7ð ?7ð ?7ð ?7˜¨(ñ ?7ô ?7ð ?7ðDf>ð f>ð f>ð f>ð f>Ð/Bñ f>ô f>ð f>ð f>ð f>r,   