o
    ¦¸¢iO  ã                   @   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r„e  ¡  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,   úQ/home/ubuntu/transcripts/venv/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ddd„ZdS )ÚCheckEqualityNÚaÚbÚcÚdÚeÚmockr   r   r   r   c                 C   sL   |d u rg }|d u rg }|D ]	}|   ||k¡ q|D ]	}|   ||k¡ qd S ©N)Ú
assertTrue)r(   ÚbaseÚsameÚ	differentÚsr6   r,   r,   r-   ÚcheckC   s   ÿzCheckEquality.check)NN)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_locR   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_scope^   s   zTestIRMeta.test_scopeN)r/   r0   r1   Ú__doc__rT   rY   r,   r,   r,   r-   rK   N   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_terminatort   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_jumpz   ó
   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[   p   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_blockO  s   


z-TestIRCompounds.test_block.<locals>.gen_blockrN   )r³   r   r“   rB   rC   rI   r?   )r(   r¹   r3   r4   r5   r,   r¸   r-   Ú
test_blockN  s
   zTestIRCompounds.test_blockc                 C   s’  dd„ }dd„ }|ƒ }|ƒ }||ƒ}||ƒ}|   | |¡¡ ddd„}|  d| |¡¡ tt|j ¡ ƒƒD ] }|j| }	t|	j	d t
jƒrU|	j	d }
|
j|
j|
_|
_ nq5|| |¡d	gƒ |ƒ }|  | |¡¡ ||ƒ}tƒ }tt|j ¡ ƒƒD ]_}|j| }	|	j	d d… }
d }tt|
ƒd
 ƒD ]}t|
| t
jƒrªt|
|d
  t
jƒrª|} nq’|d urÙ|	j	}| t||d
  ƒ¡ | t|| ƒ¡ ||d
  || ||< ||d
 <  nqz|   |¡ |  | |¡¡ |  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¼   b  ó   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rªt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Œ   m  sB   ÿÿþz9TestIRCompounds.test_functionir.<locals>.gen.<locals>.foo)r¿   rÀ   Nr,   )rŒ   r,   rÚ   r-   Úgenj  s   !z,TestIRCompounds.test_functionir.<locals>.genc                 S   sN   |d u rg }|   ¡ }|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 + cr9   )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¯   ;  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 3Hÿ