
    shy!                         S SK r S SKrS SKrS SKrS SKrS SKJr  S SK	J
r
  S SKJr  S SKr " S S\
5      r " S S\5      r " S	 S
\5      rS r " S S\5      r " S S\5      r\S:X  a  \R*                  " 5         gg)    N)capture_cache_log)BaseCacheTest)configc                   0   \ rS rSrSrSr\R                  R                  \	5      r
\R                  R                  \
S5      rSr\R                  " S5      r\R                  " S5      r\R                  " S5      r\R                  " S	5      rS
 rS rS rSrg)UfuncCacheTest   z[
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                     U R                   R                  U5      nU R                  R                  U5      nU R                  [	        U5      U5        U R                  [	        U5      U5        g)z(
Check number of cache-save were issued
N)regex_data_savedfindallregex_index_savedassertEquallen)selfcachelogcount
data_savedindex_saveds        u/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/npyufunc/test_caching.pycheck_cache_saved UfuncCacheTest.check_cache_saved   sY     **228<
,,44X>Z%0[)51    c                     U R                   R                  U5      nU R                  R                  U5      nU R                  [	        U5      U5        U R                  [	        U5      U5        g)z(
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_loaded!UfuncCacheTest.check_cache_loaded(   sZ     ,,44X>..66x@[)51\*E2r   c                 l   U R                  5       n[        XA5      n[        5        nU" S0 UD6nSSS5        WR                  5       nU R	                  XS9  [        5        nU" S0 UD6n	SSS5        UR                  5       nU R                  XS9  WW	4$ ! , (       d  f       Nk= f! , (       d  f       NB= f)zN
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_cache UfuncCacheTest.check_ufunc_cache1   s    
   "#, C)&)I !<<>x;  C",V,L !<<><,&& !  ! s   	B 	B%
B"%
B3r"   N)__name__
__module____qualname____firstlineno____doc___numba_parallel_test_ospathdirname__file__herejoinusecases_filemodnamerecompiler   r   r   r   r   r   r.   __static_attributes__r"   r   r   r   r      s     "77??8$DGGLL':;M)Gzz"<=

#>?

#@A$BC23'r   r   c                   2    \ rS rSrS rS rS rS rS rSr	g)	TestUfuncCacheTestG   c                    U R                   "  SSS0UD6u  p#[        R                  R                  S5      R                  [        R                  5      n[        R
                  R                  U" U5      U" U5      5        [        R                  " S[        R                  S9n[        R
                  R                  U" U5      U" U5      5        g )Nr'      
   dtype)direct_ufunc_cache_usecase	r.   nprandomastypefloat64testingassert_equalarangeintpr   r(   r,   r-   inps        r   test_direct_ufunc_cache*TestUfuncCacheTest.test_direct_ufunc_cacheI   s    "&"8"8(#C67#C;A#C	 iir"))"**5


	#S0ABii"''*


	#S0ABr   c                 "    U R                  SS9  g NT)forceobjrU   r   s    r   test_direct_ufunc_cache_objmode2TestUfuncCacheTest.test_direct_ufunc_cache_objmodeR   s    $$d$3r   c                 "    U R                  SS9  g Nparallel)targetrZ   r[   s    r    test_direct_ufunc_cache_parallel3TestUfuncCacheTest.test_direct_ufunc_cache_parallelU   s    $$J$7r   c                    U R                   "  SSS0UD6u  p#[        R                  R                  S5      R                  [        R                  5      n[        R
                  R                  U" U5      U" U5      5        [        R                  " S[        R                  S9n[        R
                  R                  U" U5      U" U5      5        g )Nr'      rF   rG   )indirect_ufunc_cache_usecaserJ   rS   s        r   test_indirect_ufunc_cache,TestUfuncCacheTest.test_indirect_ufunc_cacheX   s    "&"8"8*#E89#E=C#E	 iir"))"**5


	#S0ABii"''*


	#S0ABr   c                 "    U R                  SS9  g r_   )rg   r[   s    r   "test_indirect_ufunc_cache_parallel5TestUfuncCacheTest.test_indirect_ufunc_cache_parallela   s    &&j&9r   r"   N)
r0   r1   r2   r3   rU   r\   rb   rg   rj   r@   r"   r   r   rB   rB   G   s    C48C:r   rB   c                   &    \ rS rSrS rS rS rSrg)TestDUfuncCacheTeste   c                    U R                  5       n[        X!5      n[        5        nU" 5       nS S S 5        U R                  WR	                  5       SS9  [        5        nW" [
        R                  " S5      5        S S S 5        U R                  UR	                  5       SS9  U R                  UR	                  5       SS9  [        5        nU" 5       nU" [
        R                  " S5      5        S S S 5        U R                  UR	                  5       SS9  g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NO= f)Nr   r!   rF      )r#   r$   r   r   r%   rK   rQ   r   )r   r&   r)   r*   r+   ufuncs         r   check_dufunc_usecase(TestDUfuncCacheTest.check_dufunc_usecaseh   s      "#, CIE !s||~Q7 C"))B-  !s||~Q7a8 CIE"))B-  ! 	a8 !  ! 
 ! s#   DD%	$D6
D"%
D36
Ec                 &    U R                  S5        g )Ndirect_dufunc_cache_usecaserr   r[   s    r   test_direct_dufunc_cache,TestDUfuncCacheTest.test_direct_dufunc_cachez   s    !!"?@r   c                 &    U R                  S5        g )Nindirect_dufunc_cache_usecaserv   r[   s    r   test_indirect_dufunc_cache.TestDUfuncCacheTest.test_indirect_dufunc_cache~   s    !!"ABr   r"   N)r0   r1   r2   r3   rr   rw   r{   r@   r"   r   r   rm   rm   e   s    9$ACr   rm   c                 T    [         R                  (       a  U R                  SS5      n U $ )N/z\\\\)r   IS_WIN32replace)rstrs    r   _fix_raw_pathr      s    ||D'*Kr   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestGUfuncCacheTest   c                    U R                  5       n[        US5      n[        5        nU" 5         S S S 5        WR                  5       n[	        S5      n[
        R                  " UR                  U R                  5      U5      n[	        S5      n[
        R                  " UR                  U R                  5      U5      nU R                  [        U5      S5        U R                  [        U5      [        U5      5        g ! , (       d  f       N= f)Ndirect_gufunc_cache_usecasez/__pycache__/guf-{}z/__pycache__/{}rE   )r#   r$   r   r%   r   r>   r   formatr=   assertGreaterr   r   )	r   r)   r*   r+   r   fmt1prefixedfmt2normals	            r   test_filename_prefix(TestGUfuncCacheTest.test_filename_prefix   s      "#<= CI !<<>34::dkk$,,7B/0DKK5x@3v;*Vc(m4 ! s   C==
Dc                    U R                   "  SSS0UD6u  p#[        R                  R                  S5      R                  [        R                  5      n[        R
                  R                  U" U5      U" U5      5        [        R                  " S[        R                  S9n[        R
                  R                  U" U5      U" U5      5        g )Nr'      rF   rG   )r   rJ   rS   s        r   test_direct_gufunc_cache,TestGUfuncCacheTest.test_direct_gufunc_cache   s     #'"8"8)#H7<#H@F#H	 iir"))"**5


	#S0ABii"''*


	#S0ABr   c                 "    U R                  SS9  g rX   r   r[   s    r    test_direct_gufunc_cache_objmode4TestGUfuncCacheTest.test_direct_gufunc_cache_objmode   s    %%t%4r   c                 "    U R                  SS9  g r_   r   r[   s    r   !test_direct_gufunc_cache_parallel5TestGUfuncCacheTest.test_direct_gufunc_cache_parallel   s    %%Z%8r   c                    U R                   "  SSS0UD6u  p#[        R                  R                  S5      R                  [        R                  5      n[        R
                  R                  U" U5      U" U5      5        [        R                  " S[        R                  S9n[        R
                  R                  U" U5      U" U5      5        g )Nr'   re   rF   rG   )indirect_gufunc_cache_usecaserJ   rS   s        r   test_indirect_gufunc_cache.TestGUfuncCacheTest.test_indirect_gufunc_cache   s     #'"8"8+#F9:#F>D#F	 iir"))"**5


	#S0ABii"''*


	#S0ABr   c                 "    U R                  SS9  g r_   )r   )r   r(   s     r   #test_indirect_gufunc_cache_parallel7TestGUfuncCacheTest.test_indirect_gufunc_cache_parallel   s    ''z':r   r"   N)r0   r1   r2   r3   r   r   r   r   r   r   r@   r"   r   r   r   r      s"    5 	C59	C;r   r   c                   &    \ rS rSrS rS rS rSrg)TestCacheSpecificIssue   c                 j   S[        U R                  U R                  US9-  n[        R                  " [
        R                  SU/[        R                  [        R                  S9nUR                  5       u  pEUR                  S:w  a,  [        SUR                  < SUR                  5       < S35      eg )	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 z: stderr follows

)dictr   r=   
subprocessPopensys
executablePIPEcommunicate
returncodeAssertionErrordecode)r   r   codepopenr+   errs         r   run_in_separate_process.TestCacheSpecificIssue.run_in_separate_process   s     t||T\\&((   #..$!=(2
Q$$&q  -2-=-=szz|"M N N !r   c                 H    U R                  S5        U R                  S5        g )Nzdirect_ufunc_cache_usecase()r   r[   s    r   test_first_load_cached_ufunc3TestCacheSpecificIssue.test_first_load_cached_ufunc   s"    $$%CD 	$$%CDr   c                 H    U R                  S5        U R                  S5        g )Nzdirect_gufunc_cache_usecase()r   r[   s    r   test_first_load_cached_gufunc4TestCacheSpecificIssue.test_first_load_cached_gufunc   s"    $$%DE 	$$%DEr   r"   N)r0   r1   r2   r3   r   r   r   r@   r"   r   r   r   r      s    N0EFr   r   __main__)r   os.pathr6   r>   r   numpyrK   numba.tests.supportr   numba.tests.test_cachingr   
numba.corer   unittestr   rB   rm   r   r   r   r0   mainr"   r   r   <module>r      s    
  	   1 2  6'] 6'r: :<C. C:/;. /;d&F^ &FR zMMO r   