
    xKg͇                     t   d dl Z d dlZd dlZd dlmZmZmZ d dl	m
Z
mZmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZmZ d d	lm Z m!Z!m"Z"m#Z#m$Z$ d d
lm%Z%m&Z&m'Z' da( e       Z)de)_*        d Z+ G d dee      Z, G d de,e      Z- G d de,e      Z. G d dee      Z/ G d de,      Z0y)    N)run_frontendFlags	StateDict)jitnjitliteral_unroll)typeserrorsirrewritesir_utilsutilscpu)postproc)InlineClosureCallPass)TestCaseMemoryLeakMixinSerialMixinIRPreservingTestPipeline)dead_branch_prunerewrite_semantic_constants)ReconstructSSATranslateByteCodeIRProcessingDeadBranchPrune
PreserveIR)DefaultPassBuilderCompilerBasePassManager{   Tc                     t        |       }t               }||_        d |_        d |_        t               j                  |       t        j                  j                  d|       |S )Nzbefore-inference)
r   r   func_irtypemap	calltypesr   run_passr   rewrite_registryapply)funcr"   states      ]/home/alanp/www/video.onchill/myenv/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setr1   keysAssertionErrorsortedpopr   	overloadsentry_point)r6   r(   args_tyspruneargskwargsr"   beforeinline_pass	post_procafterbefore_branchesrE   idxbranchr:   rD   rC   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%8!%8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__rI   r<   rl    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!	@rq   xs    r*   implz,TestBranchPrune.test_single_if.<locals>.impl       Av r,   noneTc                     ddk(  ryy )Nrv   rw   rq   rx   s    r*   rz   z,TestBranchPrune.test_single_if.<locals>.impl   r{   r,   Fc                 
    | yy Nrw   rq   rx   s    r*   rz   z,TestBranchPrune.test_single_if.<locals>.impl   s    y r,   
   c                     | dk(  ryy Nr   rw   rq   rx   s    r*   rz   z,TestBranchPrune.test_single_if.<locals>.impl   s    Bw r,   c                     | dk(  rd}y y r   rq   )ry   zs     r*   rz   z,TestBranchPrune.test_single_if.<locals>.impl   s    Bw r,   c                     d }|}| |k(  ryy )Nd   rq   )ry   r   ys      r*   rz   z,TestBranchPrune.test_single_if.<locals>.impl   s    AAAv r,   rl   r	   NoneTypeIntegerLiteralr6   rz   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Nrw   l&ls?rq   rx   s    r*   rz   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   rw   rq   rx   s    r*   rz   z6TestBranchPrune.test_single_if_const_val.<locals>.impl   s    Cx r,   r|   Tr   c                     d| k(  ryy r   rq   rx   s    r*   rz   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   rq   )ry   r   s     r*   rz   z?TestBranchPrune.test_single_if_else_two_const_val.<locals>.impl   s    Avr,   r      r|   FT  )rl   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 }t        j
                  dk\  r+| j                  |t        j                  d      fdd gd        n*| 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   rq   )ry   x_is_none_workdeadr   s       r*   rz   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   rq   )ry   r   r   s      r*   rz   zJTestBranchPrune.test_single_if_else_w_following_undetermined.<locals>.impl   s/    "Ny!% H Hr,   )   r   )rl   r	   r   r   r   	PYVERSIONr   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	 ??g% dU^^F%;$=t}"$ dU^^F%;$=d|"$ 	$!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   rq   )ry   one_hundredr   r   r   s        r*   rz   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   rw   r   rq   )ry   r   r   s      r*   rz   zCTestBranchPrune.test_double_if_else_non_literal_const.<locals>.impl(  s'    KK H Hr,   r   r   rl   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     rq   ry   r   r   s      r*   rz   z@TestBranchPrune.test_single_two_branches_same_cond.<locals>.impl6  6    y} a4K a4Kr,   r|   FTr   r   r   s     r*   "test_single_two_branches_same_condz2TestBranchPrune.test_single_two_branches_same_cond4  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   rq   r   s      r*   rz   z5TestBranchPrune.test_cond_is_kwarg_none.<locals>.implH  r   r,   FTr|   r   N)rl   r	   Omittedr   r   r   s     r*   test_cond_is_kwarg_nonez'TestBranchPrune.test_cond_is_kwarg_noneF  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   rq   r   s      r*   rz   z6TestBranchPrune.test_cond_is_kwarg_value.<locals>.impl\  s:    DyDy a4K a4Kr,   r   r|   TF)r   )rl   r	   r   r   r   r   s     r*   test_cond_is_kwarg_valuez(TestBranchPrune.test_cond_is_kwarg_valueZ  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      rq   rx   s    r*   fnz8TestBranchPrune.test_cond_rewrite_is_correct.<locals>.fnr  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 )Nrv   r   callbinopr>   r?   r@   )r+   r<   rO   rP   condr   get_definitionopr^   rI   rJ   rK   r   
assertTrue
isinstancer   Constvalue)r(   arg_tysbit_valr"   rd   pred_var	pred_defncondition_varcondition_opnew_condition_defnr6   s             r*   checkz;TestBranchPrune.test_cond_rewrite_is_correct.<locals>.checkw  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|   rv   r   r   )r	   r   r   )r6   r   r   s   `  r*   test_cond_rewrite_is_correctz,TestBranchPrune.test_cond_rewrite_is_correcto  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   _GLOBALrx   s    r*   rz   z1TestBranchPrune.test_global_bake_in.<locals>.impl  s    #~2vr,   rv   F   c                 "    t         dk(  r| S | dz   S r   r   rx   s    r*   rz   z1TestBranchPrune.test_global_bake_in.<locals>.impl  s    c>Hr6Mr,   T)rl   r	   r   r   )r6   rz   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   rq   ry   _FREEVARs    r*   rz   z2TestBranchPrune.test_freevar_bake_in.<locals>.impl      32vr,   rv   Fr   c                     dk(  r| S | dz   S r   rq   r   s    r*   rz   z2TestBranchPrune.test_freevar_bake_in.<locals>.impl  r   r,   Tr   )r6   rz   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      rq   )arrayas     r*   rz   zRTestBranchPrune.test_redefined_variables_are_not_considered_in_prune.<locals>.impl  s    y1ur,   r   Cr|   r   r   r   rl   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      rq   )r   r   ry   s      r*   rz   z7TestBranchPrune.test_comparison_operators.<locals>.impl  s     Ay 1uHr,   r   r   r|   FrA   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   rq   r   ry   r   bs       r*   rz   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   rq   r   s       r*   rz   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   rq   r   s       r*   rz   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   rq   rx   s   r*   closurezRTestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.impl.<locals>.closureJ      r,   r   TFrq   )r
  ry   s    @r*   rz   zATestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.implG  s!    A IAvr,   rq   F)rl   r   s     r*   #test_closure_and_nonlocal_can_prunez3TestBranchPrune.test_closure_and_nonlocal_can_pruneD  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   rq   )try   s    r*   r
  zUTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.impl.<locals>.closure]  r  r,   r   TFrq   )nr
  ry   s     @r*   rz   zDTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.implZ  s#    A AJAvr,   rv   )rl   r	   int64r   s     r*   &test_closure_and_nonlocal_cannot_prunez6TestBranchPrune.test_closure_and_nonlocal_cannot_pruneW  s%    	 	$;r,   N)rm   rn   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  rq   r,   r*   rs   rs      su    *IX	IK"Q"(OTO(KP$P(P*)2V4G,2"166,607@/&<r,   rs   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)rv   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__rQ   r  itemstuplerX   replacepytypesFunctionTypeglobals)
r6   pyfuncconstspyfunc_codekvr  r:   
new_constsnew_codes
             r*   _literal_const_sample_generatorz9TestBranchPrunePredicates._literal_const_sample_generatort  s     oo '00E0E&FG&FdaQT&F	GLLNDAqIaL #&1B*CD*C$!QA*C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PLACEHOLDER1rw   PLACEHOLDER2r   rq   )ry   _CONST1_CONST2s      r*   rz   zCTestBranchPrunePredicates.test_literal_const_code_gen.<locals>.impl  s    $G(Q;r,   r   r   )rv   r   r+  )Nr   rw   r   r   rw      )r(  r  r  rO   )r6   rz   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,  rw   rq   ry   r.  s     r*   rz   z<TestBranchPrunePredicates.test_single_if_const.<locals>.impl  s    $G r,   FTrv   r|   _TRUTHY_FALSEYr(  rl   r	   r   r6   rz   c_inpr]   constr(   s         r*   test_single_if_constz.TestBranchPrunePredicates.test_single_if_const  t    	
 "\\51DLL$3GGLE5;;D1e*M!!$)?(AE7"&(  H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 r7  rq   r8  s     r*   rz   zCTestBranchPrunePredicates.test_single_if_negate_const.<locals>.impl  s    $G r,   FTrv   r|   r9  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,  rw   r   rq   r8  s     r*   rz   zATestBranchPrunePredicates.test_single_if_else_const.<locals>.impl  s    $Gr,   FTrv   r|   r9  r<  s         r*   test_single_if_else_constz3TestBranchPrunePredicates.test_single_if_else_const  t    	 "\\51DLL$3GGLE5;;D1e*M!!$)?(AE7"&(  H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rF  rq   r8  s     r*   rz   zHTestBranchPrunePredicates.test_single_if_else_negate_const.<locals>.impl  s    $Gr,   FTrv   r|   r9  r<  s         r*    test_single_if_else_negate_constz:TestBranchPrunePredicates.test_single_if_else_negate_const  rH  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   rq   ry   r>  s    r*   r(   z>TestBranchPrunePredicates.test_single_if_freevar.<locals>.func  s    &~- r,   r|   r:  r;  rl   r	   r   r6   r=  r]   r(   r>  s       @r*   test_single_if_freevarz0TestBranchPrunePredicates.test_single_if_freevar  _    !\\51DLL$3GGLE5. !!$)?(AE7"&(  H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   rq   rN  s    r*   r(   zETestBranchPrunePredicates.test_single_if_negate_freevar.<locals>.func  s     &~- !r,   r|   rO  rP  s       @r*   test_single_if_negate_freevarz7TestBranchPrunePredicates.test_single_if_negate_freevar  rR  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   rq   rN  s    r*   r(   zCTestBranchPrunePredicates.test_single_if_else_freevar.<locals>.func  s    &~-&~-r,   r|   rO  rP  s       @r*   test_single_if_else_freevarz5TestBranchPrunePredicates.test_single_if_else_freevar  _    !\\51DLL$3GGLE5.
 !!$)?(AE7"&(  H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   rq   rN  s    r*   r(   zJTestBranchPrunePredicates.test_single_if_else_negate_freevar.<locals>.func  s     &~-&~-r,   r|   rO  rP  s       @r*   "test_single_if_else_negate_freevarz<TestBranchPrunePredicates.test_single_if_else_negate_freevar  rY  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_globalrx   s    r*   r(   z=TestBranchPrunePredicates.test_single_if_global.<locals>.func
  s    .&(??? /r,   r|   )r:  r;  r_  rl   r	   r   r6   r=  r]   cr(   s        r*   test_single_if_globalz/TestBranchPrunePredicates.test_single_if_global  sg     "\\51DLL$3GGLE5*+'@ !!$)?(AE7"&(  H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_globalrx   s    r*   r(   zDTestBranchPrunePredicates.test_single_if_negate_global.<locals>.func  s    5&(FFF 6r,   r|   )r:  r;  re  rl   r	   r   r`  s        r*   test_single_if_negate_globalz6TestBranchPrunePredicates.test_single_if_negate_global  sg     "\\51DLL$3GGLE512.G !!$)?(AE7"&(  H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_globalrx   s    r*   r(   zBTestBranchPrunePredicates.test_single_if_else_global.<locals>.func&  s    3&(DDD&(DDDr,   r|   )r:  r;  ri  rl   r	   r   r`  s        r*   test_single_if_else_globalz4TestBranchPrunePredicates.test_single_if_else_global  sg     "\\51DLL$3GGLE5/0,E
 !!$)?(AE7"&(  H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_globalrx   s    r*   r(   zITestBranchPrunePredicates.test_single_if_else_negate_global.<locals>.func5  s    >&(KKK&(KKKr,   r|   )r:  r;  rm  rl   r	   r   r`  s        r*   !test_single_if_else_negate_globalz;TestBranchPrunePredicates.test_single_if_else_negate_global.  sg     "\\51DLL$3GGLE5673L
 !!$)?(AE7"&(  Hr,   c                     t         d        }| j                  |j                         d   d       | j                   |       d   d       y )Nc                  B    t        j                  d      } d}|r|| d<   | S )Nrv   i  r   )r   r   )r2   r;   s     r*   fooz6TestBranchPrunePredicates.test_issue_5618.<locals>.foo?  s%    XXa[FCq	Mr,   r   g     Є@)r   assertPreciseEqualpy_func)r6   rq  s     r*   test_issue_5618z)TestBranchPrunePredicates.test_issue_5618=  sG    		 
	 	a 0$7a$/r,   N)rm   rn   ro   r:  r;  r(  r4  r?  rC  rG  rK  rQ  rU  rX  r\  rb  rf  rj  rn  rt  rq   r,   r*   r  r  k  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)   passesr5   !define_nopython_lowering_pipelinefinalize)r6   pmdpbtyped_passeslowering_passess        r*   define_pipelinesz5TestBranchPruneSSA.SSAPrunerCompiler.define_pipelinesO  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)rm   rn   ro   r  rq   r,   r*   SSAPrunerCompilerrx  N  s    	r,   r  c                     t        | j                        dd       }| j                   |       |j                                y )Npipeline_classc                 &    d}d}| d}|r|d}||fS )Nrv   FTr   rq   )pqr   rs       r*   rz   z4TestBranchPruneSSA.test_ssa_update_phi.<locals>.implf  s-    AAyQ]
 a4Kr,   r  )r   r  rr  rs  r   s     r*   test_ssa_update_phiz&TestBranchPruneSSA.test_ssa_update_phib  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   rq   )r  r   s     r*   rz   z5TestBranchPruneSSA.test_ssa_replace_phi.<locals>.impl{  s$    Ay H Hr,   r   preserved_irphir   )r   r  rr  rs  rZ   
signaturesmetadatar1   r2   assertFalse
find_exprs)r6   rz   r"   r9   s       r*   test_ssa_replace_phiz'TestBranchPruneSSA.test_ssa_replace_phiw  s     
T33	4	 
5	 	7..!34==nM >>((*C5s~~e456 +r,   N)rm   rn   ro   r   r  r  r  rq   r,   r*   rv  rv  K  s    L (8*7r,   rv  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   rv   r   )ndimshape)r   s    r*   rz   zKTestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr.<locals>.impl  s*    zzQ;;q>Q& ' r,   r   r   Fr   rv   TrA   )r   )rl   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   rv   r   )rP   )tups    r*   rz   zETestBranchPrunePostSemanticConstRewrites.test_tuple_len.<locals>.impl  s%    3x1}q6Q;  r,   r   Frv   r   r   r   TrA   rv   )rl   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_ratiorq   r,   r*   testzHTestBranchPrunePostSemanticConstRewrites.test_attr_not_len.<locals>.test  s    ""4(r,   z$Unknown attribute 'as_integer_ratio')r   assertRaisesr
   TypingErrorassertInstr	exception)r6   r  rg   s      r*   test_attr_not_lenz:TestBranchPrunePostSemanticConstRewrites.test_attr_not_len  s[     
	) 
	) v112aF 3 	<c!++>NO 32s   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*   rz   zMTestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_array.<locals>.impl  s    ww!|wwr,   r   Fr   rv   T)rG   forceobj)rF   )
collections
namedtuplerl   r	   r   r   r   r   NamedUniTupler  )r6   r  r  rz   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*   rz   zlTestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewrites.<locals>.impl  s    777AFF##r,   )r   r   r   r   )rv   rv   )r   r   r   rr  rs  )r6   rz   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   rP   )r^   sargs      r*   rz   zSTestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.impl  s(    A%d+SX ,Hr,   )rq   r  rq   r   r  inplace_binop)r   r   rr  rs  rZ   r  r  rU   r1   r2   r  find_variable_assignmentrhsnameassertIsInstancer   r   r   addrO   rP   )
r6   rz   inpolr"   binop_constsr9   exprinstry   s
             r*   test_tuple_const_propagationzETestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation  s   	5	6	 
7	 "c
LDLL#,>?^^DOOA./++n-u>>((*C733DHHMMB%%djj"((;  !1!12 8 +
 	'<1A'<='<s   )E
N)	rm   rn   ro   r  r  r  r  r  r  rq   r,   r*   r  r    s#    * ) P E(	B>r,   r  )1r  r	   r  numpyr   numba.core.compilerr   r   r   numbar   r   r   
numba.corer
   r   r   r   r   r   r   numba.core.inline_closurecallr   numba.tests.supportr   r   r   r   numba.core.analysisr   r   numba.core.untyped_passesr   r   r   r   r   r   r   r   r   enable_pyobj_flagsenable_pyobjectr+   r.   rs   r  rv  r  rq   r,   r*   <module>r     s       > > + + H H H  ?; ; M3 3 N M W %)  "
c(/8 c(L[<); [<|]0 3[ ]0@?7( ?7Df>/B f>r,   