
    ܙd)                        d dl Z d dlZd dlZd dlmZmZmZm	Z	 d dl
mZmZmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZmZ d d	l m!Z!m"Z"m#Z#m$Z$m%Z% d d
lm&Z&m'Z'm(Z( da) e            Z*de*_+        d Z, G d dee          Z- G d de-e          Z. G d de-e          Z/ G d dee          Z0 G d de-          Z1dS )    N)compile_isolatedrun_frontendFlags	StateDict)jitnjitliteral_unroll)typeserrorsirrewritesir_utilsutilscpu)postproc)InlineClosureCallPass)TestCaseMemoryLeakMixinSerialMixinIRPreservingTestPipeline)dead_branch_prunerewrite_semantic_constants)ReconstructSSATranslateByteCodeIRProcessingDeadBranchPrune
PreserveIR)DefaultPassBuilderCompilerBasePassManager{   Tc                     t          |           }t                      }||_        d |_        d |_        t                                          |           t          j        	                    d|           |S )Nzbefore-inference)
r   r   func_irtypemap	calltypesr   run_passr   rewrite_registryapply)funcr#   states      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  r2   .0_s     r+   
<listcomp>z5TestBranchPruneBase.find_branches.<locals>.<listcomp>1   s    <<<1<<<r-   )cls)blocksvalues
find_instsr   Branchextend)selfthe_irbranchesblktmps        r+   find_branchesz!TestBranchPruneBase.find_branches.   sa    ='')) 	! 	!C<<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          }|rd|ini }t5          ||fi |}||                                } |            }n |j        | } || }|                     ||           d S )NP================================================================================zbefore inlineFbefore pruneafter pruneTbothr   unreachablec                     g | ]}|S r2   r2   r3   s     r+   r6   z4TestBranchPruneBase.assert_prune.<locals>.<listcomp>u   s    ???Qq???r-   c                     g | ]}|S r2   r2   r3   s     r+   r6   z4TestBranchPruneBase.assert_prune.<locals>.<listcomp>v   s    999!999r-   
new_labelsoriginal_labelsexpect_removedflags)r,   copy_DEBUGprintdumpr   r   ParallelOptionsrunr   PostProcessorr   r   rB   assertEquallen	enumerateappendtruebrfalsebrsetr8   keysAssertionErrorsortedpopr   entry_point)r=   r)   args_tyspruneargskwargsr#   beforeinline_pass	post_procafterbefore_branchesrM   idxbranchrL   rK   esupplied_flagscompiler_kwscresresexpecteds                          r+   assert_prunez TestBranchPruneBase.assert_prune5   s     %%; 	(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		  GU334BJ00h??,??<""$$CtvvHH"$"D)CtT{Hh'''''s   
&J1 1
L;ALLN)__name__
__module____qualname____doc__rP   rB   rs   r2   r-   r+   r/   r/   '   sH          F  U( U( U( U( U(r-   r/   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestBranchPrunec                    d }|                      |t          j        d          fdgd            d }|                      |t          j        d          fdgd            d }|                      |t          j        d          fdgd            |                      |t          j        d          fdgd           d }|                      |t          j        d          fdgd            |                      |t          j        d          fd gd           d	 }|                      |t          j        d          fdgd            |                      |t          j        d          fd gd           d
 }|                      |t          j        d          fdgd            |                      |t          j        d          fdgd           d S )Nc                     ddk    rdS d S )N   r   n!	@r2   xs    r+   implz,TestBranchPrune.test_single_if.<locals>.impl       Avvw vr-   noneTc                     ddk    rdS d S )Nr|   r}   r2   r~   s    r+   r   z,TestBranchPrune.test_single_if.<locals>.impl   r   r-   Fc                     | dS d S Nr}   r2   r~   s    r+   r   z,TestBranchPrune.test_single_if.<locals>.impl   s    yw yr-   
   c                     | dk    rdS d S Nr   r}   r2   r~   s    r+   r   z,TestBranchPrune.test_single_if.<locals>.impl   s    Bwww wr-   c                     | dk    rd}d S d S r   r2   )r   zs     r+   r   z,TestBranchPrune.test_single_if.<locals>.impl   s    Bww wr-   c                     d }|}| |k    rdS d S )Nd   r2   )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?r2   r~   s    r+   r   z1TestBranchPrune.test_single_if_else.<locals>.impl   s    ywwr-   r   Fr   Tr   r   s     r+   test_single_if_elsez#TestBranchPrune.test_single_if_else   sl    	 	 	 	$!7!7 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}   r2   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   r2   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   r2   )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   r2   )r   x_is_none_workdeadr   s       r+   r   zJTestBranchPrune.test_single_if_else_w_following_undetermined.<locals>.impl   s1    "Ny!% Hr-   r   Fr   Tc                 $    d}| d}n	 |rd}nd}|S )NFTr   r   r2   )r   r   r   s      r+   r   zJTestBranchPrune.test_single_if_else_w_following_undetermined.<locals>.impl   s/    "Ny!% Hr-   )   r   )rs   r
   r   r   r   	PYVERSIONr   s     r+   ,test_single_if_else_w_following_undeterminedz<TestBranchPrune.test_single_if_else_w_following_undetermined   s)   	 	 	 	$!7!7 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   r2   )r   one_hundredr   r   r   s        r+   r   z:TestBranchPrune.test_double_if_else_rt_const.<locals>.impl  s?    KNy!$,,n$$r-   r   Fr   Tr   r   s     r+   test_double_if_else_rt_constz,TestBranchPrune.test_double_if_else_rt_const  sp    	% 	% 	% 	$!7!7 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   r2   )r   r   r   s      r+   r   zCTestBranchPrune.test_double_if_else_non_literal_const.<locals>.impl(  s#    KKHr-   r   r   rs   r
   r   r   s     r+   %test_double_if_else_non_literal_constz5TestBranchPrune.test_double_if_else_non_literal_const&  sm    	 	 	 	$!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     r2   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   r2   r   s      r+   r   z5TestBranchPrune.test_cond_is_kwarg_none.<locals>.implH  r   r-   FTr   r   N)rs   r
   Omittedr   r   r   s     r+   test_cond_is_kwarg_nonez'TestBranchPrune.test_cond_is_kwarg_noneF  s    	 	 	 	 	$t!4!4 6 $-	/ 	/ 	/$!7!7 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   r2   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      r2   r~   s    r+   fnz8TestBranchPrune.test_cond_rewrite_is_correct.<locals>.fnr  s    yr2r-   c                 H   t          |           }
                    |          }
                    t          |          d           |d         j        }t          j        ||          }
                    |j        d           |j        d         }t          j        ||          }
                    |j        d           
j	        r2t          d           t          d           |                                 t          ||           
j	        r2t          d           t          d           |                                 t          j        ||          }	
                    t          |	t          j                             
                    |	j        |           d S )Nr|   r   callbinoprD   rE   rF   )r,   rB   rV   rW   condr   get_definitionoprd   rP   rQ   rR   r   
assertTrue
isinstancer   Constvalue)r)   arg_tysbit_valr#   rj   pred_var	pred_defncondition_varcondition_opnew_condition_defnr=   s             r+   checkz;TestBranchPrune.test_cond_rewrite_is_correct.<locals>.checkw  sx   #D))G #009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                 N   t           d             }|                      |t          j        d          d          d           |                      |t          j        d          d           t                                 |                      |t          j        d                              d          d          g            |                      |t          j        d                              d          d           g            |                     |j                   d S )Nc                 @    | j         dk    r|t                      S dS g S )Nr|   r   )ndimdictabs     r+   bugz3TestBranchPrune.test_obj_mode_fallback.<locals>.bug  s%    v{{966MrIr-   r   r   r   )r      )	r   rV   npzerosaranger   reshapeassertFalsenopython_signatures)r=   r   s     r+   test_obj_mode_fallbackz&TestBranchPrune.test_obj_mode_fallback  s    
	 	 
	 	RXb\\1--r222RYr]]D11466:::RYr]]226::B??DDDRYr]]226::DAA2FFF011111r-   c                     d }|                      |t          j        d          fdgd           t          }	 dad }|                      |t          j        d          fdgd           |ad S # |aw xY w)Nc                 &    t           dk    r| S | dz   S Nr!   r   _GLOBALr~   s    r+   r   z1TestBranchPrune.test_global_bake_in.<locals>.impl  s    #~~2vr-   r|   Fr   c                 &    t           dk    r| S | dz   S r   r   r~   s    r+   r   z1TestBranchPrune.test_global_bake_in.<locals>.impl  s    c>>Hr6Mr-   T)rs   r
   r   r   )r=   r   rA   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   r2   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   r2   r   s    r+   r   z2TestBranchPrune.test_freevar_bake_in.<locals>.impl  r   r-   Tr   )r=   r   r   s     @r+   test_freevar_bake_inz$TestBranchPrune.test_freevar_bake_in  s    	 	 	 	 	 	$!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      r2   )arrayr   s     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   r   r   r   s     r+   4test_redefined_variables_are_not_considered_in_prunezDTestBranchPrune.test_redefined_variables_are_not_considered_in_prune  sw    	 	 	 	 	$ ;u}a== >&114,(6**D		2 	2 	2 	2 	2r-   c                 z   d	d}|                      |t          j        t          j        dd          t          j        d          fddgt          j        d          d            |                      |t          j        t          j        dd          t          j        fd d gt          j        d          d           d S )
Nc                 "    d}|dS |dk     rdS |S Nr   r      r2   )r   r   r   s      r+   r   z7TestBranchPrune.test_comparison_operators.<locals>.impl  s&    Ayr 1uurHr-   r   r   r   FrG   r   g      (@r   r   r   s     r+   test_comparison_operatorsz)TestBranchPrune.test_comparison_operators  s    
	 	 	 	 	$ ;u}a== >&114 &/(6**D		2 	2 	2 	$ ;u}a== =+,(6**C		1 	1 	1 	1 	1r-   c                     dd}|                      |t          j        t          j        dd          t          j        t          j        d          fg dt          j        d          dd            d S )	Nc                 D    d}|dk     rd}|d}nd}|dk     rdS d|z   |z   S )	Nr   r   r   r      r   r   r   r2   r   r   r   r   s       r+   r   zCTestBranchPrune.test_redefinition_analysis_same_block.<locals>.impl  sB    A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   r2   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   r2   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_exec6  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   r2   r~   s   r+   closurezRTestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.impl.<locals>.closure\      r-   r   TFr2   )r  r   s    @r+   r   zATestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.implY  sA    A     GIIIAvvtur-   r2   F)rs   r   s     r+   #test_closure_and_nonlocal_can_prunez3TestBranchPrune.test_closure_and_nonlocal_can_pruneV  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   r2   )tr   s    r+   r  zUTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.impl.<locals>.closureo  r  r-   r   TFr2   )nr  r   s     @r+   r   zDTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.impll  sC    A     GAJJJAvvtur-   r|   )rs   r
   int64r   s     r+   &test_closure_and_nonlocal_cannot_prunez6TestBranchPrune.test_closure_and_nonlocal_cannot_prunei  s9    	 	 	 	$;;;;;r-   N)rt   ru   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r$  r2   r-   r+   ry   ry      st       *I *I *IX	I 	I 	IK K K"Q Q Q"(O (O (OTO O O(K K KP P P$P P P(P P P*)2 )2 )2V2 2 2$  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 r2   r2   )r4   kvs      r+   
<dictcomp>zMTestBranchPrunePredicates._literal_const_sample_generator.<locals>.<dictcomp>  s    GGGdaQGGGr-   c                     g | ]\  }}|S r2   r2   )r4   r5   r,  s      r+   r6   zMTestBranchPrunePredicates._literal_const_sample_generator.<locals>.<listcomp>  s    DDD$!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_generator  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   r2   )r   _CONST1_CONST2s      r+   r   zCTestBranchPrunePredicates.test_literal_const_code_gen.<locals>.impl  s#    $G )w(Q;r-   r   r  )r|   r   r?  )Nr   r}   r  r   r}      )r<  r0  r/  rV   )r=   r   newiconstnconsts        r+   test_literal_const_code_genz5TestBranchPrunePredicates.test_literal_const_code_gen  s    	 	 	 2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 Nr@  r}   r2   r   rB  s     r+   r   z<TestBranchPrunePredicates.test_single_if_const.<locals>.impl  s    $G w r-   FTr|   r   _TRUTHY_FALSEYr<  rs   r
   r   r=   r   c_inprc   constr)   s         r+   test_single_if_constz.TestBranchPrunePredicates.test_single_if_const      	 	 	
 "\5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 rK  r2   rL  s     r+   r   zCTestBranchPrunePredicates.test_single_if_negate_const.<locals>.impl  s    $G w r-   FTr|   r   rM  rP  s         r+   test_single_if_negate_constz5TestBranchPrunePredicates.test_single_if_negate_const  rT  r-   c                     d }| j         df| j        dffD ]N\  }}|D ]F}|                     |d|i          }|                     |t	          j        d          f|gd            GOd S )Nc                     d}|rdS dS Nr@  r}   r   r2   rL  s     r+   r   zATestBranchPrunePredicates.test_single_if_else_const.<locals>.impl  s    $G wwr-   FTr|   r   rM  rP  s         r+   test_single_if_else_constz3TestBranchPrunePredicates.test_single_if_else_const      	 	 	 "\5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 rZ  r2   rL  s     r+   r   zHTestBranchPrunePredicates.test_single_if_else_negate_const.<locals>.impl  s    $G wwr-   FTr|   r   rM  rP  s         r+    test_single_if_else_negate_constz:TestBranchPrunePredicates.test_single_if_else_negate_const  r\  r-   c                     | j         df| j        dffD ];\  }}|D ]3fd}|                     |t          j        d          f|gd            4<d S )NFTc                     rdfS d S r   r2   r   rR  s    r+   r)   z>TestBranchPrunePredicates.test_single_if_freevar.<locals>.func  s     .&~-. .r-   r   rN  rO  rs   r
   r   r=   rQ  rc   r)   rR  s       @r+   test_single_if_freevarz0TestBranchPrunePredicates.test_single_if_freevar      !\5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   r2   rb  s    r+   r)   zETestBranchPrunePredicates.test_single_if_negate_freevar.<locals>.func  s      .&~-. .r-   r   rc  rd  s       @r+   test_single_if_negate_freevarz7TestBranchPrunePredicates.test_single_if_negate_freevar  rf  r-   c                     | j         df| j        dffD ];\  }}|D ]3fd}|                     |t          j        d          f|gd            4<d S )NFTc                     rdfS dfS r   r2   rb  s    r+   r)   zCTestBranchPrunePredicates.test_single_if_else_freevar.<locals>.func  s     .&~-&~-r-   r   rc  rd  s       @r+   test_single_if_else_freevarz5TestBranchPrunePredicates.test_single_if_else_freevar      !\5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   r2   rb  s    r+   r)   zJTestBranchPrunePredicates.test_single_if_else_negate_freevar.<locals>.func  s      .&~-&~-r-   r   rc  rd  s       @r+   "test_single_if_else_negate_freevarz<TestBranchPrunePredicates.test_single_if_else_negate_freevar  rm  r-   c                     | j         df| j        dffD ];\  }}|D ]3}|ad }|                     |t	          j        d          f|gd            4<d S )NFTc                 &    t           r	dt           fS d S r   )c_test_single_if_globalr~   s    r+   r)   z=TestBranchPrunePredicates.test_single_if_global.<locals>.func  s#    . @&(???@ @r-   r   )rN  rO  rs  rs   r
   r   r=   rQ  rc   cr)   s        r+   test_single_if_globalz/TestBranchPrunePredicates.test_single_if_global  s     "\5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   )rN  rO  ry  rs   r
   r   rt  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>.func8  s#    3 E&(DDD&(DDDr-   r   )rN  rO  r}  rs   r
   r   rt  s        r+   test_single_if_else_globalz4TestBranchPrunePredicates.test_single_if_else_global1  s     "\5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>.funcG  s#    > L&(KKK&(KKKr-   r   )rN  rO  r  rs   r
   r   rt  s        r+   !test_single_if_else_negate_globalz;TestBranchPrunePredicates.test_single_if_else_negate_global@  s     "\5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   )r9   rA   s     r+   fooz6TestBranchPrunePredicates.test_issue_5618.<locals>.fooQ  s*    Xa[[FC  q	Mr-   r   g     Є@)r   assertPreciseEqualpy_func)r=   r  s     r+   test_issue_5618z)TestBranchPrunePredicates.test_issue_5618O  sf    		 	 
	 	a 0$777a$/////r-   N)rt   ru   rv   rN  rO  r<  rH  rS  rW  r[  r_  re  ri  rl  rp  rv  rz  r~  r  r  r2   r-   r+   r&  r&  }  s        +G+G9 9 9.( ( ($( ( (( ( (( ( (( ( (( ( (( ( (
( 
( 
(
( 
( 
(( ( (( ( (( ( (( ( (0 0 0 0 0r-   r&  c                   6    e Zd Z G d de          Zd Zd ZdS )TestBranchPruneSSAc                       e Zd Zd ZdS )$TestBranchPruneSSA.SSAPrunerCompilerc                 N   t          d          }|                    t          d           |                    t          d           |                    t          d           |                    t
          d           |                    t          d           t          }|                    | j	                  }|j
                            |j
                   |                    | j	                  }|j
                            |j
                   |                                 |gS )Nz
testing pmzanalyzing bytecodezprocessing IRssazdead branch pruningzpreserves the IR as metadata)r    add_passr   r   r   r   r   r   define_typed_pipeliner*   passesr<   !define_nopython_lowering_pipelinefinalize)r=   pmdpbtyped_passeslowering_passess        r+   define_pipelinesz5TestBranchPruneSSA.SSAPrunerCompiler.define_pipelinesa  s     \**B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  r2   r-   r+   SSAPrunerCompilerr  `  s#        	 	 	 	 	r-   r  c                     t          | j                  dd            }|                      |            |                                           d S )Npipeline_classc                 &    d}d}| d}|r|d}||fS )Nr|   FTr  r2   )pqr   rs       r+   r   z4TestBranchPruneSSA.test_ssa_update_phi.<locals>.implx  s2    AAy Q]
 a4Kr-   r  )r   r  r  r  r   s     r+   test_ssa_update_phiz&TestBranchPruneSSA.test_ssa_update_phit  s]     
T3	4	4	4	 	 	 
5	4	 	77777r-   c                 v   t          | j                  dd            }|                      |            |                                           |j        |j        d                  j        d         }|j                                        D ],}| 	                    g |
                    d                     -d S )Nr  c                     d}| d}nd}|S r  r2   )r  r   s     r+   r   z5TestBranchPruneSSA.test_ssa_replace_phi.<locals>.impl  s    AyHr-   r   preserved_irphir   )r   r  r  r  	overloads
signaturesmetadatar8   r9   r   
find_exprs)r=   r   r#   r@   s       r+   test_ssa_replace_phiz'TestBranchPruneSSA.test_ssa_replace_phi  s     
T3	4	4	4	 	 	 
5	4	 	777.!34=nM >((** 	7 	7C5s~~e4456666	7 	7r-   N)rt   ru   rv   r   r  r  r  r2   r-   r+   r  r  ]  s\            L   (8 8 8*7 7 7 7 7r-   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )(TestBranchPrunePostSemanticConstRewritesc                 8   d }|                      |t          j        t          j        dd          fdd gt	          j        d                     |                      |t          j        t          j        dd          fddgt	          j        d	                     d S )
Nc                 F    | j         dk    r| j        d         dk    rdS d S dS )Nr   r|   r   )r   shape)r   s    r+   r   zKTestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr.<locals>.impl  s2    zQ;q>Q&&1 '& rr-   r   r   Fr   r|   TrG   )r   )rs   r
   r  r  r   r   r   s     r+   test_array_ndim_attrz=TestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr  s    	 	 	 	$U]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   TrG   r|   )rs   r
   UniTupler#  r2  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_ratior2   r-   r+   testzHTestBranchPrunePostSemanticConstRewrites.test_attr_not_len.<locals>.test  s    ""4(((((r-   z$Unknown attribute 'as_integer_ratio')r   assertRaisesr   TypingErrorassertInstr	exception)r=   r  rm   s      r+   test_attr_not_lenz:TestBranchPrunePostSemanticConstRewrites.test_attr_not_len  s     
	) 	) 
	) v122 	aDFFF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	<c!+>N>NOOOOOs   AAAc                 f   t          j        ddg          } |d          }d }|                     |t          j        t          j        dd          fdgt          j        d                     t          j        t          j	        d	|          }|                     ||fd g|t          
           d S )N	FakeArrayr   r   )r   c                 F    | j         dk    r| j         S t                       d S )Nr   )r   object)fas    r+   r   zMTestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_array.<locals>.impl  s!    w!||wr-   r   Fr   r|   )rN   )collections
namedtuplers   r
   r  r  r   r   NamedUniTupler#  enable_pyobj_flags)r=   r  r  r   FakeArrayTypes        r+   test_ndim_not_on_arrayz?TestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_array  s    *;AA	YA	 	 	 	$U]As!C!C Ew(6**	, 	, 	, +EKIFF$ 04&" 2 	 	4 	4 	4 	4 	4r-   c                     t           d             }t          j        d          t          j        d          f}|                      ||  |j        |            d S )Nc                 *    | j         d |j                 S r   )r  r   r   s     r+   r   zlTestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewrites.<locals>.impl  s    77AF7##r-   )r   r   r   r   )r|   r|   )r   r   r   r  r  )r=   r   rd   s      r+   5test_semantic_const_propagates_before_static_rewritesz^TestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewrites  sh     
	$ 	$ 
	$ &&(8(89d\T\4-@AAAAAr-   c                 \   t          t                    d             }d}|                      ||  |j        |            |j        |j        d                  }|j        d         }t                      }|j        	                                D ]}}|
                    d          D ]e}|                    |j        j                  }|                     |j        t           j                   |                    |j        j                   f~|                     |d |D                        d S )Nr  c                  R    d}t          |           D ]}|t          |          z  }|S r  )r	   rW   )rd   sargs      r+   r   zSTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.impl  s4    A%d++  SXXHr-   )r2   r  r2   r   r  inplace_binopc                 ,    h | ]}t          |          S r2   r  )r4   r   s     r+   	<setcomp>zXTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.<setcomp>  s    '<'<'<1A'<'<'<r-   )r   r   r  r  r  r  r  r\   r8   r9   r  find_variable_assignmentrhsnameassertIsInstancer   r   r   addrV   )	r=   r   inpolr#   binop_constsr@   exprinsts	            r+   test_tuple_const_propagationzETestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation  s3   	5	6	6	6	 	 
7	6	 "c
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  r2   r-   r+   r  r    st        * * * ) ) ) P P P 4 4 4(	B 	B 	B> > > > >r-   r  )2r  r
   r4  numpyr   numba.core.compilerr   r   r   r   numbar   r   r	   
numba.corer   r   r   r   r   r   r   numba.core.inline_closurecallr   numba.tests.supportr   r   r   r   numba.core.analysisr   r   numba.core.untyped_passesr   r   r   r   r   r   r   r    r   r  enable_pyobjectr,   r/   ry   r&  r  r  r2   r-   r+   <module>r     s               P P P P P P P P P P P P + + + + + + + + + + H H H H H H H H H H H H H H H H H H       ? ? ? ? ? ?; ; ; ; ; ; ; ; ; ; ; ; M M M M M M M M3 3 3 3 3 3 3 3 3 3 3 3 3 3 N M M M M M M M M M UWW %)  "
 
 
c( c( c( c( c(/8 c( c( c(Lm< m< m< m< m<); m< m< m<`]0 ]0 ]0 ]0 ]0 3[ ]0 ]0 ]0@?7 ?7 ?7 ?7 ?7( ?7 ?7 ?7Df> f> f> f> f>/B f> f> f> f> f>r-   