a
    
dd                     @   s   d dl Z d dlZd dl mZ d dlmZ d dlZd dlmZ	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ ed	d
 ZG dd deZG dd deZedkre   dS )    N)TestCase)contextmanager)types)NumbaInvalidConfigWarning)compile_isolated)_parse_refprune_flagsoverride_configc                 c   s4   t d|  d V  W d    n1 s&0    Y  d S )NZLLVM_REFPRUNE_FLAGSr   )flags r   g/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/numba/tests/test_refop_pruning.pyset_refprune_flags   s    r   c                   @   sH   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S )TestRefOpPruningFc           
      O   s   t dd  t|g |R }W d   n1 s00    Y  |jdd}| | | D ]N\}}t||d}| | d| }	|r| j|d|	d qZ| j|d|	d qZdS )a(  
        Asserts the the func compiled with argument types "argtys" reports
        refop pruning statistics. The **prune_types** kwargs list each kind
        of pruning and whether the stat should be zero (False) or >0 (True).

        Note: The exact statistic varies across platform.
        ZLLVM_REFPRUNE_PASS1NZprune_statszfailed checking r   )msg)	r	   r   metadatagetZassertIsNotNoneitemsgetattrZassertGreaterassertEqual)
selffuncZargtysZprune_typesZcresZpstatskvstatr   r   r   r   check   s    	.


zTestRefOpPruning.checkc                 C   s   dd }| j |tjdd d S )Nc                 S   sL   t | }d}| dkr0|dd  }||d 7 }n|d d }||d 7 }|S )Nr         npzeros)naaccbcr   r   r   r   6   s    
z1TestRefOpPruning.test_basic_block_1.<locals>.funcT)
basicblockr   r   intpr   r   r   r   r   test_basic_block_13   s    z#TestRefOpPruning.test_basic_block_1c              	   C   sL   dd }t d( | j|tjddddd W d    n1 s>0    Y  d S )Nc                 S   s&   t | }d}| dkr| }|d S )Nr      r   )r    Zonessum)r"   r#   xr   r   r   r   E   s
    
z-TestRefOpPruning.test_diamond_1.<locals>.funcper_bb,diamondTFr'   ZdiamondfanoutZfanout_raiser   r   r   r)   r*   r   r   r   test_diamond_1C   s
    
zTestRefOpPruning.test_diamond_1c              	   C   sL   dd }t d( | j|tjddddd W d    n1 s>0    Y  d S )Nc                 S   sJ   g }t | D ]}|t| qd}|D ]}|| d|j  7 }q*|S )N        r   )rangeappendr    aranger-   size)r"   conir&   Zarrr   r   r   r   S   s    z-TestRefOpPruning.test_diamond_2.<locals>.funcr/   TFr0   r2   r*   r   r   r   test_diamond_2Q   s
    

zTestRefOpPruning.test_diamond_2c                 C   s    dd }| j |tjddd d S )Nc                 S   s:   t | }t | }||f}d}|D ]}||d 7 }q$|S )Nr4   r   r   )r"   r#   r%   r.   r$   r:   r   r   r   r   c   s    

z,TestRefOpPruning.test_fanout_1.<locals>.funcT)r'   r1   r(   r*   r   r   r   test_fanout_1a   s    	zTestRefOpPruning.test_fanout_1c              	   C   sL   dd }t d( | j|tjddddd W d    n1 s>0    Y  d S )Nc                 S   s2   t | }t | }||f}|D ]}| r tq |S N)r    r!   
ValueError)r"   r#   r%   r.   r:   r   r   r   r   p   s    

z,TestRefOpPruning.test_fanout_2.<locals>.funczper_bb,fanoutTFr0   r2   r*   r   r   r   test_fanout_2n   s
    	
zTestRefOpPruning.test_fanout_2c              	   C   sL   dd }t d( | j|tjddddd W d    n1 s>0    Y  d S )Nc                 S   s.   t | }d}t |D ]}|| 7 }qdS )Nr   r   )r    r7   Znditeritem)r"   Zaryr&   r   r   r   r   r      s
    
z,TestRefOpPruning.test_fanout_3.<locals>.funczper_bb,fanout_raiseTFr0   r2   r*   r   r   r   test_fanout_3}   s
    

zTestRefOpPruning.test_fanout_3N)__name__
__module____qualname__Z_numba_parallel_test_r   r+   r3   r;   r<   r?   rA   r   r   r   r   r      s   r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestRefPruneFlagsc                 C   s   t dt d S )Nerror)warningssimplefilterr   r   r   r   r   setUp   s    zTestRefPruneFlags.setUpc                 C   s   t   d S r=   )rG   resetwarningsrI   r   r   r   tearDown   s    zTestRefPruneFlags.tearDownc              	   C   s   t d | t}t }W d    n1 s00    Y  | t|jd | dt|jd j	 | dt|jd j	 | |t
jj W d    n1 s0    Y  d S )Nzabc,per_bb,cder,   abcr   Zcder   )r   ZassertWarnsr   r   r   lenrG   ZassertInstrmessagellvmRefPruneSubpassesPER_BB)r   cmoptvalr   r   r   test_warn_invalid_flags   s    
$z)TestRefPruneFlags.test_warn_invalid_flagsc                 C   sB   t d& t }| |tjj W d    n1 s40    Y  d S )Nz$per_bb, diamond, fanout,fanout_raiser   r   r   rQ   rR   ALLr   rU   r   r   r   test_valid_flag   s    
z!TestRefPruneFlags.test_valid_flagc                 C   sB   t d& t }| |tjj W d    n1 s40    Y  d S )NallrW   rY   r   r   r   test_the_all_flag   s    
z#TestRefPruneFlags.test_the_all_flagc                 C   sL   t d0 t }tj}| ||j|jB  W d    n1 s>0    Y  d S )Nzper_bb, fanout)r   r   rQ   rR   r   rS   ZFANOUT)r   rU   Zenumclsr   r   r   test_some_flags   s    
z!TestRefPruneFlags.test_some_flagsN)	rB   rC   rD   rJ   rL   rV   rZ   r\   r]   r   r   r   r   rE      s   	rE   __main__)ZunittestrG   r   
contextlibr   numpyr    Zllvmlite.bindingZbindingrQ   Znumbar   Znumba.core.errorsr   Znumba.core.compilerr   Znumba.core.codegenr   Znumba.tests.supportr	   r   r   rE   rB   mainr   r   r   r   <module>   s    
w!