
    
f͇                        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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          Z/ G d de,          Z0dS )    N)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      9lib/python3.11/site-packages/numba/tests/test_analysis.pycompile_to_irr+      sf    4  GKKEEMEMEO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>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<<cnnn;;<<<COOC    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 )NP================================================================================zbefore inlineFbefore pruneafter pruneTbothr   unreachablec                     g | ]}|S r1   r1   r2   s     r*   r5   z4TestBranchPruneBase.assert_prune.<locals>.<listcomp>u   s    ???Qq???r,   c                     g | ]}|S r1   r1   r2   s     r*   r5   z4TestBranchPruneBase.assert_prune.<locals>.<listcomp>v   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_prune5   s     %%; 	(OOO/"""LLNNN ,G,/,?,F,FI I *733	"7H555; 	(OOO.!!!LLNNN'8,,,; 	-   LLNNN,,V44_--s5zz::: #E** 	( 	(JC$S)F}}%%fm4444%%%fn5555&%%fn555%%fm4444'-''' ??&-*<*<*>*>???@@99U\%6%6%8%8999::
	Z3~;N;N)NOOOO 	 	 	,z 2 2333#VO%<%<==="F>$:$:;;;G		  Gj$-?@@.s8..~..t44>xH<""$$CtvvHH"$"D)CtT{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       Avv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    Bww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    Bww wr,   c                     d }|}| |k    rdS d S )Nd   r1   )r   r   ys      r*   r   z,TestBranchPrune.test_single_if.<locals>.impl   s!    AAAvvs vr,   rs   r	   NoneTypeIntegerLiteralr<   r   s     r*   test_single_ifzTestBranchPrune.test_single_if   s   	 	 	 	$!7!7 9D64HHH	 	 	 	$!7!7 9E7DIII	 	 	 	$!7!7 9E7DIII$!5b!9!9 ;dVRHHH	 	 	 	$!7!7 9D64HHH$!5b!9!9 ;dVRHHH	 	 	 	$!7!7 9D64HHH$!5b!9!9 ;dVRHHH	 	 	 	$!7!7 9E7DIII$!5b!9!9 ;dVR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 9E7DIII$!5b!9!9 ;dVR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    Cxx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    axxw xr,   r   r   s     r*   test_single_if_const_valz(TestBranchPrune.test_single_if_const_val   s    	 	 	 	$!7!7 9D64HHH$!5c!:!: <tfcJJJ	 	 	
 	$!7!7 9D64HHH$!5c!:!: <tfc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    Avv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   	 	 	 	$!5c!:!: <q @4&#	 	 	$!7!7 9A =w	  	  	 $!5c!:!:!&!7!7!:<@63	N 	N 	N$!5c!:!:!&!5d!;!;!=?Cfc4	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   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   )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 9E4=$OOO$!5b!9!9 ;dD\2NNN	 	 	 ?g%% dU^F%;%;$=t}"$ $ $ $ dU^F%;%;$=d|"$ $ $ 	$!5b!9!9 ;dD\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 9E4=$OOO$!5b!9!9 ;dD\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    	 	 	 	$!5b!9!9 ;dVRHHH$!5c!:!: <tfc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>.impl6  -    y}a4Kr,   r   FTr   r   r   s     r*   "test_single_two_branches_same_condz2TestBranchPrune.test_single_two_branches_same_cond4  sp    	 	 	 	$!7!7 9E4=$OOO$!5b!9!9 ;dE]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>.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 9E4=$OOO$!5b!9!9 ;dE]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>.impl\  s5    DyyDyya4Kr,   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$!5d!;!; =d|	  	  	 $!5a!8!8 :T4L!LLL$!7!7 9D%=$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>.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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>.checkw  sx   #D))G #0099OS111555 'q).H /BBIY\6222%N1-M#27MJJL\_g666 { hn%%%gw///{ hm$$$ "*!8-!P!POOJ'928DDEEE/5w?????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|    	 	 	
	@ 	@ 	@ 	@ 	@@ 	b5>&))+Q///b5'++-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    #~~2v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r6Mr,   T)rs   r	   r   r   )r<   r   r@   s      r*   test_global_bake_inz#TestBranchPrune.test_global_bake_in  s    	 	 	 	$!5a!8!8 :UGQGGG 	G" " " dU%9!%<%<$>JJJGGGcGMMMMs   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2v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    	 	 	 	 	 	$!5a!8!8 :UGQGGG	 	 	 	 	 	$!5a!8!8 :TFA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1uur2r,   r   Cr   r   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 1uu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1uuy1uur6A: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1uu1uuyQQq5526Mr,   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6Mr,   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15>&3I3IK,(6**D$		8 	8 	8 	$ ;u}a== >&115=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>.closureJ      r,   r   TFr1   )r  r   s    @r*   r   zATestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.implG  sA    A     GIIIAvvtur,   r1   F)rs   r   s     r*   #test_closure_and_nonlocal_can_prunez3TestBranchPrune.test_closure_and_nonlocal_can_pruneD  s3    	 	 	 	$UH.....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>.closure]  r  r,   r   TFr1   )nr  r   s     @r*   r   zDTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.implZ  sC    A     GAJJJAvvtur,   r|   )rs   r	   int64r   s     r*   &test_closure_and_nonlocal_cannot_prunez6TestBranchPrune.test_closure_and_nonlocal_cannot_pruneW  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TO O O(K K KP P P$P P P(P P P*)2 )2 )2V  4G G G,2 2 2"1 1 166 6 6,6 6 60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Gda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$!QA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_generatort  s     o HGi0E&F&FGGG	LLNN 	 	DAqIaLLDD&1B1B*C*CDDDEE
 &&&<< #Hgii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   r1   )r   _CONST1_CONST2s      r*   r   zCTestBranchPrunePredicates.test_literal_const_code_gen.<locals>.impl  s#    $G )w(Q;r,   r   r   )r|   r   r4  )Nr   r}   r   r   r}      )r1  r%  r$  rV   )r<   r   newiconstnconsts        r*   test_literal_const_code_genz5TestBranchPrunePredicates.test_literal_const_code_gen  s    	 	 	 224A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            GOd S )Nc                     d}|rdS d S Nr5  r}   r1   r   r7  s     r*   r   z<TestBranchPrunePredicates.test_single_if_const.<locals>.impl  s    $G w r,   FTr|   r   _TRUTHY_FALSEYr1  rs   r	   r   r<   r   c_inprd   constr(   s         r*   test_single_if_constz.TestBranchPrunePredicates.test_single_if_const      	 	 	
 "\51DL$3GG 	( 	(LE5 ( (;;D1e*MM!!$)?)?(AE7"&( ( ( ((	( 	(r,   c                     d }| j         df| j        dffD ]N\  }}|D ]F}|                     |d|i          }|                     |t	          j        d          f|gd            GOd S )Nc                     d}|sdS d S r@  r1   rA  s     r*   r   zCTestBranchPrunePredicates.test_single_if_negate_const.<locals>.impl  s    $G w r,   FTr|   r   rB  rE  s         r*   test_single_if_negate_constz5TestBranchPrunePredicates.test_single_if_negate_const  rI  r,   c                     d }| j         df| j        dffD ]N\  }}|D ]F}|                     |d|i          }|                     |t	          j        d          f|gd            GOd S )Nc                     d}|rdS dS Nr5  r}   r   r1   rA  s     r*   r   zATestBranchPrunePredicates.test_single_if_else_const.<locals>.impl  s    $G wwr,   FTr|   r   rB  rE  s         r*   test_single_if_else_constz3TestBranchPrunePredicates.test_single_if_else_const      	 	 	 "\51DL$3GG 	( 	(LE5 ( (;;D1e*MM!!$)?)?(AE7"&( ( ( ((	( 	(r,   c                     d }| j         df| j        dffD ]N\  }}|D ]F}|                     |d|i          }|                     |t	          j        d          f|gd            GOd S )Nc                     d}|sdS dS rO  r1   rA  s     r*   r   zHTestBranchPrunePredicates.test_single_if_else_negate_const.<locals>.impl  s    $G wwr,   FTr|   r   rB  rE  s         r*    test_single_if_else_negate_constz:TestBranchPrunePredicates.test_single_if_else_negate_const  rQ  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   rG  s    r*   r(   z>TestBranchPrunePredicates.test_single_if_freevar.<locals>.func  s     .&~-. .r,   r   rC  rD  rs   r	   r   r<   rF  rd   r(   rG  s       @r*   test_single_if_freevarz0TestBranchPrunePredicates.test_single_if_freevar      !\51DL$3GG 	( 	(LE5 ( (. . . . . !!$)?)?(AE7"&( ( ( ((	( 	(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   rW  s    r*   r(   zETestBranchPrunePredicates.test_single_if_negate_freevar.<locals>.func  s      .&~-. .r,   r   rX  rY  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   rW  s    r*   r(   zCTestBranchPrunePredicates.test_single_if_else_freevar.<locals>.func  s     .&~-&~-r,   r   rX  rY  s       @r*   test_single_if_else_freevarz5TestBranchPrunePredicates.test_single_if_else_freevar      !\51DL$3GG 		( 		(LE5 ( (. . . . .
 !!$)?)?(AE7"&( ( ( ((		( 		(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   rW  s    r*   r(   zJTestBranchPrunePredicates.test_single_if_else_negate_freevar.<locals>.func  s      .&~-&~-r,   r   rX  rY  s       @r*   "test_single_if_else_negate_freevarz<TestBranchPrunePredicates.test_single_if_else_negate_freevar  rb  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   )rC  rD  rh  rs   r	   r   r<   rF  rd   cr(   s        r*   test_single_if_globalz/TestBranchPrunePredicates.test_single_if_global  s     "\51DL$3GG 		( 		(LE5 ( (*+'@ @ @ !!$)?)?(AE7"&( ( ( ((		( 		(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   )rC  rD  rn  rs   r	   r   ri  s        r*   test_single_if_negate_globalz6TestBranchPrunePredicates.test_single_if_negate_global  s     "\51DL$3GG 		( 		(LE5 ( (12.G G G !!$)?)?(AE7"&( ( ( ((		( 		(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   )rC  rD  rr  rs   r	   r   ri  s        r*   test_single_if_else_globalz4TestBranchPrunePredicates.test_single_if_else_global  s     "\51DL$3GG 
	( 
	(LE5 	( 	(/0,E E E
 !!$)?)?(AE7"&( ( ( (	(
	( 
	(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>.func5  s#    > L&(KKK&(KKKr,   r   )rC  rD  rv  rs   r	   r   ri  s        r*   !test_single_if_else_negate_globalz;TestBranchPrunePredicates.test_single_if_else_negate_global.  s     "\51DL$3GG 
	( 
	(LE5 	( 	(673L L L
 !!$)?)?(AE7"&( ( ( (	(
	( 
	(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>.foo?  s*    Xa[[FC  q	Mr,   r   g     Є@)r   assertPreciseEqualpy_func)r<   rz  s     r*   test_issue_5618z)TestBranchPrunePredicates.test_issue_5618=  sf    		 	 
	 	a 0$777a$/////r,   N)rt   ru   rv   rC  rD  r1  r=  rH  rL  rP  rT  rZ  r^  ra  re  rk  ro  rs  rw  r}  r1   r,   r*   r  r  k  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_pipelinesO  s     \**BKK)+?@@@KKo666KK...KK)>???KK
$BCCC$C44TZ@@LI\0111!CCDJOOOI_3444KKMMM4Kr,   N)rt   ru   rv   r  r1   r,   r*   SSAPrunerCompilerr  N  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>.implf  s2    AAy Q]
 a4Kr,   r
  )r   r  r{  r|  r   s     r*   test_ssa_update_phiz&TestBranchPruneSSA.test_ssa_update_phib  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_phiw  s     
T3	4	4	4	 	 	 
5	4	 	777.!34=nM >((** 	7 	7C5s~~e4456666	7 	7r,   N)rt   ru   rv   r   r  r  r  r1   r,   r*   r  r  K  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    zQ;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]As!C!C EHLHN(6**	, 	, 	, 	$U]As!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    3xx1}}q6Q;;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!?!? AEDHDJ			**	, 	, 	, 	$Q!?!? ADDJ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 )NgGz?)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DFFF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	<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	YA	 	 	 	$U]As!C!C Ew(6**	, 	, 	, +EKIFF$ 04&",1d 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    77AF7##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XX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
LDL#,>???^DOA./+n-uu>((** 	3 	3C77 3 333DHMBB%%dj"(;;;  !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  )1r  r	   r)  numpyr   numba.core.compilerr   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   enable_pyobj_flagsenable_pyobjectr+   r.   ry   r  r  r  r1   r,   r*   <module>r     s               > > > > > > > > > > + + + + + + + + + + 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 UWW %)  "
 
 
c( c( c( c( c(/8 c( c( c(L[< [< [< [< [<); [< [< [<|]0 ]0 ]0 ]0 ]0 3[ ]0 ]0 ]0@?7 ?7 ?7 ?7 ?7( ?7 ?7 ?7Df> f> f> f> f>/B f> f> f> f> f>r,   