a
    
dy!                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlZG dd de
ZG dd deZG d	d
 d
eZdd ZG dd deZG dd deZedkre  dS )    N)capture_cache_log)BaseCacheTest)configc                   @   sr   e Zd ZdZdZejeZ	ej
e	dZdZedZedZedZedZd	d
 Zdd Zdd ZdS )UfuncCacheTestzg
    Since the cache stats is not exposed by ufunc, we test by looking at the
    cache debug log.
    Fzcache_usecases.pyZufunc_caching_test_fodderz\[cache\] data saved toz\[cache\] index saved toz\[cache\] data loaded fromz\[cache\] index loaded fromc                 C   s<   | j |}| j|}| t|| | t|| dS )z8
        Check number of cache-save were issued
        N)regex_data_savedfindallregex_index_savedassertEquallen)selfcachelogcountZ
data_savedZindex_saved r   j/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/numba/tests/npyufunc/test_caching.pycheck_cache_saved   s    z UfuncCacheTest.check_cache_savedc                 C   s<   | j |}| j|}| t|| | t|| dS )z8
        Check number of cache-load were issued
        N)regex_data_loadedr   regex_index_loadedr	   r
   )r   r   r   Zdata_loadedZindex_loadedr   r   r   check_cache_loaded(   s    z!UfuncCacheTest.check_cache_loadedc           
      K   s   |   }t||}t }|f i |}W d   n1 s<0    Y  | }| j||d t }|f i |}	W d   n1 s0    Y  | }| j||d ||	fS )zf
        Check number of cache load/save.
        There should be one per overloaded version.
        Nr   )import_modulegetattrr   getvaluer   r   )
r   usecase_namen_overloadskwargsmodusecaseout	new_ufuncr   cached_ufuncr   r   r   check_ufunc_cache1   s    
,,z UfuncCacheTest.check_ufunc_cacheN)__name__
__module____qualname____doc__Z_numba_parallel_test_ospathdirname__file__herejoinZusecases_filemodnamerecompiler   r   r   r   r   r   r    r   r   r   r   r      s   



		r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestUfuncCacheTestc                 K   sl   | j dddi|\}}tjdtj}tj|||| tjdtjd}tj|||| d S )Ndirect_ufunc_cache_usecaser      
   Zdtype)r/   	r    nprandomZastypefloat64ZtestingZassert_equalarangeZintpr   r   r   r   inpr   r   r   test_direct_ufunc_cacheI   s     
z*TestUfuncCacheTest.test_direct_ufunc_cachec                 C   s   | j dd d S NT)Zforceobjr:   r   r   r   r   test_direct_ufunc_cache_objmodeR   s    z2TestUfuncCacheTest.test_direct_ufunc_cache_objmodec                 C   s   | j dd d S Nparallel)targetr<   r=   r   r   r    test_direct_ufunc_cache_parallelU   s    z3TestUfuncCacheTest.test_direct_ufunc_cache_parallelc                 K   sl   | j dddi|\}}tjdtj}tj|||| tjdtjd}tj|||| d S )Nindirect_ufunc_cache_usecaser      r1   r2   )rC   r3   r8   r   r   r   test_indirect_ufunc_cacheX   s     
z,TestUfuncCacheTest.test_indirect_ufunc_cachec                 C   s   | j dd d S r?   )rE   r=   r   r   r   "test_indirect_ufunc_cache_parallela   s    z5TestUfuncCacheTest.test_indirect_ufunc_cache_parallelN)r!   r"   r#   r:   r>   rB   rE   rF   r   r   r   r   r.   G   s
   		r.   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestDUfuncCacheTestc                 C   s   |   }t||}t }| }W d    n1 s40    Y  | j| dd t }|td W d    n1 sz0    Y  | j| dd | j| dd t $}| }|td W d    n1 s0    Y  | j| dd d S )Nr   r   r1      )r   r   r   r   r   r4   r7   r   )r   r   r   r   r   Zufuncr   r   r   check_dufunc_usecaseh   s    
$,,z(TestDUfuncCacheTest.check_dufunc_usecasec                 C   s   |  d d S )NZdirect_dufunc_cache_usecaserI   r=   r   r   r   test_direct_dufunc_cachez   s    z,TestDUfuncCacheTest.test_direct_dufunc_cachec                 C   s   |  d d S )NZindirect_dufunc_cache_usecaserJ   r=   r   r   r   test_indirect_dufunc_cache~   s    z.TestDUfuncCacheTest.test_indirect_dufunc_cacheN)r!   r"   r#   rI   rK   rL   r   r   r   r   rG   e   s   rG   c                 C   s   t jr| dd} | S )N/z\\\\)r   ZIS_WIN32replace)Zrstrr   r   r   _fix_raw_path   s    rO   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 )TestGUfuncCacheTestc           	      C   s   |   }t|d}t }|  W d    n1 s40    Y  | }td}t|| j|}td}t|| j|}| 	t
|d | t
|t
| d S )Ndirect_gufunc_cache_usecasez/__pycache__/guf-{}z/__pycache__/{}r0   )r   r   r   r   rO   r,   r   formatr+   ZassertGreaterr
   r	   )	r   r   r   r   r   Zfmt1prefixedZfmt2normalr   r   r   test_filename_prefix   s    
$z(TestGUfuncCacheTest.test_filename_prefixc                 K   sl   | j dddi|\}}tjdtj}tj|||| tjdtjd}tj|||| d S )NrQ   r      r1   r2   )rQ   r3   r8   r   r   r   test_direct_gufunc_cache   s     
z,TestGUfuncCacheTest.test_direct_gufunc_cachec                 C   s   | j dd d S r;   rW   r=   r   r   r    test_direct_gufunc_cache_objmode   s    z4TestGUfuncCacheTest.test_direct_gufunc_cache_objmodec                 C   s   | j dd d S r?   rX   r=   r   r   r   !test_direct_gufunc_cache_parallel   s    z5TestGUfuncCacheTest.test_direct_gufunc_cache_parallelc                 K   sl   | j dddi|\}}tjdtj}tj|||| tjdtjd}tj|||| d S )Nindirect_gufunc_cache_usecaser   rD   r1   r2   )r[   r3   r8   r   r   r   test_indirect_gufunc_cache   s     
z.TestGUfuncCacheTest.test_indirect_gufunc_cachec                 K   s   | j dd d S r?   )r\   )r   r   r   r   r   #test_indirect_gufunc_cache_parallel   s    z7TestGUfuncCacheTest.test_indirect_gufunc_cache_parallelN)	r!   r"   r#   rU   rW   rY   rZ   r\   r]   r   r   r   r   rP      s   rP   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestCacheSpecificIssuec                 C   sb   dt | j| j|d }tjtjd|gtjtjd}| \}}|j	dkr^t
d|j	| f d S )Nzif 1:
            import sys

            sys.path.insert(0, %(tempdir)r)
            mod = __import__(%(modname)r)
            mod.%(runcode)s
            )tempdirr+   runcodez-c)stdoutstderrr   z/process failed with code %s: stderr follows
%s
)dictr_   r+   
subprocessPopensys
executablePIPEcommunicate
returncodeAssertionErrordecode)r   r`   codepopenr   errr   r   r   run_in_separate_process   s    
	
z.TestCacheSpecificIssue.run_in_separate_processc                 C   s   |  d |  d d S )Nzdirect_ufunc_cache_usecase()rp   r=   r   r   r   test_first_load_cached_ufunc   s    
z3TestCacheSpecificIssue.test_first_load_cached_ufuncc                 C   s   |  d |  d d S )Nzdirect_gufunc_cache_usecase()rq   r=   r   r   r   test_first_load_cached_gufunc   s    
z4TestCacheSpecificIssue.test_first_load_cached_gufuncN)r!   r"   r#   rp   rr   rs   r   r   r   r   r^      s   r^   __main__)rf   os.pathr%   r,   rd   numpyr4   Znumba.tests.supportr   Znumba.tests.test_cachingr   Z
numba.corer   Zunittestr   r.   rG   rO   rP   r^   r!   mainr   r   r   r   <module>   s    92)