o
    iy!                     @   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r`e  dS 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.pyufunc_caching_test_fodderz\[cache\] data saved toz\[cache\] index saved toz\[cache\] data loaded fromz\[cache\] index loaded fromc                 C   <   | 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count
data_savedindex_saved r   _/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/numba/tests/npyufunc/test_caching.pycheck_cache_saved      z UfuncCacheTest.check_cache_savedc                 C   r   )z8
        Check number of cache-load were issued
        N)regex_data_loadedr	   regex_index_loadedr   r   )r   r   r   data_loadedindex_loadedr   r   r   check_cache_loaded(   r   z!UfuncCacheTest.check_cache_loadedc           
      K   s   |   }t||}t }|di |}W d   n1 sw   Y  | }| j||d t }|di |}	W d   n1 sCw   Y  | }| j||d ||	fS )zf
        Check number of cache load/save.
        There should be one per overloaded version.
        Nr   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___numba_parallel_test_ospathdirname__file__herejoin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   n   | 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       
   dtype)r9   	r'   nprandomastypefloat64testingassert_equalarangeintpr   r!   r%   r&   inpr   r   r   test_direct_ufunc_cacheI      
z*TestUfuncCacheTest.test_direct_ufunc_cachec                 C      | j dd d S NT)forceobjrI   r   r   r   r   test_direct_ufunc_cache_objmodeR      z2TestUfuncCacheTest.test_direct_ufunc_cache_objmodec                 C   rK   Nparallel)targetrN   rO   r   r   r    test_direct_ufunc_cache_parallelU   rQ   z3TestUfuncCacheTest.test_direct_ufunc_cache_parallelc                 K   r8   )Nindirect_ufunc_cache_usecaser       r;   r<   )rV   r>   rG   r   r   r   test_indirect_ufunc_cacheX   rJ   z,TestUfuncCacheTest.test_indirect_ufunc_cachec                 C   rK   rR   )rX   rO   r   r   r   "test_indirect_ufunc_cache_parallela   rQ   z5TestUfuncCacheTest.test_indirect_ufunc_cache_parallelN)r(   r)   r*   rI   rP   rU   rX   rY   r   r   r   r   r7   G   s    		r7   c                   @   $   e Zd Zdd Zdd Zdd ZdS )TestDUfuncCacheTestc                 C   s   |   }t||}t }| }W d    n1 sw   Y  | j| dd t }|td W d    n1 s=w   Y  | j| dd | j| dd t }| }|td W d    n1 slw   Y  | j| dd d S )Nr   r   r;      )r   r   r   r   r   r?   rE   r   )r   r   r"   r#   r$   ufuncr   r   r   check_dufunc_usecaseh   s    
z(TestDUfuncCacheTest.check_dufunc_usecasec                 C      |  d d S )Ndirect_dufunc_cache_usecaser^   rO   r   r   r   test_direct_dufunc_cachez   s   z,TestDUfuncCacheTest.test_direct_dufunc_cachec                 C   r_   )Nindirect_dufunc_cache_usecasera   rO   r   r   r   test_indirect_dufunc_cache~   s   z.TestDUfuncCacheTest.test_indirect_dufunc_cacheN)r(   r)   r*   r^   rb   rd   r   r   r   r   r[   e   s    r[   c                 C   s   t jr	| dd} | S )N/z\\\\)r   IS_WIN32replace)rstrr   r   r   _fix_raw_path   s   ri   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 sw   Y  | }td}t|| j|}td}t|| j|}| 	t
|d | t
|t
| d S )Ndirect_gufunc_cache_usecasez/__pycache__/guf-{}z/__pycache__/{}r:   )r   r   r   r   ri   r5   r	   formatr4   assertGreaterr   r   )	r   r"   r#   r$   r   fmt1prefixedfmt2normalr   r   r   test_filename_prefix   s   
z(TestGUfuncCacheTest.test_filename_prefixc                 K   r8   )Nrk   r       r;   r<   )rk   r>   rG   r   r   r   test_direct_gufunc_cache      
z,TestGUfuncCacheTest.test_direct_gufunc_cachec                 C   rK   rL   rt   rO   r   r   r    test_direct_gufunc_cache_objmode   rQ   z4TestGUfuncCacheTest.test_direct_gufunc_cache_objmodec                 C   rK   rR   rv   rO   r   r   r   !test_direct_gufunc_cache_parallel   rQ   z5TestGUfuncCacheTest.test_direct_gufunc_cache_parallelc                 K   r8   )Nindirect_gufunc_cache_usecaser    rW   r;   r<   )ry   r>   rG   r   r   r   test_indirect_gufunc_cache   ru   z.TestGUfuncCacheTest.test_indirect_gufunc_cachec                 K   rK   rR   )rz   )r   r!   r   r   r   #test_indirect_gufunc_cache_parallel   rQ   z7TestGUfuncCacheTest.test_indirect_gufunc_cache_parallelN)	r(   r)   r*   rr   rt   rw   rx   rz   r{   r   r   r   r   rj      s    rj   c                   @   rZ   )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
            )tempdirr4   runcodez-c)stdoutstderrr   z/process failed with code %s: stderr follows
%s
)dictr}   r4   
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      |  d |  d d S )Nzdirect_ufunc_cache_usecase()r   rO   r   r   r   test_first_load_cached_ufunc      
z3TestCacheSpecificIssue.test_first_load_cached_ufuncc                 C   r   )Nzdirect_gufunc_cache_usecase()r   rO   r   r   r   test_first_load_cached_gufunc   r   z4TestCacheSpecificIssue.test_first_load_cached_gufuncN)r(   r)   r*   r   r   r   r   r   r   r   r|      s    r|   __main__)r   os.pathr-   r5   r   numpyr?   numba.tests.supportr   numba.tests.test_cachingr   
numba.corer   unittestr   r7   r[   ri   rj   r|   r(   mainr   r   r   r   <module>   s$    92)