
    .|h                     p   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/y)    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               j                  |       t        j                  j                  d|       |S )Nzbefore-inference)
r   r   func_irtypemap	calltypesr   run_passr   rewrite_registryapply)funcr!   states      X/var/www/html/test/engine/venv/lib/python3.12/site-packages/numba/tests/test_analysis.pycompile_to_irr*      sU    4 GKEEMEMEOe$##$6>N    c                        e Zd ZdZdZd Zd Zy)TestBranchPruneBasez
    Tests branch pruning
    Fc                     g }|j                   j                         D ]@  }|j                  t        j                        D cg c]  }| }}|j                  |       B |S c c}w )N)cls)blocksvalues
find_instsr   Branchextend)selfthe_irbranchesblk_tmps         r)   find_branchesz!TestBranchPruneBase.find_branches.   s]    =='') 	!C!nnn;<1<C<OOC 	!  =s   	A"c                 t   t        |      }|j                         }| j                  r&t        d       t        d       |j	                          t        |t        j                  d            }|j                          t        j                  |      }	|	j                          t        ||       | j                  r&t        d       t        d       |j	                          t        ||       |}
| j                  rt        d       |j	                          | j                  |      }| j                  t        |      t        |             g }t!        |      D ]  \  }}||   }|du r|j#                  |j$                         +|du r|j#                  |j&                         K|N|dk(  r7|j#                  |j&                         |j#                  |j$                         J d        t)        |j*                  j-                         D cg c]  }| c}      }t)        |
j*                  j-                         D cg c]  }| c}      }	 | j                  ||t)        |      z
         |j3                  dddi      } t5        |fi ||      j6                  |   }||j9                         } |       }n |j8                  | } || }| j                  ||       y c c}w c c}w # t.        $ rF}t        d	t1        |             t        d
t1        |             t        dt1        |             |d }~ww xY w)NP================================================================================zbefore inlineFbefore pruneafter pruneTbothunreachable
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setr0   keysAssertionErrorsortedpopr   	overloadsentry_point)r5   r'   args_tyspruneargskwargsr!   beforeinline_pass	post_procafterbefore_branchesrD   idxbranchr9   rC   rB   esupplied_flagscresresexpecteds                          r)   assert_prunez TestBranchPruneBase.assert_prune5   s     %;;(O/"LLN ,G,/,?,?,FI **73	"7H5;;(O.!LLN'8,;;- LLN,,V4_-s5z: #E* 	(JC$S)F}%%fmm4%%%fnn5&%%fnn5%%fmm4'-'q	( &--*<*<*>?Qq?@U\\%6%6%89!9:
	Z3~;N)NO  Gj$-?@.s8.~.t4>>xH<""$CvH"$""D)CT{Hh'+ @9
  	,z 23#VO%<="F>$:;G		s%   
	K;	K#K( (	L71AL22L7N)__name__
__module____qualname____doc__rH   r;   rk    r+   r)   r-   r-   '   s     F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y)TestBranchPrunec                 \   d }| j                  |t        j                  d      fdgd        d }| j                  |t        j                  d      fdgd        d }| j                  |t        j                  d      fdgd        | j                  |t        j                  d      fdgd       d }| j                  |t        j                  d      fdgd        | j                  |t        j                  d      fd gd       d	 }| j                  |t        j                  d      fdgd        | j                  |t        j                  d      fd gd       d
 }| j                  |t        j                  d      fdgd        | j                  |t        j                  d      fdgd       y )Nc                     ddk(  ryy )N   r   n!	@rp   xs    r)   implz,TestBranchPrune.test_single_if.<locals>.impl       Av r+   noneTc                     ddk(  ryy )Nru   rv   rp   rw   s    r)   ry   z,TestBranchPrune.test_single_if.<locals>.impl   rz   r+   Fc                 
    | yy Nrv   rp   rw   s    r)   ry   z,TestBranchPrune.test_single_if.<locals>.impl   s    y r+   
   c                     | dk(  ryy Nr   rv   rp   rw   s    r)   ry   z,TestBranchPrune.test_single_if.<locals>.impl   s    Bw r+   c                     | dk(  rd}y y r   rp   )rx   zs     r)   ry   z,TestBranchPrune.test_single_if.<locals>.impl   s    Bw r+   c                     d }|}| |k(  ryy )Nd   rp   )rx   r   ys      r)   ry   z,TestBranchPrune.test_single_if.<locals>.impl   s    AAAv r+   rk   r	   NoneTypeIntegerLiteralr5   ry   s     r)   test_single_ifzTestBranchPrune.test_single_if   s   	 	$!7 9D64H	 	$!7 9E7DI	 	$!7 9E7DI$!5!5b!9 ;dVRH	 	$!7 9D64H$!5!5b!9 ;dVRH	 	$!7 9D64H$!5!5b!9 ;dVRH	 	$!7 9E7DI$!5!5b!9 ;dVRHr+   c                     d }| j                  |t        j                  d      fdgd        | j                  |t        j                  d      fdgd       y )Nc                 
    | yyNrv   l&ls?rp   rw   s    r)   ry   z1TestBranchPrune.test_single_if_else.<locals>.impl   s    yr+   r{   Fr   Tr   r   s     r)   test_single_if_elsez#TestBranchPrune.test_single_if_else   sO    	 	$!7 9E7DI$!5!5b!9 ;dVRHr+   c                 X   d }| j                  |t        j                  d      fdgd        | j                  |t        j                  d      fd gd       d }| j                  |t        j                  d      fdgd        | j                  |t        j                  d      fd gd       y )Nc                     | dk(  ryy Nr   rv   rp   rw   s    r)   ry   z6TestBranchPrune.test_single_if_const_val.<locals>.impl   s    Cx r+   r{   Tr   c                     d| k(  ryy r   rp   rw   s    r)   ry   z6TestBranchPrune.test_single_if_const_val.<locals>.impl   s    ax r+   r   r   s     r)   test_single_if_const_valz(TestBranchPrune.test_single_if_const_val   s    	 	$!7 9D64H$!5!5c!: <tfcJ	
 	$!7 9D64H$!5!5c!: <tfcJr+   c                    d }| j                  |t        j                  d      fdz  d gdd       | j                  |t        j                  d      fdz  dgd d        | j                  |t        j                  d      t        j                  d      fdgdd        | j                  |t        j                  d      t        j                  d      fd gdd       y )Nc                     | |k(  ryyr   rp   )rx   r   s     r)   ry   z?TestBranchPrune.test_single_if_else_two_const_val.<locals>.impl   s    Avr+   r      r{   FT  )rk   r	   r   r   r   s     r)   !test_single_if_else_two_const_valz1TestBranchPrune.test_single_if_else_two_const_val   s    	 	$!5!5c!: <q @4&#	$!7 9A =w	 $!5!5c!:!&!7!:<@63	N$!5!5c!:!&!5!5d!;!=?Cfc4	Qr+   c                 `   d }| j                  |t        j                  d      fdd gd        | j                  |t        j                  d      fdd gd       d }| j                  |t        j                  d      fdd gd        | j                  |t        j                  d      fdd gd       y )Nc                 (    d}| d}nd}|rd}|S d}|S )NFT   r   rp   )rx   x_is_none_workdeadr   s       r)   ry   zJTestBranchPrune.test_single_if_else_w_following_undetermined.<locals>.impl   s1    "Ny!% H Hr+   r{   Fr   Tc                 &    d}| d}n	 |rd}|S d}|S )NFTr   r   rp   )rx   r   r   s      r)   ry   zJTestBranchPrune.test_single_if_else_w_following_undetermined.<locals>.impl   s/    "Ny!% H Hr+   r   r   s     r)   ,test_single_if_else_w_following_undeterminedz<TestBranchPrune.test_single_if_else_w_following_undetermined   s    	 	$!7 9E4=$O$!5!5b!9 ;dD\2N	 	$!7 9E4=	  	$!5!5b!9 ;dD\2Nr+   c                     d }| j                  |t        j                  d      fdd gd        | j                  |t        j                  d      fdd gd       y )Nc                 :    d}d}| d}nd}||k(  rd}||fS d}||fS )Nr      r   r   r   rp   )rx   one_hundredr   r   r   s        r)   ry   z:TestBranchPrune.test_double_if_else_rt_const.<locals>.impl  sG    KNy!$, n$$ n$$r+   r{   Fr   Tr   r   s     r)   test_double_if_else_rt_constz,TestBranchPrune.test_double_if_else_rt_const  sS    	% 	$!7 9E4=$O$!5!5b!9 ;dD\2Nr+   c                     d }| j                  |t        j                  d      fd gd       | j                  |t        j                  d      fd gd       y )Nc                      d}| |k(  rd}|S d}|S )Nr   rv   r   rp   )rx   r   r   s      r)   ry   zCTestBranchPrune.test_double_if_else_non_literal_const.<locals>.impl$  s'    KK H Hr+   r   r   rk   r	   r   r   s     r)   %test_double_if_else_non_literal_constz5TestBranchPrune.test_double_if_else_non_literal_const"  sQ    	 	$!5!5b!9 ;dVRH$!5!5c!: <tfcJr+   c                     d }| j                  |t        j                  d      fddgd        | j                  |t        j                  d      fddgd       y )Nc                 ,    | d}nd}| d}||fS d}||fS Nr   (   r     rp   rx   r   r   s      r)   ry   z@TestBranchPrune.test_single_two_branches_same_cond.<locals>.impl2  6    y} a4K a4Kr+   r{   FTr   r   r   s     r)   "test_single_two_branches_same_condz2TestBranchPrune.test_single_two_branches_same_cond0  sS    	 	$!7 9E4=$O$!5!5b!9 ;dE]BOr+   c                    dd}| j                  |t        j                  d       fddgd        | j                  |t        j                  d      fddgd        | j                  |t        j                  d      fddgd       y )Nc                 ,    | d}nd}| d}||fS d}||fS r   rp   r   s      r)   ry   z5TestBranchPrune.test_cond_is_kwarg_none.<locals>.implD  r   r+   FTr{   r   N)rk   r	   Omittedr   r   r   s     r)   test_cond_is_kwarg_nonez'TestBranchPrune.test_cond_is_kwarg_noneB  sz    	 	$t!4 6 $-	/$!7 9E4=$O$!5!5b!9 ;dE]BOr+   c                 \   dd}| j                  |t        j                  d      fd d gd       | j                  |t        j                  d      fd d gd       | j                  |t        j                  d      fd d gd       | j                  |t        j                  d      fddgd        y )Nr   c                 8    | dk(  rd}nd}| dk7  rd}||fS d}||fS )Nr   r   r   r   r   rp   r   s      r)   ry   z6TestBranchPrune.test_cond_is_kwarg_value.<locals>.implX  s:    DyDy a4K a4Kr+   r   r{   TF)r   )rk   r	   r   r   r   r   s     r)   test_cond_is_kwarg_valuez(TestBranchPrune.test_cond_is_kwarg_valueV  s    	 	$t!4 6tdK$!5!5d!; =d|	 $!5!5a!8 :T4L!L$!7 9D%=$Or+   c                      d } fd} ||t        j                  d      fd        ||t        j                  d      fd       y )Nc                 
    | yy)Nr      rp   rw   s    r)   fnz8TestBranchPrune.test_cond_rewrite_is_correct.<locals>.fnn  s    yr+   c                    t        |       }
j                  |      }
j                  t        |      d       |d   j                  }t        j                  ||      }
j                  |j                  d       |j                  d   }t        j                  ||      }
j                  |j                  d       
j                  r&t        d       t        d       |j                          t        ||       
j                  r&t        d       t        d       |j                          t        j                  ||      }	
j                  t        |	t        j                                
j                  |	j"                  |       y )Nru   r   callbinopr=   r>   r?   )r*   r;   rN   rO   condr   get_definitionopr]   rH   rI   rJ   r   
assertTrue
isinstancer   Constvalue)r'   arg_tysbit_valr!   rc   pred_var	pred_defncondition_varcondition_opnew_condition_defnr5   s             r)   checkz;TestBranchPrune.test_cond_rewrite_is_correct.<locals>.checks  s.   #D)G #009OS115 'q)..H //BIY\\62%NN1-M#227MJL\__g6 {{hn%gw/{{hm$ "*!8!8-!POOJ'9288DE/55w?r+   r{   ru   r   r   )r	   r   r   )r5   r   r   s   `  r)   test_cond_rewrite_is_correctz,TestBranchPrune.test_cond_rewrite_is_correctk  sC    	
	@@ 	b5>>&)+Q/b5''+-q1r+   c                     d }| j                  |t        j                  d      fdgd       t        }	 dad }| j                  |t        j                  d      fdgd       |ay # |aw xY w)Nc                 "    t         dk(  r| S | dz   S Nr   r   _GLOBALrw   s    r)   ry   z1TestBranchPrune.test_global_bake_in.<locals>.impl  s    #~2vr+   ru   F   c                 "    t         dk(  r| S | dz   S r   r   rw   s    r)   ry   z1TestBranchPrune.test_global_bake_in.<locals>.impl  s    c>Hr6Mr+   T)rk   r	   r   r   )r5   ry   r:   s      r)   test_global_bake_inz#TestBranchPrune.test_global_bake_in  st    	 	$!5!5a!8 :UGQG 	G" dU%9%9!%<$>JGcGs   .A% %A)c                     dfd}| j                  |t        j                  d      fdgd       dfd}| j                  |t        j                  d      fdgd       y )Nr   c                     dk(  r| S | dz   S r   rp   rx   _FREEVARs    r)   ry   z2TestBranchPrune.test_freevar_bake_in.<locals>.impl      32vr+   ru   Fr   c                     dk(  r| S | dz   S r   rp   r   s    r)   ry   z2TestBranchPrune.test_freevar_bake_in.<locals>.impl  r   r+   Tr   )r5   ry   r   s     @r)   test_freevar_bake_inz$TestBranchPrune.test_freevar_bake_in  sc    	 	$!5!5a!8 :UGQG	 	$!5!5a!8 :TFAFr+   c                     dd}| j                  |t        j                  t        j                  dd      t        j                  d      fd d gt        j                  d      d        y )Nc                     |d}|dk  ryy)Nr   r      rp   )arrayas     r)   ry   zRTestBranchPrune.test_redefined_variables_are_not_considered_in_prune.<locals>.impl  s    y1ur+   r   Cr{   r      r   rk   r	   Arrayfloat64r   npzerosr   s     r)   4test_redefined_variables_are_not_considered_in_prunezDTestBranchPrune.test_redefined_variables_are_not_considered_in_prune  sS    	 	$ ;;u}}a= >>&14,((6*D		2r+   c                    d	d}| j                  |t        j                  t        j                  dd      t        j                  d      fddgt        j                  d      d        | j                  |t        j                  t        j                  dd      t        j                  fd d gt        j                  d      d       y )
Nc                     d}|y|dk  ry|S Nr   r      rp   )r   r   rx   s      r)   ry   z7TestBranchPrune.test_comparison_operators.<locals>.impl  s     Ay 1uHr+   r   r   r{   Fr@   r   g      (@r   r   r   s     r)   test_comparison_operatorsz)TestBranchPrune.test_comparison_operators  s    
	 	$ ;;u}}a= >>&14 &/((6*D		2 	$ ;;u}}a= ==+,((6*C		1r+   c                     dd}| j                  |t        j                  t        j                  dd      t        j                  t        j                  d      fg dt        j                  d      dd        y )	Nc                 >    d}|dk  rd}|d}nd}|dk  ryd|z   |z   S )	Nr   r   r   r      r   r   r   rp   r   rx   r   bs       r)   ry   zCTestBranchPrune.test_redefinition_analysis_same_block.<locals>.impl  s:    A1uy1u6A:r+   r   r   r{   )NFNr         ?r   r   r   s     r)   %test_redefinition_analysis_same_blockz5TestBranchPrune.test_redefinition_analysis_same_block  sX    
	 	$ ;;u}}a= ==%..*@C-((6*B		6r+   c                     dd}| j                  |t        j                  t        j                  dd      t        j                  t        j                  d      fg dt        j                  d      dd        y )	Nc                 Z    d}|dkD  rd}|dk  rd}|
|dz  }d|z   S |dz  }|dk  ryd|z   S )	Nr   r      r   r   r   r   r   rp   r   s       r)   ry   zQTestBranchPrune.test_redefinition_analysis_different_block_can_exec.<locals>.impl  sV    A1u1uyQ
 6M Qq5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  sX    	 	$ ;;u}}a= ==%..*@C2((6*B		6r+   c                    dd}| j                  |t        j                  t        j                  dd      t        j                  d      t        j                  d      fdd gt        j                  d      d d        | j                  |t        j                  t        j                  dd      t        j                  d      t        j                  fdd gt        j                  d      d d       | j                  |t        j                  t        j                  dd      t        j                  t        j                  d      fd d gt        j                  d      dd        y )	Nc                 :    d}|d}|
|dz  }d|z   S |dz  }d|z   S )Nr   r   r   r   r   rp   r   s       r)   ry   zTTestBranchPrune.test_redefinition_analysis_different_block_cannot_exec.<locals>.impl$  s>    A}yQ 6M 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   s   	 	$ ;;u}}a= >>&15>>&3IK,((6*D$		8 	$ ;;u}}a= >>&15==B,((6*D#		7 	$ ;;u}}a= ==%..*@B,((6*C		7r+   c                 2    d }| j                  |ddg       y )Nc                  .    dfd}  |         dk(  ryy)Nr   c                  
    d y Nr   rp   rw   s   r)   closurezRTestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.impl.<locals>.closureF      r+   r   TFrp   )r  rx   s    @r)   ry   zATestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.implC  s!    A IAvr+   rp   F)rk   r   s     r)   #test_closure_and_nonlocal_can_prunez3TestBranchPrune.test_closure_and_nonlocal_can_prune@  s    	 	$UH.r+   c                 R    d }| j                  |t        j                  fd gd       y )Nc                 0    dfd} ||        dk(  ryy)Nr   c                 
    | y r   rp   )trx   s    r)   r  zUTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.impl.<locals>.closureY  r	  r+   r   TFrp   )nr  rx   s     @r)   ry   zDTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.implV  s#    A AJAvr+   ru   )rk   r	   int64r   s     r)   &test_closure_and_nonlocal_cannot_prunez6TestBranchPrune.test_closure_and_nonlocal_cannot_pruneS  s%    	 	$;r+   N)rl   rm   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  rp   r+   r)   rr   rr      su    *IX	IK"Q"$OLO(KP$P(P*)2V4G,2"166,607@/&<r+   rr   c                   n    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y)TestBranchPrunePredicates)ru   StringTg@y              @)r    Fg        y                Nc                    |j                   }t        |j                        D ci c]  \  }}||
 }}}|j                         D ]
  \  }}|||<    t	        t        |j                               D cg c]  \  }}|	 c}}      }|j                  |      }	t        j                  |	t                     S c c}}w c c}}w )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.
        )	co_consts)
__code__rP   r  itemstuplerW   replacepytypesFunctionTypeglobals)
r5   pyfuncconstspyfunc_codekvr  r9   
new_constsnew_codes
             r)   _literal_const_sample_generatorz9TestBranchPrunePredicates._literal_const_sample_generatorp  s     oo '00E0E&FGdaQTG	GLLN 	DAqIaL	&1B*CD$!QADE
 &&&< ##Hgi88 H Es   B73B=
c                 4   d }| j                  |ddd      }|j                  j                  }|j                  j                  }| j                  |d       | j                  |d       | j                   |d       d       | j                   |d       d       y )	Nc                     d}|ryd}|dz   S NPLACEHOLDER1rv   PLACEHOLDER2r   rp   )rx   _CONST1_CONST2s      r)   ry   zCTestBranchPrunePredicates.test_literal_const_code_gen.<locals>.impl  s    $G(Q;r+   r   r   )ru   r   r)  )Nr   rv   r   r   rv      )r&  r  r  rN   )r5   ry   newiconstnconsts        r)   test_literal_const_code_genz5TestBranchPrunePredicates.test_literal_const_code_gen  s    	 224AE(('' "5 	6!;<dW-TB'r+   c                     d }| j                   df| j                  dffD ]I  \  }}|D ]?  }| j                  |d|i      }| j                  |t	        j
                  d      f|gd        A K y )Nc                     d}|ryy Nr*  rv   rp   rx   r,  s     r)   ry   z<TestBranchPrunePredicates.test_single_if_const.<locals>.impl  s    $G r+   FTru   r{   _TRUTHY_FALSEYr&  rk   r	   r   r5   ry   c_inpr\   constr'   s         r)   test_single_if_constz.TestBranchPrunePredicates.test_single_if_const  }    	
 "\\51DLL$3GG 	(LE5 (;;D1e*M!!$)?(AE7"&((	(r+   c                     d }| j                   df| j                  dffD ]I  \  }}|D ]?  }| j                  |d|i      }| j                  |t	        j
                  d      f|gd        A K y )Nc                     d}|syy r5  rp   r6  s     r)   ry   zCTestBranchPrunePredicates.test_single_if_negate_const.<locals>.impl  s    $G r+   FTru   r{   r7  r:  s         r)   test_single_if_negate_constz5TestBranchPrunePredicates.test_single_if_negate_const  r>  r+   c                     d }| j                   df| j                  dffD ]I  \  }}|D ]?  }| j                  |d|i      }| j                  |t	        j
                  d      f|gd        A K y )Nc                     d}|ryyNr*  rv   r   rp   r6  s     r)   ry   zATestBranchPrunePredicates.test_single_if_else_const.<locals>.impl  s    $Gr+   FTru   r{   r7  r:  s         r)   test_single_if_else_constz3TestBranchPrunePredicates.test_single_if_else_const  }    	 "\\51DLL$3GG 	(LE5 (;;D1e*M!!$)?(AE7"&((	(r+   c                     d }| j                   df| j                  dffD ]I  \  }}|D ]?  }| j                  |d|i      }| j                  |t	        j
                  d      f|gd        A K y )Nc                     d}|syyrD  rp   r6  s     r)   ry   zHTestBranchPrunePredicates.test_single_if_else_negate_const.<locals>.impl  s    $Gr+   FTru   r{   r7  r:  s         r)    test_single_if_else_negate_constz:TestBranchPrunePredicates.test_single_if_else_negate_const  rF  r+   c                     | j                   df| j                  dffD ]:  \  }}|D ]0  fd}| j                  |t        j                  d      f|gd        2 < y )NFTc                     rdfS y r~   rp   rx   r<  s    r)   r'   z>TestBranchPrunePredicates.test_single_if_freevar.<locals>.func  s    &~- r+   r{   r8  r9  rk   r	   r   r5   r;  r\   r'   r<  s       @r)   test_single_if_freevarz0TestBranchPrunePredicates.test_single_if_freevar  h    !\\51DLL$3GG 	(LE5 (. !!$)?(AE7"&((	(r+   c                     | j                   df| j                  dffD ]:  \  }}|D ]0  fd}| j                  |t        j                  d      f|gd        2 < y )NFTc                     sdfS y r~   rp   rL  s    r)   r'   zETestBranchPrunePredicates.test_single_if_negate_freevar.<locals>.func  s     &~- !r+   r{   rM  rN  s       @r)   test_single_if_negate_freevarz7TestBranchPrunePredicates.test_single_if_negate_freevar  rP  r+   c                     | j                   df| j                  dffD ]:  \  }}|D ]0  fd}| j                  |t        j                  d      f|gd        2 < y )NFTc                     rdfS dfS r   rp   rL  s    r)   r'   zCTestBranchPrunePredicates.test_single_if_else_freevar.<locals>.func  s    &~-&~-r+   r{   rM  rN  s       @r)   test_single_if_else_freevarz5TestBranchPrunePredicates.test_single_if_else_freevar  h    !\\51DLL$3GG 		(LE5 (.
 !!$)?(AE7"&((		(r+   c                     | j                   df| j                  dffD ]:  \  }}|D ]0  fd}| j                  |t        j                  d      f|gd        2 < y )NFTc                     sdfS dfS r   rp   rL  s    r)   r'   zJTestBranchPrunePredicates.test_single_if_else_negate_freevar.<locals>.func  s     &~-&~-r+   r{   rM  rN  s       @r)   "test_single_if_else_negate_freevarz<TestBranchPrunePredicates.test_single_if_else_negate_freevar  rW  r+   c                     | j                   df| j                  dffD ]:  \  }}|D ]0  }|ad }| j                  |t	        j
                  d      f|gd        2 < y )NFTc                      t         rdt         fS y r~   )c_test_single_if_globalrw   s    r)   r'   z=TestBranchPrunePredicates.test_single_if_global.<locals>.func  s    .&(??? /r+   r{   )r8  r9  r]  rk   r	   r   r5   r;  r\   cr'   s        r)   test_single_if_globalz/TestBranchPrunePredicates.test_single_if_global  sp     "\\51DLL$3GG 		(LE5 (*+'@ !!$)?(AE7"&((		(r+   c                     | j                   df| j                  dffD ]:  \  }}|D ]0  }|ad }| j                  |t	        j
                  d      f|gd        2 < y )NFTc                      t         rdt         fS y r~   )c_test_single_if_negate_globalrw   s    r)   r'   zDTestBranchPrunePredicates.test_single_if_negate_global.<locals>.func  s    5&(FFF 6r+   r{   )r8  r9  rc  rk   r	   r   r^  s        r)   test_single_if_negate_globalz6TestBranchPrunePredicates.test_single_if_negate_global  sp     "\\51DLL$3GG 		(LE5 (12.G !!$)?(AE7"&((		(r+   c                     | j                   df| j                  dffD ]:  \  }}|D ]0  }|ad }| j                  |t	        j
                  d      f|gd        2 < y )NFTc                 .    t         rdt         fS dt         fS r   )c_test_single_if_else_globalrw   s    r)   r'   zBTestBranchPrunePredicates.test_single_if_else_global.<locals>.func"  s    3&(DDD&(DDDr+   r{   )r8  r9  rg  rk   r	   r   r^  s        r)   test_single_if_else_globalz4TestBranchPrunePredicates.test_single_if_else_global  sp     "\\51DLL$3GG 
	(LE5 	(/0,E
 !!$)?(AE7"&(	(
	(r+   c                     | j                   df| j                  dffD ]:  \  }}|D ]0  }|ad }| j                  |t	        j
                  d      f|gd        2 < y )NFTc                 .    t         sdt         fS dt         fS r   )#c_test_single_if_else_negate_globalrw   s    r)   r'   zITestBranchPrunePredicates.test_single_if_else_negate_global.<locals>.func1  s    >&(KKK&(KKKr+   r{   )r8  r9  rk  rk   r	   r   r^  s        r)   !test_single_if_else_negate_globalz;TestBranchPrunePredicates.test_single_if_else_negate_global*  sp     "\\51DLL$3GG 
	(LE5 	(673L
 !!$)?(AE7"&(	(
	(r+   c                     t         d        }| j                  |j                         d   d       | j                   |       d   d       y )Nc                  B    t        j                  d      } d}|r|| d<   | S )Nru   i  r   )r   r   )r1   r:   s     r)   fooz6TestBranchPrunePredicates.test_issue_5618.<locals>.foo;  s%    XXa[FCq	Mr+   r   g     Є@)r   assertPreciseEqualpy_func)r5   ro  s     r)   test_issue_5618z)TestBranchPrunePredicates.test_issue_56189  sG    		 
	 	a 0$7a$/r+   N)rl   rm   rn   r8  r9  r&  r2  r=  rA  rE  rI  rO  rS  rV  rZ  r`  rd  rh  rl  rr  rp   r+   r)   r  r  g  sY     +G+G9.($((((((
(
(((((0r+   r  c                   .    e Zd Z G d de      Zd Zd Zy)TestBranchPruneSSAc                       e Zd Zd Zy)$TestBranchPruneSSA.SSAPrunerCompilerc                 &   t        d      }|j                  t        d       |j                  t        d       |j                  t        d       |j                  t
        d       |j                  t        d       t        }|j                  | j                        }|j                  j                  |j                         |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(   passesr4   !define_nopython_lowering_pipelinefinalize)r5   pmdpbtyped_passeslowering_passess        r)   define_pipelinesz5TestBranchPruneSSA.SSAPrunerCompiler.define_pipelinesK  s     \*BKK)+?@KKo6KK.KK)>?KK
$BC$C44TZZ@LII\001!CCDJJOOII_334KKM4Kr+   N)rl   rm   rn   r  rp   r+   r)   SSAPrunerCompilerrv  J  s    	r+   r  c                     t        | j                        dd       }| j                   |       |j                                y )Npipeline_classc                 &    d}d}| d}|r|d}||fS )Nru   FTr   rp   )pqr   rs       r)   ry   z4TestBranchPruneSSA.test_ssa_update_phi.<locals>.implb  s-    AAyQ]
 a4Kr+   r  )r   r  rp  rq  r   s     r)   test_ssa_update_phiz&TestBranchPruneSSA.test_ssa_update_phi^  s;     
T33	4	 
5	 	7r+   c                 \   t        | j                        dd       }| j                   |       |j                                |j                  |j
                  d      j                  d   }|j                  j                         D ]$  }| j                  g |j                  d             & y )Nr  c                     d}| d}|S d}|S r   rp   )r  r   s     r)   ry   z5TestBranchPruneSSA.test_ssa_replace_phi.<locals>.implw  s$    Ay H Hr+   r   preserved_irphir   )r   r  rp  rq  rY   
signaturesmetadatar0   r1   assertFalse
find_exprs)r5   ry   r!   r8   s       r)   test_ssa_replace_phiz'TestBranchPruneSSA.test_ssa_replace_phis  s     
T33	4	 
5	 	7..!34==nM >>((* 	7C5s~~e456	7r+   N)rl   rm   rn   r   r  r  r  rp   r+   r)   rt  rt  G  s    L (8*7r+   rt  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)(TestBranchPrunePostSemanticConstRewritesc                 >   d }| j                  |t        j                  t        j                  dd      fdd gt	        j
                  d             | j                  |t        j                  t        j                  dd      fddgt	        j
                  d	             y )
Nc                 J    | j                   dk(  r| j                  d   dk(  ryy y)Nr   ru   r   )ndimshape)r   s    r)   ry   zKTestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr.<locals>.impl  s*    zzQ;;q>Q& ' r+   r   r   Fr   ru   Tr@   )r   )rk   r	   r   r   r   r   r   s     r)   test_array_ndim_attrz=TestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr  s    	 	$U]]As!C EHLHN((6*	, 	$U]]As!C EHNHP((4.	*r+   c           	         d }| j                  |t        j                  t        j                  d      fdd gt	        g d             | j                  |t        j                  t        j                  d      fddgt	        ddg             y )	Nc                 4    t        |       dk(  r
| d   dk(  ryy y)Nr   r   ru   r   )rO   )tups    r)   ry   zETestBranchPrunePostSemanticConstRewrites.test_tuple_len.<locals>.impl  s%    3x1}q6Q;  r+   r   Fru   r   r   r   Tr@   ru   )rk   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        }| j                  t        j                        5 } |        d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)Nc                  .    t         j                  d       y )NgGz?)floatas_integer_ratiorp   r+   r)   testzHTestBranchPrunePostSemanticConstRewrites.test_attr_not_len.<locals>.test  s    ""4(r+   z$Unknown attribute 'as_integer_ratio')r   assertRaisesr
   TypingErrorassertInstr	exception)r5   r  rf   s      r)   test_attr_not_lenz:TestBranchPrunePostSemanticConstRewrites.test_attr_not_len  sb     
	) 
	) v112 	aF	 	<c!++>NO	 	s   A""A+c           	      b   t        j                  ddg      } |d      }d }| j                  |t        j                  t        j
                  dd      fdgt        j                  d             t        j                  t        j                  d	|      }| j                  ||fd g|dd
d       y )N	FakeArrayr  r   )r  c                 N    | j                   dk(  r| j                   S t                y )Nr   )r  object)fas    r)   ry   zMTestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_array.<locals>.impl  s    ww!|wwr+   r   Fr   ru   T)rF   forceobj)rE   )
collections
namedtuplerk   r	   r   r   r   r   NamedUniTupler  )r5   r  r  ry   FakeArrayTypes        r)   test_ndim_not_on_arrayz?TestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_array  s    **;A	A	 	$U]]As!C Ew((6*	, ++EKKIF$ 04&",1d C 	 	Er+   c                     t         d        }t        j                  d      t        j                  d      f}| j                   ||  |j                  |        y )Nc                 4    | j                   d |j                   S r   )r  r  )r   r   s     r)   ry   zlTestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewrites.<locals>.impl  s    777AFF##r+   )r   r   r   r   )ru   ru   )r   r   r   rp  rq  )r5   ry   r]   s      r)   5test_semantic_const_propagates_before_static_rewritesz^TestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewrites  sS     
	$ 
	$ &(89d\T\\4-@Ar+   c           	         t        t              d        }d}| j                   ||  |j                  |        |j                  |j
                  d      }|j                  d   }t               }|j                  j                         D ]  }|j                  d      D ]v  }|j                  |j                  j                        }| j                  |j                  t         j"                         |j%                  |j                  j                         x  | j'                  ||D 	ch c]  }	t)        |	       c}	       y c c}	w )Nr  c                  F    d}t        |       D ]  }|t        |      z  } |S r  )r   rO   )r]   sargs      r)   ry   zSTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.impl  s-    A%d+ SXHr+   )rp   r  rp   r   r  inplace_binop)r   r   rp  rq  rY   r  r  rT   r0   r1   r  find_variable_assignmentrhsnameassertIsInstancer   r   r   addrN   rO   )
r5   ry   inpolr!   binop_constsr8   exprinstrx   s
             r)   test_tuple_const_propagationzETestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation  s   	5	6	 
7	 "c
LDLL#,>?^^DOOA./++n-u>>((* 	3C7 333DHHMMB%%djj"((;  !1!123	3
 	'<1A'<='<s   )E
N)	rl   rm   rn   r  r  r  r  r  r  rp   r+   r)   r  r    s#    * ) P E(	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-   rr   r  rt  r  rp   r+   r)   <module>r     s       > > + + A A  ?; ; M3 3 N M W %)  "
c(/8 c(LW<); W<t]0 3[ ]0@?7( ?7Df>/B f>r+   