
    xKg$                     p   d dl Z d dlmZmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZmZmZ d d	lmZ d
Z ede j<                  j                  j?                  e j@                        fg       G d de!             Z" G d de      Z#e$dk(  r ejJ                          yy)    N)TestCaseunittest)
cpu_target)CompilerBaseFlags)PassManager)typesirbytecodecompilerir_utilsregistry)ExtractByteCodeTranslateByteCode	FixupArgsIRProcessing)NopythonTypeInferencetype_inference_stageDeadCodeElimination)jitclass   valc                       e Zd Zd Zy)Dummyc                     || _         y N)r   )selfr   s     ]/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_ir_utils.py__init__zDummy.__init__   s	        N)__name__
__module____qualname__r    r    r   r   r      s    r    r   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestIrUtilszA
    Tests ir handling utility functions like find_callname.
    c                    d }t        j                  |      }t        j                  }t        j                  }t        |||dd      }t        j                  ||j                  d   j                  d   j                  |j                        }| j                  t        |t              xr t        |      dk(  xr |d   dk(         y)zGTest matching of an object method (other than Array see #3449)
        c                  R    t        dg      } | j                  j                  d       y )N      )r   r   append)ds    r   	test_funcz2TestIrUtils.test_obj_func_match.<locals>.test_func!   s    qc
AEELLOr    r$   Nr      r*   r+   )r   run_frontendr   typing_contexttarget_contextr   r   find_callnameblocksbodyvaluetypemap
assertTrue
isinstancetuplelen)r   r-   test_ir	typingctx	targetctx
typing_resmatched_calls          r   test_obj_func_matchzTestIrUtils.test_obj_func_match   s    	 ''	2--	--	)y'2t5
--W^^A&++A.44j6H6HJ
<7 4L)Q.4$Q83	5r    c                      G d dt               } fd} fd}d }|j                  t        j                  f      }|j	                  |      } ||      }|j                  t        j                  f      }|j	                  |d      } ||        j                  t        |j                  d   j                        t        |      z
  t        |j                  d   j                               y )	Nc                   2    e Zd Zeddi dddfd       ZddZy)6TestIrUtils.test_dead_code_elimination.<locals>.TesterNc           	          |s
t               }d|_        |t        j                  j                  }|t        j                  j
                  } | |||||||      S )NT)r   nrtr   r   r0   r1   )clsargsreturn_typeflagslocalslibraryr0   r1   s           r   mk_pipelinezBTestIrUtils.test_dead_code_elimination.<locals>.Tester.mk_pipeline4   s_     !GE 	!)%-%8%8%G%GN!)%-%8%8%G%GN>>7D&v7 7r    c                    t         j                  j                  |      }|| j                  _        t               j                  | j                         | j                  }d}t        |      }|j                  t        d       |j                  t        d       |j                  t        d       |j                  t        d       |du r|j                  t        d       |j                          |j                  |       |j                   S )z7
                Compile and return IR
                DCE_testingzanalyzing bytecodezfix up argszprocessing IRznopython frontendTzDCE after typing)r   FunctionIdentityfrom_functionstatefunc_idr   run_passr   add_passr   r   r   r   r   finalizerunfunc_ir)r   funcDCErR   rQ   namepms          r   compile_to_irzDTestIrUtils.test_dead_code_elimination.<locals>.Tester.compile_to_irB   s     #33AA$G%,

"!**4::6

$ &-/CDI}5L/:13FG$;KK 35GHu}}$r    )F)r!   r"   r#   classmethodrL   r\   r$   r    r   TesterrC   2   s(    37tB$(+/7 7%r    r^   c                 R   j                  t        | j                        d       | j                  d   }g }|j                  t        j
                        D ]S  }t        t        |dd       t        j                        s)dt        |j                  dd      v sC|j                  |       U j                  t        |      d       |D ]Z  }| j                  |j                        }j                  t        d|j                  j                  z  d	      |j                         \ |S )
Nr)   r   targetdeadrZ    r*   z0x%s   )assertEqualr:   r3   
find_instsr
   Assignr8   getattrVarr`   r+   get_definitionr5   r7   intrZ   )the_irblockdeadsxr,   	const_valr   s         r   check_initial_irz@TestIrUtils.test_dead_code_elimination.<locals>.check_initial_irW   s     S/3MM!$EE%%bii0ga48"&&A62!>>Q 1
 SZ+"11!'':	FQXX]]$:B ? )1  Lr    c                 \   j                  t        | j                        d       | j                  d   }g }g }|j                  t        j
                        D ]  }t        t        |dd       t        j                        r*dt        |j                  dd      v r|j                  |       t        t        |dd       t        j                        sx|j                  |        j                  t        |      d       |D ])  }j                  |j                  j                  dv       + y )	Nr)   r   r`   ra   rZ   rb   r5   )     ^[= )rd   r:   r3   re   r
   rf   r8   rg   rh   r`   r+   Constr7   r5   )rk   rl   rm   constsrn   r   s        r   check_dce_irz<TestIrUtils.test_dead_code_elimination.<locals>.check_dce_irp   s    S/3MM!$EEF%%bii0ga48"&&A62!>>Qga$7BMM!$ 1 SZ+ 5I IJ r    c                 ,    | dz   }d}|dz   }d}||z  }|S )Nr)   rr   r*   rs   r$   )rn   yra   zdeaddeadrets         r   fooz3TestIrUtils.test_dead_code_elimination.<locals>.foo   s,    AADAA!Ha%CJr    T)rY   r   )	r   rL   r	   intpr\   rd   r:   r3   r4   )	r   r^   rp   rv   r|   test_pipelineno_dceremovedw_dces	   `        r   test_dead_code_eliminationz&TestIrUtils.test_dead_code_elimination0   s    #	%\ #	%J	2	K$	 **EJJ=9,,S1"6***EJJ=9++CT+:U 	V]]1-223c'lBU\\!_112	4r    c                 b   dfd}t        j                  |      }|j                  d   }d}d}|j                  D ]  }t	        |t
        j                        rH|j                  j                  dk(  r/t        j                  t        j                  ||j                        }t	        |t
        j                        s|j                  j                  dk(  st        j                  t        j                  ||j                        } | j                  |t               | j                  |       y)z
        Test find_const() for values in globals (ir.Global) and freevars
        (ir.FreeVar) that are considered constants for compilation.
           c                 $    t         }}| |z   |z   S r   )GLOBAL_B)abc	FREEVAR_Cs      r   r|   z/TestIrUtils.test_find_const_global.<locals>.foo   s    AAq519r    r   Nr   r   )r   r/   r3   r4   r8   r
   rf   r`   rZ   r   guard
find_constrd   r   )r   r|   f_irrl   const_bconst_cinstr   s          @r   test_find_const_globalz"TestIrUtils.test_find_const_global   s    
 		
 $$S)AJJD$		*t{{/?/?3/F"..''t{{<$		*t{{/?/?3/F"..''t{{<  	(+),r    c                      d }d }d } fd} ||      } ||      } ||      } j                  ||        j                  ||       y)z tests flatten_labels c                     d}| dkD  r|dz  }| dkD  r=y| dk  r,| dk\  r|dz  }t        d      D ]  }|dz  }|d	k  s n |d
z  }nt        d      d}d	}d}d}|S )Nr      r)      5     r   
   r*   r.   some string   range
ValueErrorr   accrn   py310_defeat1py310_defeat2py310_defeat3py310_defeat4s          r   r|   z,TestIrUtils.test_flatten_labels.<locals>.foo   s    C1uqr6T71HCrA1HCQw #
 1HC //MMMMJr    c                     d}d}| dkD  r|dz  }|dz  }| dkD  rQ|dz  }y| dk  r;| dk\  r
|dz  }|dz  }t        d      D ]  }|dz  }|dz  }|d	k  s n |dz  }|d
z  }nt        d      d}d	}d}d}|S )Nr   r   r   r)   r   r   r   r   r*   r.   r   r   r   )r   r   ry   rn   r   r   r   r   s           r   barz,TestIrUtils.test_flatten_labels.<locals>.bar   s    CA1uqRr6GAT7GA1HCrAGA1HCQw	 # GA1HC //MMMMJr    c                     d}| dkD  r|dz  }| dkD  ryy| dk  r,| dk\  r|dz  }t        d	      D ]  }|dz  }|d
k  s n |dz  }nt        d      d}d
}d}d}|S )Nr   r   r)   r   r   7   r   r   r   r*   r.   r   r   r   r   s          r   bazz,TestIrUtils.test_flatten_labels.<locals>.baz   s    C1uqr6T71HCrA1HCQw #
 1HC //MMMMJr    c                 &   t        j                  | t                     }t        j                  |j                        }j                  t        |j                               dz   t        |j                               t        j                  |      S )Nr)   )
r   compile_to_numba_irdictflatten_labelsr3   rd   maxkeysr:   compute_cfg_from_blocks)rX   rW   flat_blocksr   s      r   get_flat_cfgz5TestIrUtils.test_flatten_labels.<locals>.get_flat_cfg  sh    224@G"11'..AKS!1!1!34q8#gnn:MN33K@@r    N)rd   assertNotEqual)r   r|   r   r   r   foo_cfgbar_cfgbaz_cfgs   `       r   test_flatten_labelszTestIrUtils.test_flatten_labels   sX    	0	:	2	A s#s#s#'*GW-r    N)r!   r"   r#   __doc__r@   r   r   r   r$   r    r   r&   r&      s    5&d4L-8[.r    r&   __main__)&numbanumba.tests.supportr   r   numba.core.registryr   numba.core.compilerr   r   numba.core.compiler_machineryr   
numba.corer	   r
   r   r   r   r   numba.core.untyped_passesr   r   r   r   numba.core.typed_passesr   r   r   numba.experimentalr   r   coreListr}   objectr   r&   r!   mainr$   r    r   <module>r      s     2 * 3 5 H HA AP P '  
E5::##((45
67F  8
u.( u.p zHMMO r    