
    pir                     b   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZ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Zd dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZ d dlm Z  d dl!m"Z" d d	l#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d d
l.m/Z/ 	 d dl0Z0d Z2 e2       Z3dZ4 e	jj                  e3e4      Z6d Z7d Z8d Z9d Z:d Z;d Z< G d de$e%      Z=d Z> G d de%      Z? G d de?      Z@ G d de@      ZA G d de@      ZB G d de@      ZCe+ G d  d!e@             ZD G d" d#e@      ZE G d$ d%e?      ZFe* G d& d'e	jJ                               ZGd( ZH G d) d*e	jJ                        ZI G d+ d,e?      ZJ G d- d.e      ZK G d/ d0e%      ZL G d1 d2e%      ZMeNd3k(  r e	j                          yy# e1$ r dZ0Y w xY w)4    N)Path)floor)njit)codegen)UserWideCacheLocatorZipCacheLocatorFunctionCacheInTreeCacheLocatorInTreeCacheLocatorFsAgnostic)NumbaWarning)parfor)
SerialMixinTestCasecapture_cache_logimport_dynamicoverride_configrun_in_new_process_cachingskip_if_typeguardskip_parfors_unsupportedtemp_directoryoverride_env_config)
cpu_targetc                     t        d      } t        j                  j                  | d      }t        j                  |       t        t        j                  j                  |d      d      5 }|j                  d       d d d        t        j                  |d       	 t        t        j                  j                  |d      d      5 }|j                  d       d d d        	 t        j                  |d	       t        j                  |       y
# 1 sw Y   xY w# 1 sw Y   BxY w# t        $ r. Y t        j                  |d	       t        j                  |       yw xY w# t        j                  |d	       t        j                  |       w xY w)N
test_cachewritable_testwrite_okwtcheck1@  write_forbiddencheck2i  FT)r   ospathjoinmkdiropenwritechmodshutilrmtreePermissionError)tempdirtest_dirfs      Z/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/numba/tests/test_caching.pycheck_access_is_preventabler0   3   s)    \*GWo6HHHX	bggll8Z0$	7 1	 HHXu "'',,x):;TB 	aGGH	  	5!h% 
	 	   
5!h 	5!hsH   +D*D% DD% DD"D% %	E.E EE -Fz9Cannot create a directory to which writes are preventablec                       d} t        |       | fS )Nabcd)hash)cs    r/   constant_unicode_cacher5   W   s    A7A:    c                  x    t         }  t        d      |       } |        \  }} |       \  }}||k(  sJ ||k(  sJ y NTcache)r5   r   )pyfunccfuncexp_hvexp_strgot_hvgot_strs         r/   check_constant_unicode_cacherA   \   sJ    #FDtV$EhOFGgOFGVgr6   c                      dddS )N      )ab rG   r6   r/   
dict_cacherH   e   s    r6   c                  ^    t         }  t        d      |       } |        } |       }||k(  sJ y r8   )rH   r   r;   r<   expgots       r/   check_dict_cacherM   i   s2    FDtV$E
(C
'C#::r6   c               #   "   K   dD ]  } |   y w)N)rC   rD      rG   )vs    r/   generator_cacherQ   q   s      s   c                      t         }  t        d      |       }t         |              }t         |             }||k(  sJ y r8   )rQ   r   listrJ   s       r/   check_generator_cacherT   v   s:    FDtV$E
vx.C
uw-C#::r6   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestCachingc                 R     |        t        |      }| j                  |d   d       y )Nexitcoder   )r   assertEqual)selffuncress      r/   run_testzTestCaching.run_test   s%    (.Z!,r6   c                 .    | j                  t               y N)r]   rA   rZ   s    r/   test_constant_unicode_cachez'TestCaching.test_constant_unicode_cache   s    23r6   c                 .    | j                  t               y r_   )r]   rM   r`   s    r/   test_dict_cachezTestCaching.test_dict_cache   s    &'r6   c                 .    | j                  t               y r_   )r]   rT   r`   s    r/   test_generator_cachez TestCaching.test_generator_cache   s    +,r6   c                 V   t        | j                  j                        }t        j                         }|j                         }|j                  t        ||df      }|j                          |j                          |j                         \  }}|s| j                  |       | j                  |dd       |j                  t        ||df      }|j                          |j                          |j                         \  }}|s| j                  |       | j                  |dd       y )NFtargetargs  z-Omitted function returned an incorrect outputT)r   	__class____name__multiprocessingget_contextQueueProcessomitted_child_test_wrapperstartr$   getfailrY   )rZ   	cache_dirctxresult_queueprocsuccessoutputs          r/   test_omittedzTestCaching.test_omitted   s    #4>>#:#:;	))+yy{{{-	51  
 	

		&**, IIf;	
 {{-	40  
 	

		&**, IIf;	
r6   N)rl   
__module____qualname__r]   ra   rc   re   r{   rG   r6   r/   rV   rV   ~   s    -
4(-(
r6   rV   c                    t        d|      5  t        d      dd       }	  |       }|rL|j                  |j                  d      dk(  sJ d       |j                  |j                  d      dk(  sSJ d       |j                  |j                  d      dk(  sJ d	       |j                  |j                  d      dk(  sJ d
       d}| j                  ||f       d d d        y #  t        j                         }d}Y 6xY w# 1 sw Y   y xY w)N	CACHE_DIRTr9   c                     | S r_   rG   )nums    r/   testz(omitted_child_test_wrapper.<locals>.test   s    Jr6   r   rC   zCache did not hit as expectedzCache has an unexpected misszCache did not miss as expectedzCache has an unexpected hitF)rj   )r   r   _cache_hits
signatures_cache_misses	traceback
format_excput)rw   ru   second_callr   rz   ry   s         r/   rq   rq      s4   	i	0 ,	D		 
		VF ''(:;q@ 434@))$//!*<=B 323B ))$//!*<=B 545B''(:;q@ 212@G
 	'6*+1, ,*	))+FG/, ,s#   C>B#C!C>!C;9C>>Dc                   >    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d Zy)	BaseCacheTestNc                 .   t        d      | _        t        j                  j	                  d| j                         t
        j                  j                  | j                  | j                  dz         | _        t
        j                  j                  | j                  d      | _	        t        j                  | j                  | j                         t        j                  | j                  t        j                  t        j                   z         d | _        y )Nr   r   z.py__pycache__)r   r,   sysr#   insertr"   r$   modnamemodfileru   r)   copyusecases_filer(   statS_IREADS_IWRITEmaxDiffr`   s    r/   setUpzBaseCacheTest.setUp   s    %l34<<(ww||DLL$,,2FGdllMBD&&5
t||dmm;<r6   c                     t         j                  j                  | j                  d        t         j                  j                  | j                         y r_   )r   modulespopr   r#   remover,   r`   s    r/   tearDownzBaseCacheTest.tearDown   s,    d+%r6   c                 d   t         j                  j                  | j                  d       }|*|j                  g}|D ]  }	 t        j                  |        t        | j                        }| j                  |j                  j                  d      | j                         |S # t        $ r Y rw xY w)Nco)r   r   r   r   
__cached__r"   unlinkFileNotFoundErrorr   rY   __file__rstripr   )rZ   oldcachedfnmods        r/   import_modulezBaseCacheTest.import_module   s     kkoodllD1?nn%F IIbM
 T\\*,,T2DLLA
	 ) s    B##	B/.B/c                     	 t        j                  | j                        D cg c]  }|j                  d      s| c}S c c}w # t        $ r g cY S w xY w)N)z.pycz.pyo)r"   listdirru   endswithr   )rZ   r   s     r/   cache_contentszBaseCacheTest.cache_contents   sT    	!#DNN!; :2;;'78  : : :  	I	s!   !A A A  A AAc                 Z     t         fdt         j                               D              S )Nc              3      K   | ]M  }|t         j                  j                  t         j                  j                  j                  |            f O y wr_   )r"   r#   getmtimer$   ru   ).0r   rZ   s     r/   	<genexpr>z1BaseCacheTest.get_cache_mtimes.<locals>.<genexpr>   s@      = ))"'',,t~~r*JKL =s   AA)dictsortedr   r`   s   `r/   get_cache_mtimeszBaseCacheTest.get_cache_mtimes   s+     =$T%8%8%:;= = 	=r6   c                 \    | j                         }| j                  t        |      ||       y r_   )r   rY   len)rZ   nr4   s      r/   check_pycachezBaseCacheTest.check_pycache  s&    !QA&r6   c                      y r_   rG   r`   s    r/   
dummy_testzBaseCacheTest.dummy_test  s    r6   )rl   r|   r}   r   r   r   r   r   r   r   r   r   rG   r6   r/   r   r      s/    MG&"='r6   r   c                       e Zd Zej                  j                  e      Zej                  j                  ed      Z	dZ
dddZddZy)DispatcherCacheUsecasesTestcache_usecases.pydispatcher_caching_test_fodderNenvvarsc          	         |i }dt        | j                  | j                        z  }t        j                  j                         }|j                  |       t        j                  t        j                  d|gt        j                  t        j                  |      }|j                         \  }}|j                  dk7  r;t        d|j                  d|j                         d|j                         d	      y )
Nzif 1:
            import sys

            sys.path.insert(0, %(tempdir)r)
            mod = __import__(%(modname)r)
            mod.self_test()
            r,   r   -c)stdoutstderrenvr   process failed with code z: 
stdout follows
z
stderr follows

)r   r,   r   r"   environr   update
subprocessPopenr   
executablePIPEcommunicate
returncodeAssertionErrordecode)rZ   r   codesubp_envpopenouterrs          r/   run_in_separate_processz3DispatcherCacheUsecasesTest.run_in_separate_process  s     ?G t||T\\BC ::??$   #..$!=(2
%-/ $$&Sq   ##SZZ\3::<A  !r6   c                    |j                   }| j                  t        |j                  j	                               ||j                         |?| j                  t        |j
                  j	                               ||j
                         y y r_   )statsrY   sum
cache_hitsvaluescache_misses)rZ   r[   hitsmissessts        r/   
check_hitsz&DispatcherCacheUsecasesTest.check_hits,  si    ZZR]]1134dBMMJS!7!7!9:F__. r6   r_   )rl   r|   r}   r"   r#   dirnamer   herer$   r   r   r   r   rG   r6   r/   r   r     s;    77??8$DGGLL':;M.G15 8.r6   r   c                   |   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Ze ej*                  ej.                  dk(  d      d               Ze ej*                  ej.                  dk(  d      d               Zd Z ej*                  edu xs ej8                  d   dk  d      d        Zy)	TestCachec                 l   | j                  d       | j                         }| j                  d       |j                  }| j                   |dd      d       | j                  d       | j                   |dd      d       | j                  d       | j	                  |dd       |j
                  }| j                   |dd      d       | j                  d       | j                   |dd      d       | j                  d       | j	                  |dd       |j                  } ||j                  d      }| j                  t        |      d	        ||j                  d      }| j                  t        |      d	       | j                  d
       | j	                  |dd       | j                          y )Nr   rD   rO            @      @   rC   )rD   g     E@	   )r   r   add_usecaseassertPreciseEqualr   add_objmode_usecaserecord_returnaligned_arrtuple
packed_arrr   )rZ   r   r.   recs       r/   test_cachingzTestCache.test_caching6  so   1  "1OO!Q+1#q	3/11a ##!Q+1#q	3/11a #c
I6"c
I611a  	$$&r6   c                    | j                  d       | j                         }| j                  d       |j                  }| j                   |dd      d       | j                  d       | j                   |dt	        j
                  d            dt	        j
                  d      z   dz          | j                  d       | j                  |dd       y )Nr   rD   rO   r   rC   )r   r   r   r   nparanger   rZ   r   r.   s      r/   test_caching_nrt_prunedz!TestCache.test_caching_nrt_prunedT  s    1  "1OO!Q+1!RYYq\ 2A		!4Dq4HI11a r6   c                 B   | j                         }| j                  |j                  dd      d       | j                  d       |j                  }| j                   |dd      d       | j                  d       | j                         }|j                  }| j                   |dd      d       | j                  d       |j
                  }| j                   |dd      d       | j                  d       | j                   |dd      d       | j                  d       y )NrO   rD   r            @r   )r   r   innerr   outer_uncachedouterr   s      r/   test_inner_then_outerzTestCache.test_inner_then_outera  s      "		!Q31!Q+1  "!Q+1II!Q+1#q	3/1r6   c                    | j                         }| j                  |j                  dd      d       | j                  d       | j                  |j	                  dd      d       | j                  d       | j                         }|j
                  }| j                   |dd      d       | j                  d       | j                   |dd      d       | j                  d       y )NrO   rD   r   r   r   r   r   )r   r   r  r   r   r   r   s      r/   test_outer_then_innerzTestCache.test_outer_then_inneru  s      "		!Q31 2 21a 8!<1  "II!Q+1#q	3/1r6   c                     | j                         }|j                  }| j                   |dd      d       | j                  d       y )NrD   rO   r   r   )r   add_nocache_usecaser   r   r   s      r/   test_no_cachingzTestCache.test_no_caching  s?      "##!Q+1r6   c                    | j                         }t        j                  d      5 }t        j                  dt               |j
                  }| j                   |d      d       | j                  d       d d d        | j                  t              d       | j                  dt        |d   j                               y # 1 sw Y   MxY w)	NTrecordalwaysr   r   r   rC   zBCannot cache compiled function "looplifted" as it uses lifted code)r   warningscatch_warningssimplefilterr   
loopliftedr   r   rY   r   assertInstrmessagerZ   r   wr.   s       r/   test_loopliftedzTestCache.test_looplifted  s      "$$D1 	"Q!!(L9A##AaD!,q!	" 	Q# /03AaDLL0A	C	" 	"s   ACCc                    | j                         }t        j                  d      5 }t        j                  dt               |j
                  }t        j                  j                   |       |j                         | j                  d       d d d        | j                  t              d       | j                  dt        |d   j                               y # 1 sw Y   MxY w)NTr	  r  r   rC   zICannot cache compiled function "use_big_array" as it uses dynamic globals)r   r  r  r  r   use_big_arrayr   testingassert_equalbiggier   rY   r   r  r  r  r  s       r/   test_big_arrayzTestCache.test_big_array  s      "$$D1 	"Q!!(L9!!AJJ##AC4q!	" 	Q# 347!4E	G	" 	"s   A'CC#c                    | j                         }|j                  |j                  |j                  fD ]  }t	        j
                  d      5 }t	        j                  dt               | j                   |d      d       | j                  d       d d d        | j                  t              d       | j                  dj                  |j                        t        |d   j                                 y # 1 sw Y   hxY w)NTr	  r  g        r   rC   z#Cannot cache compiled function "{}")r   	use_c_sinuse_c_sin_nest1use_c_sin_nest2r  r  r  r   r   r   rY   r   r  formatrl   r  r  )rZ   r   r.   r  s       r/   test_ctypeszTestCache.test_ctypes  s       "--!4!4c6I6IJ 	A((5 &%%h=''#4""1%	& SVQ'MM5<<QZZHAaDLL!	& &s   AC88D	c                    | j                         }t        j                         5  t        j                  dt               |j
                  }| j                   |d      d       |j                  }| j                   |d      d       |j                  }| j                   |d      d       |j                  }| j                   |d      d       | j                  d       d d d        y # 1 sw Y   y xY w)NerrorrO   r      
      r   )r   r  r  r  r   closure1r   closure2closure3closure4r   r   s      r/   test_closurezTestCache.test_closure  s      "$$& 	"!!'<8A##AaD!,A##AaD!,A##AaD"-A##AaD"-q!	" 	" 	"s   B<C**C3c                 v   | j                         }|j                  }| j                   ||j                  d      d       | j                   ||j                  d      d       | j                   ||j                  d      d       | j                   ||j                  d      d       | j                  d       y )NrC   r%  d   rD         )r   first_class_function_usecaserY   first_class_function_mulfirst_class_function_addr   r   s      r/   test_first_class_functionz#TestCache.test_first_class_function  s      ",,377;Q?377<cB377;Q?377<bA 	1r6   c                 ^   | j                         }|j                  dd       |j                  dd       |j                  dd       |j                  dd       |j	                  dd       |j                  |j                  d       |j                  |j                  d       | j                         }| j                  |j                  dd       | j                         }| j                  ||       |j                  } |dd       | j                  |dd        |dd       | j                  |dd       |j                  } |dd       | j                  |dd       | j                  | j                         |       | j                          | j                  | j                         |       y )NrD   rO   r   r   r   rC   )r   r   r   r   r  r   r   r   r   r   assertIsNotrY   r   )rZ   r   mtimesmod2r.   s        r/   test_cache_reusezTestCache.test_cache_reuse  sb     "1S!1%1a 		!Q#..!,#//1-&&(A.!!#d#	!Q1a 	#s1a $$	!Q1a  	..0&9$$&..0&9r6   c                    | j                         }|j                  }| j                   |dd      d       t        | j                  d      5 }|j                  d       d d d        | j                         }|j                  }| j                   |dd      d       |j                  }| j                   |dd      d       y # 1 sw Y   dxY w)NrD   rO   r   rE   z
Z = 10
   )r   r   r   r&   r   r'   r   r   s      r/   test_cache_invalidatezTestCache.test_cache_invalidate  s      "OO!Q+ $,,$ 	"GGL!	"   "OO!Q,##!Q,	" 	"s   CC
c                    | j                         }|j                  }| j                   |dd      d       | j                         }|j                  }d|_        | j                   |dd      d       |j	                          | j                   |dd      d       | j                         }|j                  }| j                   |dd      d       y )NrD   rO   r   r%  r:  )r   r   r   Z	recompiler   s      r/   test_recompilezTestCache.test_recompile  s      "OO!Q+  "OO!Q+	!Q,   "OO!Q,r6   c                     | j                         }|j                  }| j                   |d      d       |j                  }| j                   |d      d       y )NrD   r   r$  )r   renamed_function1r   renamed_function2r   s      r/   test_same_nameszTestCache.test_same_names  sN      "!!!a(!!!a(r6   c                 v   ddl m} |j                  }t        ddd      }	 ||_        t	        j
                  |      }t        j                  ||      }| j                  |       dt        _
        t        j                  ||      }| j                  |t               ||_        t        `
y # ||_        t        `
w xY w)NrC   functionpassztests/dummy_module.pyexecT)dummy_modulerF  __code__compileinspectgetfiler   from_functionassertIsNoner   frozenassertIsInstance)rZ   rF  old_codecode_objsourcelocators         r/   test_frozenzTestCache.test_frozen  s    *$$6#:FC	 (H__X.F +886JGg&CJ +886JG!!'+?@ !)H
 !)H
s   A:B) )B8c                    | j                         }|j                  }| j                  t        j                  |j
                  j                  d       | j                   |dd      d       | j                  |dd       | j                         }|j                  }| j                   |dd      d       | j                  |dd       | j                  d       y)	zy
        With a disabled __pycache__, test there is a working fallback
        (e.g. on the user-wide cache dir)
        T)ignore_errorsrD   rO   r   r   rC   N)
r   r   
addCleanupr)   r*   r   
cache_pathr   r   r   )rZ   r   r.   r7  s       r/   _test_pycache_fallbackz TestCache._test_pycache_fallback2  s    
   "OO 	qww'9'9N!Q+1a  !!#!Q+1a  	1r6   ntz3cannot easily make a directory read-only on Windowsc                    t        j                  | j                        j                  }t        j                  | j                  d       | j                  t         j                  | j                  |       | j                          y )Nr   )r"   r   r,   st_moder(   rY  r[  )rZ   	old_permss     r/   test_non_creatable_pycachez$TestCache.test_non_creatable_pycacheK  sR    
 GGDLL)11	
u%$,,	:##%r6   c                 N   t         j                  j                  | j                  d      }t        j                  |       t        j
                  |      j                  }t        j                  |d       | j                  t         j                  ||       | j                          y )Nr   r   )
r"   r#   r$   r,   r%   r   r^  r(   rY  r[  )rZ   pycacher_  s      r/   test_non_writable_pycachez#TestCache.test_non_writable_pycacheV  sj    
 '',,t||];
GGG$,,	
% '95##%r6   c                 L    t         j                  ddgg dz  	 t        j                  dgz         }j                         j                         }t        j                  j                   j                  d      t        d      5 }|j                  d       d d d         fd	} |         |       } j                  d
|j                                y # t        j                  $ r(} j                  d|j                  z         Y d }~d }~ww xY w# 1 sw Y   }xY w)N-mIPythonz--quietz--quickz--no-bannerz--colors=NoColor	--version%ipython not available: return code %dzipython_cache_usecase.txtr  }  
                import os
                import sys

                from numba import jit

                # IPython 5 does not support multiline input if stdin isn't
                # a tty (https://github.com/ipython/ipython/issues/9752)
                f = jit(cache=True)(lambda: 42)

                res = f()
                # IPython writes on stdout, so use stderr instead
                sys.stderr.write(u"cache hits = %d\n" % f.stats.cache_hits[()])

                # IPython hijacks sys.exit(), bypass it
                sys.stdout.flush()
                sys.stderr.flush()
                os._exit(res)
                c                  >   t        d      5 } t        j                  | t        j                  t        j                  d      }|j	                         \  }}|j
                  dk7  r!j                  d|j
                  ||fz         |cd d d        S # 1 sw Y   y xY wNrbT)stdinr   r   universal_newlines*   z6unexpected return code %d
-- stdout:
%s
-- stderr:
%s
r&   r   r   r   r   r   rt   rn  pr   r   base_cmdinputfnrZ   s       r/   execute_with_inputz2TestCache.test_ipython.<locals>.execute_with_input      gt$ $$XU,6OO,6OO8<> ==?S<<2%II 1 "#sC 89 :      A;BBcache hits = 1)r   r   r   check_outputCalledProcessErrorskipTestr   stripr   r"   r#   r$   r,   r&   r'   r  )rZ   verer.   rv  r   rt  ru  s   `     @@r/   test_ipythonzTestCache.test_ipythonc  s    NND)4MM	*))(k]*BCC iik  "'',,t||-HI'3 	1GG  	*	 	 "&		4[ ,, 	*MMALL) * *	*	 	s#   C DD/DDD#Nr   r   zrequires ipykernel >= 6c                 $    t         j                  ddgg dz  	 t        j                  dgz         }j                         j                         }ddl	m
} |j                         t        d      5 }|j                  d	       d d d         fd
} |         |       } j                  d|j                                y # t        j                  $ r(} j                  d|j                  z         Y d }~d }~ww xY w# 1 sw Y   }xY w)Nre  rf  rg  rh  ri  r   )compilerr  rj  c                  >   t        d      5 } t        j                  | t        j                  t        j                  d      }|j	                         \  }}|j
                  dk7  r!j                  d|j
                  ||fz         |cd d d        S # 1 sw Y   y xY wrl  rq  rr  s       r/   rv  z4TestCache.test_ipykernel.<locals>.execute_with_input  rw  rx  ry  )r   r   r   rz  r{  r|  r   r}  r   	ipykernelr  get_tmp_directoryr&   r'   r  )	rZ   r~  r  r  r.   rv  r   rt  ru  s	   `      @@r/   test_ipykernelzTestCache.test_ipykernel  s    
 NND)4MM	*))(k]*BCC iik  "&,,.'3 	1GG  	*	 	 "&		4] ,, 	*MMALL) * *	*	 	s#   C 8DDC>>DD)rl   r|   r}   r   r   r  r  r  r  r  r!  r+  r3  r8  r;  r?  rC  rV  r[  skip_bad_accessunittestskipIfr"   namer`  rc  r  r  version_infor  rG   r6   r/   r   r   4  s   '<!(CG$" 	:<--$).2 X__RWW_JL&L & X__RWW_JL&L &35j X__i4'KY-C-CA-F-J.055055r6   r   c                   *     e Zd Z fdZd Zd Z xZS )TestCacheZipc                 J   t         |           d}d}d}t        j                  j	                  | j
                  |      }t        j                  |d      5 }|j                  ||       d d d        t        j                  j                  d|       d| _        y # 1 sw Y   1xY w)NzI
from numba import jit

@jit(cache=True)
def add(x, y):
    return x + y
ztest_module.pyztest_archive.zipr  r   test_module)superr   r"   r#   r$   r,   zipfileZipFilewritestrr   r   r   )rZ   mod_contentmod_filenamezip_filenamezip_pathzfrk   s         r/   r   zTestCacheZip.setUp  s     () 77<<l;__Xs+ 	3rKKk2	3 	8$$	3 	3s   BB"c                     t         j                  j                  d       t         j                  j                  dd        y )Nr   r  )r   r#   r   r   r`   s    r/   r   zTestCacheZip.tearDown  s#    Qt,r6   c                    dd l }|j                  dd      }| j                  |d       | j                  |j                  dd       | j                  |j                  d       t        j
                  d= t        j                          dd l }|j                  dd      }| j                  |d       | j                  |j                  d       y )Nr   rD   rO   r   rC   r  )r  addrY   r   r   r   	importlibinvalidate_caches)rZ   r  result1result2s       r/   test_zip_cachingzTestCacheZip.test_zip_caching  s     	//!Q'!$A. 	+ KK&##% //!Q'!$ 	+r6   )rl   r|   r}   r   r   r  __classcell__rk   s   @r/   r  r    s    %.-,r6   r  c                       e Zd ZdZd Zd Zy)TestCacheZipLibzR
    ZipCache tests that don't require the setup/teardown from `TestCacheZip`
    c                     d }d}t        j                  ||      }| j                  |       | j                  |j                  t        t        d                   | j                  |j                  d       y )Nc                       y r_   rG   rG   r6   r/   	mock_funcz<TestCacheZipLib.test_zip_locator_creation.<locals>.mock_func      r6   z/path/to/archive.zip/module.pyz/path/to/archive.zipz	module.py)r   rN  assertIsNotNonerY   	_zip_pathr  r   _internal_path)rZ   r  r  rU  s       r/   test_zip_locator_creationz)TestCacheZipLib.test_zip_locator_creation  se    	 4!//	8DW%**C5K0L,MN//=r6   c                 \    d }d}t        j                  ||      }| j                  |       y )Nc                       y r_   rG   rG   r6   r/   r  z@TestCacheZipLib.test_zip_locator_non_zip_path.<locals>.mock_func  r  r6   z/path/to/module.py)r   rN  rO  )rZ   r  non_zip_pathrU  s       r/   test_zip_locator_non_zip_pathz-TestCacheZipLib.test_zip_locator_non_zip_path  s.    	 ,!//	<H'"r6   N)rl   r|   r}   __doc__r  r  rG   r6   r/   r  r    s    
>#r6   r  c                   .     e Zd Z fdZ fdZd Z xZS )TestSequentialParForsCachec                 @    t         t        |           dt        _        y )NT)r  r  r   r   sequential_parfor_loweringrZ   rk   s    r/   r   z TestSequentialParForsCache.setUp*  s    ($57,0)r6   c                 @    t         t        |           dt        _        y )NF)r  r  r   r   r  r  s    r/   r   z#TestSequentialParForsCache.tearDown/  s    ($8:,1)r6   c                    | j                         }| j                  d       |j                  }t        j                  d      }| j                   ||      ||z  |z          |j                  j                         D cg c]  }|j                  j                   }}| j                  |dg       | j                  d       y c c}w )Nr   r%  FrD   )r   r   parfor_usecaser   onesr   	overloadsr   libraryhas_dynamic_globalsrY   )rZ   r   r.   arycresdynamic_globalss         r/   r   z'TestSequentialParForsCache.test_caching4  s      "1ggbk#c	C8'({{'9'9';=#  <<;; = =5'21=s   =C)rl   r|   r}   r   r   r   r  r  s   @r/   r  r  (  s    1
2
	r6   r  c                   r    e Zd ZdZd Z ej                   ej                         dk(  d      d        Z	d Z
y)TestCacheWithCpuSettingFc                     d}| j                         j                         D ]$  \  }}||v s| j                  |||          |dz  }& | j                  |dd       y )Nr   rC   znothing to comparemsg)r   itemsassertGreaterEqualassertGreater)rZ   
mtimes_oldmatch_countkrP   s        r/   check_later_mtimesz*TestCacheWithCpuSetting.check_later_mtimesD  sm    ))+113 	!DAqJ'':a=9q 	! 	;3 	 	5r6   genericzLLVM detected 'generic' CPUc                 P   | j                  d       | j                  t        j                         dd       | j	                         }t        | j                               }| j                  ddd       | j                  |       | j                  t        | j                               |       | j                         }|j                  j                  }|j                  }|j                         }| j                  t        |      d       |j                         \  }}|d   d   dk(  r||}
}	n||}	}
| j                  |
d   d   t        j                                | j                  |
d   d   d       | j                  |	d   d   d       | j                  |	d   d   d       y )Nr    )NUMBA_CPU_NAMENUMBA_CPU_FEATURESr   r  rD   rC   )r   r   llget_host_cpu_namer   r   r   r  r  r   r   _cache_cache_file_load_indexrY   keys)rZ   r6  
cache_sizer   r:   
cache_filecache_indexkey_akey_bkey_generickey_hosts              r/   test_user_set_cpu_namez.TestCacheWithCpuSetting.test_user_set_cpu_nameM  s    	1 	$$')';';'=+-/ 	% 	
 &&(,,./
 	$$'"$.
$ 	
 	'3t2245zB  "&&&&
 ,,.[)1-$))+8A;)#$)5K$)5kH!Q)=)=)?@!Q,Q*I6Q*B/r6   c                    | j                  d       t        j                  j                         }t        j                         }| j                  d|i       t        | j                               }| j                         }d}| j                  ||       | j                  d|i       | j                  |       | j                  t        | j                               |       | j                         }|j                  j                  }|j                  }|j!                         }	| j#                  t        |	      d       |	j%                         \  }
}|
d   d   |k(  r|
|}}n|
|}}| j#                  |d   d   |j'                                | j#                  |d   d   |       | j#                  |d   d   |j'                                | j#                  |d   d   |       y )Nr   r  r   z	-sse;-avxrD   rC   )r   r   target_contextr   get_host_cpu_featuresr   r   r   r   assertNotEqualr  r  r   r   r  r  r  rY   r  _get_host_cpu_name)rZ   cpu_codegensystem_featuresr  r6  my_cpu_featuresr   r:   r  r  r  r  key_modifiedr  s                 r/   test_user_set_cpu_featuresz2TestCacheWithCpuSetting.test_user_set_cpu_featuresr  s   1 //779!779 	$$)?; 	% 	
 ,,./
&&(%O_=$$)?; 	% 	
 	'3t2245zB  "&&&&
 ,,.[)1-$))+8A;/)%*E(L%*ElH!Q)G)G)IJ!Q9a+[-K-K-MNa+_=r6   N)rl   r|   r}   _numba_parallel_test_r  r  r  r  r  r  r  rG   r6   r/   r  r  @  sH    !5 X__)R))+y824!04!0F'>r6   r  c                       e Zd ZdZej
                  j                  e      Zej
                  j                  ed      Z
dZd Zy)TestMultiprocessCacheFr   r   c                    | j                         }|j                  }d}	 t        j                  d      }|j                  |      }	 t        |j                  |t        |                  }|j                          | j                  |||dz
  z  dz         y # t        $ r	 t        }Y sw xY w# |j                          w xY w)NrO   spawnrC   rD   )r   simple_usecase_callerrm   rn   AttributeErrorPoolr   imaprangecloserY   )rZ   r   r.   r   rv   poolr\   s          r/   test_multiprocessingz*TestMultiprocessCache.test_multiprocessing  s      " %%	"!--g6C xx{	dii58,-CJJLa1q5kQ./  	"!C	" JJLs   B $B, B)(B),B>N)rl   r|   r}   r  r"   r#   r   r   r   r$   r   r   r  rG   r6   r/   r  r    s;     "77??8$DGGLL':;M.G0r6   r  c                       e Zd ZdZej
                  j                  e      Zej
                  j                  ed      Z
dZdZdZd Zd Zd Zd	 Zd
 Z ej(                   eed      d      d        Zy)TestCacheFileCollisionFr   caching_file_loc_fodderzD
from numba import njit
@njit(cache=True)
def bar():
    return 123
zD
from numba import njit
@njit(cache=True)
def bar():
    return 321
c                 *   t        d      | _        t        j                  j	                  d| j                         d| _        | j                  | j
                  t        j                         | j
                  | _        dj                  | j
                  dg      | _
        t        j                  j                  | j                  | j
                        }t        j                  |       t        t        j                  j                  |d      d      5 }t        | j                  |       d d d        t        t        j                  j                  |d	      d      5 }t        | j                   |       d d d        y # 1 sw Y   TxY w# 1 sw Y   y xY w)
Ntest_cache_file_locr   module_name_that_is_unlikely.fooz__init__.pyr  filezfoo.py)r   r,   r   r#   r   r   assertNotInr   modname_bar1r$   modname_bar2r"   r%   r&   printsource_text_1source_text_2)rZ   foomodfouts      r/   r   zTestCacheFileCollision.setUp  s   %&;<4<<(5s{{3 LLHHdllE%:;dllDLL9
"'',,v}5s; 	1t$$$40	1"'',,vx0#6 	1$$$$40	1 	1	1 	1	1 	1s   E=F	=F	Fc                     t         j                  j                  | j                  d        t         j                  j                  | j                  d        t         j
                  j                  | j                         y r_   )r   r   r   r  r  r#   r   r,   r`   s    r/   r   zTestCacheFileCollision.tearDown  sF    ))40))40%r6   c                 @    t        | j                        j                  S r_   )r   r  barr`   s    r/   import_bar1z"TestCacheFileCollision.import_bar1      d//0444r6   c                 @    t        | j                        j                  S r_   )r   r  r  r`   s    r/   import_bar2z"TestCacheFileCollision.import_bar2  r  r6   c                 h   | j                         }| j                         }|j                  j                  j                  }|j                  j                  j                  }| j                  ||       | j                  |j                  d             | j                  |j                  d             y )Nz__init__.bar-3.pyzfoo.bar-3.py)r  r  r  r  _index_namer  
assertTrue
startswith)rZ   bar1bar2idxname1idxname2s        r/   test_file_locationz)TestCacheFileCollision.test_file_location  s    !!;;**66;;**66Hh/++,?@A++N;<r6   rn   z)Test requires multiprocessing.get_contextc                 `   | j                         }| j                         }t               5 } |       }d d d        j                         }| j	                  |j                  d      d       | j	                  |j                  d      d       | j	                  |j                  d      d       | j	                  |j                  d      d       t               5 } |       }d d d        |j                         }| j	                  |j                  d      d       | j	                  |j                  d      d       | j	                  |j                  d      d       | j	                  |j                  d      d       | j                         	 t        j                  d      }j                         }|j                  t        || j                  | j                  | j                   f	      }	|	j#                          |j%                         }
|j%                         }|j%                         }|j%                         }|	j'                          | j	                  ||       | j	                  ||       | j	                  |
j                  d      d       | j	                  |
j                  d      d       | j	                  |
j                  d      d       | j	                  |
j                  d      d       | j	                  |j                  d      d       | j	                  |j                  d      d       | j	                  |j                  d      d       | j	                  |j                  d      d       y # 1 sw Y   JxY w# 1 sw Y   xY w# t        $ r t        d       Y w xY w)
Nzindex savedrC   z
data savedzindex loadedr   zdata loadedr  zmissing spawn contextrg   )r  r  r   getvaluerY   countr  rm   rn   
ValueErrorr  ro   rp   cache_file_collision_testerr,   r  r  rr   rs   r$   )rZ   r  r  bufres1cachelogres2mpqrx   log1got1log2got2s                 r/   test_no_collisionz(TestCacheFileCollision.test_no_collision  s    !!  	C6D	<<>6:5q97;6:  	C6D	<<>6:5q97;6:D$'	+ !,,W5B HHJzz!< !4<< $ 1 1 $ 1 1 3  4 	

uuwuuwuuwuuw		 	t$t$ 	M2A6L115N3Q7M2A6 	M2A6L115N3Q7M2A6m	 		 	  	+)*	+s)   M;NN ;NNN-,N-N)rl   r|   r}   r  r"   r#   r   r   r   r$   r   r   r  r  r   r   r  r  r  r  
skipUnlesshasattrrm   r(  rG   r6   r/   r  r    s    !77??8$DGGLL':;M'GMM1&
55= X-@DF97F97r6   r  c                    t         j                  j                  d|       t        |      j                  }t        |      j                  }t               5 } |       }d d d        | j                  j                                | j                         t               5 } |       }d d d        | j                  |j                                | j                         y # 1 sw Y   xY w# 1 sw Y   FxY w)Nr   )r   r#   r   r   r  r   r   r  )	r#  r,   r  r  r  r  r  r1r2s	            r/   r  r  .  s    HHOOAw,'++D,'++D		 VEE#,,.EE"I		 VEE#,,.EE"I  s   C C, C),C5c                   *    e Zd ZdZdZdZd Zd Zd Zy)#TestCacheMultipleFilesWithSignatureFz
from file2 import function2
z
from numba import njit

@njit('float64(float64)', cache=True)
def function1(x):
    return x

@njit('float64(float64)', cache=True)
def function2(x):
    return x
c                    t        d      | _        t        j                  j	                  | j                  d      | _        t        | j
                  d      5 }t        | j                  |       d d d        t        j                  j	                  | j                  d      | _	        t        | j                  d      5 }t        | j                  |       d d d        y # 1 sw Y   oxY w# 1 sw Y   y xY w)Nr  zfile1.pyr  r  zfile2.py)r   r,   r"   r#   r$   file1r&   r  source_text_file1file2source_text_file2)rZ   r  s     r/   r   z)TestCacheMultipleFilesWithSignature.setUpP  s    %&;<WW\\$,,
;
$**c" 	5d$((t4	5 WW\\$,,
;
$**c" 	5d$((t4	5 	5		5 	5	5 	5s   C;C(C%(C1c                 B    t        j                  | j                         y r_   )r)   r*   r,   r`   s    r/   r   z,TestCacheMultipleFilesWithSignature.tearDown[  s    dll#r6   c                    t        j                  t        j                  | j                  gt         j
                  t         j
                        }|j                         \  }}d|j                          d|j                          }| j                  |j                  d|       t        j                  t        j                  | j                  gt         j
                  t         j
                        }|j                         \  }}d|j                          d|j                          }| j                  |j                  d|       y )Nr   r   zstdout:
z


stderr:
r   r  )r   r   r   r   r1  r   r   r   rY   r   r3  )rZ   r   r   r   r  s        r/   *test_caching_mutliple_files_with_signaturezNTestCacheMultipleFilesWithSignature.test_caching_mutliple_files_with_signature^  s      #..$**!=(2(29 $$&S#**,}SZZ\NC))1#6   #..$**!=(2(29 $$&S#**,}SZZ\NC))1c2r6   N)	rl   r|   r}   r  r2  r4  r   r   r8  rG   r6   r/   r/  r/  <  s)     "
	5$3r6   r/  c                       e Zd Zej                  j                  e      Zej                  j                  ed      Z	dZ
d Zd Zd Zy)TestCFuncCachezcfunc_cache_usecases.pycfunc_caching_test_fodderc                 n   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 )	Naf  if 1:
            import sys

            sys.path.insert(0, %(tempdir)r)
            mod = __import__(%(modname)r)
            mod.self_test()

            f = mod.add_usecase
            assert f.cache_hits == 1
            f = mod.outer
            assert f.cache_hits == 1
            f = mod.div_usecase
            assert f.cache_hits == 1
            r   r   r7  r   r   z:stderr follows
r   )r   r,   r   r   r   r   r   r   r   r   r   r   )rZ   r   r   r   r   s        r/   r   z&TestCFuncCache.run_in_separate_processv  s     t||T\\BC   #..$!=(2
Q$$&Sq  #<U=M=M<N O447JJL>"E F F !r6   c                 $    |j                          y r_   )	self_testrZ   r   s     r/   check_modulezTestCFuncCache.check_module  s    r6   c                 n   | j                  d       | j                         }| j                  d       | j                  |j                  j                  d       | j                  |j
                  j                  d       | j                  |j                  j                  d       | j                  |j                  j                  d       | j                  |       | j                         }| j                  d       | j                  |j                  j                  d       | j                  |j
                  j                  d       | j                  |j                  j                  d       | j                  |j                  j                  d       | j                  |       | j                          y )Nr   r   rC   )
r   r   rY   r   r   r  r  div_usecaser@  r   r?  s     r/   r   zTestCFuncCache.test_caching  sF   1  "133Q7--q100;;Q?33Q7#   "133Q7--q100;;Q?33Q7#$$&r6   N)rl   r|   r}   r"   r#   r   r   r   r$   r   r   r   r@  r   rG   r6   r/   r:  r:  p  s>    77??8$DGGLL'@AM)GF0'r6   r:  c                       e Zd Zy)TestLocatorN)rl   r|   r}   rG   r6   r/   rD  rD    s    r6   rD  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)&TestCacheLocatorEnvironmentIntegrationz9Integration tests for environment variable functionality.c                     d }t        dd      5  | j                  t              5  t        |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                       yNrp  rG   rG   r6   r/   r  z\TestCacheLocatorEnvironmentIntegration.test_locators_env_override_unknown.<locals>.mock_func      r6   NUMBA_CACHE_LOCATOR_CLASSESzfoo,bar)r   assertRaisesRuntimeErrorr	   )rZ   r  s     r/   "test_locators_env_override_unknownzITestCacheLocatorEnvironmentIntegration.test_locators_env_override_unknown  s^    	 !)
 	) ""<0 )i()		) 	)) )		) 	)s!   AAAA	AAc                     d }t        dd      5  t        |      }t        }| j                  |j                  j
                  |       d d d        y # 1 sw Y   y xY w)Nc                       yrI  rG   rG   r6   r/   r  z[TestCacheLocatorEnvironmentIntegration.test_locators_env_override_single.<locals>.mock_func  rJ  r6   rK  r   )r   r	   r   rQ  _implrU  rZ   r  r:   expectedLocators       r/   !test_locators_env_override_singlezHTestCacheLocatorEnvironmentIntegration.test_locators_env_override_single  sZ    	 !)*
 	3 "),E:O!!%++"5"5"13	3 	3 	3s   8AAc                     d }t        dt         d      5  t        |      }t        }| j	                  |j
                  j                  |       d d d        y # 1 sw Y   y xY w)Nc                       yrI  rG   rG   r6   r/   r  z[TestCacheLocatorEnvironmentIntegration.test_locators_env_override_custom.<locals>.mock_func  rJ  r6   rK  z.TestLocator)r   rl   r	   rD  rQ  rQ  rU  rR  s       r/   !test_locators_env_override_customzHTestCacheLocatorEnvironmentIntegration.test_locators_env_override_custom  sa    	 !)j%
 	3 "),E)O!!%++"5"5"13	3 	3 	3s   8AA!c                     d }d}t         }t        d|      5  t        |      }| j                  |j                  j
                  |       d d d        y # 1 sw Y   y xY w)Nc                       yrI  rG   rG   r6   r/   r  zYTestCacheLocatorEnvironmentIntegration.test_locators_env_override_list.<locals>.mock_func  rJ  r6   zXInTreeCacheLocatorFsAgnostic,InTreeCacheLocator,IPythonCacheLocator,UserWideCacheLocatorrK  )r   r   r	   rQ  rQ  rU  )rZ   r  locatorClassesrS  r:   s        r/   test_locators_env_override_listzFTestCacheLocatorEnvironmentIntegration.test_locators_env_override_list  sa    	E6 )
 	H "),E!!%++"5"5G	H 	H 	Hs   2AAc                 x    d }t        |      }t        }| j                  |j                  j                  |       y )Nc                       yrI  rG   rG   r6   r/   r  zOTestCacheLocatorEnvironmentIntegration.test_default_locators.<locals>.mock_func  rJ  r6   )r	   r
   rQ  rQ  rU  rR  s       r/   test_default_locatorsz<TestCacheLocatorEnvironmentIntegration.test_default_locators  s2    	 i(,ekk11?Cr6   N)	rl   r|   r}   r  rN  rT  rW  r[  r^  rG   r6   r/   rF  rF    s     C	)33HDr6   rF  c                       e Zd ZdZd Zd Zy) TestInTreeCacheLocatorFsAgnosticz7Test _InTreeCacheLocatorFsAgnostic class functionality.c                 $   ddl m} t        j                  |      }t	        j
                  ||      }t        j
                  ||      }| j                  |       | j                  |       |j                         }|j                         }| j                  t        |      d       | j                  t        |      d       | j                  |d   |d          | j                  |d   t        |d                | j                  |d   |d          y)z9Test that FsAgnostic locator floors timestamp to seconds.rC   rE  rD   r   N)rI  rF  rL  rM  r
   rN  r   r  get_source_stamprY   r   r   assertLessEqual)rZ   rF  rT  regular_locatorfs_agnostic_locatorregular_stampfs_agnostic_stamps          r/   test_source_stamp_precisionz<TestInTreeCacheLocatorFsAgnostic.test_source_stamp_precision  s   ** -::8VL:HHf

 	_-01 (88:/@@B 	]+Q/./3 	q)+<Q+?@ 	*1-u]15E/FG 	.q1=3CDr6   c                 F   ddl m} t        j                  |      }t	        j
                  ||      }t        j                  |      }|j                  }|j                         }t        |      }| j                  |d   |       | j                  |d   |j                         y)z:Test FsAgnostic timestamp handling using filesystem mtime.rC   rE  r   N)rI  rF  rL  rM  r   rN  r"   r   st_mtimerb  r   rY   st_size)rZ   rF  rT  re  stat_resultoriginal_mtimestampexpected_timestamps           r/   test_timestamp_precision_on_fsz?TestInTreeCacheLocatorFsAgnostic.test_timestamp_precision_on_fs  s     	+* ;HHf

 ggfo$-- $446 #>2q#56 	q;#6#67r6   N)rl   r|   r}   r  rh  rp  rG   r6   r/   r`  r`    s    AEB8r6   r`  __main__)Pr  rL  rm   r"   r)   r   r   r   r   r  r  r  pathlibr   llvmlite.bindingbindingr  numpyr   mathr   numbar   
numba.corer   numba.core.cachingr   r   r	   r
   r   numba.core.errorsr   numba.parforsr   numba.tests.supportr   r   r   r   r   r   r   r   r   r   numba.core.registryr   r  ImportErrorr0   _access_preventable_access_msgr)  r  r5   rA   rH   rM   rQ   rT   rV   rq   r   r   r   r  r  r  r  r  r  r  r/  r:  rD  rF  r`  rl   mainrG   r6   r/   <module>r     s      	    
            +     +
 > 23 I%(%%&9;G

7
+x 7
t,84H 4n&.- &.R[5+ [5|8,. 8,v#1 #6 !<  .Y>9 Y>x0M 0: q7X.. q7 q7h13(*;*; 13h6'] 6'r	$ 	=DX =D@<8x <8~ zHMMO {'  Is   F# #F.-F.