
     in                     |   S SK r S SKrS SKrS SKJrJrJr  S SK	J
r
JrJr  S SKJrJrJrJrJrJr  S SKJr  S SKJr  S SKJrJrJrJr  S SKJrJr  S S	KJrJ r J!r!J"r"J#r#  S S
KJ$r$J%r%J&r&  S SK'J(r(  Sq)\" 5       r*S\*l+        S r, " S S\\5      r- " S S\-\5      r. " S S\-\5      r/ " S S\\5      r0 " S S\-5      r1g)    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)	PYVERSION{   Tc                     [        U 5      n[        5       nXl        S Ul        S Ul        [        5       R                  U5        [        R                  R                  SU5        U$ )Nzbefore-inference)
r   r   func_irtypemap	calltypesr   run_passr   rewrite_registryapply)funcr"   states      P/mnt/rpi/venvs/whisper/lib/python3.13/site-packages/numba/tests/test_analysis.pycompile_to_irr+      sS    4 GKEMEMEOe$##$6>N    c                   (    \ rS rSrSrSrS rS rSrg)TestBranchPruneBase(   z
Tests branch pruning
Fc                     / nUR                   R                  5        H@  nUR                  [        R                  S9 Vs/ s H  oDPM     nnUR                  U5        MB     U$ s  snf )N)cls)blocksvalues
find_instsr   Branchextend)selfthe_irbranchesblk_tmps         r*   find_branches!TestBranchPruneBase.find_branches/   s[    =='')C!nnn;<;1;C<OOC  *  =s   A#c                    [        U5      nUR                  5       nU R                  (       a&  [        S5        [        S5        UR	                  5         [        U[        R                  " S5      5      nUR                  5         [        R                  " U5      n	U	R                  5         [        Xb5        U R                  (       a&  [        S5        [        S5        UR	                  5         [        Xb5        Un
U R                  (       a  [        S5        UR	                  5         U R                  U5      nU R                  [        U5      [        U5      5        / n[!        U5       H  u  pX   nUSL a  UR#                  UR$                  5        M+  USL a  UR#                  UR&                  5        MM  Uc  MR  US:X  a8  UR#                  UR&                  5        UR#                  UR$                  5        M   S5       e   [)        UR*                  R-                  5        Vs/ s H  oPM     sn5      n[)        U
R*                  R-                  5        Vs/ s H  oPM     sn5      n U R                  UU[)        U5      -
  5        UR3                  SSS05      n[5        U40 UD6" U5      R6                  U   nUc  UR9                  5       nU" 5       nOUR8                  " U6 nU" U6 nU R                  UU5        g s  snf s  snf ! [.         aF  n[        S	[1        U5      5        [        S
[1        U5      5        [        S[1        U5      5        UeS nAff = f)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setr2   keysAssertionErrorsortedpopr   	overloadsentry_point)r7   r(   args_tyspruneargskwargsr"   beforeinline_pass	post_procafterbefore_branchesrG   idxbranchr;   rF   rE   esupplied_flagscresresexpecteds                          r*   assert_prune TestBranchPruneBase.assert_prune6   s     %;;(O/"LLN ,G,/,?,?,FI **73	"75;;(O.!LLN',;;- LLN,,V4_-s5z: #E*JC$)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$-?@8.~.t4>>xH<""$CvH""D)CT{Hh'+ @9
  	,z 23#VO%<="F>$:;G		s%    K9K>&L 
MAMM N)	__name__
__module____qualname____firstlineno____doc__rK   r=   rn   __static_attributes__rp   r,   r*   r.   r.   (   s     FU(r,   r.   c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rSrg)TestBranchPrune   c                 p   S nU R                  U[        R                  " S5      4S/S 5        S nU R                  U[        R                  " S5      4S/S 5        S nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S/S5        S nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S /S5        S	 nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S /S5        S
 nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S/S5        g )Nc                     SS:X  a  gg )N   r   n!	@rp   xs    r*   impl,TestBranchPrune.test_single_if.<locals>.impl       Av r,   noneTc                     SS:X  a  gg )Nr|   r}   rp   r~   s    r*   r   r      r   r,   Fc                     U c  gg Nr}   rp   r~   s    r*   r   r      s    y r,   
   c                     U S:X  a  gg Nr   r}   rp   r~   s    r*   r   r      s    Bw r,   c                     U S:X  a  Sng g r   rp   )r   zs     r*   r   r      s    Bw r,   c                     S nUnX:X  a  gg )Nd   rp   )r   r   ys      r*   r   r      s    AAv r,   rn   r	   NoneTypeIntegerLiteralr7   r   s     r*   test_single_if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                     S nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S/S5        g )Nc                     U c  ggNr}   l&ls?rp   r~   s    r*   r   1TestBranchPrune.test_single_if_else.<locals>.impl   s    yr,   r   Fr   Tr   r   s     r*   test_single_if_else#TestBranchPrune.test_single_if_else   sO    	 	$!7 9E7DI$!5!5b!9 ;dVRHr,   c                 `   S nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S /S5        S nU R                  U[        R                  " S5      4S/S 5        U R                  U[        R                  " S5      4S /S5        g )Nc                     U S:X  a  gg Nr   r}   rp   r~   s    r*   r   6TestBranchPrune.test_single_if_const_val.<locals>.impl   s    Cx r,   r   Tr   c                     SU :X  a  gg r   rp   r~   s    r*   r   r      s    ax r,   r   r   s     r*   test_single_if_const_val(TestBranchPrune.test_single_if_const_val   s    	 	$!7 9D64H$!5!5c!: <tfcJ	
 	$!7 9D64H$!5!5c!: <tfcJr,   c                    S nU R                  U[        R                  " S5      4S-  S /SS5        U R                  U[        R                  " S5      4S-  S/S S 5        U R                  U[        R                  " S5      [        R                  " S5      4S/SS 5        U R                  U[        R                  " S5      [        R                  " S5      4S /SS5        g )Nc                     X:X  a  ggr   rp   )r   r   s     r*   r   ?TestBranchPrune.test_single_if_else_two_const_val.<locals>.impl   s    vr,   r      r   FT  )rn   r	   r   r   r   s     r*   !test_single_if_else_two_const_val1TestBranchPrune.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                 h   S nU R                  U[        R                  " S5      4SS /S 5        U R                  U[        R                  " S5      4SS /S5        S nU R                  U[        R                  " S5      4SS /S 5        U R                  U[        R                  " S5      4SS /S5        g )Nc                 4    SnU c  SnOSnU(       a  SnU$ SnU$ )NFT   r   rp   )r   x_is_none_workdeadr   s       r*   r   JTestBranchPrune.test_single_if_else_w_following_undetermined.<locals>.impl   s1    "Ny!% H Hr,   r   Fr   Tc                 2    SnU c  SnO U(       a  SnU$ SnU$ )NFTr   r   rp   )r   r   r   s      r*   r   r      s/    "Ny!% H Hr,   r   r   s     r*   ,test_single_if_else_w_following_undetermined<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                     S nU R                  U[        R                  " S5      4SS /S 5        U R                  U[        R                  " S5      4SS /S5        g )Nc                 8    SnSnU c  SnOSnX!:X  a  SnXB4$ SnXB4$ )Nr      r   r   r   rp   )r   one_hundredr   r   r   s        r*   r   :TestBranchPrune.test_double_if_else_rt_const.<locals>.impl  sA    KNy!$, $$ $$r,   r   Fr   Tr   r   s     r*   test_double_if_else_rt_const,TestBranchPrune.test_double_if_else_rt_const  sS    	% 	$!7 9E4=$O$!5!5b!9 ;dD\2Nr,   c                     S nU R                  U[        R                  " S5      4S /S5        U R                  U[        R                  " S5      4S /S5        g )Nc                      SnX:X  a  SnU$ SnU$ )Nr   r}   r   rp   )r   r   r   s      r*   r   CTestBranchPrune.test_double_if_else_non_literal_const.<locals>.impl%  s%    K H Hr,   r   r   rn   r	   r   r   s     r*   %test_double_if_else_non_literal_const5TestBranchPrune.test_double_if_else_non_literal_const#  sQ    	 	$!5!5b!9 ;dVRH$!5!5c!: <tfcJr,   c                     S nU R                  U[        R                  " S5      4SS/S 5        U R                  U[        R                  " S5      4SS/S5        g )Nc                 ,    U c  SnOSnU b  SnX!4$ SnX!4$ Nr   r/   r     rp   r   r   r   s      r*   r   @TestBranchPrune.test_single_two_branches_same_cond.<locals>.impl3  2    y} 4K 4Kr,   r   FTr   r   r   s     r*   "test_single_two_branches_same_cond2TestBranchPrune.test_single_two_branches_same_cond1  sS    	 	$!7 9E4=$O$!5!5b!9 ;dE]BOr,   c                    SS jnU R                  U[        R                  " S 5      4SS/S 5        U R                  U[        R                  " S5      4SS/S 5        U R                  U[        R                  " S5      4SS/S5        g )Nc                 ,    U c  SnOSnU b  SnX!4$ SnX!4$ r   rp   r   s      r*   r   5TestBranchPrune.test_cond_is_kwarg_none.<locals>.implE  r   r,   FTr   r   N)rn   r	   Omittedr   r   r   s     r*   test_cond_is_kwarg_none'TestBranchPrune.test_cond_is_kwarg_noneC  sz    	 	$t!4 6 $-	/$!7 9E4=$O$!5!5b!9 ;dE]BOr,   c                 f   SS jnU R                  U[        R                  " S5      4S S /S5        U R                  U[        R                  " S5      4S S /S5        U R                  U[        R                  " S5      4S S /S5        U R                  U[        R                  " S5      4SS/S 5        g )Nr   c                 8    U S:X  a  SnOSnU S:w  a  SnX!4$ SnX!4$ )Nr   r   r/   r   r   rp   r   s      r*   r   6TestBranchPrune.test_cond_is_kwarg_value.<locals>.implY  s6    DyDy 4K 4Kr,   r   r   TF)r   )rn   r	   r   r   r   r   s     r*   test_cond_is_kwarg_value(TestBranchPrune.test_cond_is_kwarg_valueW  s    	 	$t!4 6tdK$!5!5d!; =d|	 $!5!5a!8 :T4L!L$!7 9D%=$Or,   c                    ^  S nU 4S jnU" U[         R                  " S5      4S5        U" U[         R                  " S5      4S5        g )Nc                     U c  gg)Nr      rp   r~   s    r*   fn8TestBranchPrune.test_cond_rewrite_is_correct.<locals>.fno  s    yr,   c                    > [        U 5      nT
R                  U5      nT
R                  [        U5      S5        US   R                  n[
        R                  " X55      nT
R                  UR                  S5        UR                  S   n[
        R                  " X75      nT
R                  UR                  S5        T
R                  (       a&  [        S5        [        S5        UR                  5         [        X15        T
R                  (       a&  [        S5        [        S5        UR                  5         [
        R                  " X75      n	T
R                  [        U	[        R                   5      5        T
R                  U	R"                  U5        g )Nr|   r   callbinopr@   rA   rB   )r+   r=   rQ   rR   condr   get_definitionopr`   rK   rL   rM   r   
assertTrue
isinstancer   Constvalue)r(   arg_tysbit_valr"   rf   pred_var	pred_defncondition_varcondition_opnew_condition_defnr7   s             r*   check;TestBranchPrune.test_cond_rewrite_is_correct.<locals>.checkt  s&   #D)G #009OS115 'q)..H //BIY\\62%NN1-M#227JL\__g6 {{hn%g/{{hm$ "*!8!8!POOJ'9288DE/55w?r,   r   r|   r   r   )r	   r   r   )r7   r   r   s   `  r*   test_cond_rewrite_is_correct,TestBranchPrune.test_cond_rewrite_is_correctl  sC    	
	@@ 	b5>>&)+Q/b5''+-q1r,   c                     S nU R                  U[        R                  " S5      4S/S5        [        n SqS nU R                  U[        R                  " S5      4S/S5        Uqg ! Uqf = f)Nc                 $    [         S:X  a  U $ U S-   $ Nr    r   _GLOBALr~   s    r*   r   1TestBranchPrune.test_global_bake_in.<locals>.impl  s    #~2vr,   r|   F   c                 $    [         S:X  a  U $ U S-   $ r   r   r~   s    r*   r   r     s    c>Hr6Mr,   T)rn   r	   r   r   )r7   r   r<   s      r*   test_global_bake_in#TestBranchPrune.test_global_bake_in  st    	 	$!5!5a!8 :UGQG 	G" dU%9%9!%<$>JGcGs   /A' 'A+c                    ^ SmU4S jnU R                  U[        R                  " S5      4S/S5        SmU4S jnU R                  U[        R                  " S5      4S/S5        g )Nr    c                    > TS:X  a  U $ U S-   $ r   rp   r   _FREEVARs    r*   r   2TestBranchPrune.test_freevar_bake_in.<locals>.impl      32vr,   r|   Fr   c                    > TS:X  a  U $ U S-   $ r   rp   r   s    r*   r   r     r   r,   Tr   )r7   r   r   s     @r*   test_freevar_bake_in$TestBranchPrune.test_freevar_bake_in  sc    	 	$!5!5a!8 :UGQG	 	$!5!5a!8 :TFAFr,   c                     SS jnU R                  U[        R                  " [        R                  SS5      [        R                  " S5      4S S /[
        R                  " S5      S 5        g )Nc                     Uc  SnUS:  a  gg)Nr   r      rp   )arrayas     r*   r   RTestBranchPrune.test_redefined_variables_are_not_considered_in_prune.<locals>.impl  s    y1ur,   r   Cr   r      r   rn   r	   Arrayfloat64r   npzerosr   s     r*   4test_redefined_variables_are_not_considered_in_pruneDTestBranchPrune.test_redefined_variables_are_not_considered_in_prune  sS    	 	$ ;;u}}a= >>&14,((6*D		2r,   c                    S	S jnU R                  U[        R                  " [        R                  SS5      [        R                  " S5      4SS/[
        R                  " S5      S 5        U R                  U[        R                  " [        R                  SS5      [        R                  4S S /[
        R                  " S5      S5        g )
Nc                      SnUc  gUS:  a  gU$ Nr   r      rp   )r  r  r   s      r*   r   7TestBranchPrune.test_comparison_operators.<locals>.impl  s     Ay 1uHr,   r   r	  r   FrC   r
  g      (@r   r  r   s     r*   test_comparison_operators)TestBranchPrune.test_comparison_operators  s    
	 	$ ;;u}}a= >>&14 &/((6*D		2 	$ ;;u}}a= ==+,((6*C		1r,   c                     SS jnU R                  U[        R                  " [        R                  SS5      [        R                  [        R                  " S5      4/ SQ[
        R                  " S5      SS 5        g )	Nc                 D    SnUS:  a  SnUc  SnOSnUS:  a  gSU-   U-   $ )	Nr   r   r   r      r   r   r  rp   r  r   r  bs       r*   r   CTestBranchPrune.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_block5TestBranchPrune.test_redefinition_analysis_same_block  sX    
	 	$ ;;u}}a= ==%..*@C-((6*B		6r,   c                     SS jnU R                  U[        R                  " [        R                  SS5      [        R                  [        R                  " S5      4/ SQ[
        R                  " S5      SS 5        g )	Nc                 b    SnUS:  a  SnUS:  a  SnUc
  US-  nSU-   $ US-  nUS:  a  gSU-   $ )	Nr   r      r   r   r   r   r  rp   r  s       r*   r   QTestBranchPrune.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_execCTestBranchPrune.test_redefinition_analysis_different_block_can_exec	  sX    	 	$ ;;u}}a= ==%..*@C2((6*B		6r,   c                    SS jnU R                  U[        R                  " [        R                  SS5      [        R                  " S5      [        R                  " S5      4SS /[
        R                  " S5      S S 5        U R                  U[        R                  " [        R                  SS5      [        R                  " S5      [        R                  4SS /[
        R                  " S5      S S5        U R                  U[        R                  " [        R                  SS5      [        R                  [        R                  " S5      4S S /[
        R                  " S5      SS 5        g )	Nc                 >    SnUb  SnUc
  US-  nSU-   $ US-  nSU-   $ )Nr   r%  r   r   r  rp   r  s       r*   r   TTestBranchPrune.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_execFTestBranchPrune.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    S nU R                  USS/5        g )Nc                  2   ^ SmU4S jn U " 5         TS:X  a  gg)Nr   c                  
   > Sm g Nr   rp   r~   s   r*   closureRTestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.impl.<locals>.closureG      r,   r   TFrp   )r3  r   s    @r*   r   ATestBranchPrune.test_closure_and_nonlocal_can_prune.<locals>.implD  s!    A IAvr,   rp   F)rn   r   s     r*   #test_closure_and_nonlocal_can_prune3TestBranchPrune.test_closure_and_nonlocal_can_pruneA  s    	 	$UH.r,   c                 R    S nU R                  U[        R                  4S /S5        g )Nc                 4   ^ SmU4S jnU" U 5        TS:X  a  gg)Nr   c                 
   > U mg r   rp   )tr   s    r*   r3  UTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.impl.<locals>.closureZ  r5  r,   r   TFrp   )nr3  r   s     @r*   r   DTestBranchPrune.test_closure_and_nonlocal_cannot_prune.<locals>.implW  s#    A AJAvr,   r|   )rn   r	   int64r   s     r*   &test_closure_and_nonlocal_cannot_prune6TestBranchPrune.test_closure_and_nonlocal_cannot_pruneT  s%    	 	$;r,   rp   N)rq   rr   rs   rt   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r!  r'  r-  r7  rA  rv   rp   r,   r*   rx   rx      su    *IX	IK"Q"$OLO(KP$P(P*)2V4G,2"166,607@/&<r,   rx   c                   v    \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rSrg)TestBranchPrunePredicatesih  )r|   StringTg@y              @)r    Fg        y                Nc                    UR                   n[        UR                  5       VVs0 s H  u  pEXE_M	     nnnUR                  5        H	  u  pEXVU'   M     [	        [        UR                  5       5       VVs/ s H  u  puUPM	     snn5      nUR                  US9n	[        R                  " U	[        5       5      $ s  snnf s  snnf )a  
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__rS   rH  itemstuplerZ   replacepytypesFunctionTypeglobals)
r7   pyfuncconstspyfunc_codekvrH  r;   
new_constsnew_codes
             r*   _literal_const_sample_generator9TestBranchPrunePredicates._literal_const_sample_generatorq  s     oo '00E0E&FG&FdaQT&F	GLLNDAaL #&1B*CD*C$!A*CDE
 &&&< ##Hgi88 H Es   B84B>
c                 :   S n[         S;   a  U R                  USSS.5      nO/[         S;   a  U R                  USSS.5      nO[        [         5      eUR                  R                  nUR                  R                  n[         S;   a%  U R                  US5        U R                  US	5        O>[         S;   a%  U R                  US
5        U R                  US5        O[        [         5      eU R                  U" S 5      S5        U R                  U" S 5      S5        g )Nc                 $    SnU(       a  gSnUS-   $ NPLACEHOLDER1r}   PLACEHOLDER2r   rp   )r   _CONST1_CONST2s      r*   r   CTestBranchPrunePredicates.test_literal_const_code_gen.<locals>.impl  s    $G(Q;r,   )r     r   r  )r   r   )r  r   )r  r%  )r  r   )r     )r|   r  )r\  r}   r]  )r   r}   r  r[  )Nr   r}   r  r   r}      )r   rW  NotImplementedErrorrI  rH  rQ   )r7   r   newiconstnconsts        r*   test_literal_const_code_gen5TestBranchPrunePredicates.test_literal_const_code_gen  s    	 #66tR[IC>>66tR[IC%i00((''#V &6 7V%67>>V &9 :V%?@%i00dW-TB'r,   c                 T   S nU R                   S4U R                  S44 H  u  p#U Hz  n[        S;   a  U R                  USU05      nO.[        S;   a  U R                  USU05      nO[	        [        5      eU R                  U[        R                  " S5      4U/S 5        M|     M     g )	Nc                     SnU(       a  gg Nr\  r}   rp   r   r^  s     r*   r   <TestBranchPrunePredicates.test_single_if_const.<locals>.impl  s    $G r,   FTra  r   rc  r|   r   _TRUTHY_FALSEYr   rW  rf  rn   r	   r   r7   r   c_inpr_   constr(   s         r*   test_single_if_const.TestBranchPrunePredicates.test_single_if_const      	
 "\\51DLL$3GGLE+??ABE
LD"FF??ABE
LD .i88!!$)?(AE7"&(  Hr,   c                 T   S nU R                   S4U R                  S44 H  u  p#U Hz  n[        S;   a  U R                  USU05      nO.[        S;   a  U R                  USU05      nO[	        [        5      eU R                  U[        R                  " S5      4U/S 5        M|     M     g )	Nc                     SnU(       d  gg rn  rp   ro  s     r*   r   CTestBranchPrunePredicates.test_single_if_negate_const.<locals>.impl  s    $G r,   FTra  r   rc  r|   r   rq  rt  s         r*   test_single_if_negate_const5TestBranchPrunePredicates.test_single_if_negate_const  ry  r,   c                 T   S nU R                   S4U R                  S44 H  u  p#U Hz  n[        S;   a  U R                  USU05      nO.[        S;   a  U R                  USU05      nO[	        [        5      eU R                  U[        R                  " S5      4U/S 5        M|     M     g )	Nc                     SnU(       a  ggNr\  r}   r   rp   ro  s     r*   r   ATestBranchPrunePredicates.test_single_if_else_const.<locals>.impl  s    $Gr,   FTra  r   rc  r|   r   rq  rt  s         r*   test_single_if_else_const3TestBranchPrunePredicates.test_single_if_else_const      	 "\\51DLL$3GGLE+??ABE
LD"FF??ABE
LD .i88!!$)?(AE7"&(  Hr,   c                 T   S nU R                   S4U R                  S44 H  u  p#U Hz  n[        S;   a  U R                  USU05      nO.[        S;   a  U R                  USU05      nO[	        [        5      eU R                  U[        R                  " S5      4U/S 5        M|     M     g )	Nc                     SnU(       d  ggr  rp   ro  s     r*   r   HTestBranchPrunePredicates.test_single_if_else_negate_const.<locals>.impl  s    $Gr,   FTra  r   rc  r|   r   rq  rt  s         r*    test_single_if_else_negate_const:TestBranchPrunePredicates.test_single_if_else_negate_const  r  r,   c                    ^ U R                   S4U R                  S44 H>  u  pU H3  mU4S jnU R                  U[        R                  " S5      4U/S 5        M5     M@     g )NFTc                    > T(       a  ST4$ g r   rp   r   rv  s    r*   r(   >TestBranchPrunePredicates.test_single_if_freevar.<locals>.func  s    &~- r,   r   rr  rs  rn   r	   r   r7   ru  r_   r(   rv  s       @r*   test_single_if_freevar0TestBranchPrunePredicates.test_single_if_freevar
  ]    !\\51DLL$3GGLE. !!$)?(AE7"&(  Hr,   c                    ^ U R                   S4U R                  S44 H>  u  pU H3  mU4S jnU R                  U[        R                  " S5      4U/S 5        M5     M@     g )NFTc                    > T(       d  ST4$ g r   rp   r  s    r*   r(   ETestBranchPrunePredicates.test_single_if_negate_freevar.<locals>.func  s     &~- !r,   r   r  r  s       @r*   test_single_if_negate_freevar7TestBranchPrunePredicates.test_single_if_negate_freevar  r  r,   c                    ^ U R                   S4U R                  S44 H>  u  pU H3  mU4S jnU R                  U[        R                  " S5      4U/S 5        M5     M@     g )NFTc                 "   > T(       a  ST4$ ST4$ r   rp   r  s    r*   r(   CTestBranchPrunePredicates.test_single_if_else_freevar.<locals>.func"  s    &~-&~-r,   r   r  r  s       @r*   test_single_if_else_freevar5TestBranchPrunePredicates.test_single_if_else_freevar  ]    !\\51DLL$3GGLE.
 !!$)?(AE7"&(  Hr,   c                    ^ U R                   S4U R                  S44 H>  u  pU H3  mU4S jnU R                  U[        R                  " S5      4U/S 5        M5     M@     g )NFTc                 "   > T(       d  ST4$ ST4$ r   rp   r  s    r*   r(   JTestBranchPrunePredicates.test_single_if_else_negate_freevar.<locals>.func.  s     &~-&~-r,   r   r  r  s       @r*   "test_single_if_else_negate_freevar<TestBranchPrunePredicates.test_single_if_else_negate_freevar*  r  r,   c                     U R                   S4U R                  S44 H=  u  pU H2  nUqS nU R                  U[        R
                  " S5      4U/S 5        M4     M?     g )NFTc                 *    [         (       a  S[         4$ g r   )c_test_single_if_globalr~   s    r*   r(   =TestBranchPrunePredicates.test_single_if_global.<locals>.func?  s    ..&(??? /r,   r   )rr  rs  r  rn   r	   r   r7   ru  r_   cr(   s        r*   test_single_if_global/TestBranchPrunePredicates.test_single_if_global8  se     "\\51DLL$3GGLE*+'@ !!$)?(AE7"&(  Hr,   c                     U R                   S4U R                  S44 H=  u  pU H2  nUqS nU R                  U[        R
                  " S5      4U/S 5        M4     M?     g )NFTc                 *    [         (       a  S[         4$ g r   )c_test_single_if_negate_globalr~   s    r*   r(   DTestBranchPrunePredicates.test_single_if_negate_global.<locals>.funcM  s    55&(FFF 6r,   r   )rr  rs  r  rn   r	   r   r  s        r*   test_single_if_negate_global6TestBranchPrunePredicates.test_single_if_negate_globalF  se     "\\51DLL$3GGLE12.G !!$)?(AE7"&(  Hr,   c                     U R                   S4U R                  S44 H=  u  pU H2  nUqS nU R                  U[        R
                  " S5      4U/S 5        M4     M?     g )NFTc                 8    [         (       a  S[         4$ S[         4$ r   )c_test_single_if_else_globalr~   s    r*   r(   BTestBranchPrunePredicates.test_single_if_else_global.<locals>.func[  s     33&(DDD&(DDDr,   r   )rr  rs  r  rn   r	   r   r  s        r*   test_single_if_else_global4TestBranchPrunePredicates.test_single_if_else_globalT  se     "\\51DLL$3GGLE/0,E
 !!$)?(AE7"&(  Hr,   c                     U R                   S4U R                  S44 H=  u  pU H2  nUqS nU R                  U[        R
                  " S5      4U/S 5        M4     M?     g )NFTc                 8    [         (       d  S[         4$ S[         4$ r   )#c_test_single_if_else_negate_globalr~   s    r*   r(   ITestBranchPrunePredicates.test_single_if_else_negate_global.<locals>.funcj  s     >>&(KKK&(KKKr,   r   )rr  rs  r  rn   r	   r   r  s        r*   !test_single_if_else_negate_global;TestBranchPrunePredicates.test_single_if_else_negate_globalc  se     "\\51DLL$3GGLE673L
 !!$)?(AE7"&(  Hr,   c                     [         S 5       nU R                  UR                  5       S   S5        U R                  U" 5       S   S5        g )Nc                  L    [         R                  " S5      n SnU(       a  XS'   U $ )Nr|   i  r   )r  r  )r3   r<   s     r*   foo6TestBranchPrunePredicates.test_issue_5618.<locals>.foot  s#    XXa[FCq	Mr,   r   g     Є@)r   assertPreciseEqualpy_func)r7   r  s     r*   test_issue_5618)TestBranchPrunePredicates.test_issue_5618r  sG    		 
	 	a 0$7a$/r,   rp   N)rq   rr   rs   rt   rr  rs  rW  rj  rw  r}  r  r  r  r  r  r  r  r  r  r  r  rv   rp   r,   r*   rD  rD  h  sZ     +G+G9. (D(.(.(2(2((
(
(((((0r,   rD  c                   6    \ rS rSr " S S\5      rS rS rSrg)TestBranchPruneSSAi  c                       \ rS rSrS rSrg)$TestBranchPruneSSA.SSAPrunerCompileri  c                 &   [        S5      nUR                  [        S5        UR                  [        S5        UR                  [        S5        UR                  [
        S5        UR                  [        S5        [        nUR                  U R                  5      nUR                  R                  UR                  5        UR                  U R                  5      nUR                  R                  UR                  5        UR                  5         U/$ )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)   passesr6   !define_nopython_lowering_pipelinefinalize)r7   pmdpbtyped_passeslowering_passess        r*   define_pipelines5TestBranchPruneSSA.SSAPrunerCompiler.define_pipelines  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,   rp   N)rq   rr   rs   rt   r  rv   rp   r,   r*   SSAPrunerCompilerr    s    	r,   r  c                     [        U R                  S9SS j5       nU R                  U" 5       UR                  5       5        g )Npipeline_classc                 2    SnSnU c  SnU(       a  Ub  SnX#4$ )Nr|   FTr  rp   )pqr   rs       r*   r   4TestBranchPruneSSA.test_ssa_update_phi.<locals>.impl  s+    AAyQ]
 4Kr,   r,  )r   r  r  r  r   s     r*   test_ssa_update_phi&TestBranchPruneSSA.test_ssa_update_phi  s;     
T33	4	 
5	 	7r,   c                 \   [        U R                  S9SS j5       nU R                  U" 5       UR                  5       5        UR                  UR
                  S      R                  S   nUR                  R                  5        H%  nU R                  / UR                  S5      Q5        M'     g )Nr  c                     SnU c  SnU$ SnU$ r  rp   )r  r   s     r*   r   5TestBranchPruneSSA.test_ssa_replace_phi.<locals>.impl  s$    Ay H Hr,   r   preserved_irphir   )r   r  r  r  r\   
signaturesmetadatar2   r3   assertFalse
find_exprs)r7   r   r"   r:   s       r*   test_ssa_replace_phi'TestBranchPruneSSA.test_ssa_replace_phi  s     
T33	4	 
5	 	7..!34==nM >>((*C5s~~e456 +r,   rp   N)	rq   rr   rs   rt   r   r  r  r  rv   rp   r,   r*   r  r    s    L (8*7r,   r  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
(TestBranchPrunePostSemanticConstRewritesi  c                 F   S nU R                  U[        R                  " [        R                  SS5      4SS /[        R
                  " S5      5        U R                  U[        R                  " [        R                  SS5      4SS/[        R
                  " S	5      5        g )
Nc                 N    U R                   S:X  a  U R                  S   S:X  a  gg g)Nr   r|   r   )ndimshape)r  s    r*   r   KTestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr.<locals>.impl  s*    zzQ;;q>Q& ' r,   r   r	  Fr
  r|   TrC   )r   )rn   r	   r  r  r  r  r   s     r*   test_array_ndim_attr=TestBranchPrunePostSemanticConstRewrites.test_array_ndim_attr  s    	 	$U]]As!C EHLHN((6*	, 	$U]]As!C EHNHP((4.	*r,   c           	         S nU R                  U[        R                  " [        R                  S5      4SS /[	        / SQ5      5        U R                  U[        R                  " [        R                  S5      4SS/[	        SS/5      5        g )	Nc                 8    [        U 5      S:X  a  U S   S:X  a  gg g)Nr  r   r|   r   )rR   )tups    r*   r   ETestBranchPrunePostSemanticConstRewrites.test_tuple_len.<locals>.impl  s%    3x1}q6Q;  r,   r  Fr|   r   r  r   TrC   r|   )rn   r	   UniTupler@  rK  r   s     r*   test_tuple_len7TestBranchPrunePostSemanticConstRewrites.test_tuple_len  s~    	 	$Q!? AEDHDJ	*	, 	$Q!? ADDJDLA-	)r,   c                     [         S 5       nU R                  [        R                  5       nU" 5         S S S 5        U R	                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nc                  .    [         R                  S5        g )NgGz?)floatas_integer_ratiorp   r,   r*   testHTestBranchPrunePostSemanticConstRewrites.test_attr_not_len.<locals>.test  s    ""4(r,   z$Unknown attribute 'as_integer_ratio')r   assertRaisesr
   TypingErrorassertInstr	exception)r7   r  ri   s      r*   test_attr_not_len:TestBranchPrunePostSemanticConstRewrites.test_attr_not_len  s[     
	) 
	) v112aF 3 	<c!++>NO 32s   A""
A0c           	      \   [         R                  " SS/5      nU" SS9nS nU R                  U[        R                  " [        R
                  SS5      4S/[        R                  " S5      5        [        R                  " [        R                  S	U5      nU R                  X44S /USS
S.S9  g )N	FakeArrayr  r   )r  c                 P    U R                   S:X  a  U R                   $ [        5         g )Nr   )r  object)fas    r*   r   MTestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_array.<locals>.impl  s    ww!|wwr,   r	  Fr
  r|   T)rI   forceobj)rH   )
collections
namedtuplern   r	   r  r  r  r  NamedUniTupler@  )r7   r  r  r   FakeArrayTypes        r*   test_ndim_not_on_array?TestBranchPrunePostSemanticConstRewrites.test_ndim_not_on_array  s    **;A	A	 	$U]]As!C Ew((6*	, ++EKKIF$ 04&",1d C 	 	Er,   c                     [         S 5       n[        R                  " S5      [        R                  " S5      4nU R                  U" U6 UR                  " U6 5        g )Nc                 4    U R                   S UR                   $ r   )r  r  )r  r  s     r*   r   lTestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewrites.<locals>.impl  s    777AFF##r,   )r   r   r  r   )r|   r|   )r   r  r  r  r  )r7   r   r`   s      r*   5test_semantic_const_propagates_before_static_rewrites^TestBranchPrunePostSemanticConstRewrites.test_semantic_const_propagates_before_static_rewrites	  sQ     
	$ 
	$ &(89dT\\4-@Ar,   c           	         [        [        S9S 5       nSnU R                  U" U6 UR                  " U6 5        UR                  UR
                  S      nUR                  S   n[        5       nUR                  R                  5        H  nUR                  S5       Hw  nUR                  UR                  R                  5      nU R                  UR                  [         R"                  5        UR%                  UR                  R                  5        My     M     U R'                  XR V	s1 s H  n	[)        U	5      iM     sn	5        g s  sn	f )Nr  c                  J    Sn[        U 5       H  nU[        U5      -  nM     U$ r2  )r   rR   )r`   sargs      r*   r   STestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation.<locals>.impl  s(    A%d+SX ,Hr,   )rp   r  rp   r   r  inplace_binop)r   r   r  r  r\   r  r  rW   r2   r3   r  find_variable_assignmentrhsnameassertIsInstancer   r   r   addrQ   rR   )
r7   r   inpolr"   binop_constsr:   exprinstr   s
             r*   test_tuple_const_propagationETestBranchPrunePostSemanticConstRewrites.test_tuple_const_propagation  s   	5	6	 
7	 "c
DLL#,>?^^DOOA./++n-u>>((*C733DHHMMB%%djj"((;  !1!12 8 +
 	'<1A'<='<s   )E
rp   N)rq   rr   rs   rt   r  r  r	  r  r  r-  rv   rp   r,   r*   r  r    s#    * ) P E(	B>r,   r  )2r  r	   rM  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   numba.core.utilsr   r   enable_pyobj_flagsenable_pyobjectr+   r.   rx   rD  r  r  rp   r,   r*   <module>r:     s       > > + + A A  ?; ; M3 3 N M & W %)  "
c(/8 c(LW<); W<tU0 3[ U0p?7( ?7Df>/B f>r,   