
    wgy!                         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*                          yy)    N)capture_cache_log)BaseCacheTest)configc                   (   e Zd ZdZdZej                  j                  e      Z	ej                  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y)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                  |      }| j                  j                  |      }| j                  t	        |      |       | j                  t	        |      |       y)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        f/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/numba/tests/npyufunc/test_caching.pycheck_cache_savedz UfuncCacheTest.check_cache_saved   sY     **228<
,,44X>Z%0[)51    c                     | j                   j                  |      }| j                  j                  |      }| j                  t	        |      |       | j                  t	        |      |       y)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(   sZ     ,,44X>..66x@[)51\*E2r   c                 j   | j                         }t        ||      }t               5 } |di |}ddd       j                         }| j	                  ||       t               5 } |di |}	ddd       |j                         }| j                  ||       	fS # 1 sw Y   nxY w# 1 sw Y   <xY w)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   s    
   "#|,  	*C)&)I	*<<>x{;   	-C",V,L	-<<><,&&	* 	*	- 	-s   	B%	B)B&)B2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     "77??8$DGGLL':;M)G!rzz"<="

#>?"

#@A#$BC23'r   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestUfuncCacheTestc                     | j                   	 dddi|\  }}t        j                  j                  d      j                  t        j                        }t        j
                  j                   ||       ||             t        j                  dt        j                        }t        j
                  j                   ||       ||             y )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_cachez*TestUfuncCacheTest.test_direct_ufunc_cacheI   s    "8$"8"8(#C67#C;A#C	< iir"))"**5


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


	#S0ABr   c                 (    | j                  d       y NT)forceobjrN   r   s    r   test_direct_ufunc_cache_objmodez2TestUfuncCacheTest.test_direct_ufunc_cache_objmodeR   s    $$d$3r   c                 (    | j                  d       y Nparallel)targetrR   rS   s    r    test_direct_ufunc_cache_parallelz3TestUfuncCacheTest.test_direct_ufunc_cache_parallelU   s    $$J$7r   c                     | j                   	 dddi|\  }}t        j                  j                  d      j                  t        j                        }t        j
                  j                   ||       ||             t        j                  dt        j                        }t        j
                  j                   ||       ||             y )Nr$      r?   r@   )indirect_ufunc_cache_usecaserC   rL   s        r   test_indirect_ufunc_cachez,TestUfuncCacheTest.test_indirect_ufunc_cacheX   s    "8$"8"8*#E89#E=C#E	< iir"))"**5


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


	#S0ABr   c                 (    | j                  d       y rV   )r]   rS   s    r   "test_indirect_ufunc_cache_parallelz5TestUfuncCacheTest.test_indirect_ufunc_cache_parallela   s    &&j&9r   N)r,   r-   r.   rN   rT   rY   r]   r_   r   r   r   r<   r<   G   s    C48C:r   r<   c                       e Zd Zd Zd Zd Zy)TestDUfuncCacheTestc                    | j                         }t        ||      }t               5 } |       }d d d        | j                  j	                         d       t               5 } t        j                  d             d d d        | j                  |j	                         d       | j                  |j	                         d       t               5 } |       } |t        j                  d             d d d        | j                  |j	                         d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   CxY w)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IE	s||~Q7  	!C"))B- 	!s||~Q7a8  	!CIE"))B- 	! 	a8	 		! 	!
	! 	!s#   D"D+#D7D(+D47E c                 &    | j                  d       y )Ndirect_dufunc_cache_usecasere   rS   s    r   test_direct_dufunc_cachez,TestDUfuncCacheTest.test_direct_dufunc_cachez   s    !!"?@r   c                 &    | j                  d       y )Nindirect_dufunc_cache_usecaserh   rS   s    r   test_indirect_dufunc_cachez.TestDUfuncCacheTest.test_indirect_dufunc_cache~   s    !!"ABr   N)r,   r-   r.   re   ri   rl   r   r   r   ra   ra   e   s    9$ACr   ra   c                 J    t         j                  r| j                  dd      } | S )N/z\\\\)r   IS_WIN32replace)rstrs    r   _fix_raw_pathrr      s    ||D'*Kr   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestGUfuncCacheTestc                    | j                         }t        |d      }t               5 } |        d d d        j                         }t	        d      }t        j                  |j                  | j                        |      }t	        d      }t        j                  |j                  | j                        |      }| j                  t        |      d       | j                  t        |      t        |             y # 1 sw Y   xY w)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   s      "#<=  	CI	<<>34::dkk$,,7B/0DKK5x@3v;*Vc(m4	 	s   C;;Dc                     | j                   	 dddi|\  }}t        j                  j                  d      j                  t        j                        }t        j
                  j                   ||       ||             t        j                  dt        j                        }t        j
                  j                   ||       ||             y )Nr$      r?   r@   )rv   rC   rL   s        r   test_direct_gufunc_cachez,TestGUfuncCacheTest.test_direct_gufunc_cache   s     #9$"8"8)#H7<#H@F#H	< iir"))"**5


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


	#S0ABr   c                 (    | j                  d       y rP   r   rS   s    r    test_direct_gufunc_cache_objmodez4TestGUfuncCacheTest.test_direct_gufunc_cache_objmode   s    %%t%4r   c                 (    | j                  d       y rV   r   rS   s    r   !test_direct_gufunc_cache_parallelz5TestGUfuncCacheTest.test_direct_gufunc_cache_parallel   s    %%Z%8r   c                     | j                   	 dddi|\  }}t        j                  j                  d      j                  t        j                        }t        j
                  j                   ||       ||             t        j                  dt        j                        }t        j
                  j                   ||       ||             y )Nr$   r[   r?   r@   )indirect_gufunc_cache_usecaserC   rL   s        r   test_indirect_gufunc_cachez.TestGUfuncCacheTest.test_indirect_gufunc_cache   s     #9$"8"8+#F9:#F>D#F	< iir"))"**5


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


	#S0ABr   c                 (    | j                  d       y 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      s"    5 	C59	C;r   rt   c                       e Zd Zd Zd Zd Zy)TestCacheSpecificIssuec                 p   dt        | j                  | j                  |      z  }t        j                  t
        j                  d|gt        j                  t        j                        }|j                         \  }}|j                  dk7  r*t        d|j                  d|j                         d      y )	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$$&Sq  -2-=-=szz|"M N N !r   c                 H    | j                  d       | j                  d       y )Nzdirect_ufunc_cache_usecase()r   rS   s    r   test_first_load_cached_ufuncz3TestCacheSpecificIssue.test_first_load_cached_ufunc   s"    $$%CD 	$$%CDr   c                 H    | j                  d       | j                  d       y )Nzdirect_gufunc_cache_usecase()r   rS   s    r   test_first_load_cached_gufuncz4TestCacheSpecificIssue.test_first_load_cached_gufunc   s"    $$%DE 	$$%DEr   N)r,   r-   r.   r   r   r   r   r   r   r   r      s    N0E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 2  6'] 6'r: :<C. C:/;. /;d&F^ &FR zHMMO r   