a
    Žù»jCÇ  ã                   @   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mZ ddlZddlmZ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mZm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' dd	l(m)Z)m*Z*m+Z+ d®dd„Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0e)dddgƒdd„ ƒZ1dd„ Z2dd„ Z3dd„ Z4d d!„ Z5d"d#„ Z6d$d%„ Z7d&d'„ Z8d(d)„ Z9g fd*d+„Z:d,d-„ Z;e'e)d.dd/gƒd0d1„ ƒƒZ<e'd2d3„ ƒZ=d4d5„ Z>d6d7„ Z?d8d9„ Z@d:d;„ ZAe)d<d=gd>d/fg d?dfgƒd@dA„ ƒZBdBdC„ ZCdDdE„ ZDejE )dFddg¡dGdH„ ƒZFdIdJ„ ZGdKdL„ ZHdMdN„ ZIdOdP„ ZJdQdR„ ZKdSdT„ ZLdUdV„ ZMdWdX„ ZNdYdZ„ ZOd[d\„ ZPd]d^d_œd`da„ZQeReSeSdbœdcdd„ZTdedf„ ZUdgdh„ ZVd¯didj„ZWdkdl„ ZXdmdn„ ZYdodp„ ZZdqdr„ Z[dsdt„ Z\dudv„ Z]dwdx„ Z^d°dydz„Z_e&d{d|„ ƒZ`e&d}d~„ ƒZadd€„ ZbG d�d‚„ d‚eƒZcG dƒd„„ d„eƒZde)d…deeƒ efƒ gƒd†d‡„ ƒZgdˆd‰„ ZhdŠd‹„ ZidŒd�„ ZjdŽd�„ Zkd�d‘„ Zld’d“„ Zmd”d•„ Znd–d—„ Zod˜d™„ Zpd±dšd›„ZqejE )dœd�dždŸœd/d d¡d¢id£œg¡d¤d¥„ ƒZrd¦d§„ ZsG d¨d©„ d©ƒZtG dªd«„ d«ƒZuG d¬d­„ d­ƒZvdS )²z
Test the memory module.
é    N)ÚPath)ÚFileSystemStoreBackendÚStoreBackendBase)Úhash)Ú_FUNCTION_HASHESÚ_STORE_BACKENDSÚJobLibCollisionWarningÚMemorizedFuncÚMemorizedResultÚMemoryÚNotMemorizedFuncÚNotMemorizedResultÚ_build_func_identifierÚ_store_backend_factoryÚexpires_afterÚregister_store_backend)ÚParallelÚdelayed)ÚnpÚwith_multiprocessingÚ
with_numpy)ÚparametrizeÚraisesÚwarnsé   c                 C   s   | d | S )z-A module-level function for testing purposes.é   © ©ÚxÚyr   r   ú=E:\soccer\ml_env\Lib\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>J ‚t|ƒ|d ks*J ‚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Úlen)ÚfuncÚaccumulatorr#   ÚmemoryÚiÚ_r   r   r    Úcheck_identity_lazy6   s    
r.   c                 C   sT   | j  ¡ \}tj |jd¡}t|dƒ�}| d¡ W d   ƒ n1 sF0    Y  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_itemE   s    r9   c                    s"   g ‰ ‡ fdd„}|  | d|¡ ˆ S )Nc                    s   ˆ   | ¡ d S ©N©Úappend)Úitem©Zrecordedr   r    Úappend_to_recordS   s    z6monkeypatch_cached_func_warn.<locals>.append_to_recordÚwarn)Úsetattr)r)   Zmonkeypatch_fixturer?   r   r>   r    Úmonkeypatch_cached_func_warnL   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–J ‚| 	|d	¡|ksªJ ‚tˆ ƒ|d	 ks$J ‚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!   c   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(   ÚevalÚ
__module__)Útmpdirr!   rJ   rI   r+   ÚgÚcurrent_accumulatorÚoutr   rF   r    Útest_memory_integration\   s.    ü

rY   Úcall_before_reducingTFc                    s  dD �]}d}d  |¡}i }ttt |¡|dd�d |ƒ |d }d|_|dƒdksVJ ‚|jj|ksfJ ‚t| j	d	d
�}| 
|¡‰ tt | d ¡ƒdks˜J ‚t | d ¡d	 }d|v s¶J ‚| d | }	|d	k�rÔt |	¡dgksàJ ‚t |	d ¡g ksöJ ‚|�r>ˆ dƒ tt |	d ¡ƒdk�s J ‚tdd�‡ fdd„dD ƒƒ nxtdd�‡ fdd„dD ƒƒ tdƒD ].}
tt |	d ¡ƒdk�r„ �q’t d¡ �qbtt |	d ¡ƒdk�s®J ‚ˆ dƒ tt |	d ¡ƒdk�sJ ‚qtt |	d ¡ƒdk�sðJ ‚ˆ dƒ tt |	d ¡ƒdksJ ‚qd S )N)r   r   z0
        def f(x):
            return x
        z<ipython-input-{}-000000000000>Úexec)ÚfilenameÚmoder!   rM   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>Ô   ó    zHtest_parallel_call_cached_function_defined_in_jupyter.<locals>.<genexpr>)r   r   c                 3   s   | ]}t ˆ ƒ|ƒV  qd S r:   r`   ra   rc   r   r    rd   Ú   re   é   çš™™™™™É?é   )Úformatr[   ÚcompileÚtextwrapÚdedentrT   Ú__code__Úco_filenamer   rO   r&   r(   r4   Úlistdirr   r'   ÚtimeÚsleep)rU   rZ   Z
session_noZipython_cell_sourceZipython_cell_idZ	my_localsr!   r+   Zf_cache_relative_directoryZf_cache_directoryr-   r   rc   r    Ú5test_parallel_call_cached_function_defined_in_jupyterŠ   sR    

ýö

	rr   c                     s^   t ƒ ‰ ‡ fdd„} tddd�}| | ¡}tdƒD ](}tˆ ƒ}|dƒ tˆ ƒ|d ks0J ‚q0dS )z*Test memory with location=None: no memoizec                    s   ˆ   d¡ | S rC   r;   rD   rF   r   r    Úffø   s    
ztest_no_memory.<locals>.ffNr   r"   rh   r   )rN   r   r&   r'   r(   )rs   r+   Zggr-   rW   r   rF   r    Útest_no_memoryô   s    
rt   c                    sR   t ƒ ‰ d
‡ fdd„	}t|ˆ | jƒ t| jdd�}| |¡}|ddd	�dksNJ ‚dS )z3Test memory with a function with keyword arguments.Nr   c                    s   ˆ   d¡ | S rC   r;   ©Zarg1Zarg2rF   r   r    rV     s    
ztest_memory_kwarg.<locals>.gr   r"   é   r   ru   )Nr   )rN   r.   rO   r   r&   )rU   rV   r+   r   rF   r    Útest_memory_kwarg  s    
rw   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 ©z*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   ry   )rz   r   r    Ú<lambda>  re   z$test_memory_lambda.<locals>.<lambda>N)rN   r.   rO   )rU   r   )r*   rz   r    Útest_memory_lambda  s    r|   c                 C   s”   t | jdd�}|jdd„ ƒ}|}|jdd„ ƒ}|}ttƒ� }|dƒ |dƒ W d  ƒ n1 s`0    Y  t|ƒdkszJ ‚dt|d jƒv s�J ‚dS )	z=Check that name collisions with functions will raise warningsr   r"   c                 S   s   | S )z&A first function called name_collisionr   ry   r   r   r    Úname_collision$  s    z2test_memory_name_collision.<locals>.name_collisionc                 S   s   | S )z'A second function called name_collisionr   ry   r   r   r    r}   +  s    r   NÚ	collision)r   rO   r&   r   r   r(   ÚstrÚmessage)rU   r+   r}   ÚaÚbÚwarninfor   r   r    Útest_memory_name_collision   s    


&r„   c                 C   s–   t | jdd�}| dd„ ¡}| dd„ ¡}ttƒ�@}|dƒdksDJ ‚|dƒdksTJ ‚|dƒdksdJ ‚W d   ƒ n1 sx0    Y  t|ƒdks’J ‚d S )	Nr   r"   c                 S   s   | S r:   r   ry   r   r   r    r{   =  re   z7test_memory_warning_lambda_collisions.<locals>.<lambda>c                 S   s   | d S rC   r   ry   r   r   r    r{   >  re   r   r   rh   )r   rO   r&   r   r   r(   )rU   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 d   ƒ n1 sh0    Y  t|ƒdks‚J ‚dt|d jƒ 	¡ v sœJ ‚d S )Nr   r"   úlambda x: xzlambda x: x+1r   r   zcannot detect)
r   rO   rS   r&   r   r   r(   r   r€   Úlower)rU   r+   Za1Úb1rƒ   r   r   r    Ú'test_memory_warning_collision_detectionJ  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 rx   r;   r   rF   r   r    r)   `  s    
z!test_memory_partial.<locals>.funcr   Nr   )rN   Ú	functoolsÚpartialr.   rO   )rU   r)   rŠ   Úfunctionr   rF   r    Útest_memory_partial\  s
    r�   c                 C   s4   t | jdd�}tdƒ}| |¡}|dƒdks0J ‚dS )zESmoke test memory with a function with a function defined in an eval.r   r"   r†   r   N)r   rO   rS   r&   )rU   r+   ÚmÚmmr   r   r    Útest_memory_evall  s    
r�   c                 C   s   t | ƒ}|  d¡ |S )zsA 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_appendv  s    
r‘   c                 C   s8   t | jdd�}| t¡}|ƒ dks&J ‚|ƒ dks4J ‚dS )zsCheck that if a function has a side effect in its arguments, it
    should use the hash of changing arguments.
    r   r"   r   N)r   rO   r&   r‘   )rU   r+   r)   r   r   r    Útest_argument_change€  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¡srJ ‚t
ˆ ƒ|d ksXJ ‚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)rN   r   rO   r&   r   ÚrandomZRandomStater'   Zrandom_sampleÚallr(   )	rU   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ƒsJJ ‚|jdksXJ ‚t|tjƒshJ ‚|jdksvJ ‚~~t 	¡  t
|ƒ t||ƒ}||ƒ}t|ƒdks¬J ‚d}	|	|d v sÀJ ‚t|tjƒsÐJ ‚|jdksÞJ ‚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   rO   r&   r   ZonesÚ
isinstanceZmemmapr]   ÚgcZcollectr9   rB   r(   )
rU   Úmonkeypatchr+   rš   r�   r‚   ÚcÚrecorded_warningsÚdÚexception_msgr   r   r    Ú!test_memory_numpy_check_mmap_mode£  s*    


r£   c              	      sz   t | jdd�}G dd„ dtƒ‰ |jd
‡ fdd„	ƒ}|ƒ  tdƒD ]4}tˆ ƒ� |dƒ W d	  ƒ q@1 sj0    Y  q@d	S )z+Smoketest the exception handling of Memory.r   r"   c                   @   s   e Zd ZdS )z*test_memory_exception.<locals>.MyExceptionN©Ú__name__rT   Ú__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   rO   Ú	Exceptionr&   r'   r   )rU   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@J ‚|ddd� tˆ ƒdks\J ‚|ddd� tˆ ƒdksxJ ‚|dd	d� tˆ ƒdks”J ‚d
S )z!Test the ignore feature of memoryr   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   rO   rN   r&   r®   r(   )rU   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sLJ ‚|ddd
� tˆ ƒdkshJ ‚|ddd
� tˆ ƒdks„J ‚|ddd
� tˆ ƒdks J ‚dS )z9Test the ignore feature of memory on a decorated functionr   r"   c                    s   t  ˆ ¡‡ fdd„ƒ}|S )Nc                     s   ˆ | i |¤Ž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±   )rU   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,J ‚|dd�dks>J ‚|dd�dksPJ ‚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   rO   r&   )rU   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s4J ‚|j|ksBJ ‚|j|ksPJ ‚dS )z7Check cache may be called with kwargs before decoratingr   r"   )r®   r$   rI   c                 S   s   d S r:   r   ry   r   r   r    r¯   '  s    z"test_partial_decoration.<locals>.zN)r   rO   r&   r®   Z_verboserI   )rU   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g|¢R Ž j}| t¡}ttƒ}t	j
 |jj|¡}||ksfJ ‚t	j
 |¡svJ ‚|jt	j
 |jj¡ks�J ‚t ¡  | ¡ r¤J ‚t	j
 t	j
 |d¡¡s¾J ‚| ¡ sÊJ ‚| d¡}t	j
 |jj|j|¡}|dƒ}t	j
 |¡�sJ ‚t	 t	j
 |d¡¡ ||dƒk�s*J ‚d S )	Nr   r"   Ú.r!   r^   zfunc_code.pyr   r/   )r   rO   r¥   Úsplitr<   r6   r&   r!   r   r4   r5   r2   r#   ÚexistsÚdirnamer   rR   Ú_check_previous_func_codeÚ_get_args_idÚfunc_idÚremove)	rU   r+   r5   rV   rÄ   r#   Úargs_idÚ
output_dirr�   r   r   r    Útest_func_dir0  s(    



rÈ   c           	      C   sà   t | jdd�}| t¡}|dƒ}t t |¡¡}| d¡}tj	 
|jj|j|¡}tj	 |¡s`J ‚||j |j|g¡kszJ ‚t t |¡¡}|jj|jjksžJ ‚t d dd�}t t |¡¡ | t¡}t t |¡¡}|dƒ d S )Nr   r"   r   )r   rO   r&   r!   ÚpickleÚloadsÚdumpsrÃ   r4   r5   r6   r2   r#   rÄ   rÀ   Z	load_item)	rU   r+   rV   Úoutputrª   rÆ   rÇ   Zmemory2Úgpr   r   r    Útest_persistenceP  s    


rÎ   Úconsider_cache_validc                    s´   t t| j‡ fdd„d�t| jdd�jt‡ fdd„d�fD ]`}| d¡}t|tƒsTJ ‚|r\J ‚|dƒdkslJ ‚| d¡}t|tƒs„J ‚|ˆ ks�J ‚| ¡  q8t	tƒ}| d¡r°J ‚d S )	Nc                    s   ˆ S r:   r   ©r-   ©rÏ   r   r    r{   k  re   z*test_check_call_in_cache.<locals>.<lambda>©Úcache_validation_callbackr   r"   c                    s   ˆ S r:   r   rÐ   rÑ   r   r    r{   n  re   r   é   )
r	   r!   rO   r   r&   Zcheck_call_in_cacherœ   ÚboolrR   r   )rU   rÏ   r)   Úresultr   rÑ   r    Útest_check_call_in_cacheg  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 ]€\}}|dƒdksZJ ‚| 	d¡}t
||ƒsrJ ‚| ¡ dks‚J ‚| ¡  ttƒ� | ¡  W d   ƒ n1 s°0    Y  | ¡  qBd S )Nr   r"   ©r#   r   rÔ   )Úzipr	   r!   rO   r   r   r&   r
   r   Úcall_and_shelverœ   ÚgetrR   r   ÚKeyError)rU   r)   ÚResultrÖ   r   r   r    Útest_call_and_shelve~  s     
ü
ù	

&rÞ   c           	      C   s  |   d¡}| d¡ t |j¡j}t d¡ | ¡ dks<J ‚|t |j¡jkrXt	 
d¡ t| jdd�}| t¡}| d¡}tj  |jj|j|d¡}|dƒdks¢J ‚t |¡j}t d	¡ | d¡}t|tƒsÐJ ‚t |¡j|ksäJ ‚t d	¡ | ¡ dksþJ ‚t |¡j|k�sJ ‚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   ÚstatrO   Úst_atimerp   rq   ÚreadÚpytestÚskipr   r&   r!   rÃ   r5   r2   r#   rÄ   rÚ   rœ   r
   rÛ   )	rU   Ztest_access_time_fileZtest_access_timer+   r)   rÆ   Úresult_pathZfirst_access_timerÖ   r   r   r    Ú.test_call_and_shelve_lazily_load_stored_result•  s,    





ÿ


ræ   c              	   C   s¼   t t| jƒttƒfD ]¢}|  d¡j}| d¡}t|dƒ�}t ||¡ W d   ƒ n1 sZ0    Y  t|dƒ�}t 	|¡}W d   ƒ n1 sŽ0    Y  | 
¡ | 
¡ ks¬J ‚t |¡ qd S )Nzpickling_test.datr   ÚwbÚrb)r	   r!   rO   r   r6   rÚ   r7   rÉ   ÚdumpÚloadrÛ   r4   rÅ   )rU   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@J ‚t|ƒt|ƒksTJ ‚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!   rO   rÚ   rÛ   Úreprr   rp   )rU   r)   rÖ   Zfunc2rì   r   r   r    Útest_memorized_reprÅ  s*    





rñ   c                 C   s–  |  d¡j}tj |d¡}d}t|dƒ�}| |¡ W d   ƒ n1 sH0    Y  | |¡ dd l}t	|jdd�}| 
|j¡}	|	dƒ |	dƒ |	dƒ t|dƒ�}| d	| ¡ W d   ƒ n1 sÄ0    Y  |	dƒ |	dƒ t |¡ t  |¡ d
}t|dƒ�}| |¡ W d   ƒ n1 �s"0    Y  |	dƒ |	dƒ tj d¡ tj d¡ dd l}| 
|j¡}	|	dƒ |	dƒ |  ¡ \}
}|
dk�s’J ‚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
)ÚmkdirrO   r4   r5   r6   r7   r8   Zsyspath_prependrò   r   r&   r!   rP   rQ   ÚsysÚstdoutÚmodulesÚpopÚ
readouterr)ZcapsysrU   rž   Údir_namer\   ÚcontentZmodule_fileÚtmpr+   r!   rX   Ú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s2J ‚|ddƒdksDJ ‚ttƒ�< tjt_|ddƒdkshJ ‚|ddƒdkszJ ‚W d   ƒ n1 sŽ0    Y  d S )Nr   r"   r   r   r%   )	r   rm   rÿ   r   rO   r&   r   r   r  )rU   r+   r!   r   r   r    Ú*test_memory_in_memory_function_code_change+  s    

r  c                  C   s   t d d�} |  ¡  d S )NrØ   )r   rR   )r+   r   r   r    Ú$test_clear_memory_with_none_location;  s    
r  Úkw1Úkw2©r  r  c                C   s   | |||fS r:   r   )r�   r‚   r  r  r   r   r    Úfunc_with_kwonly_args@  s    r  )r�   r‚   Úreturnc                 C   s   | | S r:   r   rþ   r   r   r    Úfunc_with_signatureD  s    r	  c                 C   s  t | jdd�}| t¡}|dddd�dks.J ‚ttƒ� }|ddddd	� W d   ƒ n1 s\0    Y  | d
¡ |ddddd� ttƒ� }|ddddd	� W d   ƒ n1 s®0    Y  | d
¡ |jtdgd�}|ddddd�dksêJ ‚|ddddd�dk�sJ ‚d S )Nr   r"   r   r   r%   )r  )r   r   r%   r  rh   )r  z?Keyword-only parameter 'kw1' was passed as positional parameterr  r  r­   )r   r   r%   rh   Zignored)r   rO   r&   r  r   Ú
ValueErrorÚmatch)rU   r+   Úfunc_cachedÚexcinfor   r   r    Ú!test_memory_func_with_kwonly_argsH  s    

.

.
r  c                 C   s.   t | jdd�}| t¡}|ddƒdks*J ‚d S )Nr   r"   r   g       @g      @)r   rO   r&   r	  )rU   r+   r  r   r   r    Útest_memory_func_with_signatureb  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_bytesl  s    z(_setup_toy_cache.<locals>.get_1000_bytesc                    s   g | ]}ˆ   |¡‘qS r   )rÃ   )rb   rE   )r  r   r    Ú
<listcomp>u  re   z$_setup_toy_cache.<locals>.<listcomp>c                    s    g | ]}t j ˆjjˆ |¡‘qS r   )r4   r5   r6   r2   r#   )rb   rÁ   ©rÄ   r  r   r    r  w  s   ÿ)r   rO   r&   rN   r'   r   )rU   Ú
num_inputsr+   ÚinputsrE   Zhash_dirnamesZfull_hashdirsr   r  r    Ú_setup_toy_cachei  s    

þr  c                    s¨   t | ƒ\}}}|j ¡ }dd„ |D ƒ}t|ƒt|ƒks:J ‚dd„ ‰ ‡ fdd„|D ƒ}dd„ |D ƒ}||ksnJ ‚dd„ |D ƒ}dd„ |D ƒ}	d	d„ |D ƒ}
|
|	ks¤J ‚d S )
Nc                 S   s   g | ]
}|j ‘qS r   )r5   ©rb   Úcir   r   r    r  �  re   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   ©rb   Úfn©Ú	directoryr   r    r  …  re   z;test__get_items.<locals>.get_files_size.<locals>.<listcomp>c                 s   s   | ]}t j |¡V  qd S r:   )r4   r5   Úgetsize)rb   rë   r   r   r    rd   †  re   z:test__get_items.<locals>.get_files_size.<locals>.<genexpr>)r4   ro   Ú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   ©rb   Zhash_dir©r   r   r    r  ˆ  re   c                 S   s   g | ]
}|j ‘qS r   )Úsizer  r   r   r    r  ‰  re   c                 S   s   g | ]}t j |d ¡‘qS )r/   r  r!  r   r   r    r  Œ  re   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  ‘  re   )r  r2   r3   Úset)rU   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_items~  s    
ÿr*  c                 C   s&  t | dd�\}}}|j d¡}|g ks*J ‚t | ƒ\}}}|j ¡ }|j d¡}t|ƒ}t t|ƒt|ƒ¡snJ ‚t|ƒ|d ks‚J ‚|j d¡}t|ƒt|ƒks¢J ‚|j d¡}|g ksºJ ‚d}	|j |	¡}
t|
ƒsÞJ t|ƒƒ‚|j d	¡}t|ƒ |¡}t	d
d„ |D ƒƒt
d
d„ |D ƒƒk�s"J ‚d S )Nr   )r  Z1KZ2Kr   i   Ú1Méô  ip  c                 s   s   | ]}|j V  qd S r:   r'  r  r   r   r    rd   ¸  re   z,test__get_items_to_delete.<locals>.<genexpr>)r  r2   Z_get_items_to_deleter3   r(   r(  ÚissubsetÚsortedÚ
differenceÚmaxÚmin)rU   r+   r-   Zitems_to_deleteZexpected_hash_cachedirsr)  Z	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.    
ÿÿr3  c                 C   sÐ   t | ƒ\}}}|j ¡ }| ¡  |j ¡ }t|ƒt|ƒks>J ‚|jdd� |j ¡ }t|ƒt|ƒkshJ ‚|jdd� |j ¡ }t t|ƒt|ƒ¡s–J ‚t|ƒdks¦J ‚d}|j|d� |j ¡ }|g ksÌJ ‚d S )Nr+  )Zbytes_limitZ3Kr   r,  ©r  r2   r3   Úreduce_sizer.  r(  r-  r(   )rU   r+   r-   Úref_cache_itemsÚcache_itemsr2  r   r   r    Ú#test_memory_reduce_size_bytes_limit½  s     




r8  c                 C   sÌ   t | ƒ\}}}|j ¡ }| ¡  |j ¡ }t|ƒt|ƒks>J ‚|jdd� |j ¡ }t|ƒt|ƒkshJ ‚|jdd� |j ¡ }t t|ƒt|ƒ¡s–J ‚t|ƒdks¦J ‚|jdd� |j ¡ }|g ksÈJ ‚d S )NrH   )Zitems_limitr   r   r4  )rU   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sNJ ‚|j|jdd�d� |j ¡ }t|ƒt|ƒks€J ‚| d¡ |dƒ |dƒ |j|jdd�d� |j ¡ }t	 
t	|ƒt	|ƒ¡rÐJ ‚t|ƒdksàJ ‚tjtd	d
��$ |j|jdd�d� W d   ƒ n1 �s0    Y  | d¡ |j|jdd�d� |j ¡ }|g k�sZJ ‚d S )Nr   r   )Údays)Z	age_limitéÿÿÿÿéþÿÿÿ©Úsecondsr   zhas to be a positive©r  gü©ñÒMbP?)r$  rp   r  r2   r3   r5  r.  Ú	timedeltarq   r(  r-  r(   rã   r   r
  )rU   r$  rp   r+   r-   Z	put_cacher6  r7  r   r   r    Ú!test_memory_reduce_size_age_limitô  s.    




4

rA  c                 C   s@   t | ƒ\}}}| ¡  t |jj¡g ks,J ‚|jdd�r<J ‚d S )Nrh   )Ú
stacklevel)r  rR   r4   ro   r2   r#   rÂ   )rU   r+   r-   rV   r   r   r    Útest_memory_clear  s    rC  c                  C   s   dgd } | S )Nr  iè  r   )Úcomplex_objr   r   r    Úfast_func_with_complex_output#  s    
rE  c                 C   s"   dd„ t tdƒƒD ƒ}| r|S dS )Nc                 S   s   i | ]}t |ƒ|“qS r   )r   ra   r   r   r    Ú
<dictcomp>)  re   z=fast_func_with_conditional_complex_output.<locals>.<dictcomp>g     jø@zsimple output)r'   Úint)Zcomplex_outputrD  r   r   r    Ú)fast_func_with_conditional_complex_output(  s    rH  c                    sb   t | jd�}| t¡‰ tdd�‡ fdd„tdƒD ƒƒ | ¡ \}}d}||vsRJ ‚||vs^J ‚d S )NrØ   r   r_   c                 3   s   | ]}t ˆ ƒƒ V  qd S r:   r`   ra   ©r  r   r    rd   5  re   zMtest_cached_function_race_condition_when_persisting_output.<locals>.<genexpr>r%   r›   )r   rO   r&   rE  r   r'   rø   ©rU   Zcapfdr+   rõ   Ústderrr¢   r   rI  r    Ú:test_cached_function_race_condition_when_persisting_output-  s    
 rL  c                    sb   t | jd�}| t¡‰ tdd�‡ fdd„tdƒD ƒƒ | ¡ \}}d}||vsRJ ‚||vs^J ‚d S )NrØ   r   r_   c                 3   s*   | ]"}t ˆ ƒ|d  dkrdndƒV  qdS )r   r   TFNr`   ra   rI  r   r    rd   K  s   zOtest_cached_function_race_condition_when_persisting_output_2.<locals>.<genexpr>r%   r›   )r   rO   r&   rH  r   r'   rø   rJ  r   rI  r    Ú<test_cached_function_race_condition_when_persisting_output_2A  s    
ÿrM  c              
   C   sú   t | jd�}dd„ }| |¡}d}||ƒ\}}||ks:J ‚t|ƒ t||ƒ}||ƒ\}	}
t|ƒdkshJ ‚d}||d v s|J ‚|	|ksˆJ ‚|
|ks”J ‚t|ƒ | |¡}z| ¡  tdƒ‚W n: t	yô } z"d	}|t
|jƒv sàJ ‚W Y d }~n
d }~0 0 d S )
NrØ   c                 S   s   t  d¡ | t   ¡ fS )Ng{®Gáz„?©rp   rq   rD   r   r   r    r)   \  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   rO   r&   r9   rB   r(   rÚ   rÛ   ÚAssertionErrorrÜ   r   r³   )rU   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_resultsY  s0    


ÿrR  c                   @   s   e Zd ZdZdS )ÚIncompleteStoreBackendzAThis backend cannot be instantiated and should raise a TypeError.N)r¥   rT   r¦   Ú__doc__r   r   r   r    rS  †  s   rS  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   ©rV  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   )rV  ÚsrcÚdstr   r   r    Ú
_move_item—  s    zDummyStoreBackend._move_itemc                 C   s   dS )zCreate location on store.Nr   rX  r   r   r    Úcreate_location›  s    z!DummyStoreBackend.create_locationc                 C   s   dS )z&Check if an object exists in the storeFr   ©rV  Ú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   )rV  r   r   r    r3   §  s    zDummyStoreBackend.get_itemsc                 O   s   dS )zConfigure the storeNr   )rV  r#   r³   r´   r   r   r    Ú	configure«  s    zDummyStoreBackend.configureN)r¥   rT   r¦   rT  rW  rY  r\  r]  rÀ   r`  r3   ra  r   r   r   r    rU  Œ  s   rU  Úinvalid_prefixc                 C   s@   t tƒ�}t| d ƒ W d   ƒ n1 s(0    Y  | d¡ d S )Nz&Store backend name should be a string*©r   r
  r   r  )rb  r  r   r   r    Ú(test_register_invalid_store_backends_key°  s    
(rd  c                  C   s@   t tƒ�} tdd ƒ W d   ƒ n1 s(0    Y  |  d¡ d S )NÚfsz.Store backend should inherit StoreBackendBase*rc  ©r  r   r   r    Ú+test_register_invalid_store_backends_object¸  s    
(rg  c                  C   sB   t tƒ�} tddd� W d   ƒ n1 s*0    Y  |  d¡ d S )Nz/tmp/joblibÚunknown)r#   ÚbackendzUnknown location*)r   Ú	TypeErrorr   r  rf  r   r   r    Ú!test_memory_default_store_backendÀ  s    
*rk  c                  C   sf   G dd„ dƒ} | ƒ }t tƒ�}td|d� W d   ƒ n1 s>0    Y  d}|t|d jƒv sbJ ‚d S )Nc                   @   s   e Zd ZdS )zHtest_warning_on_unknown_location_type.<locals>.NonSupportedLocationClassNr¤   r   r   r   r    ÚNonSupportedLocationClassÈ  s   rl  ÚlocalrØ   zbInstantiating a backend using a NonSupportedLocationClass as a location is not supported by joblibr   )r   ÚUserWarningr   r   r€   )rl  Zunsupported_locationrƒ   Zexpected_mesager   r   r    Ú%test_warning_on_unknown_location_typeÇ  s    
*ÿro  c                  C   sb   d} t | tƒ | tft ¡ v s"J ‚ttƒ�}t| dƒ W d   ƒ n1 sJ0    Y  | d¡ d S )NZisbZfake_locationznCan't instantiate abstract class IncompleteStoreBackend (without an implementation for|with) abstract methods*)r   rS  r   r)  r   rj  r   r  )Úbackend_namer  r   r   r    Ú)test_instanciate_incomplete_store_backendØ  s    

(ÿrq  c                  C   s>   d} t | tƒ | tft ¡ v s"J ‚t| dƒ}t|tƒs:J ‚d S )NZdsbZdummy_location)r   rU  r   r)  r   rœ   )rp  Úbackend_objr   r   r    Útest_dummy_store_backendæ  s
    

rs  c               
   C   sH   t dƒ} td| ƒ}z |jdks"J ‚W tjddd� ntjddd� 0 d S )NZsome_folderrm  TrK   )r   r   r#   rP   rQ   )r5   rr  r   r   r    Ú0test_instanciate_store_backend_with_pathlib_pathñ  s
    
rt  c                 C   sj   d}t ƒ }|jd u sJ ‚t|ƒ t|ƒ|jd d�ks8J ‚| | j¡ t|ƒ|j| jd�ks^J ‚t|ƒ d S )Nz-FileSystemStoreBackend(location="{location}")rØ   )r   r#   rð   r   ri   ra  rO   )rU   Zrepr_patternri  r   r   r    Ú"test_filesystem_store_backend_reprû  s    ru  c                 C   s–   dd„ }t | jdd�}| |¡}d}t|ƒ|j||jjd�ksBJ ‚| dd¡}d}t|ƒ|j|jj|j|j	d	�ksvJ ‚t|ƒd
j|jjd�ks’J ‚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   rO   r&   r   ri   r2   r#   rÚ   rÄ   rÆ   )rU   rv  r+   Zmemorized_funcZmemorized_func_reprÚmemorized_resultZmemorized_result_reprr   r   r    Útest_memory_objects_repr  s$    

ÿÿ
ý
ÿry  c                 C   s„   t | jd�}|jdd„ ƒ}| d¡}t |¡}t |¡}|jj|jjksLJ ‚|j	|j	ks\J ‚|j
|j
kslJ ‚t|ƒt|ƒks€J ‚d S )NrØ   c                 S   s   | d S r˜   r   ry   r   r   r    rV   6  s    z'test_memorized_result_pickle.<locals>.grh   )r   rO   r&   rÚ   rÉ   rË   rÊ   r2   r#   r)   rÆ   r   )rU   r+   rV   rx  Zmemorized_result_pickleZmemorized_result_loadsr   r   r    Útest_memorized_result_pickle/  s    



ÿÿrz  c                 C   sh   |d u rg }t | ƒ}t |ƒ}t| ¡ ƒt| ¡ ƒks8J ‚| ¡ D ]"}||v rNq@|| || ks@J ‚q@d S r:   )Úvarsr(  Úkeys)ÚleftÚrightÚignored_attrsZ	left_varsZ
right_varsÚattrr   r   r    ÚcompareG  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g d¢ƒd� t|ƒt|ƒks\J ‚| 	t
¡}t t |¡¡}t|j|jƒ t||tg d¢ƒd� t|ƒt|ƒks®J ‚| d¡}t t |¡¡}t|j|jƒ t||tg d¢ƒd� t|ƒt|ƒk�sJ ‚d S )Nr#   )r2   rï   Z_func_code_id)r  r   )r   rO   rÉ   rÊ   rË   r�  r2   r(  r   r&   r!   rÚ   )rU   r‚  r+   Zmemory_reloadedr  Zfunc_cached_reloadedrx  Zmemorized_result_reloadedr   r   r    Útest_memory_pickle_dump_loadT  s6    
ý

ý

ýrƒ  c                 C   sˆ   |  tj¡ d}t| jdd�}|jdd„ ƒ}||ƒ}d|jv sBJ ‚| ¡  t| jdd�}|jdd„ ƒ}||ƒ}d|jvs|J ‚| ¡  d S )	Nr%   é   r"   c                 S   s   | d S r˜   r   ry   r   r   r    r!   ‰  s    ztest_info_log.<locals>.fZQueryingr   c                 S   s   | d S r˜   r   ry   r   r   r    r!   “  s    )Z	set_levelÚloggingÚINFOr   rO   r&   ÚtextrR   )rU   Zcaplogr   r+   r!   r-   r   r   r    Útest_info_logƒ  s    

rˆ  c                   @   sL   e Zd Z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`Nc                 C   s"   d|d< |d urt  |¡ |d S )NTÚrunr   rN  )rV  r   r¡   Údelayr   r   r    ÚfooŸ  s    
zTestCacheValidationCallback.fooc                 C   sB   d}t jt|d�� |jdd� W d  ƒ n1 s40    Y  dS )z2Test invalid values for `cache_validation_callbackz9cache_validation_callback needs to be callable. Got True.r?  TrÒ   N)rã   r   r
  r&   )rV  r+   r  r   r   r    Ú&test_invalid_cache_validation_callback¥  s    zBTestCacheValidationCallback.test_invalid_cache_validation_callbackrÏ   TFc                    sr   |j | j‡ fdd„dgd�}ddiddi }}|d|ƒdks@J ‚|d|ƒdksRJ ‚|d s^J ‚|d ˆ ksnJ ‚d	S )
zTest expiry of old resultsc                    s   ˆ S r:   r   rÐ   rÑ   r   r    r{   °  re   zUTestCacheValidationCallback.test_constant_cache_validation_callback.<locals>.<lambda>r¡   ©rÓ   r®   rŠ  Fr   rh   N©r&   rŒ  )rV  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sDJ ‚|d|dd	�d
ksZJ ‚|d sfJ ‚|d srJ ‚ddiddi }}|d|dd	�d
ksšJ ‚|d|dd	�d
ks°J ‚|d s¼J ‚|d rÈJ ‚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‹  rh   rg   Nr�  )rV  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sHJ ‚|d|ƒdksZJ ‚t d	¡ |d|ƒdksvJ ‚|d s‚J ‚|d rŽJ ‚|d sšJ ‚d
S )z!Test expiry of old cached resultsg333333Ó?r=  r¡   rŽ  rŠ  Fr   rh   rß   N)r&   rŒ  r   rp   rq   )rV  r+   r!   r�  r‘  Zd3r   r   r    Útest_memory_expires_afterÕ  s    ÿ
z5TestCacheValidationCallback.test_memory_expires_after)N)r¥   rT   r¦   rT  rŒ  r�  rã   Úmarkr   r’  r•  r–  r   r   r   r    r‰  œ  s   

r‰  c                   @   s,   e Zd ZdZedd„ ƒZdd„ Zdd„ ZdS )	ÚTestMemorizedFuncú8Tests for the MemorizedFunc and NotMemorizedFunc classesc                 C   s   |  | d¡d || < ||  S )Nr   r   )rÛ   )r   Úcounterr   r   r    r!   ê  s    zTestMemorizedFunc.fc                 C   sp   |j | jdgd�}i }|d|ƒdks(J ‚|d|ƒdks:J ‚| d|¡\}}|dksZJ dƒ‚t|tƒslJ dƒ‚dS )úTest calling the functionrš  r­   r   r   úf has not been called properlyú0Metadata are not returned by MemorizedFunc.call.N)r&   r!   Úcallrœ   Údict©rV  r+   r!   rš  r   Úmetar   r   r    Útest_call_method_memorizedï  s    ÿz,TestMemorizedFunc.test_call_method_memorizedc                 C   sh   t | jƒ}i }|d|ƒdks J ‚|d|ƒdks2J ‚| d|¡\}}|dksRJ dƒ‚t|tƒsdJ dƒ‚dS )r›  r   r   r%   rœ  r�  N)r   r!   rž  rœ   rŸ  r   r   r   r    Útest_call_method_not_memorizedþ  s    
ÿz0TestMemorizedFunc.test_call_method_not_memorizedN)r¥   rT   r¦   rT  Ústaticmethodr!   r¢  r£  r   r   r   r    r˜  ç  s
   
r˜  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestAutoGitignorer™  c                 C   sP   t | d¡ƒ}t|ƒ}| t¡}|dƒ |d }| ¡ s<J ‚| ¡ dksLJ ‚dS )zsTest that using the memory object automatically creates a `.gitignore` file
        within the new cache directory.Útest_cache_dirr   ú
.gitignorez%# Created by joblib automatically.
*
N)r   ró   r   r&   ÚidrÀ   Ú	read_text)rV  rU   r#   ÚmemZcostly_operationÚgitignore_filer   r   r    Útest_memory_creates_gitignore  s    
z/TestAutoGitignore.test_memory_creates_gitignorec                 C   sZ   t | d¡ƒ}|d }d}| |¡ t|ƒ}| t¡dƒ | ¡ sFJ ‚| ¡ |ksVJ ‚dS )zvTest that using the memory object does not overwrite an existing
        `.gitignore` file within the cache directory.r¦  r§  z# Existing .gitignore file!r   N)r   ró   Ú
write_textr   r&   r¨  rÀ   r©  )rV  rU   r#   r«  Zexisting_contentrª  r   r   r    Ú1test_memory_does_not_overwrite_existing_gitignore  s    
zCTestAutoGitignore.test_memory_does_not_overwrite_existing_gitignoreN)r¥   rT   r¦   rT  r¬  r®  r   r   r   r    r¥    s   r¥  )r   )rH   )T)N)wrT  r$  rŠ   r�   r…  r4   Úos.pathrÉ   rP   rô   rk   rp   Úpathlibr   rã   Zjoblib._store_backendsr   r   Zjoblib.hashingr   Zjoblib.memoryr   r   r   r	   r
   r   r   r   r   r   r   r   Zjoblib.parallelr   r   Zjoblib.test.commonr   r   r   Zjoblib.testingr   r   r   r!   r.   r9   rB   rY   rr   rt   rw   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  r  rG  Úfloatr	  r  r  r  r*  r3  r8  r9  rA  rC  rE  rH  rL  rM  rR  rS  rU  rŸ  rN   rd  rg  rk  ro  rq  rs  rt  ru  ry  rz  r�  rƒ  rˆ  r‰  r˜  r¥  r   r   r   r    Ú<module>   sÐ   8
.
i


'
 
$ 9
(%



-$

 
þþ
(K'