
    -iiC                        d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlZddlmZmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' dd	l(m)Z)m*Z*m+Z+ dodZ,d Z-d Z.d Z/d Z0 e)dddg          d             Z1d Z2d Z3d Z4d Z5d Z6d Z7d Z8d Z9g fdZ:d Z;e' e)dddg          d                          Z<e'd!             Z=d" Z>d# Z?d$ Z@d% ZA e)d&d'gd(dfg d)dfg          d*             ZBd+ ZCd, ZDejE        )                    d-ddg          d.             ZFd/ ZGd0 ZHd1 ZId2 ZJd3 ZKd4 ZLd5 ZMd6 ZNd7 ZOd8 ZPd9d:d;d<ZQd=eRd>eSd?eSfd@ZTdA ZUdB ZVdpdCZWdD ZXdE ZYdF ZZdG Z[dH Z\dI Z]dJ Z^dqdKZ_e&dL             Z`e&dM             ZadN Zb G dO dPe          Zc G dQ dRe          Zd e)dSd ee             ef            g          dT             ZgdU ZhdV ZidW ZjdX ZkdY ZldZ Zmd[ Znd\ Zod] Zpdrd^ZqejE        )                    d_d`dadbddcdddeidfg          dg             Zrdh Zs G di dj          Zt G dk dl          Zu G dm dn          ZvdS )sz
Test the memory module.
    N)Path)FileSystemStoreBackendStoreBackendBase)hash)_FUNCTION_HASHES_STORE_BACKENDSJobLibCollisionWarningMemorizedFuncMemorizedResultMemoryNotMemorizedFuncNotMemorizedResult_build_func_identifier_store_backend_factoryexpires_afterregister_store_backend)Paralleldelayed)npwith_multiprocessing
with_numpy)parametrizeraiseswarns   c                     | dz  |z   S )z-A module-level function for testing purposes.    )xys     ]/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/joblib/test/test_memory.pyfr"   /   s    a4!8O    c                     t          |d          }|                    |           } t          d          D ]=}t          d          D ]+} | |          |k    sJ t          |          |dz   k    sJ ,>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_s         r!   check_identity_lazyr1   6   s     Xq111F<<D1XX - -q 	- 	-A477a<<<<{##q1u,,,,,	-- -r#   c                    | j                                         \  }t          j                            |j        d          }t          |d          5 }|                    d           d d d            d S # 1 swxY w Y   d S )N
output.pklwgarbage)store_backend	get_itemsospathjoinopenwrite)r.   single_cache_itemoutput_filenamer"   s       r!   corrupt_single_cache_itemr?   E   s    !/99;;gll#4#9<HHO	os	#	# q		                 s   A44A8;A8c                 D    g fd}|                     | d|           S )Nc                 2                         |            d S Nappend)itemrecordeds    r!   append_to_recordz6monkeypatch_cached_func_warn.<locals>.append_to_recordS   s    r#   warn)setattr)r,   monkeypatch_fixturerG   rF   s      @r!   monkeypatch_cached_func_warnrK   L   sC    
 H     f.>???Or#   c                    t                      fd}t          || j                   dD ]}dD ]}t          | j        d||          }t	          j        | j        d           |                    |          } |d           |                    d	
           t                    } |d          }t                    |dz   k    sJ |	                    |d          |k    sJ t                    |dz   k    sJ d|_
        t          | j        d          } |                    |          d           dS )z&Simple test of memory lazy evaluation.c                 2                         d           | S Nr   rC   argr-   s    r!   r"   z"test_memory_integration.<locals>.fc       1
r#   )FT)rN
   )r&   r'   	mmap_modecompressTignore_errorsr   F)rH   __main__r   r%   N)listr1   strpathr   shutilrmtreer)   clearr+   eval
__module__)	tmpdirr"   rU   rT   r.   gcurrent_accumulatoroutr-   s	           @r!   test_memory_integrationrd   \   s   &&K
     ;777 " ; ;$ 	 	I#!	  F M&.====QAAaDDDGGG"%k"2"2!A$$CC;#6#:::::{{1a  C'''';#6#:::::: ALV^Q777FFLLOOAr#   call_before_reducingTFc                    dD ]}d}d                     |          }i }t          t          t          j        |          |d          d |           |d         }d|_         |d          dk    sJ |j        j        |k    sJ t          | j	        d	
          }|
                    |          t          t          j        | dz                      dk    sJ t          j        | dz            d	         }d|v sJ | dz  |z  }	|d	k    rkt          j        |	          dgk    sJ t          j        |	dz            g k    sJ |r[ d           t          t          j        |	dz                      dk    sJ  t          d          fddD                        n t          d          fddD                        t          d          D ]@}
t          t          j        |	dz                      dk    r nt!          j        d           At          t          j        |	dz                      dk    sJ  d           t          t          j        |	dz                      dk    sJ st          t          j        |	dz                      dk    sJ  d           t          t          j        |	dz                      dk    sJ d S )N)r   r   z0
        def f(x):
            return x
        z<ipython-input-{}-000000000000>exec)filenamemoder"   rX   r   r   r%   joblibzipython-inputr(   r   n_jobsc              3   H   K   | ]} t                    |          V  d S rB   r   .0r/   cached_fs     r!   	<genexpr>zHtest_parallel_call_cached_function_defined_in_jupyter.<locals>.<genexpr>   6      "H"HA#478#4#4Q#7#7"H"H"H"H"H"Hr#   )r   r   c              3   H   K   | ]} t                    |          V  d S rB   rn   ro   s     r!   rr   zHtest_parallel_call_cached_function_defined_in_jupyter.<locals>.<genexpr>   rs   r#      皙?   )formatrg   compiletextwrapdedentr_   __code__co_filenamer   rZ   r)   r+   r8   listdirr   r*   timesleep)r`   re   
session_noipython_cell_sourceipython_cell_id	my_localsr"   r.   f_cache_relative_directoryf_cache_directoryr0   rq   s              @r!   5test_parallel_call_cached_function_defined_in_jupyterr      sW   "  VA VA

 <BB:NN	 344(   	
 	
 	
 cN! qttqyyyyz%8888;;;<<??2:fx/0011Q6666%'Z0A%B%B1%E""<<<<<"X-0JJ??:/00SE9999:/#566"<<<<#  2:&7#&=>>??1DDDD #""""H"H"H"H"H"H"HHHHH #""""H"H"H"H"H"H"HHHH r $ $A2:&7#&=>>??1DDJsOOOO2:&7#&=>>??1DDDD
 rz"3c"9::;;q@@@@@ rz"3c"9::;;q@@@@HQKKK rz"3c"9::;;q@@@@@mVA VAr#   c                     t                      fd} t          dd          }|                    |           }t          d          D ]4}t	                    } |d           t	                    |dz   k    sJ 5dS )z*Test memory with location=None: no memoizec                 2                         d           | S rN   rC   rO   s    r!   ffztest_no_memory.<locals>.ff   rQ   r#   Nr   r%   rw   r   )rY   r   r)   r*   r+   )r   r.   ggr0   rb   r-   s        @r!   test_no_memoryr      s    &&K     T1---F	b		B1XX ; ;!+..
1;#6#::::::; ;r#   c                     t                      d	fd	}t          || j                   t          | j        d          }|                    |          } |dd          dk    sJ dS )
z3Test memory with a function with keyword arguments.Nr   c                 2                         d           | S rN   rC   )arg1arg2r-   s     r!   ra   ztest_memory_kwarg.<locals>.g  s    1r#   r   r%      r   )r   r   rN   )rY   r1   rZ   r   r)   )r`   ra   r.   r-   s      @r!   test_memory_kwargr     s    &&K      ;777V^Q777FQA1"1######r#   c                 b    t                      fdt          fd| j                   dS )z*Test memory with a function with a lambda.c                 2                         d           | S z*A helper function to define l as a lambda.r   rC   )r   r-   s    r!   helperz"test_memory_lambda.<locals>.helper      1r#   c                      |           S rB   r   )r   r   s    r!   <lambda>z$test_memory_lambda.<locals>.<lambda>  s    &&)) r#   N)rY   r1   rZ   )r`   r-   r   s    @@r!   test_memory_lambdar     sL    &&K    
 ++++[&.IIIIIr#   c                 d   t          | j        d          }|j        d             }|}|j        d             }|}t          t                    5 } |d            |d           ddd           n# 1 swxY w Y   t          |          dk    sJ dt          |d         j                  v sJ dS )z=Check that name collisions with functions will raise warningsr   r%   c                     | S )z&A first function called name_collisionr   r   s    r!   name_collisionz2test_memory_name_collision.<locals>.name_collision$  	     r#   c                     | S )z'A second function called name_collisionr   r   s    r!   r   z2test_memory_name_collision.<locals>.name_collision+  r   r#   r   N	collision)r   rZ   r)   r   r	   r+   strmessage)r`   r.   r   abwarninfos         r!   test_memory_name_collisionr      s   V^Q777F\  \ 	A\  \ 	A	%	&	& (	!	!               x==A#hqk122222222s   A22A69A6c                 t   t          | j        d          }|                    d           }|                    d           }t          t                    5 } |d          dk    sJ  |d          dk    sJ  |d          dk    sJ 	 d d d            n# 1 swxY w Y   t          |          dk    sJ d S )Nr   r%   c                     | S rB   r   r   s    r!   r   z7test_memory_warning_lambda_collisions.<locals>.<lambda>=  s    q r#   c                     | dz   S rN   r   r   s    r!   r   z7test_memory_warning_lambda_collisions.<locals>.<lambda>>  s
    q1u r#   r   r   rw   )r   rZ   r)   r   r	   r+   )r`   r.   r   r   r   s        r!   %test_memory_warning_lambda_collisionsr   :  s    V^Q777F[[!!A__%%A	%	&	& (qttqyyyyqttqyyyyqttqyyyyy               x==As   4BBBc                    t          | j        d          }t          d          }|                    |          }t          d          }|                    |          }t	          t
                    5 } |d            |d            |d           d d d            n# 1 swxY w Y   t          |          dk    sJ dt          |d         j                  	                                v sJ d S )Nr   r%   lambda x: xzlambda x: x+1r   r   zcannot detect)
r   rZ   r^   r)   r   r	   r+   r   r   lower)r`   r.   a1b1r   s        r!   'test_memory_warning_collision_detectionr   J  s'    V^Q777F	m		B	b		B	o		B	b		B	%	&	& (
1
1
1              
 x==Ac(1+"566<<>>>>>>>>s   3"B!!B%(B%c                     t                      fd}ddl} |j        |d          }t          || j                   dS )z#Test memory with functools.partial.c                 2                         d           |S r   rC   r   r    r-   s     r!   r,   z!test_memory_partial.<locals>.func`  r   r#   r   Nr   )rY   	functoolspartialr1   rZ   )r`   r,   r   functionr-   s       @r!   test_memory_partialr   \  sa    &&K    
  y q))H+v~>>>>>r#   c                     t          | j        d          }t          d          }|                    |          } |d          dk    sJ dS )zESmoke test memory with a function with a function defined in an eval.r   r%   r   r   N)r   rZ   r^   r)   )r`   r.   mmms       r!   test_memory_evalr   l  sK    V^Q777F]A	aB2a55A::::::r#   c                 N    t          |           }|                     d           |S )zsA function with a side effect in its arguments.

    Return the length of its argument and append one element.
    N)r+   rD   )r   len_xs     r!   count_and_appendr   v  s#    
 FFEHHTNNNLr#   c                     t          | j        d          }|                    t                    } |            dk    sJ  |            dk    sJ 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   rZ   r)   r   )r`   r.   r,   s      r!   test_argument_changer     sX     V^Q777F<<())D 466Q;;;; 466Q;;;;;;r#   rT   rR   c                   	 t                      	d	fd	}t          | j        |d          }|                    |          }t          j                            d          }t          d          D ]d}|                    d          }t          d          D ]=}t	          j	         ||          |k              sJ t          	          |dz   k    sJ >edS )	z.Test memory with a function with numpy arrays.Nc                 2                         d           | S rN   rC   rO   s    r!   nztest_memory_numpy.<locals>.n  rQ   r#   r   r&   rT   r'   r(   )rS   rS   r   rB   )rY   r   rZ   r)   r   randomRandomStater*   random_sampleallr+   )
r`   rT   r   r.   cached_nrndr/   r   r0   r-   s
            @r!   test_memory_numpyr     s     &&K      V^y!LLLF||AH
)


"
"C1XX - -h''q 	- 	-A6((1++*+++++{##q1u,,,,,	-- -r#   c                 |   t          | j        dd          }|                                d             }t          j        d          } ||          } ||          }t          |t          j                  sJ |j        dk    sJ t          |t          j                  sJ |j        dk    sJ ~~t          j	                     t          |           t          ||          } ||          }t          |          dk    sJ d}	|	|d         v sJ t          |t          j                  sJ |j        dk    sJ dS )	z8Check that mmap_mode is respected even at the first callrR   r   r   c                     | dz  S Nr   r   r   s    r!   twicez0test_memory_numpy_check_mmap_mode.<locals>.twice      1ur#   r(   r   Exception while loading resultsN)r   rZ   r)   r   ones
isinstancememmapri   gccollectr?   rK   r+   )
r`   monkeypatchr.   r   r   r   crecorded_warningsdexception_msgs
             r!   !test_memory_numpy_check_mmap_moder     sS    V^sAFFFF\\^^  ^ 	

AaAaAa#####6S====a#####6S==== 	
	JLLLf%%% 5UKHHaA !!Q&&&&5M-a00000a#####6S======r#   c                    t          | j        d          } G d dt                    |j        d	fd	            } |             t	          d          D ]4}t                    5   |d           ddd           n# 1 swxY w Y   5dS )
z+Smoketest the exception handling of Memory.r   r%   c                       e Zd ZdS )*test_memory_exception.<locals>.MyExceptionN__name__r_   __qualname__r   r#   r!   MyExceptionr             r#   r   c                     | rd S rB   r   )excr   s    r!   hz test_memory_exception.<locals>.h  s     		 	r#   r(   r   N)r   )r   rZ   	Exceptionr)   r*   r   )r`   r.   r   r0   r   s       @r!   test_memory_exceptionr     s
   V^Q777F    i    \     \
 ACCC1XX  K   	 	AaDDD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   (B  B	B	c                 ~   t          | j        d          }t                      |                    dg          d
fd	            }|j        dgk    sJ  |dd           t                    dk    sJ  |dd           t                    dk    sJ  |dd           t                    dk    sJ d	S )z!Test the ignore feature of memoryr   r%   r    ignorer   c                 2                         d           d S rN   rC   r   s     r!   zztest_memory_ignore.<locals>.z  s    1r#   r    r   Nr   r   rZ   rY   r)   r   r+   )r`   r.   r   r-   s      @r!   test_memory_ignorer     s    V^Q777F&&K\\#\       8uAa1IIII{q    Aa1IIII{q    Aa1IIII{q      r#   c                    t          | j        d          }t                      d }|                    dg          |dfd	                        }|j        dgk    sJ  |dd           t                    dk    sJ  |dd           t                    dk    sJ  |dd	           t                    dk    sJ d
S )z9Test the ignore feature of memory on a decorated functionr   r%   c                 F     t          j                    fd            }|S )Nc                       | i |S rB   r   )argskwargsr"   s     r!   wrappedz?test_memory_ignore_decorated.<locals>.decorate.<locals>.wrapped  s    1d%f%%%r#   )r   wraps)r"   r   s   ` r!   decoratez.test_memory_ignore_decorated.<locals>.decorate  s8    				& 	& 	& 	& 
		& r#   r    r   r   c                 2                         d           d S rN   rC   r   s     r!   r   z'test_memory_ignore_decorated.<locals>.z  s     	1r#   r   r   Nr   r   )r`   r.   r   r   r-   s       @r!   test_memory_ignore_decoratedr     s   V^Q777F&&K   \\#\     X   8uAa1IIII{q    Aa1IIII{q    Aa1IIII{q      r#   c                     t          | j        d          }|j        d             } |d          dk    sJ  |d          dk    sJ  |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                     | dz   S rN   r   r   s    r!   plus_onez,test_memory_args_as_kwargs.<locals>.plus_one  r   r#   r   r   r   r(   N)r   rZ   r)   )r`   r.   r  s      r!   test_memory_args_as_kwargsr    s    
 V^Q777F\  \ 8A;;!8a===A 8a===Ar#   zignore, verbose, mmap_moder   d   rS   c                     t          | j        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'   rT   c                     d S rB   r   r   s    r!   r   z"test_partial_decoration.<locals>.z'  s    r#   N)r   rZ   r)   r   _verboserT   )r`   r   r'   rT   r.   r   s         r!   test_partial_decorationr  "  s     V^Q777F\\I\FF  GF 8v:    ;)######r#   c                    t          | j        d          }t                              d          }|                    d            | j        dg|R  j        }|                    t                    }t          t                    }t          j
                            |j        j        |          }||k    sJ t          j
                            |          sJ |j        t          j
                            |j        j                  k    sJ t          j                     |                                rJ t          j
                            t          j
                            |d                    sJ |                                sJ |                    d          }t          j
                            |j        j        |j        |          } |d          }t          j
                            |          sJ t          j        t          j
                            |d                     | |d          k    sJ d S )	Nr   r%   .r"   rj   zfunc_code.pyr   r3   )r   rZ   r   splitrD   r:   r)   r"   r   r8   r9   r6   r&   existsdirnamer   r]   _check_previous_func_code_get_args_idfunc_idremove)	r`   r.   r9   ra   r  r&   args_id
output_dirr   s	            r!   test_func_dirr  0  s   V^Q777F>>#DKK6;x'$'''/DQA$Q''Gw||AO4g>>Ht7>>$?bgooao.FGGGGGG
 **,,,,,7>>"',,t^<<=====&&((((( nnQGao6	7KKJ	!A7>>*%%%%%Ibgll:|44555!999999r#   c                 j   t          | j        d          }|                    t                    } |d          }t	          j        t	          j        |                    }|                    d          }t          j	        
                    |j        j        |j        |          }t          j	                            |          sJ ||j                            |j        |g          k    sJ t	          j        t	          j        |                    }|j        j        |j        j        k    sJ t          d d          }t	          j        t	          j        |                     |                    t                    }t	          j        t	          j        |                    } |d           d S )Nr   r%   r   )r   rZ   r)   r"   pickleloadsdumpsr  r8   r9   r:   r6   r&   r  r  	load_item)	r`   r.   ra   outputr   r  r  memory2gps	            r!   test_persistencer  P  sU   V^Q777FQAQqTTFV\!__%%AnnQGao6	7KKJ7>>*%%%%%Q_..	7/CDDDDDDl6<//00G(G,A,JJJJJ T1---F
Lf%%&&&QA	fl1oo	&	&BBqEEEEEr#   consider_cache_validc                    t          t          | j        fd          t          | j        d                              t          fd          fD ]}|                    d          }t          |t                    sJ |rJ  |d          dk    sJ |                    d          }t          |t                    sJ |k    sJ |                                 t          t                    }|                    d          rJ d S )Nc                     S rB   r   r0   r  s    r!   r   z*test_check_call_in_cache.<locals>.<lambda>k  s    CW r#   cache_validation_callbackr   r%   c                     S rB   r   r   s    r!   r   z*test_check_call_in_cache.<locals>.<lambda>n  s    3G r#   r      )
r
   r"   rZ   r   r)   check_call_in_cacher   boolr]   r   )r`   r  r,   results    `  r!   test_check_call_in_cacher(  g  s6    	v~9W9W9W9W	
 	
 	
 	22288)G)G)G)G 	9 	
 	
	   ))!,,&$'''''tAww!||||))!,,&$'''''-----

AD''*******r#   c                    t          t          t          | j                  t	          t                    t          | j        d                              t                    t          d                               t                    ft          t          t          t          f          D ]\  }} |d          dk    sJ |	                    d          }t          ||          sJ |                                dk    sJ |                                 t          t                    5  |                                 d d d            n# 1 swxY w Y   |                                 d S )Nr   r%   r&   r   r$  )zipr
   r"   rZ   r   r   r)   r   r   call_and_shelver   getr]   r   KeyError)r`   r,   Resultr'  s       r!   test_call_and_shelver0  ~  s{    !V^,,QFNA666<<Q??D!!!''**		
 
,o?QR   f tAww!||||%%a((&&)))))zz||q    H 	 	JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	# s   (E		E	E	c                    |                      d          }|                    d           t          j        |j                  j        }t          j        d           |                                dk    sJ |t          j        |j                  j        k    rt          j
        d           t          | j        d          }|                    t                    }|                    d          }t          j                             |j        j        |j        |d          } |d          dk    sJ t          j        |          j        }t          j        d	           |                    d          }t)          |t*                    sJ t          j        |          j        |k    sJ t          j        d	           |                                dk    sJ t          j        |          j        |k    sJ d
S )z6Check call_and_shelve only load stored data if needed.test_access      ?z>filesystem does not support fine-grained access time attributer   r%   r   r3   r$  r   N)r:   r<   r8   statrZ   st_atimer   r   readpytestskipr   r)   r"   r  r9   r6   r&   r  r,  r   r   r-  )	r`   test_access_time_filetest_access_timer.   r,   r  result_pathfirst_access_timer'  s	            r!   .test_call_and_shelve_lazily_load_stored_resultr=    s   "KK66...w4<==F 	JsOOO %%''=888827#8#@AAJJJ 	TUUUV^Q777F<<??D""G',,%t|Wl K 477a<<<<,,5JqMMM !!!$$Ffo.....7;(,=====JqMMM ::<<17;(+<<<<<<<r#   c                 8   t          t          | j                  t          t                    fD ]}|                     d          j        }|                    d          }t          |d          5 }t          j        ||           d d d            n# 1 swxY w Y   t          |d          5 }t          j	        |          }d d d            n# 1 swxY w Y   |
                                |
                                k    sJ t          j        |           d S )Nzpickling_test.datr   wbrb)r
   r"   rZ   r   r:   r,  r;   r  dumploadr-  r8   r  )r`   r,   rh   r'  fpresult2s         r!   test_memorized_picklingrE    st   q&.113CA3F3FG  ;;233;%%a(((D!! 	$RK###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$(D!! 	&Rk"ooG	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&{{}}

,,,,
	( s$   0BB	B	-CC	C	c                 X   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          j                              }|                    d          }|                                 t          t          | j        d          }|                    d          }|                                 t          t          | j        dt          j                              }|                    d          }|                                 t          t          | j        d          }|                    d          }|                                 d S )Nr      )r'   	timestamp)r'   r$  )r
   r"   rZ   r,  r-  reprr   r   )r`   r,   r'  func2rD  s        r!   test_memorized_reprrK    s   FN++D!!!$$F!V^,,E##A&&G::<<7;;==((((::e$$$$ ADJJJ		a	 	 !!! FNB$)++NNND!!"%%F
JJLLLFNB777D!!"%%F
JJLLLFNAMMMD!!"%%F
JJLLLFNA666D!!"%%F
JJLLLLLr#   c                    |                     d          j        }t          j                            |d          }d}t          |d          5 }|                    |           d d d            n# 1 swxY w Y   |                    |           dd l}t          |j        d          }|
                    |j                  }	 |	d            |	d            |	d           t          |d          5 }|                    d	|z              d d d            n# 1 swxY w Y    |	d            |	d           t          j        |           t          j         |           d
}t          |d          5 }|                    |           d d d            n# 1 swxY 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
r4   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
)mkdirrZ   r8   r9   r:   r;   r<   syspath_prependrN  r   r)   r"   r[   r\   sysstdoutmodulespop
readouterr)capsysr`   r   dir_namerh   contentmodule_filetmpr.   r"   rc   errs               r!   test_memory_file_modificationr\    s    ||L))1Hw||H&677H7G	h		 #'"""# # # # # # # # # # # # # # # )))V^Q777FSUAAaDDDAaDDDAaDDD 
h		 ,&7*+++, , , , , , , , , , , , , , , AaDDDAaDDD M(HX@G	h		 #'"""# # # # # # # # # # # # # # # AaDDDAaDDD J]###KOOM"""SUA AaDDDAaDDD  ""HC*******s6   A//A36A34DD D4FFFc                     d S rB   r   r   r   s     r!   _function_to_cacher_    s    Dr#   c                     | |z   S rB   r   r^  s     r!   _sumra  #      q5Lr#   c                     | |z  S rB   r   r^  s     r!   _productrd  '  rb  r#   c                    t           j        t          _        t          | j        d          }|                    t                    } |dd          dk    sJ  |dd          dk    sJ t          t                    5  t          j        t          _         |dd          dk    sJ  |dd          dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r%   r   r   r(   )	ra  r|   r_  r   rZ   r)   r   r	   rd  )r`   r.   r"   s      r!   *test_memory_in_memory_function_code_changerf  +  s   "&-V^Q777F'((A1Q77a<<<<1Q77a<<<<	%	&	&  &.&7#qAww!||||qAww!|||||	                 s   ?;CCCc                  N    t          d           } |                                  d S )Nr*  )r   r]   )r.   s    r!   $test_clear_memory_with_none_locationrh  ;  s#    T"""F
LLNNNNNr#   kw1kw2ri  rj  c                    | |||fS rB   r   )r   r   ri  rj  s       r!   func_with_kwonly_argsrm  @  s    ac>r#   r   r   returnc                     | |z   S rB   r   r^  s     r!   func_with_signaturerp  D  rb  r#   c                 z   t          | j        d          }|                    t                    } |ddd          dk    sJ t	          t
                    5 } |dddd	           d d d            n# 1 swxY w Y   |                    d
            |dddd           t	          t
                    5 } |dddd	           d d d            n# 1 swxY w Y   |                    d
           |                    t          dg          } |dddd          dk    sJ  |dddd          dk    sJ d S )Nr   r%   r   r   r(   )ri  )r   r   r(   rj  rw   )rj  z?Keyword-only parameter 'kw1' was passed as positional parameterrk  rj  r   )r   r   r(   rw   ignored)r   rZ   r)   rm  r   
ValueErrormatch)r`   r.   func_cachedexcinfos       r!   !test_memory_func_with_kwonly_argsrw  H  s   V^Q777F,,455K;q!###'77777 

		 $wAq!####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $MMSTTT K1!####	
		 $wAq!####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $MMSTTT ,,4eW,EEK;q!***l::::;q!	222lBBBBBBs$   A55A9<A98CCCc                     t          | j        d          }|                    t                    } |dd          dk    sJ d S )Nr   r%   r   g       @g      @)r   rZ   r)   rp  )r`   r.   ru  s      r!   test_memory_func_with_signaturery  b  sK    V^Q777F,,233K;q##%%%%%%r#   c                 &   t          | j        d          }|                                d             t          t	          |                    }|D ]} |           t                    fd|D             }fd|D             }||fS )Nr   r%   c                     dS )N  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   rP   s    r!   get_1000_bytesz(_setup_toy_cache.<locals>.get_1000_bytesl  s    zr#   c                 :    g | ]}                     |          S r   )r  )rp   rP   r~  s     r!   
<listcomp>z$_setup_toy_cache.<locals>.<listcomp>u  s'    HHH#^0055HHHr#   c                 f    g | ]-}t           j                            j        j        |          .S r   )r8   r9   r:   r6   r&   )rp   r  r  r~  s     r!   r  z$_setup_toy_cache.<locals>.<listcomp>w  sA        	^1:GWMM  r#   )r   rZ   r)   rY   r*   r   )	r`   
num_inputsr.   inputsrP   hash_dirnamesfull_hashdirsr  r~  s	          @@r!   _setup_toy_cacher  i  s    V^Q777F\\^^  ^ %
##$$F  s$^44GHHHHHHHM    $  M =.00r#   c                 ^   t          |           \  }}}|j                                        }d |D             }t          |          t          |          k    sJ d fd|D             }d |D             }||k    sJ d |D             }d |D             }	d |D             }
|
|	k    sJ d S )Nc                     g | ]	}|j         
S r   )r9   rp   cis     r!   r  z#test__get_items.<locals>.<listcomp>  s    )))R)))r#   c                 v      fdt          j                   D             }t          d |D                       S )Nc                 P    g | ]"}t           j                            |          #S r   r8   r9   r:   )rp   fn	directorys     r!   r  z;test__get_items.<locals>.get_files_size.<locals>.<listcomp>  s)    RRRbbgll9b11RRRr#   c              3   T   K   | ]#}t           j                            |          V  $d S rB   )r8   r9   getsize)rp   rC  s     r!   rr   z:test__get_items.<locals>.get_files_size.<locals>.<genexpr>  s0      <<227??2&&<<<<<<r#   )r8   r~   sum)r  
full_pathss   ` r!   get_files_sizez'test__get_items.<locals>.get_files_size  sC    RRRRBJy<Q<QRRR
<<<<<<<<r#   c                 &    g | ]} |          S r   r   )rp   hash_dirr  s     r!   r  z#test__get_items.<locals>.<listcomp>  s#     T T Th!9!9 T T Tr#   c                     g | ]	}|j         
S r   )sizer  s     r!   r  z#test__get_items.<locals>.<listcomp>  s    000B000r#   c                 N    g | ]"}t           j                            |d           #S )r3   r  )rp   r  s     r!   r  z#test__get_items.<locals>.<listcomp>  s(    WWWX|<<WWWr#   c                     g | ]>}t           j                             t          j                            |                    ?S r   )datetimefromtimestampr8   r9   getatime)rp   r  s     r!   r  z#test__get_items.<locals>.<listcomp>  sF       BD''(8(8(<(<==  r#   c                     g | ]	}|j         
S r   last_accessr  s     r!   r  z#test__get_items.<locals>.<listcomp>  s    444R^444r#   )r  r6   r7   set)r`   r.   expected_hash_dirsr0   items	hash_dirsexpected_hash_cache_sizeshash_cache_sizesoutput_filenamesexpected_last_accesseslast_accessesr  s              @r!   test__get_itemsr  ~  s   $4V$<$<!F **,,E))5)))Iy>>S!3444444= = = !U T T T) T T T00%00088888WWYWWW HX   54e444M2222222r#   c                    t          | d          \  }}}|j                            d          }|g k    sJ t          |           \  }}}|j                                        }|j                            d          }t	          |          }t
                              t          |          t          |                    sJ t	          |          |dz
  k    sJ |j                            d          }t          |          t          |          k    sJ |j                            d          }|g k    sJ d}	|j                            |	          }
t          |
          sJ t          |                      |j                            d	          }t          |                              |          }t          d
 |D                       t          d |D                       k    sJ d S )Nr   )r  1K2Kr   i   1M  ip  c              3   $   K   | ]}|j         V  d S rB   r  r  s     r!   rr   z,test__get_items_to_delete.<locals>.<genexpr>  s$      >>"r~>>>>>>r#   c              3   $   K   | ]}|j         V  d S rB   r  r  s     r!   rr   z,test__get_items_to_delete.<locals>.<genexpr>  s=       F FF F F F F Fr#   )r  r6   _get_items_to_deleter7   r+   r  issubsetsorted
differencemaxmin)r`   r.   r0   items_to_deleteexpected_hash_cachedirsr  	nb_hashesitems_to_delete_2048bitems_to_delete_emptybytes_limit_too_smallitems_to_delete_500bitems_to_delete_6000bsurviving_itemss                r!   test__get_items_to_deleter    s   #Fq999LFAq*??EEOb    )9&)A)A&F#Q **,,E *??EEO+,,I<<O,,c%jj999999q=0000 #0EEdKK/""f-B&C&CCCCC #0EEdKK B&&&&  !/DD  #$$00c%jj000 #0EEdKK%jj++,ABBO>>(=>>>>># F F!0F F F C C      r#   c                    t          |           \  }}}|j                                        }|                                 |j                                        }t	          |          t	          |          k    sJ |                    d           |j                                        }t	          |          t	          |          k    sJ |                    d           |j                                        }t
                              t          |          t          |                    sJ t          |          dk    sJ d}|                    |           |j                                        }|g k    sJ d S )Nr  )bytes_limit3Kr   r  r  r6   r7   reduce_sizer  r  r  r+   )r`   r.   r0   ref_cache_itemscache_itemsr  s         r!   #test_memory_reduce_size_bytes_limitr    s{   #F++LFAq*4466O &0022K/""f[&9&99999 4(((&0022K/""f[&9&99999 4(((&0022K<<K((#o*>*>?????{q      
#8999&0022K"r#   c                    t          |           \  }}}|j                                        }|                                 |j                                        }t	          |          t	          |          k    sJ |                    d           |j                                        }t	          |          t	          |          k    sJ |                    d           |j                                        }t
                              t          |          t          |                    sJ t          |          dk    sJ |                    d           |j                                        }|g k    sJ d S )NrS   )items_limitr   r   r  )r`   r.   r0   r  r  s        r!   #test_memory_reduce_size_items_limitr    st   #F++LFAq*4466O &0022K/""f[&9&99999 2&&&&0022K/""f[&9&99999 1%%%&0022K<<K((#o*>*>?????{q     1%%%&0022K"r#   c                    dd l }dd l}t          |           \  }}}|j                                        }|                                 |j                                        }t          |          t          |          k    sJ |                     |j        d                     |j                                        }t          |          t          |          k    sJ  |j        d            |d            |d           |                     |j        d                     |j                                        }t          
                    t          |          t          |                    rJ t          |          dk    sJ t          j        t          d	
          5  |                     |j        d                     d d d            n# 1 swxY w Y    |j        d           |                     |j        d                     |j                                        }|g k    sJ d S )Nr   r   )days)	age_limitsecondsr   zhas to be a positivert  gMbP?)r  r   r  r6   r7   r  r  	timedeltar   r  r  r+   r7  r   rs  )r`   r  r   r.   r0   	put_cacher  r  s           r!   !test_memory_reduce_size_age_limitr    s   OOOKKK+F33FAy*4466O &0022K/""f[&9&99999 !3!3!;!;!;<<<&0022K/""f[&9&99999 DJqMMMIbMMMIbMMM
!3!3A!>!>!>???&0022K||C,,c/.B.BCCCCC{q     
z)?	@	@	@ E E%7X%7%C%C%CDDDE E E E E E E E E E E E E E E DJu
!3!3A!>!>!>???&0022K"s   /&G!!G%(G%c                     t          |           \  }}}|                                 t          j        |j        j                  g k    sJ |                    d          rJ d S )Nrw   )
stacklevel)r  r]   r8   r~   r6   r&   r  )r`   r.   r0   ra   s       r!   test_memory_clearr    sh    #F++LFAq
LLNNN:f*344:::: **a*8888888r#   c                      dgdz  } | S )Nr|  i  r   )complex_objs    r!   fast_func_with_complex_outputr  #  s    ,%Kr#   c                 Z    d t          t          d                    D             }| r|ndS )Nc                 .    i | ]}t          |          |S r   )r   )rp   r/   s     r!   
<dictcomp>z=fast_func_with_conditional_complex_output.<locals>.<dictcomp>)  s     6663q661666r#   g     j@zsimple output)r*   int)complex_outputr  s     r!   )fast_func_with_conditional_complex_outputr  (  s0    66eCHHoo666K(=;;o=r#   c                    t          | j                  }|                    t                     t	          d          fdt          d          D                        |                                \  }}d}||vsJ ||vsJ d S )Nr*  r   rk   c              3   F   K   | ]} t                                V  d S rB   rn   rp   r/   ru  s     r!   rr   zMtest_cached_function_race_condition_when_persisting_output.<locals>.<genexpr>5  s4      @@!+w{++--@@@@@@r#   r(   r   )r   rZ   r)   r  r   r*   rU  r`   capfdr.   rR  stderrr   ru  s         @r!   :test_cached_function_race_condition_when_persisting_outputr  -  s    
 V^,,,F,,<==KHA@@@@uQxx@@@@@@%%''NFF
 6M&&&&&&&&&&r#   c                    t          | j                  }|                    t                     t	          d          fdt          d          D                        |                                \  }}d}||vsJ ||vsJ d S )Nr*  r   rk   c              3   ^   K   | ]'} t                    |d z  dk    rdnd          V  (dS )r   r   TFNrn   r  s     r!   rr   zOtest_cached_function_race_condition_when_persisting_output_2.<locals>.<genexpr>K  sW        @AQUaZZTTU;;     r#   r(   r   )r   rZ   r)   r  r   r*   rU  r  s         @r!   <test_cached_function_race_condition_when_persisting_output_2r  A  s     V^,,,F,,HIIKHA    EJ1XX      %%''NFF
 6M&&&&&&&&&&r#   c                 @   t          | j                  }d }|                    |          }d} ||          \  }}||k    sJ t          |           t	          ||          } ||          \  }	}
t          |          dk    sJ d}||d         v sJ |	|k    sJ |
|k    sJ t          |           |                    |          }	 |                                 t          d          # t          $ r%}d}|t          |j                  v sJ Y d }~d S d }~ww xY w)	Nr*  c                 T    t          j        d           | t          j                     fS )Ng{Gz?r   r   r}  s    r!   r,   zItest_memory_recomputes_after_an_error_while_loading_results.<locals>.func\  s%     	
4DIKKr#   rP   r   r   r   z<It normally not possible to load a corrupted MemorizedResultzis corrupted)r   rZ   r)   r?   rK   r+   r,  r-  AssertionErrorr.  r   r   )r`   r   r.   r,   cached_func	input_argrP   rH  r   recomputed_argrecomputed_timestampr   	referenceer   s                  r!   ;test_memory_recomputes_after_an_error_while_loading_resultsr  Y  s   V^,,,F      ,,t$$KI [++NC ) f%%% 5[+NN+6;s+;+;(N( !!Q&&&&5M-a00000S    )++++ f%%%++C00I&J
 
 	
  & & & #af++%%%%%%%%%%&s   #C. .
D8DDc                       e Zd ZdZdS )IncompleteStoreBackendzAThis backend cannot be instantiated and should raise a TypeError.N)r   r_   r   __doc__r   r#   r!   r  r    s        KKDr#   r  c                   B    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )DummyStoreBackendz(A dummy store backend that does nothing.c                     dS )zOpen an item on store.Nr   )selfr   r   s      r!   
_open_itemzDummyStoreBackend._open_item      r#   c                     dS )z!Check if an item location exists.Nr   r  r&   s     r!   _item_existszDummyStoreBackend._item_exists  r  r#   c                     dS )z&Move an item from src to dst in store.Nr   )r  srcdsts      r!   
_move_itemzDummyStoreBackend._move_item  r  r#   c                     dS )zCreate location on store.Nr   r  s     r!   create_locationz!DummyStoreBackend.create_location  r  r#   c                     dS )z&Check if an object exists in the storeFr   r  objs     r!   r  zDummyStoreBackend.exists  s    ur#   c                     dS )zClear object on storeNr   r  s     r!   clear_locationz DummyStoreBackend.clear_location  r  r#   c                     g S )z3Returns the whole list of items available in cache.r   )r  s    r!   r7   zDummyStoreBackend.get_items  s    	r#   c                     dS )zConfigure the storeNr   )r  r&   r   r   s       r!   	configurezDummyStoreBackend.configure  r  r#   N)r   r_   r   r  r   r  r  r
  r  r  r7   r  r   r#   r!   r  r    s        22                  r#   r  invalid_prefixc                     t          t                    5 }t          | d            d d d            n# 1 swxY w Y   |                    d           d S )Nz&Store backend name should be a string*r   rs  r   rt  )r  rv  s     r!   (test_register_invalid_store_backends_keyr    s     

		 5w~t4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5MM;<<<<<   266c                      t          t                    5 } t          dd            d d d            n# 1 swxY w Y   |                     d           d S )Nfsz.Store backend should inherit StoreBackendBase*r  rv  s    r!   +test_register_invalid_store_backends_objectr    s     

		 +wtT***+ + + + + + + + + + + + + + +MMCDDDDDr  c                      t          t                    5 } t          dd           d d d            n# 1 swxY w Y   |                     d           d S )Nz/tmp/joblibunknown)r&   backendzUnknown location*)r   	TypeErrorr   rt  r  s    r!   !test_memory_default_store_backendr     s    				 :gy9999: : : : : : : : : : : : : : :MM&'''''s   377c                       G d d          }  |             }t          t                    5 }t          d|           d d d            n# 1 swxY w Y   d}|t          |d         j                  v sJ d S )Nc                       e Zd ZdS )Htest_warning_on_unknown_location_type.<locals>.NonSupportedLocationClassNr   r   r#   r!   NonSupportedLocationClassr#    r   r#   r$  localr*  zbInstantiating a backend using a NonSupportedLocationClass as a location is not supported by joblibr   )r   UserWarningr   r   r   )r$  unsupported_locationr   expected_mesages       r!   %test_warning_on_unknown_location_typer)    s            5466	{		 Gxw1EFFFFG G G G G G G G G G G G G G G	 
 c(1+"566666666s   A

AAc                     d} t          | t                     | t          ft          j                    v sJ t	          t
                    5 }t          | d           d d d            n# 1 swxY w Y   |                    d           d S )Nisbfake_locationznCan't instantiate abstract class IncompleteStoreBackend (without an implementation for|with) abstract methods*)r   r  r   r  r   r  r   rt  )backend_namerv  s     r!   )test_instanciate_incomplete_store_backendr.    s     L<)?@@@01_5J5L5LLLLL				 >g|_===> > > > > > > > > > > > > > >MM	A    s   
A''A+.A+c                      d} t          | t                     | t          ft          j                    v sJ t	          | d          }t          |t                    sJ d S )Ndsbdummy_location)r   r  r   r  r   r   )r-  backend_objs     r!   test_dummy_store_backendr3    sg     L<):;;;+,0E0G0GGGGG(7GHHKk#45555555r#   c                      t          d          } t          d|           }	 |j        dk    sJ 	 t          j        dd           d S # t          j        dd           w xY w)Nsome_folderr%  TrV   )r   r   r&   r[   r\   )r9   r2  s     r!   0test_instanciate_store_backend_with_pathlib_pathr6    sp    D($77K9#}44444m4888888m488888s   A Ac                 V   d}t                      }|j        J t          |           t          |          |                    d           k    sJ |                    | j                   t          |          |                    | j                  k    sJ t          |           d S )Nz-FileSystemStoreBackend(location="{location}")r*  )r   r&   rI  r   rx   r  rZ   )r`   repr_patternr  s      r!   "test_filesystem_store_backend_reprr9    s     CL$&&G###MMMw<<<...====== fn%%%w<<<...GGGGGGMMMMMr#   c                    d }t          | j        d          }|                    |          }d}t          |          |                    ||j        j                  k    sJ |                    dd          }d}t          |          |                    |j        j        |j        |j	                  k    sJ t          |          d	                    |j        j        
          k    sJ d S )Nc                     | |z   S rB   r   r^  s     r!   my_funcz)test_memory_objects_repr.<locals>.my_func  s    1ur#   r   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   rZ   r)   r   rx   r6   r&   r,  r  r  )r`   r<  r.   memorized_funcmemorized_func_reprmemorized_resultmemorized_result_reprs          r!   test_memory_objects_reprrB    s=      V^Q777F\\'**NK~"5"<"<v3< #= # #     &55b"== 	U    $9$@$@%.% ( %A % %     v;;7>>%. ?        r#   c                    t          | j                  }|j        d             }|                    d          }t	          j        |          }t	          j        |          }|j        j        |j        j        k    sJ |j	        |j	        k    sJ |j
        |j
        k    sJ t          |          t          |          k    sJ d S )Nr*  c                     | dz  S r   r   r   s    r!   ra   z'test_memorized_result_pickle.<locals>.g6      !tr#   rw   )r   rZ   r)   r,  r  r  r  r6   r&   r,   r  r   )r`   r.   ra   r@  memorized_result_picklememorized_result_loadss         r!   test_memorized_result_picklerH  /  s    
 V^,,,F\  \ ((++$l+;<<#\*ABB 	&/!/8	9 	9 	9 	9  $:$?????#'='EEEEE  C(>$?$???????r#   c                 6   |g }t          |           }t          |          }t          |                                          t          |                                          k    sJ |                                D ]}||v r||         ||         k    sJ d S rB   )varsr  keys)leftrightignored_attrs	left_vars
right_varsattrs         r!   comparerR  G  s    T

IeJy~~  C
(9(9$:$:::::   3 3=  *T"2222223 3r#   memory_kwargsr(   r   )rU   r'   r$  	parameterunused)rT   r'   backend_optionsc                    t          dd| j        i|}t          j        t          j        |                    }t          |j        |j                   t          ||t          g d                     t          |          t          |          k    sJ |	                    t                    }t          j        t          j        |                    }t          |j        |j                   t          ||t          g d                     t          |          t          |          k    sJ |                    d          }t          j        t          j        |                    }t          |j        |j                   t          ||t          g d                     t          |          t          |          k    sJ d S )Nr&   )r6   rH  _func_code_id)rN  r   r   )r   rZ   r  r  r  rR  r6   r  r   r)   r"   r,  )r`   rS  r.   memory_reloadedru  func_cached_reloadedr@  memorized_result_reloadeds           r!   test_memory_pickle_dump_loadr\  T  s    ==V^=}==Fl6<#7#788O F /"?@@@IIIJJ   
 <<4000000,,q//K!<[(A(ABB K%';'IJJJIIIJJ   
 %9 : ::::: #22155 &V\:J-K-K L L*,E,STTT!IIIJJ   
  !!T*C%D%DDDDDDDr#   c                    |                     t          j                   d}t          | j        d          }|j        d             } ||          }d|j        v sJ |                                 t          | j        d          }|j        d             } ||          }d|j        vsJ |                                 d S )Nr(      r%   c                     | dz  S r   r   r   s    r!   r"   ztest_info_log.<locals>.f  rE  r#   Queryingr   c                     | dz  S r   r   r   s    r!   r"   ztest_info_log.<locals>.f  rE  r#   )	set_levelloggingINFOr   rZ   r)   textr]   )r`   caplogr   r.   r"   r0   s         r!   test_info_logrg    s    
W\"""	AV^R888F\  \ 	
!A$$$$
LLNNNV^Q777F\  \ 	
!AV[((((
LLNNNNNr#   c                   x    e Zd ZdZddZd Zej                            dddg          d             Z	d	 Z
d
 ZdS )TestCacheValidationCallbackz.Tests on parameter `cache_validation_callback`Nc                 B    d|d<   |t          j        |           |dz  S )NTrunr   r  )r  r   r   delays       r!   foozTestCacheValidationCallback.foo  s*    %Ju1ur#   c                     d}t          j        t          |          5  |                    d           ddd           dS # 1 swxY w Y   dS )z2Test invalid values for `cache_validation_callbackz9cache_validation_callback needs to be callable. Got True.r  Tr!  N)r7  r   rs  r)   )r  r.   rt  s      r!   &test_invalid_cache_validation_callbackzBTestCacheValidationCallback.test_invalid_cache_validation_callback  s    K]:U333 	9 	9LL4L888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   AA	Ar  TFc                     |                     | j        fddg          }ddiddi}} |d|          dk    sJ  |d|          dk    sJ |d         sJ |d         k    sJ dS )	zTest expiry of old resultsc                     S rB   r   r   s    r!   r   zUTestCacheValidationCallback.test_constant_cache_validation_callback.<locals>.<lambda>  s    0D r#   r   r"  r   rk  Fr   rw   Nr)   rm  )r  r.   r  r"   d1d2s     `   r!   'test_constant_cache_validation_callbackzCTestCacheValidationCallback.test_constant_cache_validation_callback  s     LLH&D&D&D&D5  
 
 %BqBxx1}}}}qBxx1}}}}%y%y0000000r#   c                 X   d }|                     | j        |dg          }ddiddi}} |d|d          d	k    sJ  |d|d          d	k    sJ |d         sJ |d         sJ ddiddi}} |d|d
          d	k    sJ  |d|d
          d	k    sJ |d         sJ |d         rJ dS )z*Test cache validity based on run duration.c                 &    | d         }|dk    rdS d S )Ndurationg?Tr   )metadatary  s     r!   r"  z^TestCacheValidationCallback.test_memory_only_cache_long_run.<locals>.cache_validation_callback  s!    
+H#~~t ~r#   r   rr  rk  Fr   r   )rl  rw   rv   Nrs  )r  r.   r"  r"   rt  ru  s         r!   test_memory_only_cache_long_runz;TestCacheValidationCallback.test_memory_only_cache_long_run  s-   	 	 	
 LLH0ISVRW  
 

 %BqBa   A%%%%qBa   A%%%%%y%y %BqBc"""a''''qBc"""a''''%ye9r#   c                 F   |                     | j        t          d          dg          }ddiddiddi}}} |d|          dk    sJ  |d|          dk    sJ t          j        d	            |d|          dk    sJ |d         sJ |d         rJ |d         sJ d
S )z!Test expiry of old cached resultsg333333?r  r   rr  rk  Fr   rw   r3  N)r)   rm  r   r   r   )r  r.   r"   rt  ru  d3s         r!   test_memory_expires_afterz5TestCacheValidationCallback.test_memory_expires_after  s     LLHc0J0J0JTWSX  
 
 U^eU^eU^BqBxx1}}}}qBxx1}}}}
3qBxx1}}}}%ye9%yr#   rB   )r   r_   r   r  rm  ro  r7  markr   rv  r{  r~  r   r#   r!   ri  ri    s        44   9 9 9 [3dE]CC1 1 DC1  4    r#   ri  c                   4    e Zd ZdZed             Zd Zd ZdS )TestMemorizedFunc8Tests for the MemorizedFunc and NotMemorizedFunc classesc                 J    |                     | d          dz   || <   ||          S )Nr   r   )r-  )r   counters     r!   r"   zTestMemorizedFunc.f  s(    [[A&&*
qzr#   c                    |                     | j        dg          }i } |d|          dk    sJ  |d|          dk    sJ |                    d|          \  }}|dk    s
J d            t          |t                    s
J 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r  r.   r"   r  r   metas         r!   test_call_method_memorizedz,TestMemorizedFunc.test_call_method_memorized  s     LLL44qG}}!!!!qG}}!!!!&&G$$4Avvv7vvv$%% 	
 	
>	
 	
 	
 	
 	
r#   c                 
   t          | j                  }i } |d|          dk    sJ  |d|          dk    sJ |                    d|          \  }}|dk    s
J d            t          |t                    s
J d            dS )r  r   r   r(   r  r  N)r   r"   r  r   r  r  s         r!   test_call_method_not_memorizedz0TestMemorizedFunc.test_call_method_not_memorized  s     TV$$qG}}!!!!qG}}!!!!&&G$$4Avvv7vvv$%% 	
 	
>	
 	
 	
 	
 	
r#   N)r   r_   r   r  staticmethodr"   r  r  r   r#   r!   r  r    sQ        >>  \
 
 

 
 
 
 
r#   r  c                       e Zd ZdZd Zd ZdS )TestAutoGitignorer  c                    t          |                    d                    }t          |          }|                    t                    } |d           |dz  }|                                sJ |                                dk    sJ dS )zsTest that using the memory object automatically creates a `.gitignore` file
        within the new cache directory.test_cache_dirr   
.gitignorez%# Created by joblib automatically.
*
N)r   rO  r   r)   idr  	read_text)r  r`   r&   memcostly_operationgitignore_files         r!   test_memory_creates_gitignorez/TestAutoGitignore.test_memory_creates_gitignore  s     %56677X99R==!L0$$&&&&&''))-VVVVVVVr#   c                 F   t          |                    d                    }|dz  }d}|                    |           t          |          } |                    t
                    d           |                                sJ |                                |k    sJ dS )zvTest that using the memory object does not overwrite an existing
        `.gitignore` file within the cache directory.r  r  z# Existing .gitignore file!r   N)r   rO  
write_textr   r)   r  r  r  )r  r`   r&   r  existing_contentr  s         r!   1test_memory_does_not_overwrite_existing_gitignorezCTestAutoGitignore.test_memory_does_not_overwrite_existing_gitignore  s     %56677!L08!!"2333 X		"a$$&&&&&''))-=======r#   N)r   r_   r   r  r  r  r   r#   r!   r  r    s;        >>W W W> > > > >r#   r  r   )rS   )TrB   )wr  r  r   r   rc  r8   os.pathr  r[   rQ  rz   r   pathlibr   r7  joblib._store_backendsr   r   joblib.hashingr   joblib.memoryr   r   r	   r
   r   r   r   r   r   r   r   r   joblib.parallelr   r   joblib.test.commonr   r   r   joblib.testingr   r   r   r"   r1   r?   rK   rd   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r(  r0  r=  rE  rK  r\  r_  ra  rd  rf  rh  rm  r  floatrp  rw  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rY   r  r  r   r)  r.  r3  r6  r9  rB  rH  rR  r\  rg  ri  r  r  r   r#   r!   <module>r     s         				  				    



          K K K K K K K K                                  . - - - - - - - C C C C C C C C C C 5 5 5 5 5 5 5 5 5 5
   - - -     + + +\ #dE]33fA fA 43fAR; ; ; $ $ $ 	J 	J 	J3 3 34   ? ? ?$? ? ?           [4+&&- - '& -& $ $ $N  *! ! !&! ! !6  ( )cUC,=B~+NOO
$ 
$ PO
$  @
 
 
. /$??+ + @?+,  .!= != !=H	 	 	  @6+ 6+ 6+r	 	 	
         
 (-%     3 5 U    C C C4& & &1 1 1 1*3 3 3.% % %P  8  6" " "J9 9 9  
> > > >
 ' ' '& ' ' '.*& *& *&Z	 	 	 	 	- 	 	 	! ! ! ! !( ! ! !H ddffddff566= = 76=E E E( ( (7 7 7"  6 6 69 9 9  (  @@ @ @0
3 
3 
3 
3 1%%a[(<STT %E %E %EP  2H H H H H H H HV$
 $
 $
 $
 $
 $
 $
 $
N >  >  >  >  >  >  >  >  >  >r#   