U
    ºmœd}À  ã                   @   s   d 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ZddlZddlmZ ddlmZ ddlmZmZ ddlmZmZ ddlmZ ddlmZmZ dd	lmZmZ dd
lmZ ddlmZmZ ddlmZm Z  ddl!m"Z"m#Z# ddl!m$Z$ ddl%m&Z&m'Z'm(Z( ddl)m*Z* d´dd„Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/e&dddgƒdd „ ƒZ0d!d"„ Z1d#d$„ Z2d%d&„ Z3d'd(„ Z4d)d*„ Z5d+d,„ Z6d-d.„ Z7d/d0„ Z8g fd1d2„Z9d3d4„ Z:e"e&d5dd6gƒd7d8„ ƒƒZ;e"d9d:„ ƒZ<d;d<„ Z=d=d>„ Z>d?d@„ Z?dAdB„ Z@e&dCdDgdEd6fg dFdfgƒdGdH„ ƒZAdIdJ„ ZBdKdL„ ZCdMdN„ ZDdOdP„ ZEdQdR„ ZFdSdT„ ZGdUdV„ ZHdWdX„ ZIdYdZ„ ZJd[d\„ ZKd]d^„ ZLd_d`„ ZMdadb„ ZNdcdd„ ZOdedfdgœdhdi„ZPeQeReRdjœdkdl„ZSdmdn„ ZTdodp„ ZUdµdqdr„ZVdsdt„ ZWdudv„ ZXdwdx„ ZYdydz„ ZZd{d|„ Z[d}d~„ Z\dd€„ Z]d¶d�d‚„Z^e$dƒd„„ ƒZ_e$d…d†„ ƒZ`d‡dˆ„ ZaG d‰dŠ„ dŠeƒZbG d‹dŒ„ dŒeƒZce&d�dedƒ eeƒ gƒdŽd�„ ƒZfd�d‘„ Zgd’d“„ Zhd”d•„ Zid–d—„ Zjd˜d™„ Zkdšd›„ Zldœd�„ ZmdždŸ„ Znd d¡„ Zod·d¢d£„Zpejq &d¤d¥d¦d§œd6d¨d©dªid«œg¡d¬d­„ ƒZrd®d¯„ Zsd°d±„ ZtG d²d³„ d³ƒZudS )¸z
Test the memory module.
é    N)ÚMemory)Úexpires_after)ÚMemorizedFuncÚNotMemorizedFunc)ÚMemorizedResultÚNotMemorizedResult)Ú_FUNCTION_HASHES)Úregister_store_backendÚ_STORE_BACKENDS)Ú_build_func_identifierÚ_store_backend_factory)ÚJobLibCollisionWarning)ÚParallelÚdelayed)ÚStoreBackendBaseÚFileSystemStoreBackend)Ú
with_numpyÚnp)Úwith_multiprocessing)ÚparametrizeÚraisesÚwarns)Úhashé   c                 C   s   | d | S )z3 A module-level function for testing purposes.
    é   © ©ÚxÚyr   r   úP/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/joblib/test/test_memory.pyÚf*   s    r    c                 C   sZ   t |dd�}| | ¡} tdƒD ]6}tdƒD ](}| |ƒ|ks>t‚t|ƒ|d ks*t‚q*qdS )zº Given a function and an accumulator (a list that grows every
        time the function is called), check that the function can be
        decorated by memory to be a lazy identity.
    r   ©ÚlocationÚverboseé   r   r   N)r   ÚcacheÚrangeÚAssertionErrorÚlen)ÚfuncÚaccumulatorr"   ÚmemoryÚiÚ_r   r   r   Úcheck_identity_lazy2   s    
r.   c              	   C   s@   | j  ¡ \}tj |jd¡}t|dƒ�}| d¡ W 5 Q R X d S )Nú
output.pklÚwÚgarbage)Ústore_backendÚ	get_itemsÚosÚpathÚjoinÚopenÚwrite)r+   Zsingle_cache_itemZoutput_filenamer    r   r   r   Úcorrupt_single_cache_itemA   s    r9   c                    s"   g ‰ ‡ fdd„}|  | d|¡ ˆ S )Nc                    s   ˆ   | ¡ d S ©N©Úappend)Úitem©Zrecordedr   r   Úappend_to_recordO   s    z6monkeypatch_cached_func_warn.<locals>.append_to_recordÚwarn)Úsetattr)r)   Zmonkeypatch_fixturer?   r   r>   r   Úmonkeypatch_cached_func_warnH   s    rB   c                    sæ   t ƒ ‰ ‡ fdd„}t|ˆ | jƒ dD ]š}dD ]T}t| jd||d�}tj| jdd� | |¡}|d	ƒ |jd
d� tˆ ƒ}|d	ƒ}q,tˆ ƒ|d	 ks–t	‚| 
|d	¡|ksªt	‚tˆ ƒ|d	 ks$t	‚q$d|_t| jdd�}| |¡d	ƒ dS )z, Simple test of memory lazy evaluation.
    c                    s   ˆ   d¡ | S ©Nr   r;   ©Úarg©r*   r   r   r    _   s    
z"test_memory_integration.<locals>.f)FT)ÚrNé
   )r"   r#   Ú	mmap_modeÚcompressT)Úignore_errorsr   F)r@   Ú__main__r   r!   N)Úlistr.   Ústrpathr   ÚshutilÚrmtreer%   Úclearr(   r'   ÚevalÚ
__module__)Útmpdirr    rJ   rI   r+   ÚgÚcurrent_accumulatorÚoutr   rF   r   Útest_memory_integrationW   s*     ÿ

rX   Úcall_before_reducingTFc           
         sÚ  dD �]Î}d}d  |¡}ttt |¡|dd�ƒ tƒ d }d|_|dƒdksPt‚|jj	|ks`t‚t
| jd	d
�}| |¡‰ tt | d ¡ƒdks’t‚t | d ¡d	 }d|ks°t‚| d | }|d	k�r–t |¡dgksÚt‚t |d ¡g ksðt‚|�r8ˆ dƒ tt |d ¡ƒdk�st‚tdd�‡ fdd„dD ƒƒ}	n@tdd�‡ fdd„dD ƒƒ}	tt |d ¡ƒdk�spt‚ˆ dƒ tt |d ¡ƒdk�sÔt‚qtt |d ¡ƒdk�s²t‚ˆ dƒ tt |d ¡ƒdkst‚qd S )N)r   r   z0
        def f(x):
            return x
        z<ipython-input-{}-000000000000>Úexec)ÚfilenameÚmoder    rL   r   r   r!   Újoblibzipython-inputr$   r   ©Zn_jobsc                 3   s   | ]}t ˆ ƒ|ƒV  qd S r:   ©r   ©Ú.0r,   ©Zcached_fr   r   Ú	<genexpr>Ë   s     zHtest_parallel_call_cached_function_defined_in_jupyter.<locals>.<genexpr>)r   r   c                 3   s   | ]}t ˆ ƒ|ƒV  qd S r:   r_   r`   rb   r   r   rc   Ñ   s     é   )ÚformatrZ   ÚcompileÚtextwrapÚdedentÚlocalsrS   r'   Ú__code__Úco_filenamer   rN   r%   r(   r4   Úlistdirr   )
rT   rY   Z
session_noZipython_cell_sourceZipython_cell_idZ	aliased_fr+   Zf_cache_relative_directoryZf_cache_directoryÚresr   rb   r   Ú5test_parallel_call_cached_function_defined_in_jupyter‚   sD    

ýÿ



	rn   c                     s^   t ƒ ‰ ‡ fdd„} tddd�}| | ¡}tdƒD ](}tˆ ƒ}|dƒ tˆ ƒ|d ks0t‚q0dS )z, Test memory with location=None: no memoize c                    s   ˆ   d¡ | S rC   r;   rD   rF   r   r   Úffé   s    
ztest_no_memory.<locals>.ffNr   r!   rd   r   )rM   r   r%   r&   r(   r'   )ro   r+   Zggr-   rV   r   rF   r   Útest_no_memoryå   s    
rp   c                    sR   t ƒ ‰ d
‡ fdd„	}t|ˆ | jƒ t| jdd�}| |¡}|ddd	�dksNt‚dS )z4 Test memory with a function with keyword arguments.Nr   c                    s   ˆ   d¡ | S rC   r;   ©Zarg1Zarg2rF   r   r   rU   ù   s    
ztest_memory_kwarg.<locals>.gr   r!   é   r   rq   )Nr   )rM   r.   rN   r   r%   r'   )rT   rU   r+   r   rF   r   Útest_memory_kwargõ   s    
rs   c                    s,   t ƒ ‰ ‡ fdd„‰t‡fdd„ˆ | jƒ dS )z+ Test memory with a function with a lambda.c                    s   ˆ   d¡ | S ©z4 A helper function to define l as a lambda.
        r   r;   ©r   rF   r   r   Úhelper	  s    
z"test_memory_lambda.<locals>.helperc                    s   ˆ | ƒS r:   r   ru   )rv   r   r   Ú<lambda>  ó    z$test_memory_lambda.<locals>.<lambda>N)rM   r.   rN   )rT   r   )r*   rv   r   Útest_memory_lambda  s    ry   c              	   C   s€   t | jdd�}|jdd„ ƒ}|}|jdd„ ƒ}|}ttƒ�}|dƒ |dƒ W 5 Q R X t|ƒdksft‚dt|d jƒks|t‚dS )	z> Check that name collisions with functions will raise warningsr   r!   c                 S   s   | S )z0 A first function called name_collision
        r   ru   r   r   r   Úname_collision  s    z2test_memory_name_collision.<locals>.name_collisionc                 S   s   | S )z1 A second function called name_collision
        r   ru   r   r   r   rz     s    r   Ú	collisionN)	r   rN   r%   r   r   r(   r'   ÚstrÚmessage)rT   r+   rz   ÚaÚbÚwarninfor   r   r   Útest_memory_name_collision  s    


r�   c              	   C   s‚   t | jdd�}| dd„ ¡}| dd„ ¡}ttƒ�6}|dƒdksDt‚|dƒdksTt‚|dƒdksdt‚W 5 Q R X t|ƒdks~t‚d S )	Nr   r!   c                 S   s   | S r:   r   ru   r   r   r   rw   1  rx   z7test_memory_warning_lambda_collisions.<locals>.<lambda>c                 S   s   | d S rC   r   ru   r   r   r   rw   2  rx   r   r   rd   )r   rN   r%   r   r   r'   r(   )rT   r+   r~   r   r€   r   r   r   Ú%test_memory_warning_lambda_collisions.  s    
r‚   c              	   C   sŒ   t | jdd�}tdƒ}| |¡}tdƒ}| |¡}ttƒ�}|dƒ |dƒ |dƒ W 5 Q R X t|ƒdksnt‚dt|d j	ƒ 
¡ ksˆt‚d S )Nr   r!   úlambda x: xzlambda x: x+1r   r   zcannot detect)r   rN   rR   r%   r   r   r(   r'   r|   r}   Úlower)rT   r+   Za1Úb1r€   r   r   r   Ú'test_memory_warning_collision_detection>  s    


r†   c                    s8   t ƒ ‰ ‡ fdd„}ddl}| |d¡}t|ˆ | jƒ dS )z$ Test memory with functools.partial.c                    s   ˆ   d¡ |S rt   r;   r   rF   r   r   r)   T  s    
z!test_memory_partial.<locals>.funcr   Nr   )rM   Ú	functoolsÚpartialr.   rN   )rT   r)   r‡   Úfunctionr   rF   r   Útest_memory_partialP  s
    rŠ   c                 C   s4   t | jdd�}tdƒ}| |¡}|dƒdks0t‚dS )zF Smoke test memory with a function with a function defined in an eval.r   r!   rƒ   r   N)r   rN   rR   r%   r'   )rT   r+   ÚmÚmmr   r   r   Útest_memory_eval`  s    
r�   c                 C   s   t | ƒ}|  d¡ |S )zx A function with a side effect in its arguments.

        Return the length of its argument and append one element.
    N)r(   r<   )r   Zlen_xr   r   r   Úcount_and_appendj  s    
rŽ   c                 C   s8   t | jdd�}| t¡}|ƒ dks&t‚|ƒ dks4t‚dS )zx Check that if a function has a side effect in its arguments, it
        should use the hash of changing arguments.
    r   r!   r   N)r   rN   r%   rŽ   r'   )rT   r+   r)   r   r   r   Útest_argument_changet  s    
r�   rI   rG   c           	         sŽ   t ƒ ‰ d	‡ fdd„	}t| j|dd�}| |¡}tj d¡}tdƒD ]F}| d¡}tdƒD ].}t 	||ƒ|k¡srt
‚tˆ ƒ|d ksXt
‚qXqBdS )
z/ Test memory with a function with numpy arrays.Nc                    s   ˆ   d¡ | S rC   r;   rD   rF   r   r   Únˆ  s    
ztest_memory_numpy.<locals>.nr   ©r"   rI   r#   r$   )rH   rH   r   )N)rM   r   rN   r%   r   ÚrandomZRandomStater&   Zrandom_sampleÚallr'   r(   )	rT   rI   r�   r+   Zcached_nZrndr,   r~   r-   r   rF   r   Útest_memory_numpy‚  s    ÿ

r”   c           
      C   sâ   t | jddd�}| ¡ dd„ ƒ}t d¡}||ƒ}||ƒ}t|tjƒsJt‚|jdksXt‚t|tjƒsht‚|jdksvt‚~~t	 
¡  t|ƒ t||ƒ}||ƒ}t|ƒdks¬t‚d}	|	|d ksÀt‚t|tjƒsÐt‚|jdksÞt‚d	S )
z8Check that mmap_mode is respected even at the first callrG   r   r‘   c                 S   s   | d S ©Nr   r   ©r~   r   r   r   Útwicež  s    z0test_memory_numpy_check_mmap_mode.<locals>.twicer$   r   úException while loading resultsN)r   rN   r%   r   ZonesÚ
isinstanceZmemmapr'   r\   ÚgcZcollectr9   rB   r(   )
rT   Úmonkeypatchr+   r—   r~   r   ÚcÚrecorded_warningsÚdÚexception_msgr   r   r   Ú!test_memory_numpy_check_mmap_mode˜  s*    


r    c              
      sf   t | jdd�}G dd„ dtƒ‰ |jd
‡ fdd„	ƒ}|ƒ  tdƒD ] }tˆ ƒ� |dƒ W 5 Q R X q@d	S )z1 Smoketest the exception handling of Memory.
    r   r!   c                   @   s   e Zd ZdS )z*test_memory_exception.<locals>.MyExceptionN©Ú__name__rS   Ú__qualname__r   r   r   r   ÚMyExceptionÅ  s   r¤   c                    s   | rˆ ‚d S r:   r   )Úexc©r¤   r   r   ÚhÈ  s    z test_memory_exception.<locals>.hr$   r   N)r   )r   rN   Ú	Exceptionr%   r&   r   )rT   r+   r§   r-   r   r¦   r   Útest_memory_exceptionÀ  s    
r©   c                    s˜   t | jdd�}tƒ ‰ |jdgd�d‡ fdd„	ƒ}|jdgks@t‚|ddd� tˆ ƒdks\t‚|ddd� tˆ ƒdksxt‚|dd	d� tˆ ƒdks”t‚d
S )z# Test the ignore feature of memory r   r!   r   ©Úignorer   c                    s   ˆ   d¡ d S rC   r;   r   rF   r   r   ÚzÛ  s    ztest_memory_ignore.<locals>.z©r   r   N)r   ©r   rN   rM   r%   r«   r'   r(   )rT   r+   r¬   r   rF   r   Útest_memory_ignoreÖ  s    r¯   c                    s¤   t | jdd�}tƒ ‰ dd„ }|jdgd�|d‡ fdd	„	ƒƒ}|jdgksLt‚|ddd
� tˆ ƒdksht‚|ddd
� tˆ ƒdks„t‚|ddd
� tˆ ƒdks t‚dS )z; Test the ignore feature of memory on a decorated function r   r!   c                    s   t  ˆ ¡‡ fdd„ƒ}|S )Nc                     s
   ˆ | |ŽS r:   r   )ÚargsÚkwargs©r    r   r   Úwrappedï  s    z?test_memory_ignore_decorated.<locals>.decorate.<locals>.wrapped)r‡   Úwraps)r    r³   r   r²   r   Údecorateî  s    z.test_memory_ignore_decorated.<locals>.decorater   rª   r   c                    s   ˆ   d¡ d S rC   r;   r   rF   r   r   r¬   ô  s    z'test_memory_ignore_decorated.<locals>.zr­   r   N)r   r®   )rT   r+   rµ   r¬   r   rF   r   Útest_memory_ignore_decoratedé  s    r¶   c                 C   sT   t | jdd�}|jdd„ ƒ}|dƒdks,t‚|dd�dks>t‚|dd�dksPt‚d	S )
z_Non-regression test against 0.12.0 changes.

    https://github.com/joblib/joblib/pull/751
    r   r!   c                 S   s   | d S rC   r   r–   r   r   r   Úplus_one
  s    z,test_memory_args_as_kwargs.<locals>.plus_oner   r   r–   r$   N)r   rN   r%   r'   )rT   r+   r·   r   r   r   Útest_memory_args_as_kwargs  s    
r¸   zignore, verbose, mmap_moder   éd   rH   c                 C   sT   t | jdd�}|j|||d�dd„ ƒ}|j|ks4t‚|j|ksBt‚|j|ksPt‚dS )z7Check cache may be called with kwargs before decoratingr   r!   )r«   r#   rI   c                 S   s   d S r:   r   ru   r   r   r   r¬     s    z"test_partial_decoration.<locals>.zN)r   rN   r%   r«   r'   Z_verboserI   )rT   r«   r#   rI   r+   r¬   r   r   r   Útest_partial_decoration  s    
rº   c           	      C   s,  t | jdd�}t d¡}| d¡ | jd	|žŽ j}| t¡}ttƒ}t	j
 |jj|¡}||ksbt‚t	j
 |¡srt‚|jt	j
 |jj¡ksŒt‚t ¡  | ¡ r t‚t	j
 t	j
 |d¡¡sºt‚| ¡ sÆt‚| d¡\}}t	j
 |jj||¡}|dƒ}t	j
 |¡�st‚t	 t	j
 |d¡¡ ||dƒk�s(t‚d S )
Nr   r!   Ú.r    r]   zfunc_code.pyr   r/   )r]   )r   rN   r¢   Úsplitr<   r6   r%   r    r   r4   r5   r2   r"   r'   ÚexistsÚdirnamer   rQ   Ú_check_previous_func_codeÚ_get_output_identifiersÚremove)	rT   r+   r5   rU   Úfunc_idr"   Úargs_idÚ
output_dirr~   r   r   r   Útest_func_dir&  s(    


rÅ   c           
      C   sà   t | jdd�}| t¡}|dƒ}t t |¡¡}| d¡\}}tj	 
|jj||¡}tj	 |¡sbt‚||j ||g¡kszt‚t t |¡¡}|jj|jjksžt‚t d dd�}t t |¡¡ | t¡}t t |¡¡}	|	dƒ d S )Nr   r!   r   )r   rN   r%   r    ÚpickleÚloadsÚdumpsrÀ   r4   r5   r6   r2   r"   r½   r'   Z	load_item)
rT   r+   rU   Úoutputr§   rÂ   rÃ   rÄ   Zmemory2Úgpr   r   r   Útest_persistenceF  s    

rË   c                 C   s‚   t t| jƒt| jdd� t¡fD ]\}| d¡}|r6t‚t|tƒsDt‚|dƒdksTt‚| d¡}|sft‚t|tƒstt‚| 	¡  q d S )Nr   r!   r   é   )
r   r    rN   r   r%   Zcheck_call_in_cacher'   r™   ÚboolrQ   )rT   r)   Úresultr   r   r   Útest_check_call_in_cache]  s    
ÿ

rÏ   c              
   C   s´   t tt| jƒttƒt| jdd� t¡td d� t¡fttttfƒD ]l\}}|dƒdksZt	‚| 
d¡}t||ƒsrt	‚| ¡ dks‚t	‚| ¡  ttƒ� | ¡  W 5 Q R X | ¡  qBd S )Nr   r!   ©r"   r   rÌ   )Úzipr   r    rN   r   r   r%   r   r   r'   Úcall_and_shelver™   ÚgetrQ   r   ÚKeyError)rT   r)   ÚResultrÎ   r   r   r   Útest_call_and_shelvej  s,    ÿÿü ÿú

rÖ   c              	   C   sz   t | jdd� t¡}| d¡}t|tƒs,t‚tt	ƒ�}|j
|jksFt‚W 5 Q R X t|ƒdks`t‚dt|d jƒksvt‚d S )Nr   r!   r   r   z1The 'argument_hash' attribute has been deprecatedéÿÿÿÿ)r   rN   r%   r    rÒ   r™   r   r'   r   ÚDeprecationWarningÚargument_hashrÃ   r(   r|   r}   )rT   r)   rÎ   r0   r   r   r   Ú"test_call_and_shelve_argument_hash€  s    

ÿrÚ   c           
      C   s  |   d¡}| d¡ t |j¡j}t d¡ | ¡ dks<t	‚|t |j¡jkrXt
 d¡ t| jdd�}| t¡}| d¡\}}tj  |jj||d¡}|dƒdks¤t	‚t |¡j}t d	¡ | d¡}	t|	tƒsÒt	‚t |¡j|ksæt	‚t d	¡ |	 ¡ dk�st	‚t |¡j|k�st	‚d
S )z6Check call_and_shelve only load stored data if needed.Ztest_accessç      à?z>filesystem does not support fine-grained access time attributer   r!   r   r/   rÌ   r   N)r6   r8   r4   ÚstatrN   Úst_atimeÚtimeÚsleepÚreadr'   ÚpytestÚskipr   r%   r    rÀ   r5   r2   r"   rÒ   r™   r   rÓ   )
rT   Ztest_access_time_fileZtest_access_timer+   r)   rÂ   rÙ   Úresult_pathZfirst_access_timerÎ   r   r   r   Ú.test_call_and_shelve_lazily_load_stored_result�  s0    




  ÿ


rä   c              
   C   s”   t t| jƒttƒfD ]z}|  d¡j}| d¡}t|dƒ�}t ||¡ W 5 Q R X t|dƒ�}t 	|¡}W 5 Q R X | 
¡ | 
¡ ks„t‚t |¡ qd S )Nzpickling_test.datr   ÚwbÚrb)r   r    rN   r   r6   rÒ   r7   rÆ   ÚdumpÚloadrÓ   r'   r4   rÁ   )rT   r)   r[   rÎ   ÚfpÚresult2r   r   r   Útest_memorized_pickling±  s    
rë   c                 C   s
  t t| jƒ}| d¡}t t| jƒ}| d¡}| ¡ | ¡ ks@t‚t|ƒt|ƒksTt‚ttƒ}t|ƒ t| d¡ƒ t t| jdt ¡ d�}| d¡}| ¡  t t| jdd�}| d¡}| ¡  t t| jdt ¡ d�}| d¡}| ¡  t t| jdd�}| d¡}| ¡  d S )Nr   é   )r#   Ú	timestamp)r#   rÌ   )	r   r    rN   rÒ   rÓ   r'   Úreprr   rÞ   )rT   r)   rÎ   Zfunc2rê   r   r   r   Útest_memorized_repr½  s*    





rï   c              	   C   sX  |  d¡j}tj |d¡}d}t|dƒ�}| |¡ W 5 Q R X | |¡ dd l}t	|jdd�}| 
|j¡}	|	dƒ |	dƒ |	dƒ t|dƒ�}| d	| ¡ W 5 Q R X |	dƒ |	dƒ t |¡ t  |¡ d
}t|dƒ�}| |¡ W 5 Q R X |	dƒ |	dƒ tj d¡ tj d¡ dd l}| 
|j¡}	|	dƒ |	dƒ |  ¡ \}
}|
dk�sTt‚d S )NZ
tmp_importztmp_joblib_.pyz$def f(x):
    print(x)
    return x
r0   r   r!   r   r   z

z-def f(x):
    print("x=%s" % x)
    return x
z
Reloading
Útmp_joblib_z1
2
Reloading
x=1
)ÚmkdirrN   r4   r5   r6   r7   r8   Zsyspath_prependrð   r   r%   r    rO   rP   ÚsysÚstdoutÚmodulesÚpopÚ
readouterrr'   )ZcapsysrT   r›   Údir_namer[   ÚcontentZmodule_fileÚtmpr+   r    rW   Úerrr   r   r   Útest_memory_file_modificationÝ  s>    


rû   c                 C   s   d S r:   r   ©r~   r   r   r   r   Ú_function_to_cache  s    rý   c                 C   s   | | S r:   r   rü   r   r   r   Ú_sum  s    rþ   c                 C   s   | | S r:   r   rü   r   r   r   Ú_product  s    rÿ   c              	   C   sˆ   t jt_t| jdd�}| t¡}|ddƒdks2t‚|ddƒdksDt‚ttƒ�2 t	jt_|ddƒdksht‚|ddƒdkszt‚W 5 Q R X d S )Nr   r!   r   r   r$   )
rþ   rj   rý   r   rN   r%   r'   r   r   rÿ   )rT   r+   r    r   r   r   Ú*test_memory_in_memory_function_code_change"  s    

r   c                  C   s   t d d�} |  ¡  d S ©NrÐ   ©r   rQ   )r+   r   r   r   Ú$test_clear_memory_with_none_location2  s    
r  Úkw1Úkw2©r  r  c                C   s   | |||fS r:   r   )r~   r   r  r  r   r   r   Úfunc_with_kwonly_args7  s    r  )r~   r   Úreturnc                 C   s   | | S r:   r   rü   r   r   r   Úfunc_with_signature;  s    r	  c              	   C   sÞ   t | jdd�}| t¡}|dddd�dks.t‚ttƒ�}|ddddd	� W 5 Q R X | d
¡ |ddddd� ttƒ�}|ddddd	� W 5 Q R X | d
¡ |jtdgd�}|ddddd�dksÂt‚|ddddd�dksÚt‚d S )Nr   r!   r   r   r$   )r  )r   r   r$   r  rd   )r  z?Keyword-only parameter 'kw1' was passed as positional parameterr  r  rª   )r   r   r$   rd   Zignored)r   rN   r%   r  r'   r   Ú
ValueErrorÚmatch)rT   r+   Úfunc_cachedÚexcinfor   r   r   Ú!test_memory_func_with_kwonly_args?  s    




r  c                 C   s.   t | jdd�}| t¡}|ddƒdks*t‚d S )Nr   r!   r   g       @g      @)r   rN   r%   r	  r'   )rT   r+   r  r   r   r   Útest_memory_func_with_signature[  s    
r  c                    st   t | jdd�}| ¡ dd„ ƒ‰tt|ƒƒ}|D ]}ˆ|ƒ q.tˆƒ‰ ‡fdd„|D ƒ}‡ ‡fdd„|D ƒ}||ˆfS )Nr   r!   c                 S   s   dS )NÁè  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   rD   r   r   r   Úget_1000_bytese  s    z(_setup_toy_cache.<locals>.get_1000_bytesc                    s   g | ]}ˆ   |¡d  ‘qS )r   )rÀ   )ra   rE   )r  r   r   Ú
<listcomp>n  s   ÿz$_setup_toy_cache.<locals>.<listcomp>c                    s    g | ]}t j ˆjjˆ |¡‘qS r   )r4   r5   r6   r2   r"   )ra   r¾   ©rÂ   r  r   r   r  q  s
   þ ÿ)r   rN   r%   rM   r&   r   )rT   Z
num_inputsr+   ÚinputsrE   Zhash_dirnamesZfull_hashdirsr   r  r   Ú_setup_toy_cacheb  s    


ÿþr  c                    s¨   t | ƒ\}}}|j ¡ }dd„ |D ƒ}t|ƒt|ƒks:t‚dd„ ‰ ‡ fdd„|D ƒ}dd„ |D ƒ}||ksnt‚dd„ |D ƒ}dd„ |D ƒ}	d	d„ |D ƒ}
|
|	ks¤t‚d S )
Nc                 S   s   g | ]
}|j ‘qS r   )r5   ©ra   Úcir   r   r   r  z  s     z#test__get_items.<locals>.<listcomp>c                    s*   ‡ fdd„t  ˆ ¡D ƒ}tdd„ |D ƒƒS )Nc                    s   g | ]}t j ˆ |¡‘qS r   ©r4   r5   r6   ©ra   Úfn©Ú	directoryr   r   r  ~  s   ÿz;test__get_items.<locals>.get_files_size.<locals>.<listcomp>c                 s   s   | ]}t j |¡V  qd S r:   )r4   r5   Úgetsize)ra   ré   r   r   r   rc   €  s     z:test__get_items.<locals>.get_files_size.<locals>.<genexpr>)r4   rl   Úsum)r  Z
full_pathsr   r  r   Úget_files_size}  s    
ÿz'test__get_items.<locals>.get_files_sizec                    s   g | ]}ˆ |ƒ‘qS r   r   ©ra   Zhash_dir©r  r   r   r  ‚  s   ÿc                 S   s   g | ]
}|j ‘qS r   )Úsizer  r   r   r   r  „  s     c                 S   s   g | ]}t j |d ¡‘qS )r/   r  r   r   r   r   r  ‡  s   ÿc                 S   s    g | ]}t j  tj |¡¡‘qS r   )ÚdatetimeÚfromtimestampr4   r5   Úgetatimer  r   r   r   r  Š  s   ÿc                 S   s   g | ]
}|j ‘qS r   ©Zlast_accessr  r   r   r   r  �  s     )r  r2   r3   Úsetr'   )rT   r+   Zexpected_hash_dirsr-   ÚitemsZ	hash_dirsZexpected_hash_cache_sizesZhash_cache_sizesZoutput_filenamesZexpected_last_accessesZlast_accessesr   r!  r   Útest__get_itemsw  s$    

ÿÿþr)  c                 C   sú   t | ƒ\}}}|j ¡ }|j d¡}t|ƒ}t t|ƒt|ƒ¡sDt‚t|ƒ|d ksXt‚|j d¡}t|ƒt|ƒksxt‚|j d¡}|g ks�t‚d}	|j |	¡}
t|
ƒs´tt|ƒƒ‚|j d¡}t|ƒ 	|¡}t
dd„ |D ƒƒtd	d„ |D ƒƒksöt‚d S )
NZ2Kr   i   Ú1Méô  ip  c                 s   s   | ]}|j V  qd S r:   r&  r  r   r   r   rc   ¯  s     z,test__get_items_to_delete.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S r:   r&  r  r   r   r   rc   °  s     )r  r2   r3   Z_get_items_to_deleter(   r'  Úissubsetr'   ÚsortedÚ
differenceÚmaxÚmin)rT   r+   Zexpected_hash_cachedirsr-   r(  Zitems_to_deleteZ	nb_hashesZitems_to_delete_2048bZitems_to_delete_emptyÚbytes_limit_too_smallZitems_to_delete_500bZitems_to_delete_6000bZsurviving_itemsr   r   r   Útest__get_items_to_delete‘  s(    
ÿÿr2  c                 C   sÐ   t | ƒ\}}}|j ¡ }| ¡  |j ¡ }t|ƒt|ƒks>t‚|jdd� |j ¡ }t|ƒt|ƒksht‚|jdd� |j ¡ }t t|ƒt|ƒ¡s–t‚t|ƒdks¦t‚d}|j|d� |j ¡ }|g ksÌt‚d S )Nr*  )Úbytes_limitZ3Kr   r+  ©	r  r2   r3   Úreduce_sizer-  r'   r'  r,  r(   )rT   r+   r-   Úref_cache_itemsÚcache_itemsr1  r   r   r   Ú#test_memory_reduce_size_bytes_limit³  s     




r8  c                 C   sÌ   t | ƒ\}}}|j ¡ }| ¡  |j ¡ }t|ƒt|ƒks>t‚|jdd� |j ¡ }t|ƒt|ƒksht‚|jdd� |j ¡ }t t|ƒt|ƒ¡s–t‚t|ƒdks¦t‚|jdd� |j ¡ }|g ksÈt‚d S )NrH   )Zitems_limitr   r   r4  )rT   r+   r-   r6  r7  r   r   r   Ú#test_memory_reduce_size_items_limitÏ  s    




r9  c                 C   s  dd l }dd l}t| ƒ\}}}|j ¡ }| ¡  |j ¡ }t|ƒt|ƒksNt‚|j|jdd�d� |j ¡ }t|ƒt|ƒks€t‚| 	d¡ |dƒ |dƒ |j|jdd�d� |j ¡ }t
 t
|ƒt
|ƒ¡rÐt‚t|ƒdksàt‚|j|jdd�d� |j ¡ }|g k�st‚d S )	Nr   r   )Údays)Z	age_limitr×   éþÿÿÿ©Úsecondsr   )rÞ   r#  r  r2   r3   r5  r-  r'   Ú	timedeltarß   r'  r,  r(   )rT   rÞ   r#  r+   r-   Z	put_cacher6  r7  r   r   r   Ú!test_memory_reduce_size_age_limitê  s(    





r?  c                 C   s@   t | ƒ\}}}| ¡  t |jj¡g ks,t‚|jdd�r<t‚d S )Nrd   )Ú
stacklevel)r  rQ   r4   rl   r2   r"   r'   r¿   )rT   r+   r-   rU   r   r   r   Útest_memory_clear	  s    rA  c                  C   s   dgd } | S )Nr  iè  r   )Úcomplex_objr   r   r   Úfast_func_with_complex_output  s    
rC  c                 C   s"   dd„ t tdƒƒD ƒ}| r|S dS )Nc                 S   s   i | ]}t |ƒ|“qS r   )r|   r`   r   r   r   Ú
<dictcomp>  s      z=fast_func_with_conditional_complex_output.<locals>.<dictcomp>g     jø@zsimple output)r&   Úint)Zcomplex_outputrB  r   r   r   Ú)fast_func_with_conditional_complex_output  s    rF  c                    sb   t | jd�}| t¡‰ tdd�‡ fdd„tdƒD ƒƒ | ¡ \}}d}||ksRt‚||ks^t‚d S )NrÐ   r   r^   c                 3   s   | ]}t ˆ ƒƒ V  qd S r:   r_   r`   ©r  r   r   rc   %  s     zMtest_cached_function_race_condition_when_persisting_output.<locals>.<genexpr>r$   r˜   )r   rN   r%   rC  r   r&   rö   r'   ©rT   Zcapfdr+   ró   ÚstderrrŸ   r   rG  r   Ú:test_cached_function_race_condition_when_persisting_output  s    
 rJ  c                    sb   t | jd�}| t¡‰ tdd�‡ fdd„tdƒD ƒƒ | ¡ \}}d}||ksRt‚||ks^t‚d S )NrÐ   r   r^   c                 3   s*   | ]"}t ˆ ƒ|d  dkrdndƒV  qdS )r   r   TFNr_   r`   rG  r   r   rc   <  s   ÿzOtest_cached_function_race_condition_when_persisting_output_2.<locals>.<genexpr>r$   r˜   )r   rN   r%   rF  r   r&   rö   r'   rH  r   rG  r   Ú<test_cached_function_race_condition_when_persisting_output_21  s    
ÿrK  c              
   C   sø   t | jd�}dd„ }| |¡}d}||ƒ\}}||ks:t‚t|ƒ t||ƒ}||ƒ\}	}
t|ƒdksht‚d}||d ks|t‚|	|ksˆt‚|
|ks”t‚t|ƒ | |¡}z| ¡  tdƒ‚W n8 t	k
rò } zd	}|t
|jƒksât‚W 5 d }~X Y nX d S )
NrÐ   c                 S   s   t  d¡ | t   ¡ fS )Ng{®Gáz„?©rÞ   rß   rD   r   r   r   r)   M  s    
zItest_memory_recomputes_after_an_error_while_loading_results.<locals>.funcrE   r   r˜   r   z<It normally not possible to load a corrupted MemorizedResultzis corrupted)r   rN   r%   r'   r9   rB   r(   rÒ   rÓ   rÔ   r|   r°   )rT   r›   r+   r)   Zcached_funcZ	input_argrE   rí   r�   Zrecomputed_argZrecomputed_timestamprŸ   Ú	referenceÚer}   r   r   r   Ú;test_memory_recomputes_after_an_error_while_loading_resultsI  s0    


ÿrO  c                   @   s   e Zd ZdZdS )ÚIncompleteStoreBackendzAThis backend cannot be instantiated and should raise a TypeError.N)r¢   rS   r£   Ú__doc__r   r   r   r   rP  x  s   rP  c                   @   sP   e 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d„ ZdS )ÚDummyStoreBackendz(A dummy store backend that does nothing.c                 O   s   dS )zOpen an item on store.Nr   )Úselfr°   r±   r   r   r   Ú
_open_item€  s    zDummyStoreBackend._open_itemc                 C   s   dS )z!Check if an item location exists.Nr   ©rS  r"   r   r   r   Ú_item_exists„  s    zDummyStoreBackend._item_existsc                 C   s   dS )z&Move an item from src to dst in store.Nr   )rS  ÚsrcÚdstr   r   r   Ú
_move_itemˆ  s    zDummyStoreBackend._move_itemc                 C   s   dS )zCreate location on store.Nr   rU  r   r   r   Úcreate_locationŒ  s    z!DummyStoreBackend.create_locationc                 C   s   dS )z&Check if an object exists in the storeFr   ©rS  Úobjr   r   r   r½   �  s    zDummyStoreBackend.existsc                 C   s   dS )zClear object on storeNr   r[  r   r   r   Úclear_location”  s    z DummyStoreBackend.clear_locationc                 C   s   g S )z3Returns the whole list of items available in cache.r   )rS  r   r   r   r3   ˜  s    zDummyStoreBackend.get_itemsc                 O   s   dS )zConfigure the storeNr   )rS  r"   r°   r±   r   r   r   Ú	configureœ  s    zDummyStoreBackend.configureN)r¢   rS   r£   rQ  rT  rV  rY  rZ  r½   r]  r3   r^  r   r   r   r   rR  }  s   rR  Úinvalid_prefixc              	   C   s,   t tƒ�}t| d ƒ W 5 Q R X | d¡ d S )Nz&Store backend name should be a string*©r   r
  r	   r  )r_  r  r   r   r   Ú(test_register_invalid_store_backends_key¡  s    
ra  c               	   C   s,   t tƒ�} tdd ƒ W 5 Q R X |  d¡ d S )NÚfsz.Store backend should inherit StoreBackendBase*r`  ©r  r   r   r   Ú+test_register_invalid_store_backends_object©  s    
rd  c               	   C   s.   t tƒ�} tddd� W 5 Q R X |  d¡ d S )Nz/tmp/joblibÚunknown)r"   ÚbackendzUnknown location*)r   Ú	TypeErrorr   r  rc  r   r   r   Ú!test_memory_default_store_backend±  s    
rh  c               	   C   sR   G dd„ dƒ} | ƒ }t tƒ�}td|d� W 5 Q R X d}|t|d jƒksNt‚d S )Nc                   @   s   e Zd ZdS )zHtest_warning_on_unknown_location_type.<locals>.NonSupportedLocationClassNr¡   r   r   r   r   ÚNonSupportedLocationClass¹  s   ri  ÚlocalrÐ   zbInstantiating a backend using a NonSupportedLocationClass as a location is not supported by joblibr   )r   ÚUserWarningr   r|   r}   r'   )ri  Zunsupported_locationr€   Zexpected_mesager   r   r   Ú%test_warning_on_unknown_location_type¸  s    
rl  c               	   C   sN   d} t | tƒ | tft ¡ ks"t‚ttƒ�}t| dƒ W 5 Q R X | d¡ d S )NZisbZfake_locationzNCan't instantiate abstract class IncompleteStoreBackend with abstract methods*)	r	   rP  r
   r(  r'   r   rg  r   r  )Úbackend_namer  r   r   r   Ú)test_instanciate_incomplete_store_backendÆ  s    

rn  c                  C   s>   d} t | tƒ | tft ¡ ks"t‚t| dƒ}t|tƒs:t‚d S )NZdsbZdummy_location)r	   rR  r
   r(  r'   r   r™   )rm  Úbackend_objr   r   r   Útest_dummy_store_backendÒ  s
    

rp  c                  C   s&   t  d¡} td| ƒ}|jdks"t‚d S )NZsome_folderrj  )ÚpathlibÚPathr   r"   r'   )r5   ro  r   r   r   Ú0test_instanciate_store_backend_with_pathlib_pathÝ  s    

rs  c                 C   sj   d}t ƒ }|jd kst‚t|ƒ t|ƒ|jd d�ks8t‚| | j¡ t|ƒ|j| jd�ks^t‚t|ƒ d S )Nz-FileSystemStoreBackend(location="{location}")rÐ   )r   r"   r'   rî   r|   re   r^  rN   )rT   Zrepr_patternrf  r   r   r   Ú"test_filesystem_store_backend_reprä  s    rt  c                 C   s–   dd„ }t | jdd�}| |¡}d}t|ƒ|j||jjd�ksBt‚| dd¡}d}t|ƒ|j|jj|j	|j
d	�ksvt‚t|ƒd
j|jjd�ks’t‚d S )Nc                 S   s   | | S r:   r   rü   r   r   r   Úmy_funcû  s    z)test_memory_objects_repr.<locals>.my_funcr   r!   z/MemorizedFunc(func={func}, location={location}))r)   r"   é*   zJMemorizedResult(location="{location}", func="{func}", args_id="{args_id}"))r"   r)   rÃ   zMemory(location={location})rÐ   )r   rN   r%   r|   re   r2   r"   r'   rÒ   rÂ   rÃ   )rT   ru  r+   Zmemorized_funcZmemorized_func_reprÚmemorized_resultZmemorized_result_reprr   r   r   Útest_memory_objects_reprø  s$    

þ
ý
ÿrx  c                 C   s„   t | jd�}|jdd„ ƒ}| d¡}t |¡}t |¡}|jj|jjksLt	‚|j
|j
ks\t	‚|j|jkslt	‚t|ƒt|ƒks€t	‚d S )NrÐ   c                 S   s   | d S r•   r   ru   r   r   r   rU     s    z'test_memorized_result_pickle.<locals>.grd   )r   rN   r%   rÒ   rÆ   rÈ   rÇ   r2   r"   r'   r)   rÃ   r|   )rT   r+   rU   rw  Zmemorized_result_pickleZmemorized_result_loadsr   r   r   Útest_memorized_result_pickle  s    



ÿry  c                 C   sh   |d krg }t | ƒ}t |ƒ}t| ¡ ƒt| ¡ ƒks8t‚| ¡ D ]"}||krNq@|| || ks@t‚q@d S r:   )Úvarsr'  Úkeysr'   )ÚleftÚrightÚignored_attrsZ	left_varsZ
right_varsÚattrr   r   r   Úcompare+  s    r€  Úmemory_kwargsr$   r   )rJ   r#   rÌ   Z	parameterZunused)rI   r#   Zbackend_optionsc                 C   s  t f d| ji|—Ž}t t |¡¡}t|j|jƒ t||tdddgƒd� t|ƒt|ƒks^t	‚| 
t¡}t t |¡¡}t|j|jƒ t||tdddgƒd� t|ƒt|ƒks²t	‚| d¡}t t |¡¡}t|j|jƒ t||tdddgƒd� t|ƒt|ƒk�st	‚d S )Nr"   r2   rí   Z_func_code_id)r~  r   )r   rN   rÆ   rÇ   rÈ   r€  r2   r'  r   r'   r%   r    rÒ   )rT   r�  r+   Zmemory_reloadedr  Zfunc_cached_reloadedrw  Zmemorized_result_reloadedr   r   r   Útest_memory_pickle_dump_load8  s.    ÿ
ÿ
ÿÿr‚  c                 C   sˆ   |  tj¡ d}t| jdd�}|jdd„ ƒ}||ƒ}d|jksBt‚| ¡  t| jdd�}|jdd„ ƒ}||ƒ}d|jks|t‚| ¡  d S )	Nr$   é   r!   c                 S   s   | d S r•   r   ru   r   r   r   r    b  s    ztest_info_log.<locals>.fZQueryingr   c                 S   s   | d S r•   r   ru   r   r   r   r    l  s    )	Z	set_levelÚloggingÚINFOr   rN   r%   Útextr'   rQ   )rT   Zcaplogr   r+   r    r-   r   r   r   Útest_info_log\  s    

r‡  c              	   C   sH   ddl m} |dkrtdƒ‚tjtdd�� t| jdd�}W 5 Q R X d S )	Nr   )Ú__version__z1.5z6Bytes limit is deprecated and should be removed by 1.4r3  ©r  Z1K)r"   r3  )r]   rˆ  rØ   rá   r   r   rN   )rT   rˆ  r-   r   r   r   Útest_deprecated_bytes_limitu  s    ÿrŠ  c                   @   s\   e Zd ZdZe ¡ dd„ ƒZddd„Zdd„ Zej	 
d	d
dg¡dd„ ƒZdd„ Zdd„ ZdS )ÚTestCacheValidationCallbackz.Tests on parameter `cache_validation_callback`c                 c   s   t |d�}|V  | ¡  d S r  r  )rS  Ztmp_pathZmemr   r   r   r+   ‚  s    
z"TestCacheValidationCallback.memoryNc                 C   s"   d|d< |d k	rt  |¡ |d S )NTÚrunr   rL  )rS  r   rž   Údelayr   r   r   Úfooˆ  s    
zTestCacheValidationCallback.fooc              	   C   s.   d}t jt|d�� |jdd� W 5 Q R X dS )z2Test invalid values for `cache_validation_callbackz9cache_validation_callback needs to be callable. Got True.r‰  T)Úcache_validation_callbackN)rá   r   r
  r%   )rS  r+   r  r   r   r   Ú&test_invalid_cache_validation_callbackŽ  s    zBTestCacheValidationCallback.test_invalid_cache_validation_callbackÚconsider_cache_validTFc                    sr   |j | j‡ fdd„dgd�}ddiddi }}|d|ƒdks@t‚|d|ƒdksRt‚|d s^t‚|d ˆ ksnt‚d	S )
zTest expiry of old resultsc                    s   ˆ S r:   r   )r-   ©r‘  r   r   rw   š  rx   zUTestCacheValidationCallback.test_constant_cache_validation_callback.<locals>.<lambda>rž   ©r�  r«   rŒ  Fr   rd   N©r%   rŽ  r'   )rS  r+   r‘  r    Úd1Úd2r   r’  r   Ú'test_constant_cache_validation_callback”  s     
þzCTestCacheValidationCallback.test_constant_cache_validation_callbackc                 C   sÌ   dd„ }|j | j|dgd�}ddiddi }}|d|dd	�d
ksDt‚|d|dd	�d
ksZt‚|d sft‚|d srt‚ddiddi }}|d|dd	�d
ksšt‚|d|dd	�d
ks°t‚|d s¼t‚|d rÈt‚dS )z*Test cache validity based on run duration.c                 S   s   | d }|dkrdS d S )NÚdurationgš™™™™™¹?Tr   )Úmetadatar˜  r   r   r   r�  ¨  s    z^TestCacheValidationCallback.test_memory_only_cache_long_run.<locals>.cache_validation_callbackrž   r“  rŒ  Fr   r   )r�  rd   gš™™™™™É?Nr”  )rS  r+   r�  r    r•  r–  r   r   r   Útest_memory_only_cache_long_run¥  s      þz;TestCacheValidationCallback.test_memory_only_cache_long_runc                 C   sž   |j | jtdd�dgd�}ddiddiddi  }}}|d|ƒdksHt‚|d|ƒdksZt‚t d	¡ |d|ƒdksvt‚|d s‚t‚|d rŽt‚|d sšt‚d
S )z!Test expiry of old cached resultsg333333Ó?r<  rž   r“  rŒ  Fr   rd   rÛ   N)r%   rŽ  r   r'   rÞ   rß   )rS  r+   r    r•  r–  Zd3r   r   r   Útest_memory_expires_afterÀ  s     þ
z5TestCacheValidationCallback.test_memory_expires_after)N)r¢   rS   r£   rQ  rá   Zfixturer+   rŽ  r�  Úmarkr   r—  rš  r›  r   r   r   r   r‹    s   


r‹  )r   )rH   )T)N)vrQ  r‡   rš   r„  rO   r4   Úos.pathrq  rÆ   rò   rÞ   r#  rg   rá   Zjoblib.memoryr   r   r   r   r   r   r   r	   r
   r   r   r   Zjoblib.parallelr   r   Zjoblib._store_backendsr   r   Zjoblib.test.commonr   r   r   Zjoblib.testingr   r   r   Zjoblib.hashingr   r    r.   r9   rB   rX   rn   rp   rs   ry   r�   r‚   r†   rŠ   r�   rŽ   r�   r”   r    r©   r¯   r¶   r¸   rº   rÅ   rË   rÏ   rÖ   rÚ   rä   rë   rï   rû   rý   rþ   rÿ   r   r  r  rE  Úfloatr	  r  r  r  r)  r2  r8  r9  r?  rA  rC  rF  rJ  rK  rO  rP  rR  ÚdictrM   ra  rd  rh  rl  rn  rp  rs  rt  rx  ry  r€  rœ  r‚  r‡  rŠ  r‹  r   r   r   r   Ú<module>   sä   
+
b


'ÿ
 $ 8
"



/$

ÿÿÿ
 
