o
    ‘iÃ’  ã                   @   s  d dl Z d dlm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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# zd dl$Z$W n e%yy   dZ$Y nw dd	„ Z&e&ƒ Z'd
Z(e )e'e(¡Z*dd„ Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0G dd„ deeƒZ1dd„ Z2G dd„ deƒZ3G dd„ de3ƒZ4G dd „ d e4ƒZ5e"G d!d"„ d"e4ƒƒZ6G d#d$„ d$e4ƒZ7G d%d&„ d&e3ƒZ8e!G d'd(„ d(ejƒƒZ9d)d*„ Z:G d+d,„ d,ejƒZ;G d-d.„ d.e3ƒZ<e=d/kre >¡  dS dS )0é    N)Únjit)Úcodegen)Ú_UserWideCacheLocator)ÚNumbaWarning)Úparfor)
ÚTestCaseÚSerialMixinÚcapture_cache_logÚimport_dynamicÚoverride_configÚoverride_env_configÚrun_in_new_process_cachingÚskip_if_typeguardÚskip_parfors_unsupportedÚtemp_directoryc               
   C   s  t dƒ} tj | d¡}t |¡ ttj |d¡dƒ}| d¡ W d   ƒ n1 s*w   Y  t |d¡ zEz.ttj |d¡dƒ}| d¡ W d   ƒ n1 sQw   Y  W W t |d	¡ t 	|¡ d
S  t
yz   Y W t |d	¡ t 	|¡ dS w t |d	¡ t 	|¡ w )NÚ
test_cacheZwritable_testZwrite_okÚwtZcheck1é@  Zwrite_forbiddenZcheck2iý  FT)r   ÚosÚpathÚjoinÚmkdirÚopenÚwriteÚchmodÚshutilÚrmtreeÚPermissionError)ÚtempdirZtest_dirÚf© r    úg/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/tests/test_caching.pyÚcheck_access_is_preventable%   s*   
ÿÿ	÷÷r"   z9Cannot create a directory to which writes are preventablec                  C   s   d} t | ƒ| fS )NÚabcd)Úhash)Úcr    r    r!   Úconstant_unicode_cacheI   s   r&   c                  C   sB   t } tdd| ƒ}| ƒ \}}|ƒ \}}||ksJ ‚||ksJ ‚d S ©NT©Úcache)r&   r   )ÚpyfuncÚcfuncZexp_hvZexp_strZgot_hvZgot_strr    r    r!   Úcheck_constant_unicode_cacheN   s   

r,   c                   C   s
   dddœS )Né   é   )ÚaÚbr    r    r    r    r!   Ú
dict_cacheW   s   
r1   c                  C   s.   t } tdd| ƒ}| ƒ }|ƒ }||ksJ ‚d S r'   )r1   r   ©r*   r+   ÚexpÚgotr    r    r!   Úcheck_dict_cache[   s
   r5   c                  c   s    dD ]} | V  qd S )N)r-   r.   é   r    )Úvr    r    r!   Úgenerator_cachec   s   €ÿr8   c                  C   s6   t } tdd| ƒ}t| ƒ ƒ}t|ƒ ƒ}||ksJ ‚d S r'   )r8   r   Úlistr2   r    r    r!   Úcheck_generator_cacheh   s
   

r:   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestCachingc                 C   s"   |ƒ  t |ƒ}|  |d d¡ d S )NÚexitcoder   )r   ÚassertEqual)ÚselfÚfuncÚresr    r    r!   Úrun_testq   s   zTestCaching.run_testc                 C   ó   |   t¡ d S ©N)rA   r,   ©r>   r    r    r!   Útest_constant_unicode_cachev   ó   z'TestCaching.test_constant_unicode_cachec                 C   rB   rC   )rA   r5   rD   r    r    r!   Útest_dict_cachey   rF   zTestCaching.test_dict_cachec                 C   rB   rC   )rA   r:   rD   r    r    r!   Útest_generator_cache|   rF   z TestCaching.test_generator_cachec                 C   s¸   t | jjƒ}t ¡ }| ¡ }|jt||dfd}| ¡  | 	¡  | 
¡ \}}|s-|  |¡ |  |dd¡ |jt||dfd}| ¡  | 	¡  | 
¡ \}}|sS|  |¡ |  |dd¡ d S )NF©ÚtargetÚargséè  z-Omitted function returned an incorrect outputT)r   Ú	__class__Ú__name__ÚmultiprocessingÚget_contextÚQueueÚProcessÚomitted_child_test_wrapperÚstartr   ÚgetÚfailr=   )r>   Ú	cache_dirÚctxÚresult_queueÚprocÚsuccessÚoutputr    r    r!   Útest_omitted   s>   þ
ýþ
ýzTestCaching.test_omittedN)rN   Ú
__module__Ú__qualname__rA   rE   rG   rH   r]   r    r    r    r!   r;   p   s    r;   c                 C   sì   t d|ƒg tddddd„ƒ}zB|ƒ }|r3|j|jd  dks$J d	ƒ‚|j|jd  dks2J d
ƒ‚n|j|jd  dksAJ dƒ‚|j|jd  dksOJ dƒ‚d}W n
   t ¡ }d}Y |  ||f¡ W d   ƒ d S 1 sow   Y  d S )NZ	CACHE_DIRTr(   rL   c                 S   s   | S rC   r    )Únumr    r    r!   Útest¬   s   z(omitted_child_test_wrapper.<locals>.testr   r-   zCache did not hit as expectedzCache has an unexpected misszCache did not miss as expectedzCache has an unexpected hitF)rL   )r   r   Z_cache_hitsZ
signaturesZ_cache_missesÚ	tracebackÚ
format_excÚput)rY   rW   Zsecond_callra   r\   r[   r    r    r!   rS   ª   s0   ÿÿÿÿ"èrS   c                   @   sL   e Zd ZdZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ ZdS )ÚBaseCacheTestNc                 C   st   t dƒ| _tj d| j¡ tj | j| jd ¡| _tj | jd¡| _	t
 | j| j¡ t | jtjtjB ¡ d | _d S )Nr   r   z.pyÚ__pycache__)r   r   Úsysr   Úinsertr   r   ÚmodnameÚmodfilerW   r   ÚcopyÚusecases_filer   ÚstatÚS_IREADÚS_IWRITEZmaxDiffrD   r    r    r!   ÚsetUpÌ   s   

zBaseCacheTest.setUpc                 C   s"   t j | jd ¡ t j | j¡ d S rC   )rg   ÚmodulesÚpopri   r   Úremover   rD   r    r    r!   ÚtearDownÕ   s   zBaseCacheTest.tearDownc              	   C   sn   t j | jd ¡}|d ur%|jg}|D ]}zt |¡ W q ty$   Y qw t| jƒ}|  	|j
 d¡| j¡ |S )NÚco)rg   rq   rr   ri   Ú
__cached__r   ÚunlinkÚFileNotFoundErrorr
   r=   Ú__file__Úrstriprj   )r>   ÚoldÚcachedÚfnÚmodr    r    r!   Úimport_moduleÙ   s   ÿ
zBaseCacheTest.import_modulec                 C   s0   zdd„ t  | j¡D ƒW S  ty   g  Y S w )Nc                 S   s   g | ]	}|  d ¡s|‘qS ))z.pycz.pyo)Úendswith©Ú.0r}   r    r    r!   Ú
<listcomp>ì   s    
ÿz0BaseCacheTest.cache_contents.<locals>.<listcomp>)r   ÚlistdirrW   rx   rD   r    r    r!   Úcache_contentsê   s
   ÿzBaseCacheTest.cache_contentsc                    s   t ‡ fdd„tˆ  ¡ ƒD ƒƒS )Nc                 3   s,    | ]}|t j t j ˆ j|¡¡fV  qd S rC   )r   r   Úgetmtimer   rW   r   rD   r    r!   Ú	<genexpr>ò   s   € $ÿz1BaseCacheTest.get_cache_mtimes.<locals>.<genexpr>)ÚdictÚsortedr…   rD   r    rD   r!   Úget_cache_mtimesñ   s   
ÿzBaseCacheTest.get_cache_mtimesc                 C   s   |   ¡ }|  t|ƒ||¡ d S rC   )r…   r=   Úlen)r>   Únr%   r    r    r!   Úcheck_pycacheõ   s   zBaseCacheTest.check_pycachec                 C   s   d S rC   r    rD   r    r    r!   Ú
dummy_testù   s   zBaseCacheTest.dummy_test)rN   r^   r_   rl   ri   rp   rt   r   r…   rŠ   r   rŽ   r    r    r    r!   re   Æ   s    	re   c                   @   s<   e Zd Zej e¡Zej ed¡Z	dZ
dd„ Zddd„ZdS )	ÚDispatcherCacheUsecasesTestúcache_usecases.pyÚdispatcher_caching_test_fodderc                 C   sf   dt | j| jd }tjtjd|gtjtjd}| ¡ \}}|j	dkr1t
d|j	| ¡ | ¡ f ƒ‚d S )Nzœif 1:
            import sys

            sys.path.insert(0, %(tempdir)r)
            mod = __import__(%(modname)r)
            mod.self_test()
            ©r   ri   ú-c©ÚstdoutÚstderrr   zBprocess failed with code %s: 
stdout follows
%s
stderr follows
%s
©rˆ   r   ri   Ú
subprocessÚPopenrg   Ú
executableÚPIPEÚcommunicateÚ
returncodeÚAssertionErrorÚdecode©r>   ÚcodeÚpopenÚoutÚerrr    r    r!   Úrun_in_separate_process  s   úÿ
ýÿÿz3DispatcherCacheUsecasesTest.run_in_separate_processNc                 C   sJ   |j }|  t|j ¡ ƒ||j¡ |d ur#|  t|j ¡ ƒ||j¡ d S d S rC   )Ústatsr=   ÚsumÚ
cache_hitsÚvaluesZcache_misses)r>   r?   ÚhitsÚmissesÚstr    r    r!   Ú
check_hits  s   ÿÿz&DispatcherCacheUsecasesTest.check_hitsrC   )rN   r^   r_   r   r   Údirnamery   Úherer   rl   ri   r¥   r­   r    r    r    r!   r   ý   s    r   c                   @   sö   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zee ejd!kd"¡d#d$„ ƒƒZee ejd!kd"¡d%d&„ ƒƒZd'd(„ Ze ed)u prejd* d+k d,¡d-d.„ ƒZd)S )/Ú	TestCachec                 C   s@  |   d¡ |  ¡ }|   d¡ |j}|  |ddƒd¡ |   d¡ |  |ddƒd¡ |   d¡ |  |dd¡ |j}|  |ddƒd¡ |   d¡ |  |ddƒd¡ |   d¡ |  |dd¡ |j}||jdƒ}|  t|ƒd	¡ ||j	dƒ}|  t|ƒd	¡ |   d
¡ |  |dd¡ |j
}|  |ddƒd¡ |  |ddƒd¡ |  ¡  d S )Nr   r.   r6   é   ç      @ç      @é   r-   )r.   g     ÀE@é	   y              @y       @      @)r   r   Úadd_usecaseÚassertPreciseEqualr­   Úadd_objmode_usecaseÚrecord_returnÚaligned_arrÚtupleÚ
packed_arrÚgenerated_usecaser¥   )r>   r~   r   Zrecr    r    r!   Útest_caching#  s4   






zTestCache.test_cachingc                 C   s€   |   d¡ |  ¡ }|   d¡ |j}|  |ddƒd¡ |   d¡ |  |dt d¡ƒdt d¡ d ¡ |   d¡ |  |dd¡ d S )Nr   r.   r6   r±   r-   )r   r   r¶   r·   ÚnpZaranger­   ©r>   r~   r   r    r    r!   Útest_caching_nrt_prunedE  s   


&
z!TestCache.test_caching_nrt_prunedc                 C   s´   |   ¡ }|  | dd¡d¡ |  d¡ |j}|  |ddƒd¡ |  d¡ |   ¡ }|j}|  |ddƒd¡ |  d¡ |j}|  |ddƒd¡ |  d¡ |  |ddƒd¡ |  d¡ d S )Nr6   r.   r±   é   ç      @r²   )r   r·   Úinnerr   Úouter_uncachedÚouterrÀ   r    r    r!   Útest_inner_then_outerR  s   



zTestCache.test_inner_then_outerc                 C   sŽ   |   ¡ }|  | dd¡d¡ |  d¡ |  | dd¡d¡ |  d¡ |   ¡ }|j}|  |ddƒd¡ |  d¡ |  |ddƒd¡ |  d¡ d S )Nr6   r.   rÂ   r±   rÃ   r³   r´   )r   r·   rÆ   r   rÅ   rÄ   rÀ   r    r    r!   Útest_outer_then_innerf  s   


zTestCache.test_outer_then_innerc                 C   s.   |   ¡ }|j}|  |ddƒd¡ |  d¡ d S )Nr.   r6   r±   r   )r   Úadd_nocache_usecaser·   r   rÀ   r    r    r!   Útest_no_cachingt  s   zTestCache.test_no_cachingc                 C   sŠ   |   ¡ }tjdd}t dt¡ |j}|  |dƒd¡ |  d¡ W d   ƒ n1 s+w   Y  |  t	|ƒd¡ |  
dt|d jƒ¡ d S )	NT©ÚrecordÚalwaysrÂ   r±   r   r-   zBCannot cache compiled function "looplifted" as it uses lifted code)r   ÚwarningsÚcatch_warningsÚsimplefilterr   Z
loopliftedr·   r   r=   r‹   ÚassertInÚstrÚmessage©r>   r~   Úwr   r    r    r!   Útest_looplifted{  s   ûÿzTestCache.test_loopliftedc                 C   sŒ   |   ¡ }tjdd}t dt¡ |j}tj |ƒ |j	¡ |  
d¡ W d   ƒ n1 s,w   Y  |  t|ƒd¡ |  dt|d jƒ¡ d S )NTrË   rÍ   r   r-   zICannot cache compiled function "use_big_array" as it uses dynamic globals)r   rÎ   rÏ   rÐ   r   Zuse_big_arrayr¿   ÚtestingZassert_equalZbiggier   r=   r‹   rÑ   rÒ   rÓ   rÔ   r    r    r!   Útest_big_arrayŠ  s   ûÿzTestCache.test_big_arrayc              	   C   s¢   |   ¡ }|j|j|jfD ]B}tjdd}t dt¡ |  |dƒd¡ |  	d¡ W d   ƒ n1 s2w   Y  |  
t|ƒd¡ |  d |j¡t|d jƒ¡ qd S )NTrË   rÍ   g        r   r-   z#Cannot cache compiled function "{}")r   Z	use_c_sinZuse_c_sin_nest1Zuse_c_sin_nest2rÎ   rÏ   rÐ   r   r·   r   r=   r‹   rÑ   ÚformatrN   rÒ   rÓ   )r>   r~   r   rÕ   r    r    r!   Útest_ctypes˜  s   ü
þøzTestCache.test_ctypesc                 C   s¤   |   ¡ }t ¡ @ t dt¡ |j}|  |dƒd¡ |j}|  |dƒd¡ |j}|  |dƒd¡ |j	}|  |dƒd¡ |  
d¡ W d   ƒ d S 1 sKw   Y  d S )NÚerrorr6   r±   é   é
   é   r´   )r   rÎ   rÏ   rÐ   r   Zclosure1r·   Zclosure2Zclosure3Zclosure4r   rÀ   r    r    r!   Útest_closureª  s   
"õzTestCache.test_closurec                 C   sl   |   ¡ }|j}|  ||jdƒd¡ |  ||jdƒd¡ |  ||jdƒd¡ |  ||jdƒd¡ |  d¡ d S )Nr-   rÝ   éd   r.   é   é   )r   Zfirst_class_function_usecaser=   Zfirst_class_function_mulZfirst_class_function_addr   rÀ   r    r    r!   Útest_first_class_functionº  s   z#TestCache.test_first_class_functionc                 C   s  |   ¡ }| dd¡ | dd¡ | dd¡ | dd¡ | dd¡ | |jd¡ | |jd¡ | dd¡ |  	¡ }|  
|jdd¡ |   ¡ }|  ||¡ |j}|ddƒ |  
|dd¡ |ddƒ |  
|dd¡ |j}|ddƒ |  
|dd¡ |  |  	¡ |¡ |  ¡  |  |  	¡ |¡ d S )Nr.   r6   r²   rÃ   r   r-   )r   r¶   r¸   rÅ   rÆ   r¹   r¼   rº   r½   rŠ   r­   ZassertIsNotr=   r¥   )r>   r~   ÚmtimesÚmod2r   r    r    r!   Útest_cache_reuseÅ  s0   


zTestCache.test_cache_reusec                 C   s’   |   ¡ }|j}|  |ddƒd¡ t| jdƒ}| d¡ W d   ƒ n1 s&w   Y  |   ¡ }|j}|  |ddƒd¡ |j}|  |ddƒd¡ d S )Nr.   r6   r±   r/   z
Z = 10
é   )r   r¶   r·   r   rj   r   r¸   rÀ   r    r    r!   Útest_cache_invalidateä  s   ÿzTestCache.test_cache_invalidatec                 C   s„   |   ¡ }|j}|  |ddƒd¡ |   ¡ }|j}d|_|  |ddƒd¡ | ¡  |  |ddƒd¡ |   ¡ }|j}|  |ddƒd¡ d S )Nr.   r6   r±   rÝ   rç   )r   r¶   r·   ÚZZ	recompilerÀ   r    r    r!   Útest_recompileó  s   zTestCache.test_recompilec                 C   s8   |   ¡ }|j}|  |dƒd¡ |j}|  |dƒd¡ d S )Nr.   rÂ   rÜ   )r   Zrenamed_function1r·   Zrenamed_function2rÀ   r    r    r!   Útest_same_names  s
   zTestCache.test_same_namesc                 C   s€   ddl m} |j}tdddƒ}z*||_t |¡}t ||¡}|  |¡ dt	_
t ||¡}|  |t¡ W ||_t	`
d S ||_t	`
w )Nr-   )ÚfunctionÚpassztests/dummy_module.pyÚexecT)Zdummy_modulerì   Ú__code__ÚcompileÚinspectÚgetfiler   Úfrom_functionZassertIsNonerg   ÚfrozenZassertIsInstance)r>   rì   Zold_codeZcode_objÚsourceÚlocatorr    r    r!   Útest_frozen  s   

ÿzTestCache.test_frozenc                 C   s€   |   ¡ }|j}| jtj|jjdd |  |ddƒd¡ |  |dd¡ |   ¡ }|j}|  |ddƒd¡ |  |dd¡ |  	d¡ dS )	zy
        With a disabled __pycache__, test there is a working fallback
        (e.g. on the user-wide cache dir)
        T)Úignore_errorsr.   r6   r±   r   r-   N)
r   r¶   Ú
addCleanupr   r   r¦   Ú
cache_pathr·   r­   r   )r>   r~   r   rå   r    r    r!   Ú_test_pycache_fallback$  s   z TestCache._test_pycache_fallbackÚntz3cannot easily make a directory read-only on Windowsc                 C   s:   t  | j¡j}t  | jd¡ |  t j| j|¡ |  ¡  d S )Nr   )r   rm   r   Úst_moder   rù   rû   )r>   Ú	old_permsr    r    r!   Útest_non_creatable_pycache=  s   z$TestCache.test_non_creatable_pycachec                 C   sN   t j | jd¡}t  |¡ t  |¡j}t  |d¡ |  t j||¡ |  	¡  d S )Nrf   r   )
r   r   r   r   r   rm   rý   r   rù   rû   )r>   Úpycacherþ   r    r    r!   Útest_non_writable_pycacheH  s   
z#TestCache.test_non_writable_pycachec              
      sä   t jddg‰ ˆ g d¢7 ‰ z
t ˆ dg ¡}W n tjy1 } zˆ d|j ¡ W Y d }~nd }~ww | ¡  ¡ }t	j
 ˆjd¡‰tˆdƒ}| d¡ W d   ƒ n1 sUw   Y  ‡ ‡‡fd	d
„}|ƒ  |ƒ }ˆ d| ¡ ¡ d S )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                     óv   t ˆdƒ,} tjˆ | tjtjdd}| ¡ \}}|jdkr(ˆ d|j||f ¡ |W  d   ƒ S 1 s4w   Y  d S ©NÚrbT)Ústdinr•   r–   Úuniversal_newlinesé*   z6unexpected return code %d
-- stdout:
%s
-- stderr:
%s
©r   r˜   r™   r›   rœ   r   rV   ©r  Úpr£   r¤   ©Zbase_cmdZinputfnr>   r    r!   Úexecute_with_inputv  ó   ý

ý$õz2TestCache.test_ipython.<locals>.execute_with_inputúcache hits = 1)rg   rš   r˜   Úcheck_outputÚCalledProcessErrorÚskipTestr   ÚstriprŸ   r   r   r   r   r   r   rÑ   )r>   ÚverÚer   r  r¤   r    r  r!   Útest_ipythonU  s&   ÿ€ÿÿzTestCache.test_ipythonNr   r±   zrequires ipykernel >= 6c              
      sè   t jddg‰ ˆ g d¢7 ‰ z
t ˆ dg ¡}W n tjy1 } zˆ d|j ¡ W Y d }~nd }~ww | ¡  ¡ }ddl	m
} | ¡ ‰tˆdƒ}| d	¡ W d   ƒ n1 sWw   Y  ‡ ‡‡fd
d„}|ƒ  |ƒ }ˆ d| ¡ ¡ d S )Nr  r  r  r  r  r   )ÚcompilerrÕ   r  c                     r  r	  r  r  r  r    r!   r  ¯  r  z4TestCache.test_ipykernel.<locals>.execute_with_inputr  )rg   rš   r˜   r  r  r  r   r  rŸ   Ú	ipykernelr  Zget_tmp_directoryr   r   rÑ   )r>   r  r  r  r   r  r¤   r    r  r!   Útest_ipykernelŠ  s(   ÿ€ÿÿzTestCache.test_ipykernel)rN   r^   r_   r¾   rÁ   rÇ   rÈ   rÊ   rÖ   rØ   rÚ   rß   rã   ræ   rè   rê   rë   r÷   rû   Úskip_bad_accessÚunittestZskipIfr   Únamerÿ   r  r  r  Úversion_infor  r    r    r    r!   r°   !  s@    "ÿÿ
5ÿr°   c                       s0   e Zd Z‡ fdd„Z‡ fdd„Zdd„ Z‡  ZS )ÚTestSequentialParForsCachec                    ó   t t| ƒ ¡  dt_d S )NT)Úsuperr#  rp   r   Úsequential_parfor_loweringrD   ©rM   r    r!   rp   Æ  ó   
z TestSequentialParForsCache.setUpc                    r$  )NF)r%  r#  rt   r   r&  rD   r'  r    r!   rt   Ë  r(  z#TestSequentialParForsCache.tearDownc                 C   sj   |   ¡ }|  d¡ |j}t d¡}|  ||ƒ|| | ¡ dd„ |j ¡ D ƒ}|  |dg¡ |  d¡ d S )Nr   rÝ   c                 S   s   g | ]}|j j‘qS r    )ÚlibraryZhas_dynamic_globals)r‚   Zcresr    r    r!   rƒ   Ö  s    ÿz;TestSequentialParForsCache.test_caching.<locals>.<listcomp>Fr.   )	r   r   Zparfor_usecaser¿   Zonesr·   Z	overloadsr©   r=   )r>   r~   r   ZaryZdynamic_globalsr    r    r!   r¾   Ð  s   

ÿz'TestSequentialParForsCache.test_caching)rN   r^   r_   rp   rt   r¾   Ú__classcell__r    r    r'  r!   r#  Ä  s    r#  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestCacheWithCpuSettingFc                 C   sN   d}|   ¡  ¡ D ]\}}||v r|  ||| ¡ |d7 }q| j|ddd d S )Nr   r-   znothing to compare©Úmsg)rŠ   ÚitemsZassertGreaterEqualÚassertGreater)r>   Z
mtimes_oldÚmatch_countÚkr7   r    r    r!   Úcheck_later_mtimesà  s   €
ÿz*TestCacheWithCpuSetting.check_later_mtimesc                 C   s6  |   d¡ |  ¡ }| ¡  t|  ¡ ƒ}|  ¡ }tddƒ |  ¡  W d   ƒ n1 s+w   Y  |  |¡ |  	t|  ¡ ƒ|¡ |j
j}|j}| ¡ }|  t|ƒd¡ | ¡ \}}|d d t ¡ krh||}	}
n||}	}
|  |	d d t ¡ ¡ |  |	d d t ¡ ¡ |  |
d d d¡ |  |
d d d¡ d S )Nr   ZNUMBA_CPU_NAMEZgenericr.   r-   Ú )r   r   Ú	self_testr‹   r…   rŠ   r   r¥   r2  r/  r¶   Ú_cacheÚ_cache_fileÚ_load_indexr=   ÚkeysÚllÚget_host_cpu_namer   Úget_host_cpu_features)r>   r~   Ú
cache_sizerä   r)   Ú
cache_fileÚcache_indexÚkey_aÚkey_bÚkey_hostÚkey_genericr    r    r!   Útest_user_set_cpu_nameé  s,   

ÿ

z.TestCacheWithCpuSetting.test_user_set_cpu_namec                 C   sJ  |   d¡ |  ¡ }| ¡  t|  ¡ ƒ}|  ¡ }d}t ¡ }|  ||¡ t	d|ƒ |  
¡  W d   ƒ n1 s7w   Y  |  |¡ |  t|  ¡ ƒ|¡ |jj}|j}| ¡ }|  t|ƒd¡ | ¡ \}	}
|	d d |krr|	|
}}n|
|	}}|  |d d t ¡ ¡ |  |d d |¡ |  |d d t ¡ ¡ |  |d d |¡ d S )Nr   z	-sse;-avxZNUMBA_CPU_FEATURESr.   r-   )r   r   r4  r‹   r…   rŠ   r   r;  ÚassertNotEqualr   r¥   r2  r/  r¶   r5  r6  r7  r=   r8  r9  r:  )r>   r~   r<  rä   Zmy_cpu_featuresZsystem_featuresr)   r=  r>  r?  r@  rA  rB  r    r    r!   Útest_user_set_cpu_features  s2   

ÿ

z2TestCacheWithCpuSetting.test_user_set_cpu_featuresN)rN   r^   r_   Ú_numba_parallel_test_r2  rC  rE  r    r    r    r!   r+  Ü  s
    	r+  c                   @   s6   e Zd ZdZej e¡Zej 	ed¡Z
dZdd„ ZdS )ÚTestMultiprocessCacheFr   r‘   c                 C   sŠ   |   ¡ }|j}d}zt d¡}W n ty   t}Y nw | |¡}zt| |t|ƒ¡ƒ}W | 	¡  n| 	¡  w |  
|||d  d ¡ d S )Nr6   Úspawnr-   r.   )r   Zsimple_usecase_callerrO   rP   ÚAttributeErrorZPoolr§   ÚimapÚrangeÚcloser=   )r>   r~   r   rŒ   rX   Úpoolr@   r    r    r!   Útest_multiprocessing2  s   ÿ
z*TestMultiprocessCache.test_multiprocessingN)rN   r^   r_   rF  r   r   r®   ry   r¯   r   rl   ri   rN  r    r    r    r!   rG  (  s    rG  c                   @   sx   e Zd ZdZej e¡Zej 	ed¡Z
dZdZdZdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Ze eedƒd¡dd„ ƒZdS )ÚTestCacheFileCollisionFr   Z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                 C   sð   t dƒ| _tj d| j¡ d| _|  | jtj¡ | j| _d 	| jdg¡| _
tj 	| j| j¡}t |¡ ttj 	|d¡dƒ}t| j|d W d   ƒ n1 sOw   Y  ttj 	|d	¡dƒ}t| j|d W d   ƒ d S 1 sqw   Y  d S )
NÚtest_cache_file_locr   Zmodule_name_that_is_unlikelyÚ.Zfooz__init__.pyrÕ   ©Úfilezfoo.py)r   r   rg   r   rh   ri   ZassertNotInrq   Úmodname_bar1r   Úmodname_bar2r   r   r   ÚprintÚsource_text_1Úsource_text_2)r>   ZfoomodÚfoutr    r    r!   rp   Y  s   

ÿ"ÿzTestCacheFileCollision.setUpc                 C   s2   t j | jd ¡ t j | jd ¡ t j | j¡ d S rC   )rg   rq   rr   rT  rU  r   rs   r   rD   r    r    r!   rt   g  s   zTestCacheFileCollision.tearDownc                 C   ó   t | jƒjS rC   )r
   rT  ÚbarrD   r    r    r!   Úimport_bar1l  ó   z"TestCacheFileCollision.import_bar1c                 C   rZ  rC   )r
   rU  r[  rD   r    r    r!   Úimport_bar2o  r]  z"TestCacheFileCollision.import_bar2c                 C   sT   |   ¡ }|  ¡ }|jjj}|jjj}|  ||¡ |  | d¡¡ |  | d¡¡ d S )Nz__init__.bar-3.pyzfoo.bar-3.py)r\  r^  r5  r6  Z_index_namerD  Ú
assertTrueÚ
startswith)r>   Úbar1Úbar2Zidxname1Zidxname2r    r    r!   Útest_file_locationr  s   

z)TestCacheFileCollision.test_file_locationrP   z)Test requires multiprocessing.get_contextc                 C   s>  |   ¡ }|  ¡ }tƒ }|ƒ }W d   ƒ n1 sw   Y  | ¡ }|  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ tƒ }|ƒ }W d   ƒ n1 sWw   Y  | ¡ }|  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  ||¡ zt d¡}W n t	yž   t
dƒ Y nw | ¡ }|jt|| j| j| jfd	}	|	 ¡  | ¡ }
| ¡ }| ¡ }| ¡ }|	 ¡  |  ||¡ |  ||¡ |  |
 d¡d¡ |  |
 d¡d¡ |  |
 d¡d¡ |  |
 d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ d S )
Nzindex savedr-   z
data savedzindex loadedr   zdata loadedrH  zmissing spawn contextrI   )r\  r^  r	   Úgetvaluer=   ÚcountrD  rO   rP   Ú
ValueErrorrV  rQ   rR   Úcache_file_collision_testerr   rT  rU  rT   rU   r   )r>   ra  rb  ÚbufZres1ZcachelogZres2ÚmpÚqrZ   Zlog1Zgot1Úlog2Zgot2r    r    r!   Útest_no_collision|  s^   ÿÿÿþÿz(TestCacheFileCollision.test_no_collisionN)rN   r^   r_   rF  r   r   r®   ry   r¯   r   rl   ri   rW  rX  rp   rt   r\  r^  rc  r   Ú
skipUnlessÚhasattrrO   rl  r    r    r    r!   rO  E  s     
ÿrO  c           	      C   s®   t j d|¡ t|ƒj}t|ƒj}tƒ }|ƒ }W d   ƒ n1 s"w   Y  |  | ¡ ¡ |  |¡ tƒ }|ƒ }W d   ƒ n1 sDw   Y  |  | ¡ ¡ |  |¡ d S )Nr   )rg   r   rh   r
   r[  r	   rd   rd  )	rj  r   rT  rU  ra  rb  rh  Úr1Úr2r    r    r!   rg  º  s   

ÿ
ÿrg  c                   @   s0   e Zd ZdZdZdZdd„ Zdd„ Zdd	„ Zd
S )Ú#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                 C   s¨   t dƒ| _tj | jd¡| _t| jdƒ}t| j|d W d   ƒ n1 s&w   Y  tj | jd¡| _	t| j	dƒ}t| j
|d W d   ƒ d S 1 sMw   Y  d S )NrP  zfile1.pyrÕ   rR  zfile2.py)r   r   r   r   r   Úfile1r   rV  Úsource_text_file1Úfile2Úsource_text_file2)r>   rY  r    r    r!   rp   Ü  s   
ÿ"ÿz)TestCacheMultipleFilesWithSignature.setUpc                 C   s   t  | j¡ d S rC   )r   r   r   rD   r    r    r!   rt   ç  s   z,TestCacheMultipleFilesWithSignature.tearDownc                 C   s¦   t jtj| jgt jt jd}| ¡ \}}d| ¡ › d| ¡ › }| j|j	d|d t jtj| j
gt jt jd}| ¡ \}}d| ¡ › d| ¡ › }|  |j	d|¡ d S )Nr”   zstdout:
z


stderr:
r   r,  )r˜   r™   rg   rš   rr  r›   rœ   rŸ   r=   r   rt  )r>   r¢   r£   r¤   r-  r    r    r!   Ú*test_caching_mutliple_files_with_signatureê  s   þþzNTestCacheMultipleFilesWithSignature.test_caching_mutliple_files_with_signatureN)	rN   r^   r_   rF  rs  ru  rp   rt   rv  r    r    r    r!   rq  È  s    rq  c                   @   sB   e Zd Zej e¡Zej ed¡Z	dZ
dd„ Zdd„ Zdd„ Zd	S )
ÚTestCFuncCachezcfunc_cache_usecases.pyZcfunc_caching_test_fodderc                 C   sf   dt | j| jd }tjtjd|gtjtjd}| ¡ \}}|j	dkr1t
d|j	› d| ¡ › dƒ‚d S )	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“   r”   r   zprocess failed with code z:stderr follows
Ú
r—   r    r    r    r!   r¥     s   óÿ

ÿÿz&TestCFuncCache.run_in_separate_processc                 C   s   |  ¡  d S rC   )r4  ©r>   r~   r    r    r!   Úcheck_module  r]  zTestCFuncCache.check_modulec                 C   sÎ   |   d¡ |  ¡ }|   d¡ |  |jjd¡ |  |jjd¡ |  |jjd¡ |  |jjd¡ |  |¡ |  ¡ }|   d¡ |  |jjd¡ |  |jjd¡ |  |jjd¡ |  |jjd¡ |  |¡ |  	¡  d S )Nr   r±   r-   )
r   r   r=   r¶   r¨   rÆ   rÉ   Zdiv_usecaserz  r¥   ry  r    r    r!   r¾     s    




zTestCFuncCache.test_cachingN)rN   r^   r_   r   r   r®   ry   r¯   r   rl   ri   r¥   rz  r¾   r    r    r    r!   rw  ü  s    rw  Ú__main__)?rñ   Zllvmlite.bindingZbindingr9  rO   Únumpyr¿   r   rm   r   r˜   rg   rb   r   rÎ   Znumbar   Z
numba.corer   Znumba.core.cachingr   Znumba.core.errorsr   Znumba.parforsr   Znumba.tests.supportr   r   r	   r
   r   r   r   r   r   r   r  ÚImportErrorr"   Z_access_preventableZ_access_msgrm  r  r&   r,   r1   r5   r8   r:   r;   rS   re   r   r°   r#  r+  rG  rO  rg  rq  rw  rN   Úmainr    r    r    r!   Ú<module>   sj    0ÿ	:7$   &Lt4
9ÿ