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.pyZ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countZ
data_savedZindex_saved r   p/var/www/html/eduruby.in/lip-sync/lip-sync-env/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   Zdata_loadedZ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__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   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      
   Zdtype)r2   	r"   nprandomZastypeZfloat64testingZassert_equalarangeZ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)Zforceobjr=   r   r   r   r   test_direct_ufunc_cache_objmodeR      z2TestUfuncCacheTest.test_direct_ufunc_cache_objmodec                 C   r?   NZparallel)targetrA   rB   r   r   r    test_direct_ufunc_cache_parallelU   rD   z3TestUfuncCacheTest.test_direct_ufunc_cache_parallelc                 K   r1   )Nindirect_ufunc_cache_usecaser      r4   r5   )rH   r6   r;   r   r   r   test_indirect_ufunc_cacheX   r>   z,TestUfuncCacheTest.test_indirect_ufunc_cachec                 C   r?   rE   )rJ   rB   r   r   r   "test_indirect_ufunc_cache_parallela   rD   z5TestUfuncCacheTest.test_indirect_ufunc_cache_parallelN)r#   r$   r%   r=   rC   rG   rJ   rK   r   r   r   r   r0   G   s    		r0   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   r4      )r   r   r   r   r   r7   r:   r   )r   r   r   r   r   Zufuncr   r   r   check_dufunc_usecaseh   s    
z(TestDUfuncCacheTest.check_dufunc_usecasec                 C      |  d d S )NZdirect_dufunc_cache_usecaserO   rB   r   r   r   test_direct_dufunc_cachez   s   z,TestDUfuncCacheTest.test_direct_dufunc_cachec                 C   rP   )NZindirect_dufunc_cache_usecaserQ   rB   r   r   r   test_indirect_dufunc_cache~   s   z.TestDUfuncCacheTest.test_indirect_dufunc_cacheN)r#   r$   r%   rO   rR   rS   r   r   r   r   rM   e   s    rM   c                 C   s   t jr	| dd} | S )N/z\\\\)r   ZIS_WIN32replace)Zrstrr   r   r   _fix_raw_path   s   rV   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__/{}r3   )r   r   r   r   rV   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   r1   )NrX   r      r4   r5   )rX   r6   r;   r   r   r   test_direct_gufunc_cache      
z,TestGUfuncCacheTest.test_direct_gufunc_cachec                 C   r?   r@   r^   rB   r   r   r    test_direct_gufunc_cache_objmode   rD   z4TestGUfuncCacheTest.test_direct_gufunc_cache_objmodec                 C   r?   rE   r`   rB   r   r   r   !test_direct_gufunc_cache_parallel   rD   z5TestGUfuncCacheTest.test_direct_gufunc_cache_parallelc                 K   r1   )Nindirect_gufunc_cache_usecaser   rI   r4   r5   )rc   r6   r;   r   r   r   test_indirect_gufunc_cache   r_   z.TestGUfuncCacheTest.test_indirect_gufunc_cachec                 K   r?   rE   )rd   )r   r   r   r   r   #test_indirect_gufunc_cache_parallel   rD   z7TestGUfuncCacheTest.test_indirect_gufunc_cache_parallelN)	r#   r$   r%   r\   r^   ra   rb   rd   re   r   r   r   r   rW      s    rW   c                   @   rL   )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
)dictrg   r-   
subprocessPopensys
executablePIPEcommunicate
returncodeAssertionErrordecode)r   rh   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()rx   rB   r   r   r   test_first_load_cached_ufunc      
z3TestCacheSpecificIssue.test_first_load_cached_ufuncc                 C   ry   )Nzdirect_gufunc_cache_usecase()rz   rB   r   r   r   test_first_load_cached_gufunc   r|   z4TestCacheSpecificIssue.test_first_load_cached_gufuncN)r#   r$   r%   rx   r{   r}   r   r   r   r   rf      s    rf   __main__)rn   Zos.pathr'   r.   rl   numpyr7   Znumba.tests.supportr   Znumba.tests.test_cachingr   Z
numba.corer   Zunittestr   r0   rM   rV   rW   rf   r#   mainr   r   r   r   <module>   s$    92)