
    J/Ph$                     t   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                            e j                   fg           G d de!                      Z" G d de          Z#e$dk    r ej%                     dS dS )    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dS )Dummyc                     || _         d S N)r   )selfr   s     Y/var/www/html/test/jupyter/venv/lib/python3.11/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dS )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                  }|                     t          |t                    ot          |          dk    o|d         dk               dS )zGTest matching of an object method (other than Array see #3449)
        c                  Z    t          dg          } | j                            d           d S )N      )r   r   append)ds    r   	test_funcz2TestIrUtils.test_obj_func_match.<locals>.test_func!   s$    qc

AELLOOOOOr    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2-	-	)y'2t5 5
-W^A&+A.4j6HJ J
<77 4L))Q.4$Q83	5 	5 	5 	5 	5r    c                      G d dt                     } fd} fd}d }|                    t          j        f          }|                    |          } ||          }|                    t          j        f          }|                    |d          } ||                                t          |j        d         j                  t          |          z
  t          |j        d         j                             d S )	Nc                   :    e Zd Zeddi dddfd            ZddZdS )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   sa      $!GGE 	!)%-%8%GN!)%-%8%GNs>>7D&v7 7 7r    Fc                 J   t           j                            |          }|| j        _        t                                          | j                   | j        }d}t          |          }|                    t          d           |                    t          d           |                    t          d           |                    t          d           |du r|                    t          d           |                                 |                    |           |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AA$GG%,
"!!**4:666
$ &&-/CDDDI}555L/:::13FGGG$;;KK 35GHHHu}$r    )F)r!   r"   r#   classmethodrL   r\   r$   r    r   TesterrC   2   sU        37tB$(+/7 7 7 [7% % % % % %r    r^   c                 V                        t          | j                  d           | j        d         }g }|                    t          j                  D ]X}t          t          |dd           t          j                  r-dt          |j	        dd          v r|
                    |           Y                     t          |          d           |D ]R}|                     |j                  }                    t          d|j	        j        z  d	          |j                   S|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33M!$EE%%bi00 ( (ga488"&AA (62!>!>>>QSZZ+++ 1 1"11!'::	FQX]$:B ? ? )1 1 1 1 Lr    c                 x                        t          | j                  d           | j        d         }g }g }|                    t          j                  D ]}t          t          |dd           t          j                  r-dt          |j	        dd          v r|
                    |           t          t          |dd           t          j                  r|
                    |                                t          |          d           |D ]#}                    |j        j        dv           $d S )	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33M!$EEF%%bi00 % %ga488"&AA (62!>!>>>Qga$77BB %MM!$$$SZZ+++  K K5I IJJJJK K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   sF   #	% #	% #	% #	% #	%\ #	% #	% #	%J	 	 	 	 	2	K 	K 	K 	K 	K$	 	 	 **EJ=99,,S11""6****EJ=99++CT+::U 	V]1-233c'llBU\!_122	4 	4 	4 	4 	4r    c                    dfd}t          j        |          }|j        d         }d}d}|j        D ]}t	          |t
          j                  r5|j        j        dk    r%t          j
        t          j        ||j                  }t	          |t
          j                  r5|j        j        dk    r%t          j
        t          j        ||j                  }|                     |t                     |                     |           dS )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J 	< 	<D$	** <t{/?3/F/F".'t{< <$	** <t{/?3/F/F".'t{< < 	(+++),,,,,r    c                      d }d }d } fd} ||          } ||          } ||          }                      ||                                ||           dS )z tests flatten_labels c                     d}| dk    r|dz  }| dk    rdS nE| dk     r0| dk    r|dz  }t          d          D ]}|dz  }|d	k     r 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1uuqr662 T771HCr  A1HCQww  1HC ///MMMMJr    c                    d}d}| dk    r|dz  }|dz  }| dk    r|dz  }dS nT| dk     r?| dk    r
|dz  }|dz  }t          d          D ]}|dz  }|dz  }|d	k     r 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1uuqRr66GA2  T77GA1HCr  AGA1HCQww  GA1HC ///MMMMJr    c                     d}| dk    r|dz  }| dk    rdS dS | dk     r0| dk    r|dz  }t          d	          D ]}|dz  }|d
k     r 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1uuqr6622T771HCr  A1HCQww  1HC ///MMMMJr    c                 4   t          j        | t                                }t          j        |j                  }                    t          |                                          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  su    24@@G"1'.AAKS!1!1!3!344q8#gn:M:MNNN3K@@@r    N)rd   assertNotEqual)r   r|   r   r   r   foo_cfgbar_cfgbaz_cfgs   `       r   test_flatten_labelszTestIrUtils.test_flatten_labels   s    	 	 	0	 	 	:	 	 	2	A 	A 	A 	A 	A ,s##,s##,s##'***GW-----r    N)r!   r"   r#   __doc__r@   r   r   r   r$   r    r   r&   r&      sc         5 5 5&d4 d4 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 2 2 2 2 2 2 2 * * * * * * 3 3 3 3 3 3 3 3 5 5 5 5 5 5 H H H H H H H H H H H H H H H HA A A A A A A A A A A AP P P P P P P P P P ' ' ' ' ' '  
E5:#((445
677    F   87
u. u. u. u. u.( u. u. u.p zHMOOOOO r    