o
    tBh
                  	   @   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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( dddZ)dd Z*dd Z+dd Z,dd Z-e$dddgdd Z.d d! Z/d"d# Z0d$d% Z1d&d' Z2d(d) Z3d*d+ Z4d,d- Z5d.d/ Z6g fd0d1Z7d2d3 Z8e e$d4dd5gd6d7 Z9e d8d9 Z:d:d; Z;d<d= Z<d>d? Z=d@dA Z>e$dBdCgdDd5fg dEdfgdFdG Z?dHdI Z@dJdK ZAdLdM ZBdNdO ZCdPdQ ZDdRdS ZEdTdU ZFdVdW ZGdXdY ZHdZd[ ZId\d] ZJd^d_ ZKd`da ZLdbdc ZMdddedfdgdhZNdieOdjePdkePfdldmZQdndo ZRdpdq ZSddrdsZTdtdu ZUdvdw ZVdxdy ZWdzd{ ZXd|d} ZYdd~dZZe"dd Z[e"dd Z\dd Z]dd Z^G dd deZ_G dd deZ`e$ddea eb gdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd ZldddZmejn$ddddd5ddddidgdd ZodS )z
Test the memory module.
    N)Memory)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   n/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/joblib/test/test_memory.pyf)   s   r   c                 C   sZ   t |dd}|| } tdD ]}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_lazy1   s   
r,   c                 C   sV   | j  \}tj|jd}t|d}|d W d    d S 1 s$w   Y  d S )N
output.pklwgarbage)store_backend	get_itemsospathjoinopenwrite)r)   single_cache_itemoutput_filenamer   r   r   r   corrupt_single_cache_item@   s
   "r9   c                    s"   g   fdd}| | d|  S )Nc                    s     |  d S Nappend)itemrecordedr   r   append_to_recordN   s   z6monkeypatch_cached_func_warn.<locals>.append_to_recordwarn)setattr)r'   monkeypatch_fixturer@   r   r>   r   monkeypatch_cached_func_warnG   s   rD   c                    s   t    fdd}t| | j dD ]M}dD ]*}t| jd||d}tj| jdd ||}|d	 |jd
d t }|d	}qt |d	 ksKJ |	|d	|ksUJ t |d	 ks_J qd|_
t| jdd}||d	 dS )z, Simple test of memory lazy evaluation.
    c                         d | S Nr   r;   lr(   r   r   r   ^      
z"test_memory_integration.<locals>.f)FT)rN
   )r!   r"   	mmap_modecompressT)ignore_errorsr   F)rA   __main__r   r    N)listr,   strpathr   shutilrmtreer$   clearr&   eval
__module__)tmpdirr   rN   rM   r)   gcurrent_accumulatoroutr   rI   r   test_memory_integrationV   s(   

r\   call_before_reducingTFc           
         s  dD ]}d}d |}ttt||dd t d }d|_|ddks'J |jj|ks/J t	| j
d	d
}|| tt| d dksHJ t| d d	 }d|v sWJ | d | }|d	krt|dgkskJ t|d g ksvJ |r d tt|d dksJ tdd fdddD }	ntdd fdddD }	tt|d dksJ  d tt|d dksJ qtt|d dksJ  d tt|d dksJ qd S )N)r   r   z0
        def f(x):
            return x
        z<ipython-input-{}-000000000000>exec)filenamemoder   rP   r   r   r    joblibzipython-inputr#   r   n_jobsc                 3       | ]	}t  |V  qd S r:   r   .0r*   cached_fr   r   	<genexpr>       zHtest_parallel_call_cached_function_defined_in_jupyter.<locals>.<genexpr>)r   r   c                 3   rd   r:   re   rf   rh   r   r   rj      rk      )formatr^   compiletextwrapdedentlocalsrW   __code__co_filenamer   rR   r$   r&   r2   listdirr   )
rX   r]   
session_noipython_cell_sourceipython_cell_id	aliased_fr)   f_cache_relative_directoryf_cache_directoryresr   rh   r   5test_parallel_call_cached_function_defined_in_jupyter   sF   



	r|   c                     s^   t    fdd} tddd}|| }tdD ]}t }|d t |d ks,J qdS )z, Test memory with location=None: no memoize c                    rE   rF   r;   rG   rI   r   r   ff   rJ   ztest_no_memory.<locals>.ffNr   r    rl   r   )rQ   r   r$   r%   r&   )r}   r)   ggr+   rZ   r   rI   r   test_no_memory   s   
r   c                    sR   t   d
 fdd	}t| | j t| jdd}||}|ddd	dks'J dS )z4 Test memory with a function with keyword arguments.Nr   c                    rE   rF   r;   rH   mrI   r   r   rY      rJ   ztest_memory_kwarg.<locals>.gr   r       r   r   rF   )rQ   r,   rR   r   r$   )rX   rY   r)   r   rI   r   test_memory_kwarg   s   
r   c                    s0   t    fddfdd}t| | j dS )z+ Test memory with a function with a lambda.c                    rE   z4 A helper function to define l as a lambda.
        r   r;   r   rI   r   r   helper     
z"test_memory_lambda.<locals>.helperc                    s    | S r:   r   r   )r   r   r   <lambda>      z$test_memory_lambda.<locals>.<lambda>N)rQ   r,   rR   )rX   rH   r   )r(   r   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 s0w   Y  t|dks=J dt|d jv sHJ dS )	z> Check that name collisions with functions will raise warningsr   r    c                 S      | S )z0 A first function called name_collision
        r   r   r   r   r   name_collision     z2test_memory_name_collision.<locals>.name_collisionc                 S   r   )z1 A second function called name_collision
        r   r   r   r   r   r     r   r   N	collision)r   rR   r$   r   r   r&   strmessage)rX   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s&J |ddks.J |ddks6J W d    n1 s@w   Y  t|dksMJ d S )	Nr   r    c                 S   r   r:   r   r   r   r   r   r   2  s    z7test_memory_warning_lambda_collisions.<locals>.<lambda>c                 S      | d S rF   r   r   r   r   r   r   4  r   r   r   rl   )r   rR   r$   r   r   r&   )rX   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 s4w   Y  t|dksAJ dt|d j	 v sNJ d S )Nr   r    lambda x: xzlambda x: x+1r   r   zcannot detect)
r   rR   rV   r$   r   r   r&   r   r   lower)rX   r)   a1b1r   r   r   r   'test_memory_warning_collision_detectionA  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 r   r;   r   rI   r   r   r'   W  r   z!test_memory_partial.<locals>.funcr   Nr   )rQ   	functoolspartialr,   rR   )rX   r'   r   functionr   rI   r   test_memory_partialS  s
   r   c                 C   s4   t | jdd}td}||}|ddksJ dS )zF Smoke test memory with a function with a function defined in an eval.r   r    r   r   N)r   rR   rV   r$   )rX   r)   r   mmr   r   r   test_memory_evalc  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   len_xr   r   r   count_and_appendm  s   
r   c                 C   s8   t | jdd}|t}| dksJ | dksJ 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   rR   r$   r   )rX   r)   r'   r   r   r   test_argument_changew  s   
r   rM   rK   c           	         s   t   d	 fdd	}t| j|dd}||}tjd}tdD ]#}|d}tdD ]}t	|||ks9J t
 |d ksCJ q,q!dS )
z/ Test memory with a function with numpy arrays.Nc                    rE   rF   r;   rG   rI   r   r   n  rJ   ztest_memory_numpy.<locals>.nr   r!   rM   r"   r#   )rL   rL   r   r:   )rQ   r   rR   r$   r   randomRandomStater%   random_sampleallr&   )	rX   rM   r   r)   cached_nrndr*   r   r+   r   rI   r   test_memory_numpy  s   

r   c           
      C   s   t | jddd}| dd }td}||}||}t|tjs%J |jdks,J t|tjs4J |jdks;J ~~t	  t
| t||}||}t|dksVJ d}	|	|d v s`J t|tjshJ |jdksoJ d	S )
z8Check that mmap_mode is respected even at the first callrK   r   r   c                 S   s   | d S Nr   r   r   r   r   r   twice     z0test_memory_numpy_check_mmap_mode.<locals>.twicer#   r   Exception while loading resultsN)r   rR   r$   r   ones
isinstancememmapr`   gccollectr9   rD   r&   )
rX   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 ]}t  |d W d	   n1 s5w   Y  q d	S )z1 Smoketest the exception handling of Memory.
    r   r    c                   @      e Zd ZdS )z*test_memory_exception.<locals>.MyExceptionN__name__rW   __qualname__r   r   r   r   MyException      r   c                    s   | r d S r:   r   )excr   r   r   h  s   z test_memory_exception.<locals>.hr#   r   N)r   )r   rR   	Exceptionr$   r%   r   )rX   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s<J |dd	d t dksJJ d
S )z# Test the ignore feature of memory r   r    r   ignorer   c                         d d S rF   r;   r   rI   r   r   z     ztest_memory_ignore.<locals>.zr   r   Nr   r   rR   rQ   r$   r   r&   )rX   r)   r   r   rI   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s&J |ddd
 t dks4J |ddd
 t dksBJ |ddd
 t dksPJ dS )z; Test the ignore feature of memory on a decorated function r   r    c                    s   t   fdd}|S )Nc                     s    | i |S r:   r   )argskwargsr   r   r   wrapped  r   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                    r   rF   r;   r   rI   r   r   r     s   z'test_memory_ignore_decorated.<locals>.zr   r   Nr   r   )rX   r)   r   r   r   rI   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s(J d	S )
z_Non-regression test against 0.12.0 changes.

    https://github.com/joblib/joblib/pull/751
    r   r    c                 S   r   rF   r   r   r   r   r   plus_one  r   z,test_memory_args_as_kwargs.<locals>.plus_oner   r   r   r#   N)r   rR   r$   )rX   r)   r   r   r   r   test_memory_args_as_kwargs  s   
r   zignore, verbose, mmap_moder   d   rL   c                 C   sT   t | jdd}|j|||ddd }|j|ksJ |j|ks!J |j|ks(J dS )z7Check cache may be called with kwargs before decoratingr   r    )r   r"   rM   c                 S      d S r:   r   r   r   r   r   r         z"test_partial_decoration.<locals>.zN)r   rR   r$   r   _verboserM   )rX   r   r"   rM   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s3J t	j
|s;J |jt	j
|jjksHJ tt}|j|jjksVJ W d    n1 s`w   Y  t|dksmJ dt|d jv sxJ t  | rJ t	j
t	j
|d	sJ | sJ |d\}}t	j
|jj||}|d}	t	j
|sJ t	t	j
|d
 |	|dksJ d S )Nr   r    .r   ra   r   ,The 'cachedir' attribute has been deprecatedzfunc_code.pyr-   )r   rR   r   splitr<   r4   r$   r   r
   r2   r3   r0   r!   existsdirnamer   DeprecationWarningcachedirr&   r   r   r   rU   _check_previous_func_code_get_output_identifiersremove)
rX   r)   r3   rY   func_idr!   r.   args_id
output_dirr   r   r   r   test_func_dir)  s2   



r   c           
      C   s   t | jdd}|t}|d}tt|}|d\}}tj	
|jj||}tj	|s1J ||j||gks=J tt|}|jj|jjksOJ t d dd}tt| |t}tt|}	|	d d S )Nr   r    r   )r   rR   r$   r   pickleloadsdumpsr   r2   r3   r4   r0   r!   r   	load_item)
rX   r)   rY   outputr   r   r   r   memory2gpr   r   r   test_persistenceM  s   

r   c                 C   s   t t| jt| jddtfD ].}|d}|rJ t|ts"J |ddks*J |d}|s3J t|ts:J |  qd S )Nr   r    r      )	r   r   rR   r   r$   check_call_in_cacher   boolrU   )rX   r'   resultr   r   r   test_check_call_in_cached  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s-J |	d}t
||s9J | dksAJ |  tt |  W d    n1 sXw   Y  |  q!d S )Nr   r    r!   r   r   )zipr   r   rR   r   r   r$   r   r   call_and_shelver   getrU   r   KeyError)rX   r'   Resultr   r   r   r   test_call_and_shelveq  s,   



r  c                 C   s   t | jddt}|d}t|tsJ tt}|j	|j
ks#J W d    n1 s-w   Y  t|dks:J dt|d jv sEJ d S )Nr   r    r   r   z1The 'argument_hash' attribute has been deprecatedr   )r   rR   r$   r   r   r   r   r   r   argument_hashr   r&   r   r   )rX   r'   r   r.   r   r   r   "test_call_and_shelve_argument_hash  s   

r  c           
      C   s  |  d}|d t|jj}td | dksJ |t|jjkr,t	
d t| jdd}|t}|d\}}tj |jj||d}|ddksRJ t|j}td	 |d}	t|	tsiJ t|j|kssJ td	 |	 dksJ t|j|ksJ d
S )z6Check call_and_shelve only load stored data if needed.test_accessg      ?z>filesystem does not support fine-grained access time attributer   r    r   r-   r   r   N)r4   r6   r2   statrR   st_atimetimesleepreadpytestskipr   r$   r   r   r3   r0   r!   r   r   r   r   )
rX   test_access_time_filetest_access_timer)   r'   r   r  result_path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 ]Q}| dj}|d}t|d}t|| W d    n1 s-w   Y  t|d}t	|}W d    n1 sGw   Y  |
 |
 ksVJ t| q
d S )Nzpickling_test.datr   wbrb)r   r   rR   r   r4   r   r5   r   dumploadr   r2   r   )rX   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s*J 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   rR   r   r   reprr   r  )rX   r'   r   func2r  r   r   r   test_memorized_repr  s*   





r  c                 C   s  | dj}tj|d}d}t|d}|| W d    n1 s$w   Y  || dd l}t	|jdd}|
|j}	|	d |	d |	d t|d}|d	|  W d    n1 sbw   Y  |	d |	d t| t | d
}t|d}|| W d    n1 sw   Y  |	d |	d tjd tjd dd l}|
|j}	|	d |	d |  \}
}|
dksJ d S )N
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
)mkdirrR   r2   r3   r4   r5   r6   syspath_prependr  r   r$   r   rS   rT   sysstdoutmodulespop
readouterr)capsysrX   r   dir_namer_   contentmodule_filetmpr)   r   r[   errr   r   r   test_memory_file_modification  sD   


r-  c                 C   r   r:   r   r   r   r   r   r   _function_to_cache  r   r/  c                 C      | | S r:   r   r.  r   r   r   _sum!     r1  c                 C   s   | | S r:   r   r.  r   r   r   _product%  r2  r3  c                 C   s   t jt_t| jdd}|t}|dddksJ |dddks"J tt tjt_|dddks4J |dddks=J W d    d S 1 sHw   Y  d S )Nr   r    r   r   r#   )	r1  rr   r/  r   rR   r$   r   r   r3  )rX   r)   r   r   r   r   *test_memory_in_memory_function_code_change)  s   

"r4  c                  C   s   t d d} |   d S )Nr   )r   rU   )r)   r   r   r   $test_clear_memory_with_none_location9  s   
r5  kw1kw2r6  r7  c                C   s   | |||fS r:   r   )r   r   r6  r7  r   r   r   func_with_kwonly_args>  s   r9  r   r   returnc                 C   r0  r:   r   r.  r   r   r   func_with_signatureB  r2  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.w   Y  |d
 |ddddd tt}|ddddd	 W d    n1 sWw   Y  |d
 |jtdgd}|ddddddksuJ |ddddddksJ d S )Nr   r    r   r   r#   )r6  )r   r   r#   r7  rl   )r7  z?Keyword-only parameter 'kw1' was passed as positional parameterr8  r7  r   )r   r   r#   rl   ignored)r   rR   r$   r9  r   
ValueErrormatch)rX   r)   func_cachedexcinfor   r   r   !test_memory_func_with_kwonly_argsF  s   




rA  c                 C   s.   t | jdd}|t}|dddksJ d S )Nr   r    r   g       @g      @)r   rR   r$   r;  )rX   r)   r?  r   r   r   test_memory_func_with_signatureb  s   
rB  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      dS )N  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   argr   r   r   get_1000_bytesl  r   z(_setup_toy_cache.<locals>.get_1000_bytesc                    s   g | ]	}  |d  qS r   )r   )rg   rF  )rG  r   r   
<listcomp>u      z$_setup_toy_cache.<locals>.<listcomp>c                    s    g | ]}t jjj |qS r   )r2   r3   r4   r0   r!   )rg   r   r   rG  r   r   rH  x  s
    )r   rR   r$   rQ   r%   r
   )rX   
num_inputsr)   inputsrF  hash_dirnamesfull_hashdirsr   rJ  r   _setup_toy_cachei  s   



rO  c                    s   t | \}}}|j }dd |D }t|t|ksJ dd   fdd|D }dd |D }||ks7J dd |D }dd |D }	d	d |D }
|
|	ksRJ d S )
Nc                 S      g | ]}|j qS r   )r3   rg   cir   r   r   rH        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   r2   r3   r4   rg   fn	directoryr   r   rH    rI  z;test__get_items.<locals>.get_files_size.<locals>.<listcomp>c                 s   s    | ]	}t j|V  qd S r:   )r2   r3   getsize)rg   r  r   r   r   rj     rk   z:test__get_items.<locals>.get_files_size.<locals>.<genexpr>)r2   rt   sum)rX  
full_pathsr   rW  r   get_files_size  s   
z'test__get_items.<locals>.get_files_sizec                    s   g | ]} |qS r   r   rg   hash_dirr\  r   r   rH    s    c                 S   rP  r   )sizerQ  r   r   r   rH    rS  c                 S   s   g | ]	}t j|d qS )r-   rT  r]  r   r   r   rH    rI  c                 S   s    g | ]}t j tj|qS r   )datetimefromtimestampr2   r3   getatimerU  r   r   r   rH    s    c                 S   rP  r   last_accessrQ  r   r   r   rH    rS  )rO  r0   r1   set)rX   r)   expected_hash_dirsr+   items	hash_dirsexpected_hash_cache_sizeshash_cache_sizesoutput_filenamesexpected_last_accesseslast_accessesr   r_  r   test__get_items~  s$   

ro  c                 C   s   t | \}}}|j }|jd}t|}tt|t|s"J t||d ks,J |jd}t|t|ks<J |jd}|g ksHJ d}	|j|	}
t|
sZJ t||jd}t||}t	dd |D t
d	d |D ks{J d S )
N2Kr   i   1M  ip  c                 s       | ]}|j V  qd S r:   rd  rQ  r   r   r   rj         z,test__get_items_to_delete.<locals>.<genexpr>c                 s   rs  r:   rd  rQ  r   r   r   rj     rt  )rO  r0   r1   _get_items_to_deleter&   rf  issubsetsorted
differencemaxmin)rX   r)   expected_hash_cachedirsr+   rh  items_to_delete	nb_hashesitems_to_delete_2048bitems_to_delete_emptybytes_limit_too_smallitems_to_delete_500bitems_to_delete_6000bsurviving_itemsr   r   r   test__get_items_to_delete  s(   
r  c                 C   s   t | \}}}|j }|  |j }t|t|ksJ d|_|  |j }t|t|ks5J d|_|  |j }tt|t|sMJ t|dksUJ d}||_|  |j }|g ksiJ d S )Nrq  3Kr   rr  )	rO  r0   r1   reduce_sizerw  bytes_limitrf  rv  r&   )rX   r)   r+   ref_cache_itemscache_itemsr  r   r   r   test_memory_reduce_size  s&   




r  c                 C   s0   t | \}}}|  t|jjg ksJ d S r:   )rO  rU   r2   rt   r0   r!   )rX   r)   r+   r   r   r   test_memory_clear  s   r  c                  C   s   dgd } | S )NrD  i  r   )complex_objr   r   r   fast_func_with_complex_output  rJ   r  c                 C   s"   dd t tdD }| r|S dS )Nc                 S   s   i | ]}t ||qS r   )r   rf   r   r   r   
<dictcomp>  s    z=fast_func_with_conditional_complex_output.<locals>.<dictcomp>g     j@zsimple output)r%   int)complex_outputr  r   r   r   )fast_func_with_conditional_complex_output  s   r  c                    b   t | jd}|t tdd fddtdD  | \}}d}||vs)J ||vs/J d S )Nr   r   rb   c                 3   s    | ]}t   V  qd S r:   re   rf   r?  r   r   rj     s    zMtest_cached_function_race_condition_when_persisting_output.<locals>.<genexpr>r#   r   )r   rR   r$   r  r   r%   r&  rX   capfdr)   r#  stderrr   r   r  r   :test_cached_function_race_condition_when_persisting_output  s   
 r  c                    r  )Nr   r   rb   c                 3   s,    | ]}t  |d  dkrdndV  qdS )r   r   TFNre   rf   r  r   r   rj     s    $zOtest_cached_function_race_condition_when_persisting_output_2.<locals>.<genexpr>r#   r   )r   rR   r$   r  r   r%   r&  r  r   r  r   <test_cached_function_race_condition_when_persisting_output_2  s   
r  c              
   C   s   t | jd}dd }||}d}||\}}||ksJ t| t||}||\}	}
t|dks4J d}||d v s>J |	|ksDJ |
|ksJJ t| ||}z|  td t	yy } zd	}|t
|jv snJ W Y d }~d S d }~ww )
Nr   c                 S   s   t d | t   fS )Ng{Gz?)r  r	  rE  r   r   r   r'     s   
zItest_memory_recomputes_after_an_error_while_loading_results.<locals>.funcrF  r   r   r   z<It normally not possible to load a corrupted MemorizedResultzis corrupted)r   rR   r$   r9   rD   r&   r   r   AssertionErrorr   r   r   )rX   r   r)   r'   cached_func	input_argrF  r  r   recomputed_argrecomputed_timestampr   	referenceer   r   r   r   ;test_memory_recomputes_after_an_error_while_loading_results  s4   


 r  c                 C   s  t d }t| jdd}|jj| jsJ W d    n1 s w   Y  t|dks-J dt|d jv s8J t d }t }|j	d u sGJ W d    n1 sQw   Y  t|dks^J dt|d jv siJ d}t
t|d t| j| jdd	}W d    d S 1 sw   Y  d S )
Nr   )r   r"   r   z,The 'cachedir' parameter has been deprecatedr   r   z,You set both "location='.+ and "cachedir='.+)r>  )r!   r   r"   )r   r   rR   r0   r!   
startswithr&   r   r   r   r   r=  )rX   r.   r)   error_regexr   r   r   "test_deprecated_cachedir_behaviourD  s$   


"r  c                   @   s   e Zd ZdZdS )IncompleteStoreBackendzAThis backend cannot be instanciated and should raise a TypeError.N)r   rW   r   __doc__r   r   r   r   r  [  s    r  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   rC  )zOpen an item on store.Nr   )selfr   r   r   r   r   
_open_itemc  r   zDummyStoreBackend._open_itemc                 C   rC  )z!Check if an item location exists.Nr   r  r!   r   r   r   _item_existsg  r   zDummyStoreBackend._item_existsc                 C   rC  )z&Move an item from src to dst in store.Nr   )r  srcdstr   r   r   
_move_itemk  r   zDummyStoreBackend._move_itemc                 C   rC  )zCreate location on store.Nr   r  r   r   r   create_locationo  r   z!DummyStoreBackend.create_locationc                 C   rC  )z&Check if an object exists in the storeFr   r  objr   r   r   r   s  r   zDummyStoreBackend.existsc                 C   rC  )zClear object on storeNr   r  r   r   r   clear_locationw  r   z DummyStoreBackend.clear_locationc                 C   s   g S )z3Returns the whole list of items available in cache.r   )r  r   r   r   r1   {  r   zDummyStoreBackend.get_itemsc                 O   rC  )zConfigure the storeNr   )r  r!   r   r   r   r   r   	configure  r   zDummyStoreBackend.configureN)r   rW   r   r  r  r  r  r  r   r  r1   r  r   r   r   r   r  `  s    r  invalid_prefixc                 C   s@   t t}t| d  W d    n1 sw   Y  |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     
r  c                  C   s@   t t} tdd  W d    n1 sw   Y  | d d S )Nfsz.Store backend should inherit StoreBackendBase*r  r@  r   r   r   +test_register_invalid_store_backends_object  r  r  c                  C   sB   t t} tddd W d    n1 sw   Y  | d d S )Nz/tmp/joblibunknown)r!   backendzUnknown location*)r   	TypeErrorr   r>  r  r   r   r   !test_memory_default_store_backend  s   
r  c                  C   sf   G dd d} |  }t t}td|d W d    n1 sw   Y  d}|t|d jv s1J d S )Nc                   @   r   )zHtest_warning_on_unknown_location_type.<locals>.NonSupportedLocationClassNr   r   r   r   r   NonSupportedLocationClass  r   r  localr   zbInstanciating a backend using a NonSupportedLocationClass as a location is not supported by joblibr   )r   UserWarningr   r   r   )r  unsupported_locationr   expected_mesager   r   r   %test_warning_on_unknown_location_type  s   
r  c                  C   sb   d} t | t | tft v sJ tt}t| d W d    n1 s%w   Y  |d d S )Nisbfake_locationzNCan't instantiate abstract class IncompleteStoreBackend with abstract methods*)r   r  r	   rh  r   r  r   r>  )backend_namer@  r   r   r   )test_instanciate_incomplete_store_backend  s   

r  c                  C   s>   d} t | t | tft v sJ t| d}t|tsJ d S )Ndsbdummy_location)r   r  r	   rh  r   r   )r  backend_objr   r   r   test_dummy_store_backend  s
   

r  c                  C   s&   t d} td| }|jdksJ d S )Nsome_folderr  )pathlibPathr   r!   )r3   r  r   r   r   0test_instanciate_store_backend_with_pathlib_path  s   

r  c                 C   sj   d}t  }|jd u sJ t| t||jd dksJ || j t||j| jdks/J t| d S )Nz-FileSystemStoreBackend(location="{location}")r   )r   r!   r  r   rm   r  rR   )rX   repr_patternr  r   r   r   "test_filesystem_store_backend_repr  s   r  c                 C   s   dd }t | jdd}||}d}t||j||jjdks!J |dd}d}t||j|jj|j|j	d	ks;J t|d
j|jjdksIJ d S )Nc                 S   r0  r:   r   r.  r   r   r   my_func  r2  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   rR   r$   r   rm   r0   r!   r   r   r   )rX   r  r)   memorized_funcmemorized_func_reprmemorized_resultmemorized_result_reprr   r   r   test_memory_objects_repr  s$   



r  c                 C   s   t | jd}|jdd }|d}t|}t|}|jj|jjks&J |j	|j	ks.J |j
|j
ks6J t|t|ks@J d S )Nr   c                 S   s   | d S r   r   r   r   r   r   rY     r   z'test_memorized_result_pickle.<locals>.grl   )r   rR   r$   r   r   r   r   r0   r!   r'   r   r   )rX   r)   rY   r  memorized_result_picklememorized_result_loadsr   r   r   test_memorized_result_pickle  s   



r  c                 C   sh   |d u rg }t | }t |}t| t| ksJ | D ]}||v r'q || || ks1J q d S r:   )varsrf  keys)leftrightignored_attrs	left_vars
right_varsattrr   r   r   compare  s   r  memory_kwargsr#   r   )rN   r"   r   g    .A	parameterunused)rM   r"   r  backend_optionsc                 C   s  t d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sWJ |d}tt|}t|j|j t||tg dd t|t|ksJ d S )Nr!   )r0   r  _func_code_id)r  r   r   )r   rR   r   r   r   r  r0   rf  r   r$   r   r   )rX   r  r)   memory_reloadedr?  func_cached_reloadedr  memorized_result_reloadedr   r   r   test_memory_pickle_dump_load  s.   




r  r   )rL   )Tr:   )pr  r   r   rS   r2   os.pathr  r   r"  r  ra  ro   r  joblib.memoryr   r   r   r   r   r   r   r	   r
   r   r   joblib.parallelr   r   joblib._store_backendsr   r   joblib.test.commonr   r   r   joblib.testingr   r   r   joblib.hashingr   r   r,   r9   rD   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/  r1  r3  r4  r5  r9  r  floatr;  rA  rB  rO  ro  r  r  r  r  r  r  r  r  r  r  r  dictrQ   r  r  r  r  r  r  r  r  r  r  r  markr  r   r   r   r   <module>   s    
+
b


'
$$ 8
!


/$

