
    J/Ph                        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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+          Z/d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{   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      Y/var/www/html/test/jupyter/venv/lib/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  r0   .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 r0   r0   r1   s     r)   r4   z4TestBranchPruneBase.assert_prune.<locals>.<listcomp>u   s    ???Qq???r+   c                     g | ]}|S r0   r0   r1   s     r)   r4   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   r@   assertEquallen	enumerateappendtruebrfalsebrsetr6   keysAssertionErrorsortedpopr   	overloadsentry_point)r;   r'   args_tyspruneargskwargsr!   beforeinline_pass	post_procafterbefore_branchesrK   idxbranchrJ   rI   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__rO   r@   rr   r0   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!	@r0   xs    r)   implz,TestBranchPrune.test_single_if.<locals>.impl       Avvw vr+   noneTc                     ddk    rdS d S )Nr{   r|   r0   r}   s    r)   r   z,TestBranchPrune.test_single_if.<locals>.impl   r   r+   Fc                     | dS d S Nr|   r0   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|   r0   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   r0   )r~   zs     r)   r   z,TestBranchPrune.test_single_if.<locals>.impl   s    Bww wr+   c                     d }|}| |k    rdS d S )Nd   r0   )r~   r   ys      r)   r   z,TestBranchPrune.test_single_if.<locals>.impl   s!    AAAvvs vr+   rr   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?r0   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|   r0   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   r0   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   r0   )r~   r   s     r)   r   z?TestBranchPrune.test_single_if_else_two_const_val.<locals>.impl   s    Avvwwr+   r      r   FT  )rr   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                 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   r0   )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   r0   )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 9E4=$OOO$!5b!9!9 ;dD\2NNN	 	 	 	$!7!7 9E4=	  	  	  	$!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   r0   )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   r0   )r~   r   r   s      r)   r   zCTestBranchPrune.test_double_if_else_non_literal_const.<locals>.impl$  s#    KKHr+   r   r   rr   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     r0   r~   r   r   s      r)   r   z@TestBranchPrune.test_single_two_branches_same_cond.<locals>.impl2  -    y}a4Kr+   r   FTr   r   r   s     r)   "test_single_two_branches_same_condz2TestBranchPrune.test_single_two_branches_same_cond0  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   r0   r   s      r)   r   z5TestBranchPrune.test_cond_is_kwarg_none.<locals>.implD  r   r+   FTr   r   N)rr   r	   Omittedr   r   r   s     r)   test_cond_is_kwarg_nonez'TestBranchPrune.test_cond_is_kwarg_noneB  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   r0   r   s      r)   r   z6TestBranchPrune.test_cond_is_kwarg_value.<locals>.implX  s5    DyyDyya4Kr+   r   r   TF)r   )rr   r	   r   r   r   r   s     r)   test_cond_is_kwarg_valuez(TestBranchPrune.test_cond_is_kwarg_valueV  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      r0   r}   s    r)   fnz8TestBranchPrune.test_cond_rewrite_is_correct.<locals>.fnn  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binoprB   rC   rD   )r*   r@   rU   rV   condr   get_definitionoprd   rO   rP   rQ   r   
assertTrue
isinstancer   Constvalue)r'   arg_tysbit_valr!   rj   pred_var	pred_defncondition_varcondition_opnew_condition_defnr;   s             r)   checkz;TestBranchPrune.test_cond_rewrite_is_correct.<locals>.checks  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_correctk  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)rr   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   r0   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   r0   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      r0   )arrayas     r)   r   zRTestBranchPrune.test_redefined_variables_are_not_considered_in_prune.<locals>.impl  s    y1uur2r+   r   Cr   r      r   rr   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      r0   )r   r   r~   s      r)   r   z7TestBranchPrune.test_comparison_operators.<locals>.impl  s&    Ayr 1uurHr+   r   r   r   FrE   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   r0   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   r0   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   r0   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   r0   r}   s   r)   closurezRTestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.impl.<locals>.closureF      r+   r   TFr0   )r  r~   s    @r)   r   zATestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.implC  sA    A     GIIIAvvtur+   r0   F)rr   r   s     r)   #test_closure_and_nonlocal_can_prunez3TestBranchPrune.test_closure_and_nonlocal_can_prune@  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   r0   )tr~   s    r)   r  zUTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.impl.<locals>.closureY  r  r+   r   TFr0   )nr  r~   s     @r)   r   zDTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.implV  sC    A     GAJJJAvvtur+   r{   )rr   r	   int64r   s     r)   &test_closure_and_nonlocal_cannot_prunez6TestBranchPrune.test_closure_and_nonlocal_cannot_pruneS  s9    	 	 	 	$;;;;;r+   N)rs   rt   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r0   r+   r)   rx   rx      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 )2V  4G G G,2 2 2"1 1 166 6 6,6 6 607 7 7@/ / /&< < < < <r+   rx   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 r0   r0   )r2   kvs      r)   
<dictcomp>zMTestBranchPrunePredicates._literal_const_sample_generator.<locals>.<dictcomp>|  s    GGGdaQGGGr+   c                     g | ]\  }}|S r0   r0   )r2   r3   r  s      r)   r4   zMTestBranchPrunePredicates._literal_const_sample_generator.<locals>.<listcomp>  s    DDD$!QADDDr+   )	co_consts)
__code__rW   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_generatorp  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   r0   )r~   _CONST1_CONST2s      r)   r   zCTestBranchPrunePredicates.test_literal_const_code_gen.<locals>.impl  s#    $G )w(Q;r+   r   r   )r{   r   r2  )Nr   r|   r   r   r|      )r/  r#  r"  rU   )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 Nr3  r|   r0   r~   r5  s     r)   r   z<TestBranchPrunePredicates.test_single_if_const.<locals>.impl  s    $G w r+   FTr{   r   _TRUTHY_FALSEYr/  rr   r	   r   r;   r   c_inprc   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>  r0   r?  s     r)   r   zCTestBranchPrunePredicates.test_single_if_negate_const.<locals>.impl  s    $G w r+   FTr{   r   r@  rC  s         r)   test_single_if_negate_constz5TestBranchPrunePredicates.test_single_if_negate_const  rG  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 Nr3  r|   r   r0   r?  s     r)   r   zATestBranchPrunePredicates.test_single_if_else_const.<locals>.impl  s    $G wwr+   FTr{   r   r@  rC  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 rM  r0   r?  s     r)   r   zHTestBranchPrunePredicates.test_single_if_else_negate_const.<locals>.impl  s    $G wwr+   FTr{   r   r@  rC  s         r)    test_single_if_else_negate_constz:TestBranchPrunePredicates.test_single_if_else_negate_const  rO  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   r0   r~   rE  s    r)   r'   z>TestBranchPrunePredicates.test_single_if_freevar.<locals>.func  s     .&~-. .r+   r   rA  rB  rr   r	   r   r;   rD  rc   r'   rE  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   r0   rU  s    r)   r'   zETestBranchPrunePredicates.test_single_if_negate_freevar.<locals>.func  s      .&~-. .r+   r   rV  rW  s       @r)   test_single_if_negate_freevarz7TestBranchPrunePredicates.test_single_if_negate_freevar  rY  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   r0   rU  s    r)   r'   zCTestBranchPrunePredicates.test_single_if_else_freevar.<locals>.func  s     .&~-&~-r+   r   rV  rW  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   r0   rU  s    r)   r'   zJTestBranchPrunePredicates.test_single_if_else_negate_freevar.<locals>.func  s      .&~-&~-r+   r   rV  rW  s       @r)   "test_single_if_else_negate_freevarz<TestBranchPrunePredicates.test_single_if_else_negate_freevar  r`  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   )rA  rB  rf  rr   r	   r   r;   rD  rc   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   )rA  rB  rl  rr   r	   r   rg  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   )rA  rB  rp  rr   r	   r   rg  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>.func1  s#    > L&(KKK&(KKKr+   r   )rA  rB  rt  rr   r	   r   rg  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   )r7   r?   s     r)   fooz6TestBranchPrunePredicates.test_issue_5618.<locals>.foo;  s*    Xa[[FC  q	Mr+   r   g     Є@)r   assertPreciseEqualpy_func)r;   rx  s     r)   test_issue_5618z)TestBranchPrunePredicates.test_issue_56189  sf    		 	 
	 	a 0$777a$/////r+   N)rs   rt   ru   rA  rB  r/  r;  rF  rJ  rN  rR  rX  r\  r_  rc  ri  rm  rq  ru  r{  r0   r+   r)   r  r  g  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_pipelinesK  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)rs   rt   ru   r  r0   r+   r)   SSAPrunerCompilerr  J  s#        	 	 	 	 	r+   r  c                     t          | j                  dd            }|                      |            |                                           d S )Npipeline_classc                 &    d}d}| d}|r|d}||fS )Nr{   FTr   r0   )pqr   rs       r)   r   z4TestBranchPruneSSA.test_ssa_update_phi.<locals>.implb  s2    AAy Q]
 a4Kr+   r  )r   r  ry  rz  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   r0   )r  r   s     r)   r   z5TestBranchPruneSSA.test_ssa_replace_phi.<locals>.implw  s    AyHr+   r   preserved_irphir   )r   r  ry  rz  r`   
signaturesmetadatar6   r7   assertFalse
find_exprs)r;   r   r!   r>   s       r)   test_ssa_replace_phiz'TestBranchPruneSSA.test_ssa_replace_phis  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)rs   rt   ru   r   r  r  r  r0   r+   r)   r}  r}  G  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{   TrE   )r   )rr   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   rV   )tups    r)   r   zETestBranchPrunePostSemanticConstRewrites.test_tuple_len.<locals>.impl  s1    3xx1}}q6Q;;1 ; qr+   r   Fr{   r   r   r   TrE   r{   )rr   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_ratior0   r+   r)   testzHTestBranchPrunePostSemanticConstRewrites.test_attr_not_len.<locals>.test  s    ""4(((((r+   z$Unknown attribute 'as_integer_ratio')r   assertRaisesr
   TypingErrorassertInstr	exception)r;   r  rm   s      r)   test_attr_not_lenz:TestBranchPrunePostSemanticConstRewrites.test_attr_not_len  s     
	) 	) 
	) v122 	a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)rM   forceobj)rL   )
collections
namedtuplerr   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   ry  rz  )r;   r   rd   s      r)   5test_semantic_const_propagates_before_static_rewritesz^TestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewrites  sh     
	$ 	$ 
	$ &&(8(89d\T\4-@AAAAAr+   c                 \   t          t                    d             }d}|                      ||  |j        |            |j        |j        d                  }|j        d         }t                      }|j        	                                D ]}}|
                    d          D ]e}|                    |j        j                  }|                     |j        t           j                   |                    |j        j                   f~|                     |d |D                        d S )Nr  c                  R    d}t          |           D ]}|t          |          z  }|S r  )r   rV   )rd   sargs      r)   r   zSTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.impl  s4    A%d++  SXXHr+   )r0   r  r0   r   r  inplace_binopc                 ,    h | ]}t          |          S r0   r  )r2   r~   s     r)   	<setcomp>zXTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.<setcomp>  s    '<'<'<1A'<'<'<r+   )r   r   ry  rz  r`   r  r  r[   r6   r7   r  find_variable_assignmentrhsnameassertIsInstancer   r   r   addrU   )	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)	rs   rt   ru   r  r  r  r  r  r  r0   r+   r)   r  r    sw        * * * ) ) ) P P P E E E(	B 	B 	B> > > > >r+   r  )0r  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   r   enable_pyobj_flagsenable_pyobjectr*   r-   rx   r  r}  r  r0   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 UWW %)  "
 
 
c( c( c( c( c(/8 c( c( c(LW< W< W< W< W<); W< W< W<t]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+   