o
    l¨Êh9œ  ã                	   @   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
mZ ddl
mZmZ ddl
mZmZ ddl
mZ ddl
mZmZ ddl
mZmZ dd	l
mZ dd
lmZmZ ddlmZmZ ddlmZmZ ddlmZ ddl m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ej(dd… dkr™ddl)Z)d¥dd„Z*dd„ Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/d d!„ Z0d"d#„ Z1d$d%„ Z2d&d'„ Z3d(d)„ Z4d*d+„ Z5d,d-„ Z6g fd.d/„Z7d0d1„ Z8ee!d2dd3gƒd4d5„ ƒƒZ9ed6d7„ ƒZ:d8d9„ Z;d:d;„ Z<d<d=„ Z=e!d>d?gd@d3fg dAdfgƒdBdC„ ƒZ>dDdE„ Z?dFdG„ Z@dHdI„ ZAdJdK„ ZBdLdM„ ZCdNdO„ ZDdPdQ„ ZEdRdS„ ZFdTdU„ ZGdVdW„ ZHdXdY„ ZIdZd[„ ZJd\d]„ ZKe%�rTd^d_„ ZLd`da„ ZMeNdbƒ dcdd„ ZOdedf„ ZPd¦dgdh„ZQdidj„ ZRdkdl„ ZSdmdn„ ZTdodp„ ZUdqdr„ ZVd§dtdu„ZWedvdw„ ƒZXedxdy„ ƒZYdzd{„ ZZd|d}„ Z[G d~d„ deƒZ\G d€d�„ d�eƒZ]e!d‚de^ƒ e_ƒ gƒdƒd„„ ƒZ`d…d†„ Zad‡dˆ„ Zbd‰dŠ„ Zcd‹dŒ„ Zdd�dŽ„ Zee	jfjgej(dd… dk d�d��d‘d’„ ƒZhd“d”„ Zid•d–„ Zjd—d˜„ Zkd¨d™dš„Zle	jf !d›dœdd�œd3dždŸd d¡id¢œg¡d£d¤„ ƒZmd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)ÚPY3_OR_LATER)Úhashé   )é   é   é   c                 C   s   | d | S )z3 A module-level function for testing purposes.
    r   © ©ÚxÚyr   r   úI/var/www/html/env/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Úverboser   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
   "ÿr;   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_fixturerB   r   r@   r!   Úmonkeypatch_cached_func_warnG   s   rF   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)rC   Ú__main__r   r#   N)Úlistr.   Ústrpathr   ÚshutilÚrmtreer&   Úclearr(   ÚevalÚ
__module__)Útmpdirr"   rP   rO   r+   ÚgÚcurrent_accumulatorÚoutr   rK   r!   Útest_memory_integrationV   s(   ÿ

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                    rG   rH   r=   rI   rK   r   r!   Úff…   rL   ztest_no_memory.<locals>.ffNr   r#   r   r   )rS   r   r&   r'   r(   )r_   r+   Úggr-   r\   r   rK   r!   Útest_no_memory�   s   
ýra   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                    rG   rH   r=   ©rJ   ÚmrK   r   r!   r[   •   rL   ztest_memory_kwarg.<locals>.gr   r#   é   r   rb   rH   )rS   r.   rT   r   r&   )rZ   r[   r+   r   rK   r!   Útest_memory_kwarg‘   s   
re   c                    s0   t ƒ ‰ ‡ fdd„‰‡fdd„}t|ˆ | jƒ dS )z+ Test memory with a function with a lambda.c                    rG   ©z4 A helper function to define l as a lambda.
        r   r=   ©r   rK   r   r!   Úhelper¥   ó   
z"test_memory_lambda.<locals>.helperc                    s   ˆ | ƒS r<   r   rg   )rh   r   r!   Ú<lambda>«   ó    z$test_memory_lambda.<locals>.<lambda>N)rS   r.   rT   )rZ   rJ   r   )r*   rh   r!   Útest_memory_lambda¡   s   rl   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   rg   r   r   r!   Úname_collision´   ó   z2test_memory_name_collision.<locals>.name_collisionc                 S   rm   )z1 A second function called name_collision
        r   rg   r   r   r!   rn   ¼   ro   r   NÚ	collision)r   rT   r&   r   r   r(   ÚstrÚmessage)rZ   r+   rn   ÚaÚbÚwarninfor   r   r!   Útest_memory_name_collision°   s   



þrv   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   rm   r<   r   rg   r   r   r!   rj   Ï   s    z7test_memory_warning_lambda_collisions.<locals>.<lambda>c                 S   ó   | d S rH   r   rg   r   r   r!   rj   Ñ   rk   r   r   r   )r   rT   r&   r   r   r(   )rZ   r+   rs   rt   ru   r   r   r!   Ú%test_memory_warning_lambda_collisionsÌ   s   


ýrx   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   rT   rX   r&   r   r   r(   rq   rr   Úlower)rZ   r+   Úa1Úb1ru   r   r   r!   Ú'test_memory_warning_collision_detectionÞ   s   



ýr}   c                    s8   t ƒ ‰ ‡ fdd„}ddl}| |d¡}t|ˆ | jƒ dS )z$ Test memory with functools.partial.c                    s   ˆ   d¡ |S rf   r=   r   rK   r   r!   r)   ô   ri   z!test_memory_partial.<locals>.funcr   Nr   )rS   Ú	functoolsÚpartialr.   rT   )rZ   r)   r~   Úfunctionr   rK   r!   Útest_memory_partialð   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#   ry   r   N)r   rT   rX   r&   )rZ   r+   rc   Úmmr   r   r!   Útest_memory_eval   s   
rƒ   c                 C   s   t | ƒ}|  d¡ |S )zx A function with a side effect in its arguments.

        Return the lenght of its argument and append one element.
    N)r(   r>   )r   Úlen_xr   r   r!   Úcount_and_append
  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   rT   r&   r…   )rZ   r+   r)   r   r   r!   Útest_argument_change  s   
r†   rO   rM   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                    rG   rH   r=   rI   rK   r   r!   Ún(  rL   ztest_memory_numpy.<locals>.nr   ©r$   rO   r%   r   )rN   rN   r   r<   )rS   r   rT   r&   r   ÚrandomÚRandomStater'   Úrandom_sampleÚallr(   )	rZ   rO   r‡   r+   Úcached_nÚrndr,   rs   r-   r   rK   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 callrM   r   rˆ   c                 S   s   | d S ©Nr   r   ©rs   r   r   r!   Útwice>  ó   z0test_memory_numpy_check_mmap_mode.<locals>.twicer   r   úException while loading resultsN)r   rT   r&   r   ÚonesÚ
isinstanceÚmemmapÚmodeÚgcÚcollectr;   rF   r(   )
rZ   Úmonkeypatchr+   r’   rs   rt   ÚcÚrecorded_warningsÚdÚexception_msgr   r   r!   Ú!test_memory_numpy_check_mmap_mode8  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__rY   Ú__qualname__r   r   r   r!   ÚMyExceptione  ó    r¥   c                    s   | rˆ ‚d S r<   r   )Úexc©r¥   r   r!   Úhh  s   ÿz test_memory_exception.<locals>.hr   r   N)r   )r   rT   Ú	Exceptionr&   r'   r   )rZ   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                    s   ˆ   d¡ d S rH   r=   r   rK   r   r!   Úz{  s   ztest_memory_ignore.<locals>.z)r    r   N©r   )r   rT   rS   r&   r­   r(   )rZ   r+   r®   r   rK   r!   Útest_memory_ignorev  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   rw   rH   r   r‘   r   r   r!   Úplus_one�  r“   z,test_memory_args_as_kwargs.<locals>.plus_oner   r   r‘   r   N)r   rT   r&   )rZ   r+   r±   r   r   r!   Útest_memory_args_as_kwargs‰  s   
r²   zignore, verbose, mmap_moder   éd   rN   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%   rO   c                 S   ó   d S r<   r   rg   r   r   r!   r®   £  ó   z"test_partial_decoration.<locals>.zN)r   rT   r&   r­   Ú_verboserO   )rZ   r­   r%   rO   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 ¡  | ¡ r‚J ‚t	j
 t	j
 |d	¡¡s�J ‚| ¡ s•J ‚| d¡\}}t	j
 |jj||¡}|dƒ}	t	j
 |¡s²J ‚t	 t	j
 |d
¡¡ |	|dƒksÄJ ‚d S )Nr   r#   Ú.r"   Újoblibr   ú,The 'cachedir' attribute has been deprecatedéÿÿÿÿzfunc_code.pyr/   )r   rT   r£   Úsplitr>   r6   r&   r"   r
   r4   r5   r2   r$   ÚexistsÚdirnamer   ÚDeprecationWarningÚcachedirr(   rq   rr   r   rW   Ú_check_previous_func_codeÚ_get_output_identifiersÚremove)
rZ   r+   r5   r[   Úfunc_idr$   r0   Úargs_idÚ
output_dirrs   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   rT   r&   r"   ÚpickleÚloadsÚdumpsrÂ   r4   r5   r6   r2   r$   r½   Ú	load_item)
rZ   r+   r[   Úoutputr©   rÄ   rÅ   rÆ   Úmemory2Úgpr   r   r!   Útest_persistenceÐ  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   é   )Úzipr   r"   rT   r   r   r&   r   r   Úcall_and_shelver–   ÚgetrW   r   ÚKeyError)rZ   r)   ÚResultÚresultr   r   r!   Útest_call_and_shelveç  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   rT   r&   r"   rÓ   r–   r   r   r¿   Úargument_hashrÅ   r(   rq   rr   )rZ   r)   r×   r0   r   r   r!   Ú"test_call_and_shelve_argument_hashý  s   

ÿÿrÚ   c           
      C   s  |   d¡}| d¡ t |j¡j}t d¡ | ¡ dks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s€J ‚t |¡j|ksŠJ ‚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)r6   r8   r4   ÚstatrT   Úst_atimeÚtimeÚsleepÚreadÚpytestÚskipr   r&   r"   rÂ   r5   r2   r$   rÓ   r–   r   rÔ   )
rZ   Ú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"   rT   r   r6   rÓ   r7   rÈ   ÚdumpÚloadrÔ   r4   rÃ   )rZ   r)   Úfilenamer×   Ú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"   rT   rÓ   rÔ   Úreprr   rÞ   )rZ   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 s�w   Y  |	dƒ |	dƒ tj d¡ tj d¡ dd l}| 
|j¡}	|	dƒ |	dƒ |  ¡ \}
}|
dksÇJ ‚d S )NÚ
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
)ÚmkdirrT   r4   r5   r6   r7   r8   Úsyspath_prependrö   r   r&   r"   rU   rV   ÚsysÚstdoutÚmodulesÚpopÚ
readouterr)ÚcapsysrZ   r›   Údir_namerì   ÚcontentÚmodule_fileÚtmpr+   r"   r]   Úerrr   r   r!   Útest_memory_file_modificationZ  sD   ÿ
ÿ

ÿr  c                 C   r´   r<   r   ©rs   rt   r   r   r!   Ú_function_to_cache’  rµ   r  c                 C   ó   | | S r<   r   r  r   r   r!   Ú_sum—  ó   r  c                 C   s   | | S r<   r   r  r   r   r!   Ú_product›  r	  r
  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   )	r  Ú__code__r  r   rT   r&   r   r   r
  )rZ   r+   r"   r   r   r!   Ú*test_memory_in_memory_function_code_changeŸ  s   

"ür  c                  C   s   t d d�} |  ¡  d S )NrÐ   )r   rW   )r+   r   r   r!   Ú$test_clear_memory_with_none_location¯  s   
r  c                   C   r´   r<   r   r   r   r   r!   Úfunc_with_kwonly_args·  ó   r  c                   C   r´   r<   r   r   r   r   r!   Úfunc_with_signatureº  r  r  z›
def func_with_kwonly_args(a, b, *, kw1='kw1', kw2='kw2'):
    return a, b, kw1, kw2

def func_with_signature(a: int, b: float) -> float:
    return a + b
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s�J ‚d S )Nr   r#   r   r   r   )Úkw1)r   r   r   Úkw2r   )r  z?Keyword-only parameter 'kw1' was passed as positional parameter)r  r  r  r¬   )r   r   r   r   Úignored)r   rT   r&   r  r   Ú
ValueErrorÚmatch)rZ   r+   Úfunc_cachedÚexcinfor   r   r!   Ú!test_memory_func_with_kwonly_argsÇ  s   

ÿ

ÿ
r  c                 C   s.   t | jdd�}| t¡}|ddƒdksJ ‚d S )Nr   r#   r   g       @g      @)r   rT   r&   r  )rZ   r+   r  r   r   r!   Útest_memory_func_with_signatureâ  s   
r  c                    st   t | jdd�}| ¡ dd„ ƒ‰tt|ƒƒ}|D ]}ˆ|ƒ qtˆƒ‰ ‡fdd„|D ƒ}‡ ‡fdd„|D ƒ}||ˆfS )Nr   r#   c                 S   ó   dS )NÁè  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   ©Úargr   r   r!   Úget_1000_bytesì  rµ   z(_setup_toy_cache.<locals>.get_1000_bytesc                    s   g | ]	}ˆ   |¡d  ‘qS r¯   )rÂ   )Ú.0r  )r  r   r!   Ú
<listcomp>õ  ó    ÿz$_setup_toy_cache.<locals>.<listcomp>c                    s    g | ]}t j ˆjjˆ |¡‘qS r   )r4   r5   r6   r2   r$   )r  r¾   ©rÄ   r  r   r!   r   ø  s
    þÿ)r   rT   r&   rS   r'   r
   )rZ   Ú
num_inputsr+   Úinputsr  Úhash_dirnamesÚfull_hashdirsr   r"  r!   Ú_setup_toy_cacheé  s   


ÿþ
r'  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   )r5   ©r  Úcir   r   r!   r     ó    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   ©r  Úfn©Ú	directoryr   r!   r     r!  z;test__get_items.<locals>.get_files_size.<locals>.<listcomp>c                 s   s   � | ]	}t j |¡V  qd S r<   )r4   r5   Úgetsize)r  rí   r   r   r!   Ú	<genexpr>  s   € z:test__get_items.<locals>.get_files_size.<locals>.<genexpr>)r4   ÚlistdirÚsum)r0  Ú
full_pathsr   r/  r!   Úget_files_size  s   
ÿz'test__get_items.<locals>.get_files_sizec                    s   g | ]}ˆ |ƒ‘qS r   r   ©r  Úhash_dir©r6  r   r!   r   	  s    ÿc                 S   r(  r   )Úsizer)  r   r   r!   r     r+  c                 S   s   g | ]	}t j |d ¡‘qS )r/   r,  r7  r   r   r!   r     r!  c                 S   s    g | ]}t j  tj |¡¡‘qS r   )ÚdatetimeÚfromtimestampr4   r5   Úgetatimer-  r   r   r!   r     s    ÿÿc                 S   r(  r   ©Úlast_accessr)  r   r   r!   r     r+  )r'  r2   r3   Úset)rZ   r+   Úexpected_hash_dirsr-   ÚitemsÚ	hash_dirsÚexpected_hash_cache_sizesÚhash_cache_sizesÚoutput_filenamesÚexpected_last_accessesÚlast_accessesr   r9  r!   Útest__get_itemsþ  s$   

ÿÿþrI  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<   r>  r)  r   r   r!   r2  5  ó   € z,test__get_items_to_delete.<locals>.<genexpr>c                 s   rM  r<   r>  r)  r   r   r!   r2  6  rN  )r'  r2   r3   Ú_get_items_to_deleter(   r@  ÚissubsetÚsortedÚ
differenceÚmaxÚmin)rZ   r+   Úexpected_hash_cachedirsr-   rB  Ú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 )NrK  Ú3Kr   rL  )	r'  r2   r3   Úreduce_sizerQ  Úbytes_limitr@  rP  r(   )rZ   r+   r-   Úref_cache_itemsÚcache_itemsrZ  r   r   r!   Útest_memory_reduce_size9  s&   




rd  c                 C   s0   t | ƒ\}}}| ¡  t |jj¡g ksJ ‚d S r<   )r'  rW   r4   r3  r2   r$   )rZ   r+   r-   r   r   r!   Útest_memory_clearX  s   re  c                  C   s   dgd } | S )Nr  iè  r   )Úcomplex_objr   r   r!   Úfast_func_with_complex_output_  rL   rg  Tc                 C   s"   dd„ t tdƒƒD ƒ}| r|S dS )Nc                 S   s   i | ]}t |ƒ|“qS r   )rq   ©r  r,   r   r   r!   Ú
<dictcomp>e  s    z=fast_func_with_conditional_complex_output.<locals>.<dictcomp>g     jø@zsimple output)r'   Úint)Úcomplex_outputrf  r   r   r!   Ú)fast_func_with_conditional_complex_outputd  s   rl  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   ©Ún_jobsc                 3   s   � | ]}t ˆ ƒƒ V  qd S r<   ©r   rh  ©r  r   r!   r2  q  s   € zMtest_cached_function_race_condition_when_persisting_output.<locals>.<genexpr>r   r”   )r   rT   r&   rg  r   r'   rý   ©rZ   Úcapfdr+   rú   ÚstderrrŸ   r   rq  r!   Ú:test_cached_function_race_condition_when_persisting_outputi  s   
 ru  c                    rm  )NrÐ   r   rn  c                 3   s,   � | ]}t ˆ ƒ|d  dkrdndƒV  qdS )r   r   TFNrp  rh  rq  r   r!   r2  ˆ  s   € $ÿzOtest_cached_function_race_condition_when_persisting_output_2.<locals>.<genexpr>r   r”   )r   rT   r&   rl  r   r'   rý   rr  r   rq  r!   Ú<test_cached_function_race_condition_when_persisting_output_2}  s   
ÿrv  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{®Gáz„?)rÞ   rß   r  r   r   r!   r)   ™  s   
zItest_memory_recomputes_after_an_error_while_loading_results.<locals>.funcr  r   r”   r   z<It normally not possible to load a corrupted MemorizedResultzis corrupted)r   rT   r&   r;   rF   r(   rÓ   rÔ   ÚAssertionErrorrÕ   rq   Úargs)rZ   r›   r+   r)   Úcached_funcÚ	input_argr  rñ   r�   Úrecomputed_argÚrecomputed_timestamprŸ   Ú	referenceÚerr   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 s†w   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   rT   r2   r$   Ú
startswithr(   rq   rr   rÀ   r   r  )rZ   r0   r+   Úerror_regexr   r   r!   Ú"test_deprecated_cachedir_behaviourÄ  s$   
þ
þ
ÿ"ÿr‚  c                   @   s   e Zd ZdZdS )ÚIncompleteStoreBackendzAThis backend cannot be instanciated and should raise a TypeError.N)r£   rY   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   r  )zOpen an item on store.Nr   )Úselfrx  Úkwargsr   r   r!   Ú
_open_itemã  rµ   zDummyStoreBackend._open_itemc                 C   r  )z!Check if an item location exists.Nr   ©r†  r$   r   r   r!   Ú_item_existsç  rµ   zDummyStoreBackend._item_existsc                 C   r  )z&Move an item from src to dst in store.Nr   )r†  ÚsrcÚdstr   r   r!   Ú
_move_itemë  rµ   zDummyStoreBackend._move_itemc                 C   r  )zCreate location on store.Nr   r‰  r   r   r!   Úcreate_locationï  rµ   z!DummyStoreBackend.create_locationc                 C   r  )z&Check if an object exists in the storeFr   ©r†  Úobjr   r   r!   r½   ó  rµ   zDummyStoreBackend.existsc                 C   r  )zClear object on storeNr   r�  r   r   r!   Úclear_location÷  rµ   z DummyStoreBackend.clear_locationc                 C   s   g S )z3Returns the whole list of items available in cache.r   )r†  r   r   r!   r3   û  rµ   zDummyStoreBackend.get_itemsc                 O   r  )zConfigure the storeNr   )r†  r$   rx  r‡  r   r   r!   Ú	configureÿ  rµ   zDummyStoreBackend.configureN)r£   rY   r¤   r„  rˆ  rŠ  r�  rŽ  r½   r‘  r3   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   rq   rr   )rž  Úunsupported_locationru   Ú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	   rB  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	   rB  r   r–   )r¦  Úbackend_objr   r   r!   Útest_dummy_store_backend5  s
   

r«  z/pathlib is available for python versions >= 3.4)Úreasonc                  C   s&   t  d¡} td| ƒ}|jdksJ ‚d S )NÚsome_folderrŸ  )ÚpathlibÚPathr   r$   )r5   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ò   rq   Úformatr’  rT   )rZ   Úrepr_patternr›  r   r   r!   Ú"test_filesystem_store_backend_reprI  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   r  r<   r   r  r   r   r!   Úmy_func`  r	  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   rT   r&   rq   r±  r2   r$   rÓ   rÄ   rÅ   )rZ   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   rg   r   r   r!   r[   �  r“   z'test_memorized_result_pickle.<locals>.gr   )r   rT   r&   rÓ   rÈ   rÊ   rÉ   r2   r$   r)   rÅ   rq   )rZ   r+   r[   r¸  Úmemorized_result_pickleÚmemorized_result_loadsr   r   r!   Útest_memorized_result_picklez  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<   )Úvarsr@  Úkeys)ÚleftÚrightÚignored_attrsÚ	left_varsÚ
right_varsÚattrr   r   r!   Úcompare�  s   ýrÆ  Úmemory_kwargsr   )rP   r%   rÑ   g    €„.AÚ	parameterÚunused)rO   r%   ra  Úbackend_optionsc                 C   s  t dd| ji|¤Ž}t t |¡¡}t|j|jƒ t||tddgƒd� t|ƒt|ƒks.J ‚| 	t
¡}t t |¡¡}t|j|jƒ t||tddgƒd� t|ƒt|ƒksWJ ‚| d¡}t t |¡¡}t|j|jƒ t||tddgƒd� t|ƒt|ƒks€J ‚d S )Nr$   r2   rñ   )rÂ  r   r   )r   rT   rÈ   rÉ   rÊ   rÆ  r2   r@  r   r&   r"   rÓ   )rZ   rÇ  r+   Úmemory_reloadedr  Úfunc_cached_reloadedr¸  Úmemorized_result_reloadedr   r   r!   Útest_memory_pickle_dump_load�  s.   
ÿ

ÿ
ÿ
ÿrÎ  r¯   )rN   )Tr<   )nr„  r™   rU   r4   Úos.pathrÈ   rù   rÞ   r;  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._compatr   Újoblib.hashingr   Úversion_infor®  r"   r.   r;   rF   r^   ra   re   rl   rv   rx   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  Úexecr  r  r'  rI  r^  rd  re  rg  rl  ru  rv  r  r‚  rƒ  r…  ÚdictrS   r•  r™  r�  r£  r§  r«  ÚmarkÚskipifr°  r³  rº  r½  rÆ  rÎ  r   r   r   r!   Ú<module>   sÜ    
+


'ÿ
$$ 8
!


/$
ÿ

ÿÿÿ