
    J/Phy!                        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e
          Z G d de          Z G d	 d
e          Zd Z G d de          Z G d de          Zedk    r ej                     dS dS )    N)capture_cache_log)BaseCacheTest)configc                      e Zd ZdZdZej                            e          Z	ej        
                    e	d          ZdZ ej        d          Z ej        d          Z ej        d          Z ej        d          Zd	 Zd
 Z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                     | 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_saveds        a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/npyufunc/test_caching.pycheck_cache_savedz UfuncCacheTest.check_cache_saved   sp     *228<<
,44X>>Z%000[))511111    c                     | 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   data_loadedindex_loadeds        r   check_cache_loadedz!UfuncCacheTest.check_cache_loaded(   sr     ,44X>>.66x@@[))5111\**E22222r   c                    |                                  }t          ||          }t                      5 } |di |}ddd           n# 1 swxY w Y   |                                }|                     ||           t                      5 } |di |}	ddd           n# 1 swxY w Y   |                                }|                     ||           ||	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_ufuncs
             r   check_ufunc_cachez UfuncCacheTest.check_ufunc_cache1   sc   
   ""#|,,   	*C))&))I	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*<<>>x{;;;    	-C"7,,V,,L	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-<<>><<<,&&s#   	AAA	B!!B%(B%N)__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          "7??8$$DGLL':;;M)G!rz"<=="
#>??"
#@AA#$BCC2 2 23 3 3' ' ' ' 'r   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestUfuncCacheTestc                     | j         	 dddi|\  }}t          j                            d                              t          j                  }t          j                             ||           ||                     t          j        dt          j                  }t          j                             ||           ||                     d S )Ndirect_ufunc_cache_usecaser$      
   dtype)r>   	r+   nprandomastypefloat64testingassert_equalarangeintpr   r%   r)   r*   inps        r   test_direct_ufunc_cachez*TestUfuncCacheTest.test_direct_ufunc_cacheI   s    "8$"8(#C #C67#C;A#C #C	< ir""))"*55

		#S0A0ABBBi"'***

		#S0A0ABBBBBr   c                 2    |                      d           d S NT)forceobjrN   r   s    r   test_direct_ufunc_cache_objmodez2TestUfuncCacheTest.test_direct_ufunc_cache_objmodeR   s    $$d$33333r   c                 2    |                      d           d S Nparallel)targetrR   rS   s    r    test_direct_ufunc_cache_parallelz3TestUfuncCacheTest.test_direct_ufunc_cache_parallelU   s    $$J$77777r   c                     | j         	 dddi|\  }}t          j                            d                              t          j                  }t          j                             ||           ||                     t          j        dt          j                  }t          j                             ||           ||                     d S )Nindirect_ufunc_cache_usecaser$      r@   rA   )r[   rC   rL   s        r   test_indirect_ufunc_cachez,TestUfuncCacheTest.test_indirect_ufunc_cacheX   s    "8$"8*#E #E89#E=C#E #E	< ir""))"*55

		#S0A0ABBBi"'***

		#S0A0ABBBBBr   c                 2    |                      d           d S rV   )r]   rS   s    r   "test_indirect_ufunc_cache_parallelz5TestUfuncCacheTest.test_indirect_ufunc_cache_parallela   s    &&j&99999r   N)r,   r-   r.   rN   rT   rY   r]   r_   r   r   r   r<   r<   G   se        C C C4 4 48 8 8C C C: : : : :r   r<   c                        e Zd Zd Zd Zd ZdS )TestDUfuncCacheTestc                    |                                  }t          ||          }t                      5 } |            }d d d            n# 1 swxY w Y   |                     |                                d           t                      5 } |t          j        d                     d d d            n# 1 swxY w Y   |                     |                                d           |                     |                                d           t                      5 } |            } |t          j        d                     d d d            n# 1 swxY w Y   |                     |                                d           d S )Nr   r   r@      )r    r!   r   r   r"   rD   rJ   r   )r   r#   r&   r'   r(   ufuncs         r   check_dufunc_usecasez(TestDUfuncCacheTest.check_dufunc_usecaseh   s     ""#|,,   	CGIIE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s||~~Q777   	!CE")B--   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s||~~Q777a888   	!CGIIEE")B--   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	a88888s5   A

AAB66B:=B:!(EEEc                 0    |                      d           d S )Ndirect_dufunc_cache_usecasere   rS   s    r   test_direct_dufunc_cachez,TestDUfuncCacheTest.test_direct_dufunc_cachez   s    !!"?@@@@@r   c                 0    |                      d           d S )Nindirect_dufunc_cache_usecaserh   rS   s    r   test_indirect_dufunc_cachez.TestDUfuncCacheTest.test_indirect_dufunc_cache~   s    !!"ABBBBBr   N)r,   r-   r.   re   ri   rl   r   r   r   ra   ra   e   sI        9 9 9$A A AC C C C Cr   ra   c                 J    t           j        r|                     dd          } | S )N/z\\\\)r   IS_WIN32replace)rstrs    r   _fix_raw_pathrr      s$     +||D'**Kr   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestGUfuncCacheTestc                 l   |                                  }t          |d          }t                      5 } |             d d d            n# 1 swxY w Y   |                                }t	          d          }t          j        |                    | j                  |          }t	          d          }t          j        |                    | j                  |          }| 	                    t          |          d           |                     t          |          t          |                     d S )Ndirect_gufunc_cache_usecasez/__pycache__/guf-{}z/__pycache__/{}r?   )r    r!   r   r"   rr   r9   r   formatr8   assertGreaterr   r   )	r   r&   r'   r(   r   fmt1prefixedfmt2normals	            r   test_filename_prefixz(TestGUfuncCacheTest.test_filename_prefix   s7     ""#<==   	CGIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	<<>>344:dkk$,77BB/00DKK55x@@3v;;***Vc(mm44444s   A

AAc                     | j         	 dddi|\  }}t          j                            d                              t          j                  }t          j                             ||           ||                     t          j        dt          j                  }t          j                             ||           ||                     d S )Nrv   r$      r@   rA   )rv   rC   rL   s        r   test_direct_gufunc_cachez,TestGUfuncCacheTest.test_direct_gufunc_cache   s     #9$"8)#H #H7<#H@F#H #H	< ir""))"*55

		#S0A0ABBBi"'***

		#S0A0ABBBBBr   c                 2    |                      d           d S rP   r   rS   s    r    test_direct_gufunc_cache_objmodez4TestGUfuncCacheTest.test_direct_gufunc_cache_objmode   s    %%t%44444r   c                 2    |                      d           d S rV   r   rS   s    r   !test_direct_gufunc_cache_parallelz5TestGUfuncCacheTest.test_direct_gufunc_cache_parallel   s    %%Z%88888r   c                     | j         	 dddi|\  }}t          j                            d                              t          j                  }t          j                             ||           ||                     t          j        dt          j                  }t          j                             ||           ||                     d S )Nindirect_gufunc_cache_usecaser$   r\   r@   rA   )r   rC   rL   s        r   test_indirect_gufunc_cachez.TestGUfuncCacheTest.test_indirect_gufunc_cache   s     #9$"8+#F #F9:#F>D#F #F	< ir""))"*55

		#S0A0ABBBi"'***

		#S0A0ABBBBBr   c                 2    |                      d           d S rV   )r   )r   r%   s     r   #test_indirect_gufunc_cache_parallelz7TestGUfuncCacheTest.test_indirect_gufunc_cache_parallel   s    ''z':::::r   N)	r,   r-   r.   r}   r   r   r   r   r   r   r   r   rt   rt      st        5 5 5 	C 	C 	C5 5 59 9 9	C 	C 	C; ; ; ; ;r   rt   c                        e Zd Zd Zd Zd ZdS )TestCacheSpecificIssuec                 R   dt          | j        | j        |          z  }t          j        t
          j        d|gt          j        t          j                  }|                                \  }}|j	        dk    r-t          d|j	        d|                                d          d S )	Nzif 1:
            import sys

            sys.path.insert(0, %(tempdir)r)
            mod = __import__(%(modname)r)
            mod.%(runcode)s
            )tempdirr8   runcodez-c)stdoutstderrr   zprocess failed with code z: stderr follows

)dictr   r8   
subprocessPopensys
executablePIPEcommunicate
returncodeAssertionErrordecode)r   r   codepopenr(   errs         r   run_in_separate_processz.TestCacheSpecificIssue.run_in_separate_process   s     t|T\&( ( ((  #.$!=(2
Q Q Q$$&&Sq   .-2-=-=-=szz||||"M N N N ! r   c                 Z    |                      d           |                      d           d S )Nzdirect_ufunc_cache_usecase()r   rS   s    r   test_first_load_cached_ufuncz3TestCacheSpecificIssue.test_first_load_cached_ufunc   s4    $$%CDDD 	$$%CDDDDDr   c                 Z    |                      d           |                      d           d S )Nzdirect_gufunc_cache_usecase()r   rS   s    r   test_first_load_cached_gufuncz4TestCacheSpecificIssue.test_first_load_cached_gufunc   s4    $$%DEEE 	$$%DEEEEEr   N)r,   r-   r.   r   r   r   r   r   r   r   r      sL        N N N0E E EF F F F Fr   r   __main__)r   os.pathr1   r9   r   numpyrD   numba.tests.supportr   numba.tests.test_cachingr   
numba.corer   unittestr   r<   ra   rr   rt   r   r,   mainr   r   r   <module>r      s   



  				         1 1 1 1 1 1 2 2 2 2 2 2       6' 6' 6' 6' 6'] 6' 6' 6'r: : : : : : : :<C C C C C. C C C:  /; /; /; /; /;. /; /; /;d&F &F &F &F &F^ &F &F &FR zHMOOOOO r   