o
    Z۷i\N                     @   s  d dl Z d dlmZ d dlZd dl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 d dlmZmZmZ d dlmZmZ d d	lmZ G d
d de jZG dd de jZG dd deZG dd deZdZG dd deZG dd deZedkre   dS dS )    N)TestCase)objmode)ircompiler)errors)CompilerBaseReconstructSSA)FunctionPassPassManagerregister_pass)TranslateByteCodeIRProcessing)njitc                   @      e Zd Zdd ZdS )TestIRc                 C   sh  d}t jd t j|ddd}t j|t j|ddd}|jdt j|ddd}| |d| | t|jd |jd	t j|d
dd}| t|jd | t|jd | |d	| | |d	| |jd	t j|ddd}| |d	| | 	|d	|  | |d	| z|jd	t j|ddd W n t j
y   Y d S w | dt j
  d S )Nz<?>   )filenamelineparentloc   apple   )r   orange      zExpecting an %s)r   ScopeLocdefineassertIsgetassertEquallen	localvarsassertIsNotRedefinedErrorfail)selfr   toplocalr   r   more_orange r,   I/home/ubuntu/vllm_env/lib/python3.10/site-packages/numba/tests/test_ir.pytest_IRScope   s.   
zTestIR.test_IRScopeN)__name__
__module____qualname__r.   r,   r,   r,   r-   r      s    r   c                   @   s   e Zd ZeddejZeddejZeddejZeddejZ	eddejZ
eddd	Zedd
d	Zeddd	Zg g fddZdS )CheckEqualityNabcdemockr   r   r   r   c                 C   s4   |D ]	}|  ||k q|D ]	}|  ||k qd S N)
assertTrue)r(   basesame	differentsr6   r,   r,   r-   checkC   s
   zCheckEquality.check)r/   r0   r1   r   Varunknown_locvar_avar_bvar_cvar_dvar_er   loc1loc2loc3r?   r,   r,   r,   r-   r2   8   s    r2   c                   @       e Zd ZdZdd Zdd ZdS )
TestIRMetaz0
    Tests IR node meta, like Loc and Scope
    c                 C   s   t ddd}t ddd}t ddd}t ddd}t ddd}| j||g|||gd t jddddd}t jdddd	d}| j|||gd
 d S )Nfiler   r   piler   r<   r=   F)maybe_decoratorTr<   )r   r   r?   r(   r3   r4   r5   r6   r7   fgr,   r,   r-   test_locN   s   zTestIRMeta.test_locc           	      C   s   t d | j}t d | j}t d | j}| j|||gd t || j}t || j}t || j}t || j}| j||||gd t || j}| j||gd d S NrP   )r   r   rG   rH   r?   )	r(   parent1parent2parent3r3   r4   r5   r6   r7   r,   r,   r-   
test_scopeZ   s   zTestIRMeta.test_scopeN)r/   r0   r1   __doc__rT   rY   r,   r,   r,   r-   rK   J   s    rK   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4S )5TestIRNodesz
    Tests IR nodes
    c                 C   $   t  }t  }| j||gd d S rU   )r   
Terminatorr?   )r(   t1t2r,   r,   r-   test_terminatorp   s   zTestIRNodes.test_terminatorc                 C   R   t d| j}t d| j}t d| j}t d| j}| j|||g|gd d S Nr   r   rN   )r   JumprG   rH   r?   r(   r3   r4   r5   r6   r,   r,   r-   	test_jumpv   
   zTestIRNodes.test_jumpc                 C   Z   t | j| j}t | j| j}t | j| j}t | j| j}| j|||g|gd d S NrN   )r   ReturnrB   rG   rH   rC   r?   rd   r,   r,   r-   test_return}   
   zTestIRNodes.test_returnc                 C   rg   rh   )r   RaiserB   rG   rH   rC   r?   rd   r,   r,   r-   
test_raise   rk   zTestIRNodes.test_raisec                 C   sl   t td | j}t td | j}t td | j}t td| j}t td | j}| j|||g||gd d S )N)strrN   )r   StaticRaiseAssertionErrorrG   rH   RuntimeErrorr?   )r(   r3   r4   r5   r7   r6   r,   r,   r-   test_staticraise      zTestIRNodes.test_staticraisec                 C      t | jdd| j}t | jdd| j}t | jdd| j}t | jdd| j}t | jdd| j}t | jdd| j}| j|||g|||gd d S )Nr   r   r   rN   )r   BranchrB   rG   rH   rC   r?   r(   r3   r4   r5   r6   r7   rR   r,   r,   r-   test_branch      zTestIRNodes.test_branchc                 C   ra   )Nsome_opsome_other_oprN   )r   ExprrG   rH   r?   rd   r,   r,   r-   	test_expr   rf   zTestIRNodes.test_exprc                 C      t | j| j| j| j}t | j| j| j| j}t | j| j| j| j}t | j| j| j| j}t | j| j| j| j}t | j| j| j| j}| j|||g|||gd d S rh   )	r   SetItemrB   rC   rD   rG   rH   rE   r?   rv   r,   r,   r-   test_setitem      zTestIRNodes.test_setitemc                 C   s   t | jd| j| j| j}t | jd| j| j| j}t | jd| j| j| j}t | jd| j| j| j}t | jd| j| j| j}t | jd| j| j| j}t | jd| j| j| j}| j|||g||||gd d S rb   )	r   StaticSetItemrB   rC   rD   rG   rH   rE   r?   rQ   r,   r,   r-   test_staticsetitem   s    zTestIRNodes.test_staticsetitemc                 C      t | j| j| j}t | j| j| j}t | j| j| j}t | j| j| j}t | j| j| j}| j|||g||gd d S rh   )r   DelItemrB   rC   rG   rH   rD   r?   r(   r3   r4   r5   r6   r7   r,   r,   r-   test_delitem      zTestIRNodes.test_delitemc                 C   sb   t | jj| j}t | jj| j}t | jj| j}t | jj| j}| j|||g|gd d S rh   )r   DelrB   namerG   rH   rC   r?   rd   r,   r,   r-   test_del   s
   zTestIRNodes.test_delc                 C   s   t | jd| j| j}t | jd| j| j}t | jd| j| j}t | jd| j| j}t | jd| j| j}t | jd| j| j}| j|||g|||gd d S NfoobarrN   )r   SetAttrrB   rC   rG   rH   rD   r?   rv   r,   r,   r-   test_setattr   s   zTestIRNodes.test_setattrc                 C   sv   t | jd| j}t | jd| j}t | jd| j}t | jd| j}t | jd| j}| j|||g||gd d S r   )r   DelAttrrB   rG   rH   rD   r?   r   r,   r,   r-   test_delattr      zTestIRNodes.test_delattrc                 C   r   rh   )r   AssignrB   rC   rG   rH   rD   r?   r   r,   r,   r-   test_assign   r   zTestIRNodes.test_assignc                 C   s   t | jf| j| j}t | jf| j| j}t | jf| j| j}t | jf| j| j}t | jf| j| j}| j|||g||gd d S rh   )r   PrintrB   rC   rG   rH   rD   r?   r   r,   r,   r-   
test_print   s   zTestIRNodes.test_printc                 C   r}   rh   )	r   StoreMaprB   rC   rD   rG   rH   rE   r?   rv   r,   r,   r-   test_storemap   r   zTestIRNodes.test_storemapc                 C   sv   t | j| jd}t | j| jd}t | j| jd}t | j| jd}t | j| jd}| j|||g||gd d S )Nr   r   rN   )r   YieldrB   rG   rH   rC   r?   r   r,   r,   r-   
test_yield   r   zTestIRNodes.test_yieldc                 C   rt   )Nr   r   r   rN   )r   	EnterWithrB   rG   rH   rC   r?   rv   r,   r,   r-   test_enterwith   rx   zTestIRNodes.test_enterwithc                 C   l   t dd| j}t dd| j}t dd| j}t dd| j}t dd| j}| j|||g||gd d S Nr   r   r   r   rN   )r   ArgrG   rH   r?   r   r,   r,   r-   test_arg   rs   zTestIRNodes.test_argc                 C   ra   rb   )r   ConstrG   rH   r?   rd   r,   r,   r-   
test_const  rf   zTestIRNodes.test_constc                 C   r   r   )r   GlobalrG   rH   r?   r   r,   r,   r-   test_global  rs   zTestIRNodes.test_globalc                 C   sv   t d d| j}t d d| j}t d d| j}t t d t jd| j}t d d| j}| j||||g|gd d S r   )r   r@   rG   rH   r   rA   r?   r   r,   r,   r-   test_var  s   zTestIRNodes.test_varc                 C   r\   rU   )r   UndefinedTyper?   )r(   r3   r4   r,   r,   r-   test_undefinedtype  s   zTestIRNodes.test_undefinedtypec                 C   J   t dd}t dd}t dd}t dd}| j||g||gd d S Nr   r   r   r   rN   )r   Loopr?   rd   r,   r,   r-   	test_loop$  
   zTestIRNodes.test_loopc                 C   r   r   )r   Withr?   rd   r,   r,   r-   	test_with+  r   zTestIRNodes.test_withN)r/   r0   r1   rZ   r`   re   rj   rm   rr   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r,   r,   r-   r[   l   s6    		
			r[   i  c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	TestIRCompoundsz+
    Tests IR concepts that have state
    c                 C   s   t  }|| jd || jd t  }|| jd || jd t  }|| jd || jd | j||g|gd d S r   )r   VarMapr   rB   rC   rD   r?   )r(   r3   r4   r5   r,   r,   r-   test_varmap;  s   zTestIRCompounds.test_varmapc                    sL    fdd}| }| }|  t j j j} j||g|gd d S )Nc                     sz   t d  j} t |  j}t  j j j}t  j j	 j}t  j	 j j}|
| |
| |
| |S r9   )r   r   rG   BlockrH   r   rB   rC   rI   rD   append)r   tmpassign1assign2assign3r(   r,   r-   	gen_blockK  s   


z-TestIRCompounds.test_block.<locals>.gen_blockrN   )r   r   r   rB   rC   rI   r?   )r(   r   r3   r4   r5   r,   r   r-   
test_blockJ  s
   zTestIRCompounds.test_blockc                 C   s  dd }dd }| }| }||}||}|  || g fdd}| d|| tt|j D ] }|j| }	t|	j	d t
jrV|	j	d }
|
j|
j|
_|
_ nq6|||d	g | }| || ||}t }tt|j D ]_}|j| }	|	j	d d }
d }tt|
d
 D ]}t|
| t
jrt|
|d
  t
jr|} nq|d ur|	j	}|t||d
   |t||  ||d
  || ||< ||d
 <  nq{|  | | || | t|d |D ]
}|  |d q|||| dd }dd }dd }||}||}|  || | d|| ||}| || ||}| d| ||ddg d S )Nc                 S   s   t j| ddS )NT)	emit_dels)r   run_frontend)xr,   r,   r-   r   ^     z5TestIRCompounds.test_functionir.<locals>.run_frontendc                     s   d d fdd	} | S )Ni                   ?c              	      s  | | }|  7 } t j|t jd}|| }d| }t |dkr|| }	t d|d }
t  t||	 W d    n1 s>w   Y  t |
| }t |d dk rod}t| D ]}|d7 }t |dk rh nqY||d 7 }||
 }g }tt	|D ]7}|
||  |dkrtdd	d
 d}d}W d    n1 sw   Y  |dkr||7 }||d t 7 }q{|| | | | |  | S )N)dtyper   r   r   r   r   r   intp
complex128)r>   t{   z   )npzeros	complex64absaranger   printsqrtranger#   r   _GLOBAL)r3   r4   r5   r6   r7   rR   rS   hiklmnopqrr>   r   _FREEVARr,   r-   r   i  sB   z9TestIRCompounds.test_functionir.<locals>.gen.<locals>.foo)r   r   Nr,   )r   r,   r   r-   genf  s   !z,TestIRCompounds.test_functionir.<locals>.genc                 S   sB   |   }|D ]}|D ]}|dr||v r nq
td| qd S )Nz->zCould not find %s )
splitlines
startswithrp   )stringpointing_atlinesitemr   r,   r,   r-   check_diffstr  s   
z6TestIRCompounds.test_functionir.<locals>.check_diffstrzIR is considered equivalentbranchr   r   zdel c                 S      | d }|| }t |}|S Nr   r   r   r3   r4   r5   r6   r7   r,   r,   r-   r        
z,TestIRCompounds.test_functionir.<locals>.fooc                 S   r   r   r   r   r,   r,   r-   r     r   z,TestIRCompounds.test_functionir.<locals>.barc                 S   s"   | d }|| }t |d }|S )Nr   r   r   r   r,   r,   r-   baz  s   z,TestIRCompounds.test_functionir.<locals>.bazz$Other block contains more statementszc + bzb + c)r:   equal_irassertIndiff_strreversedlistblockskeys
isinstancebodyr   ru   falsebrtruebrassertFalsesetr   r#   r   addrn   r"   r   )r(   r   r   r   yx_iry_irr   labelblkrefzz_ir
change_setidxr   r4   r   r   r   r   foo_irbar_irbaz_irr   r,   r,   r-   test_functionir\  sr   &



"

zTestIRCompounds.test_functionirN)r/   r0   r1   rZ   r   r   r  r,   r,   r,   r-   r   7  s
    r   c                   @   r   )TestIRPedanticChecksc              	      s   t dddG dd dtt dddG dd dt G  fdddt}t|d	d
d }t 3 tdtj | 	tj
}|d W d    n1 sQw   Y  | t|jd W d    d S 1 sjw   Y  d S )NF)mutates_CFGanalysis_onlyc                   @   rJ   )zKTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.RemoveVarInScope_remove_var_in_scopec                 S      t |  d S r9   r	   __init__r   r,   r,   r-   r    r   zTTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.RemoveVarInScope.__init__c                 S   s4   |j }|j D ]}|j}tj|j|jd|_qdS )Nr   T)func_irr   valuesscoper   r   r   r   )r(   stater  r   oldscoper,   r,   r-   run_pass  s   
zTTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.RemoveVarInScope.run_passNr/   r0   r1   _namer  r  r,   r,   r,   r-   RemoveVarInScope  s    r  c                   @   rJ   )zCTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.FailPass_failc                 _   r  r9   r  )r(   argskwargsr,   r,   r-   r    r   zLTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.FailPass.__init__c                 S   s   t d)Nunreachable)rp   )r(   r  r,   r,   r-   r    s   zLTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.FailPass.run_passNr  r,   r,   r,   r-   FailPass  s    r  c                       s   e Zd Z fddZdS )zETestIRPedanticChecks.test_var_in_scope_assumption.<locals>.MyCompilerc                    sR   t d}|td |td |d |td | d |  |gS )Nz
testing pmzanalyzing bytecodezprocessing IRr  ssar  )r
   add_passr   r   r   finalize)r(   pmr  r  r,   r-   define_pipelines  s   zVTestIRPedanticChecks.test_var_in_scope_assumption.<locals>.MyCompiler.define_pipelinesN)r/   r0   r1   r"  r,   r!  r,   r-   
MyCompiler  s    r#  )pipeline_classc                 S   s(   d}d}||k rd}||fS d}||fS )Nr   r   r   r,   )r   r3   r4   r,   r,   r-   dummy  s   z@TestIRPedanticChecks.test_var_in_scope_assumption.<locals>.dummyerrorr   z variable '[a-z]' is not in scope)r   r	   r   r   warningscatch_warningssimplefilterr   NumbaPedanticWarningassertRaisesNumbaIRAssumptionWarningassertRegexrn   	exception)r(   r#  r%  raisesr,   r!  r-   test_var_in_scope_assumption  s"   




"z1TestIRPedanticChecks.test_var_in_scope_assumptionN)r/   r0   r1   r0  r,   r,   r,   r-   r    s    r  __main__) unittestunittest.caser   r'  numpyr   numbar   
numba.corer   r   r   numba.core.compilerr   r   numba.core.compiler_machineryr	   r
   r   numba.core.untyped_passesr   r   r   r   r2   rK   r[   r   r   r  r/   mainr,   r,   r,   r-   <module>   s.    " I 1H