a
    h                     @   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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* dd
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'd( Z8g fd)d*Z9d+d, Z:e&e(d-dd.gd/d0 Z;e&d1d2 Z<d3d4 Z=d5d6 Z>d7d8 Z?d9d: Z@e(d;d<gd=d.fg d>dfgd?d@ ZAdAdB ZBdCdD ZCejD(dEddgdFdG ZEdHdI ZFdJdK ZGdLdM ZHdNdO ZIdPdQ ZJdRdS ZKdTdU ZLdVdW ZMdXdY ZNdZd[ ZOd\d]d^d_d`ZPeQeReRdadbdcZSddde ZTdfdg ZUddhdiZVdjdk ZWdldm ZXdndo ZYdpdq ZZdrds Z[dtdu Z\dvdw Z]ddxdyZ^e%dzd{ Z_e%d|d} Z`d~d ZaG dd deZbG dd deZce(dded ee gdd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd ZodddZpejD(ddddd.dddidgdd Zqdd ZrG dd dZsG dd dZte&e(ddeudeudv gdd ZwdS )z
Test the memory module.
    N)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   S/var/www/html/assistant/venv/lib/python3.9/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 )zGiven 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    r8   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    rA   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sJ |	|d	|ksJ 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    rI   rH   r*   gcurrent_accumulatoroutr   rE   r   test_memory_integration\   s.    

rX   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sJ t| d d	 }d|v sJ | d | }	|d	krt|	dgksJ t|	d g ksJ |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 qtd qbtt|	d dksJ  d tt|	d dksJ qtt|	d dksJ  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    rL   r   r   r!   joblibzipython-inputr$   r   Zn_jobsc                 3   s   | ]}t  |V  qd S r9   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 r9   r_   r`   rb   r   r   rc      rd      皙?   )formatrZ   compiletextwrapdedentrS   __code__co_filenamer
   rN   r%   r'   r3   listdirr   r&   timesleep)rT   rY   Z
session_noZipython_cell_sourceZipython_cell_idZ	my_localsr    r*   Zf_cache_relative_directoryZf_cache_directoryr,   r   rb   r   5test_parallel_call_cached_function_defined_in_jupyter   sR    



	rq   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 rB   r:   rC   rE   r   r   ff   s    
ztest_no_memory.<locals>.ffNr   r!   rg   r   )rM   r
   r%   r&   r'   )rr   r*   Zggr,   rV   r   rE   r   test_no_memory   s    
rs   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 rB   r:   Zarg1Zarg2rE   r   r   rU     s    
ztest_memory_kwarg.<locals>.gr   r!      r   rt   )Nr   )rM   r-   rN   r
   r%   )rT   rU   r*   r   rE   r   test_memory_kwarg  s    
rv   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   rE   r   r   helper  s    
z"test_memory_lambda.<locals>.helperc                    s    | S r9   r   rx   )ry   r   r   <lambda>  rd   z$test_memory_lambda.<locals>.<lambda>N)rM   r-   rN   )rT   r   )r)   ry   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 sJ dS )	z=Check that name collisions with functions will raise warningsr   r!   c                 S   s   | S )z&A first function called name_collisionr   rx   r   r   r   name_collision$  s    z2test_memory_name_collision.<locals>.name_collisionc                 S   s   | S )z'A second function called name_collisionr   rx   r   r   r   r|   +  s    r   N	collision)r
   rN   r%   r   r   r'   strmessage)rT   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sJ d S )	Nr   r!   c                 S   s   | S r9   r   rx   r   r   r   rz   =  rd   z7test_memory_warning_lambda_collisions.<locals>.<lambda>c                 S   s   | d S rB   r   rx   r   r   r   rz   >  rd   r   r   rg   )r
   rN   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 d    n1 sh0    Y  t|dksJ dt|d j	 v sJ d S )Nr   r!   lambda x: xzlambda x: x+1r   r   zcannot detect)
r
   rN   rR   r%   r   r   r'   r~   r   lower)rT   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 rw   r:   r   rE   r   r   r(   `  s    
z!test_memory_partial.<locals>.funcr   Nr   )rM   	functoolspartialr-   rN   )rT   r(   r   functionr   rE   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
   rN   rR   r%   )rT   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
   rN   r%   r   )rT   r*   r(   r   r   r   test_argument_change  s    
r   rH   rF   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 rB   r:   rC   rE   r   r   n  s    
ztest_memory_numpy.<locals>.nr   r"   rH   r#   r$   )rG   rG   r   )N)rM   r
   rN   r%   r   randomZRandomStater&   Zrandom_sampleallr'   )	rT   rH   r   r*   Zcached_nZrndr+   r   r,   r   rE   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sJ d}	|	|d v sJ t|tjsJ |jdksJ d	S )
z8Check that mmap_mode is respected even at the first callrF   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\   gcZcollectr8   rA   r'   )
rT   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__rS   __qualname__r   r   r   r   MyException  s   r   c                    s   | r d S r9   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@J |ddd t dks\J |ddd t dksxJ |dd	d t dksJ d
S )z!Test the ignore feature of memoryr   r!   r   ignorer   c                    s     d d S rB   r:   r   rE   r   r   z  s    ztest_memory_ignore.<locals>.zr   r   N)r   r
   rN   rM   r%   r   r'   )rT   r*   r   r   rE   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sJ |ddd
 t dksJ dS )z9Test the ignore feature of memory on a decorated functionr   r!   c                    s   t   fdd}|S )Nc                     s    | i |S r9   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 rB   r:   r   rE   r   r   r     s    z'test_memory_ignore_decorated.<locals>.zr   r   N)r   r   )rT   r*   r   r   r   rE   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 rB   r   r   r   r   r   plus_one  s    z,test_memory_args_as_kwargs.<locals>.plus_oner   r   r   r$   N)r
   rN   r%   )rT   r*   r   r   r   r   test_memory_args_as_kwargs  s    
r   zignore, verbose, mmap_moder   d   rG   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#   rH   c                 S   s   d S r9   r   rx   r   r   r   r   '  s    z"test_partial_decoration.<locals>.zN)r
   rN   r%   r   Z_verboserH   )rT   r   r#   rH   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sJ t  | rJ t	j
t	j
|dsJ | sJ |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
   rN   r   splitr;   r5   r%   r    r   r3   r4   r1   r"   existsdirnamer   rQ   _check_previous_func_code_get_args_idfunc_idremove)	rT   r*   r4   rU   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sJ t d dd}tt| |t}tt|}|d d S )Nr   r!   r   )r
   rN   r%   r    pickleloadsdumpsr   r3   r4   r5   r1   r"   r   r   Z	load_item)	rT   r*   rU   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sJ | ksJ |  q8t	t}|drJ d S )	Nc                    s    S r9   r   r,   r   r   r   rz   k  rd   z*test_check_call_in_cache.<locals>.<lambda>cache_validation_callbackr   r!   c                    s    S r9   r   r   r   r   r   rz   n  rd   r      )
r   r    rN   r
   r%   Zcheck_call_in_cacher   boolrQ   r   )rT   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sJ |  tt |  W d    n1 s0    Y  |  qBd S )Nr   r!   r"   r   r   )zipr   r    rN   r   r
   r%   r	   r   call_and_shelver   getrQ   r   KeyError)rT   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sJ t|j}td	 |d}t|tsJ t|j|ksJ td	 | dksJ 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)r5   r7   r3   statrN   st_atimero   rp   readpytestskipr
   r%   r    r   r4   r1   r"   r   r   r   r	   r   )	rT   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 s0    Y  |
 |
 ksJ t| qd S )Nzpickling_test.datr   wbrb)r   r    rN   r   r5   r   r6   r   dumploadr   r3   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@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    rN   r   r   reprr   ro   )rT   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 s0    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sJ d S )NZ
tmp_importztmp_joblib_.pyz$def f(x):
    print(x)
    return x
r/   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   r3   r4   r5   r6   r7   Zsyspath_prependr   r
   r%   r    rO   rP   sysstdoutmodulespop
readouterr)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 r9   r   r   r   r   r   r   _function_to_cache  s    r   c                 C   s   | | S r9   r   r   r   r   r   _sum#  s    r   c                 C   s   | | S r9   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 s0    Y  d S )Nr   r!   r   r   r$   )	r   rl   r   r
   rN   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_location;  s    
r  kw1kw2r  r  c                C   s   | |||fS r9   r   )r   r   r  r  r   r   r   func_with_kwonly_args@  s    r  )r   r   returnc                 C   s   | | S r9   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 s0    Y  |d
 |jtdgd}|ddddddksJ |ddddddksJ d S )Nr   r!   r   r   r$   )r  )r   r   r$   r  rg   )r  z?Keyword-only parameter 'kw1' was passed as positional parameterr  r  r   )r   r   r$   rg   Zignored)r
   rN   r%   r  r   
ValueErrormatch)rT   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
   rN   r%   r  )rT   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   rC   r   r   r   get_1000_bytesl  s    z(_setup_toy_cache.<locals>.get_1000_bytesc                    s   g | ]}  |qS r   )r   )ra   rD   )r  r   r   
<listcomp>u  rd   z$_setup_toy_cache.<locals>.<listcomp>c                    s    g | ]}t jjj |qS r   )r3   r4   r5   r1   r"   )ra   r   r   r  r   r   r  w  s   )r
   rN   r%   rM   r&   r   )rT   
num_inputsr*   inputsrD   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sJ d S )
Nc                 S   s   g | ]
}|j qS r   )r4   ra   cir   r   r   r    rd   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   r3   r4   r5   ra   fn	directoryr   r   r    rd   z;test__get_items.<locals>.get_files_size.<locals>.<listcomp>c                 s   s   | ]}t j|V  qd S r9   )r3   r4   getsize)ra   r   r   r   r   rc     rd   z:test__get_items.<locals>.get_files_size.<locals>.<genexpr>)r3   rn   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    rd   c                 S   s   g | ]
}|j qS r   )sizer  r   r   r   r    rd   c                 S   s   g | ]}t j|d qS )r.   r  r   r   r   r   r    rd   c                 S   s    g | ]}t j tj|qS r   )datetimefromtimestampr3   r4   getatimer  r   r   r   r    s   c                 S   s   g | ]
}|j qS r   Zlast_accessr  r   r   r   r    rd   )r  r1   r2   set)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_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sJ |jd}t|t|ksJ |jd}|g ksJ d}	|j|	}
t|
sJ 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 r9   r&  r  r   r   r   rc     rd   z,test__get_items_to_delete.<locals>.<genexpr>)r  r1   Z_get_items_to_deleter2   r'   r'  issubsetsorted
differencemaxmin)rT   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.    
r2  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|sJ t|dksJ d}|j|d |j }|g ksJ d S )Nr*  )Zbytes_limitZ3Kr   r+  r  r1   r2   reduce_sizer-  r'  r,  r'   )rT   r*   r,   ref_cache_itemscache_itemsr1  r   r   r   #test_memory_reduce_size_bytes_limit  s     




r7  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|sJ t|dksJ |jdd |j }|g ksJ d S )NrG   )Zitems_limitr   r   r3  )rT   r*   r,   r5  r6  r   r   r   #test_memory_reduce_size_items_limit  s    




r8  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sJ |d |d |d |j|jddd |j }t	
t	|t	|rJ t|dksJ 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
  gMbP?)r#  ro   r  r1   r2   r4  r-  	timedeltarp   r'  r,  r'   r   r   r	  )rT   r#  ro   r*   r,   Z	put_cacher5  r6  r   r   r   !test_memory_reduce_size_age_limit  s.    




4

r@  c                 C   s@   t | \}}}|  t|jjg ks,J |jddr<J d S )Nrg   )
stacklevel)r  rQ   r3   rn   r1   r"   r   )rT   r*   r,   rU   r   r   r   test_memory_clear  s    rB  c                  C   s   dgd } | S )Nr  i  r   )complex_objr   r   r   fast_func_with_complex_output#  s    
rD  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>)  rd   z=fast_func_with_conditional_complex_output.<locals>.<dictcomp>g     j@zsimple output)r&   int)Zcomplex_outputrC  r   r   r   )fast_func_with_conditional_complex_output(  s    rG  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 r9   r_   r`   r  r   r   rc   5  rd   zMtest_cached_function_race_condition_when_persisting_output.<locals>.<genexpr>r$   r   )r
   rN   r%   rD  r   r&   r   rT   Zcapfdr*   r   stderrr   r   rH  r   :test_cached_function_race_condition_when_persisting_output-  s    
 rK  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_   r`   rH  r   r   rc   K  s   zOtest_cached_function_race_condition_when_persisting_output_2.<locals>.<genexpr>r$   r   )r
   rN   r%   rG  r   r&   r   rI  r   rH  r   <test_cached_function_race_condition_when_persisting_output_2A  s    
rL  c              
   C   s   t | jd}dd }||}d}||\}}||ks:J t| t||}||\}	}
t|dkshJ d}||d v s|J |	|ksJ |
|ksJ t| ||}z|  tdW n: t	y } z"d	}|t
|jv sJ W Y d }~n
d }~0 0 d S )
Nr   c                 S   s   t d | t   fS )Ng{Gz?ro   rp   rC   r   r   r   r(   \  s    
zItest_memory_recomputes_after_an_error_while_loading_results.<locals>.funcrD   r   r   r   z<It normally not possible to load a corrupted MemorizedResultzis corrupted)r
   rN   r%   r8   rA   r'   r   r   AssertionErrorr   r~   r   )rT   r   r*   r(   Zcached_funcZ	input_argrD   r   r   Zrecomputed_argZrecomputed_timestampr   	referenceer   r   r   r   ;test_memory_recomputes_after_an_error_while_loading_resultsY  s0    


rQ  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   rR    s   rR  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   rU  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   )rU  srcdstr   r   r   
_move_item  s    zDummyStoreBackend._move_itemc                 C   s   dS )zCreate location on store.Nr   rW  r   r   r   create_location  s    z!DummyStoreBackend.create_locationc                 C   s   dS )z&Check if an object exists in the storeFr   rU  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   )rU  r   r   r   r2     s    zDummyStoreBackend.get_itemsc                 O   s   dS )zConfigure the storeNr   )rU  r"   r   r   r   r   r   	configure  s    zDummyStoreBackend.configureN)r   rS   r   rS  rV  rX  r[  r\  r   r_  r2   r`  r   r   r   r   rT    s   rT  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
  )ra  r  r   r   r   (test_register_invalid_store_backends_key  s    
(rc  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*rb  r  r   r   r   +test_register_invalid_store_backends_object  s    
(rf  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
  re  r   r   r   !test_memory_default_store_backend  s    
*rj  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   rk  localr   zbInstantiating a backend using a NonSupportedLocationClass as a location is not supported by joblibr   )r   UserWarningr   r~   r   )rk  Zunsupported_locationr   Zexpected_mesager   r   r   %test_warning_on_unknown_location_type  s    
*rn  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   rR  r   r(  r   ri  r   r
  )backend_namer  r   r   r   )test_instanciate_incomplete_store_backend  s    

(rp  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   rT  r   r(  r   r   )ro  backend_objr   r   r   test_dummy_store_backend  s
    

rr  c               
   C   sJ   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_folderrl  TrJ   )pathlibPathr   r"   rO   rP   )r4   rq  r   r   r   0test_instanciate_store_backend_with_pathlib_path  s
    

ru  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~   rh   r`  rN   )rT   Zrepr_patternrh  r   r   r   "test_filesystem_store_backend_repr  s    rv  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sJ d S )Nc                 S   s   | | S r9   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~   rh   r1   r"   r   r   r   )rT   rw  r*   Zmemorized_funcZmemorized_func_reprmemorized_resultZmemorized_result_reprr   r   r   test_memory_objects_repr  s$    



rz  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sJ d S )Nr   c                 S   s   | d S r   r   rx   r   r   r   rU   6  s    z'test_memorized_result_pickle.<locals>.grg   )r
   rN   r%   r   r   r   r   r1   r"   r(   r   r~   )rT   r*   rU   ry  Zmemorized_result_pickleZmemorized_result_loadsr   r   r   test_memorized_result_pickle/  s    



r{  c                 C   sh   |d u rg }t | }t |}t| t| ks8J | D ]"}||v rNq@|| || ks@J q@d S r9   )varsr'  keys)leftrightignored_attrsZ	left_varsZ
right_varsattrr   r   r   compareG  s    r  memory_kwargsr$   r   )rI   r#   r   Z	parameterZunused)rH   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sJ |d}tt|}t|j|j t||tg dd t|t|ksJ d S )Nr"   )r1   r   Z_func_code_id)r  r   )r
   rN   r   r   r   r  r1   r'  r   r%   r    r   )rT   r  r*   Zmemory_reloadedr  Zfunc_cached_reloadedry  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   rx   r   r   r   r      s    ztest_info_log.<locals>.fZQueryingr   c                 S   s   | d S r   r   rx   r   r   r   r      s    )Z	set_levelloggingINFOr
   rN   r%   textrQ   )rT   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   rM  )rU  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%   )rU  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 r9   r   r   r   r   r   rz     rd   zUTestCacheValidationCallback.test_constant_cache_validation_callback.<locals>.<lambda>r   r   r   r  Fr   rg   Nr%   r  )rU  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sJ |d|dd	d
ksJ |d sJ |d rJ 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  rg   rf   Nr  )rU  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 sJ |d rJ |d sJ d
S )z!Test expiry of old cached resultsg333333?r<  r   r  r  Fr   rg   r   N)r%   r  r   ro   rp   )rU  r*   r    r  r  Zd3r   r   r   test_memory_expires_after  s    
z5TestCacheValidationCallback.test_memory_expires_after)N)r   rS   r   rS  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 )	TestMemorizedFuncz8Tests 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 properly0Metadata are not returned by MemorizedFunc.call.N)r%   r    callr   dictrU  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   rS   r   rS  staticmethodr    r  r  r   r   r   r   r    s
   
r  r"   Ztest_cache_dirc              
   C   s   t | }tg dg dg}|tj}|| t| } z\tj	| d}d}t
| }|| ksjJ W d   n1 s~0    Y  W tj| dd ntj| dd 0 dS )zoTest that using the memory object automatically creates a `.gitignore` file
    within the new cache directory.)r   r   r$   )rg   r      z
.gitignorez%# Created by joblib automatically.
*
NTrJ   )r
   r   Zasarrayr%   Zsquarers  rt  r3   r4   r5   r6   r   rO   rP   )r"   ZmemZarrZcostly_operationZpath_to_gitignore_fileZgitignore_file_contentr    r   r   r   test_memory_creates_gitignore  s    

0r  )r   )rG   )T)N)xrS  r#  r   r   r  r3   os.pathrs  r   rO   r   rj   ro   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-   r8   rA   rX   rq   rs   rv   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  rF  floatr  r  r  r  r)  r2  r7  r8  r@  rB  rD  rG  rK  rL  rQ  rR  rT  r  rM   rc  rf  rj  rn  rp  rr  ru  rv  rz  r{  r  r  r  r  r  rt  resolver  r   r   r   r   <module>   s   8
.
i


'
 
$ 9
(%



-$

 

(K'