
    7Th              	          S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKJrJr  SSKJr  SSKJrJrJrJrJrJrJrJrJrJrJrJr  SSK J!r!J"r"  SSK#J$r$J%r%J&r&  SSK'J(r(J)r)J*r*  SnS	 jr+S
 r,S r-S r.S r/\(" SSS/5      S 5       r0S r1S r2S r3S r4S r5S r6S r7S r8/ 4S jr9S r:\&\(" SSS/5      S 5       5       r;\&S 5       r<S  r=S! r>S" r?S# r@\(" S$S%/S&S4/ S'S4/5      S( 5       rAS) rBS* rC\R                  RQ                  S+SS/5      S, 5       rES- rFS. rGS/ rHS0 rIS1 rJS2 rKS3 rLS4 rMS5 rNS6 rOS7S8S9.S: jrPS;\QS<\RS=\R4S> jrSS? rTS@ rUSoSA jrVSB rWSC rXSD rYSE rZSF r[SG r\SH r]SpSI jr^\%SJ 5       r_\%SK 5       r`SL ra " SM SN\5      rb " SO SP\5      rc\(" SQS\d" 5       \e" 5       /5      SR 5       rfSS rgST rhSU riSV rjSW rkSX rlSY rmSZ rnS[ roSqS\ jrp\R                  RQ                  S]S^S_S`.SSaSbSc0Sd./5      Se 5       rqSf rr " Sg Sh5      rs " Si Sj5      rt\&\(" SkSl\R                  " Sl5      \R                  " Sl5      R                  5       /5      Sm 5       5       rwg)rz
Test the memory module.
    N)FileSystemStoreBackendStoreBackendBase)hash)_FUNCTION_HASHES_STORE_BACKENDSJobLibCollisionWarningMemorizedFuncMemorizedResultMemoryNotMemorizedFuncNotMemorizedResult_build_func_identifier_store_backend_factoryexpires_afterregister_store_backend)Paralleldelayed)npwith_multiprocessing
with_numpy)parametrizeraiseswarnsc                     U S-  U-   $ )z-A module-level function for testing purposes.    )xys     O/var/www/auris/envauris/lib/python3.13/site-packages/joblib/test/test_memory.pyfr    /   s    a4!8O    c                     [        USS9nUR                  U 5      n [        S5       H7  n[        S5       H%  nU " U5      U:X  d   e[        U5      US-   :X  a  M%   e   M9     g)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      N)r   cacherangelen)funcaccumulatorr$   memoryi_s         r   check_identity_lazyr0   6   sa     Xq1F<<D1XqA7a<<{#q1u,,,  r!   c                     U R                   R                  5       u  n[        R                  R	                  UR                  S5      n[        US5       nUR                  S5        S S S 5        g ! , (       d  f       g = f)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   sY    !//99;ggll#4#9#9<HO	os	#q		 
$	#	#s   A..
A<c                 >   ^ / mU4S jnUR                  U SU5        T$ )Nc                 (   > TR                  U 5        g Nappend)itemrecordeds    r   append_to_record6monkeypatch_cached_func_warn.<locals>.append_to_recordS   s    r!   warn)setattr)r+   monkeypatch_fixturerF   rE   s      @r   monkeypatch_cached_func_warnrK   L   s)    
 H f.>?Or!   c           	      <  ^ [        5       mU4S jn[        UTU R                  5        S H  nS Hs  n[        U R                  SUUS9n[        R
                  " U R                  SS9  UR                  U5      nU" S5        UR                  S	S
9  [        T5      nU" S5      nMu     [        T5      WS-   :X  d   eWR                  US5      W:X  d   e[        T5      US-   :X  a  M   e   SUl
        [        U R                  SS9nUR                  U5      " S5        g)z&Simple test of memory lazy evaluation.c                 *   > TR                  S5        U $ Nr'   rB   argr,   s    r   r    "test_memory_integration.<locals>.fc       1
r!   )FT)rN
   )r$   r%   	mmap_modecompressTignore_errorsr'   F)rH   __main__r   r#   N)listr0   strpathr   shutilrmtreer(   clearr*   eval
__module__)	tmpdirr    rV   rU   r-   gcurrent_accumulatoroutr,   s	           @r   test_memory_integrationre   \   s   &K
 ;7 "$I#!	F MM&..=QAaDGGG"%k"2A$C# %& ;#6#::::{{1a C''';#6#::::/ "6 ALV^^Q7F
LLOAr!   call_before_reducingTFc           	      X  ^ S GH  nSnSR                  U5      n0 n[        [        [        R                  " U5      USS9S U5        US   nSUl        U" S5      S:X  d   eUR                  R                  U:X  d   e[        U R                  S	S
9nUR                  U5      m[        [        R                  " U S-  5      5      S:X  d   e[        R                  " U S-  5      S	   nSU;   d   eU S-  U-  n	US	:X  GaQ  [        R                  " U	5      S/:X  d   e[        R                  " U	S-  5      / :X  d   eU(       aJ  T" S5        [        [        R                  " U	S-  5      5      S:X  d   e[        SS9" U4S jS 5       5        O[        SS9" U4S jS 5       5        [        S5       HA  n
[        [        R                  " U	S-  5      5      S:X  a    O[         R"                  " S5        MC     [        [        R                  " U	S-  5      5      S:X  d   eT" S5        [        [        R                  " U	S-  5      5      S:X  d   eGMJ  [        [        R                  " U	S-  5      5      S:X  d   eT" S5        [        [        R                  " U	S-  5      5      S:X  a  GM   e   g )N)r   r'   z0
        def f(x):
            return x
        z<ipython-input-{}-000000000000>exec)filenamemoder    rY   r'   r   r#   joblibzipython-inputr&   r   n_jobsc              3   F   >#    U  H  n[        T5      " U5      v   M     g 7frA   r   .0r.   cached_fs     r   	<genexpr>Htest_parallel_call_cached_function_defined_in_jupyter.<locals>.<genexpr>        "HA78#4Q#7#7   !)r'   r   c              3   F   >#    U  H  n[        T5      " U5      v   M     g 7frA   ro   rp   s     r   rs   rt      ru   rv      皙?   )formatrh   compiletextwrapdedentr`   __code__co_filenamer   r[   r(   r*   r7   listdirr   r)   timesleep)ra   rf   
session_noipython_cell_sourceipython_cell_id	my_localsr    r-   f_cache_relative_directoryf_cache_directoryr/   rr   s              @r   5test_parallel_call_cached_function_defined_in_jupyterr      s{   " 

 <BB:N	 34( 	
 cN! tqyyzz%%888;<<?2::fx/01Q666%'ZZ0A%B1%E""<<<<"X-0JJ?::/0SE999::/#56"<<<# 2::&7#&=>?1DDD ""H"HH ""H"HH rA2::&7#&=>?1DJJsO # 2::&7#&=>?1DDD
 rzz"3c"9:;q@@@ rzz"3c"9:;q@@@QK rzz"3c"9:;q@@@m r!   c                     ^ [        5       mU4S jn [        SSS9nUR                  U 5      n[        S5       H*  n[	        T5      nU" S5        [	        T5      US-   :X  a  M*   e   g)z*Test memory with location=None: no memoizec                 *   > TR                  S5        U $ rN   rB   rO   s    r   fftest_no_memory.<locals>.ff   rR   r!   Nr   r#   rz   r'   )rZ   r   r(   r)   r*   )r   r-   ggr/   rc   r,   s        @r   test_no_memoryr      sd    &K T1-F	b	B1X!+.
1;#6#:::: r!   c                    ^ [        5       mSU4S jjn[        UTU R                  5        [        U R                  SS9nUR	                  U5      nU" SSS9S:X  d   eg)	z3Test memory with a function with keyword arguments.Nc                 *   > TR                  S5        U $ rN   rB   )arg1arg2r,   s     r   rb   test_memory_kwarg.<locals>.g  s    1r!   r   r#      r   )r   r   rN   )rZ   r0   r[   r   r(   )ra   rb   r-   r,   s      @r   test_memory_kwargr     sS    &K ;7V^^Q7FQA"1###r!   c                 ^   ^^ [        5       mU4S jm[        U4S jTU R                  5        g)z*Test memory with a function with a lambda.c                 *   > TR                  S5        U $ z*A helper function to define l as a lambda.r'   rB   )r   r,   s    r   helper"test_memory_lambda.<locals>.helper      1r!   c                    > T" U 5      $ rA   r   )r   r   s    r   <lambda>$test_memory_lambda.<locals>.<lambda>  s	    &)r!   N)rZ   r0   r[   )ra   r,   r   s    @@r   test_memory_lambdar     s"    &K
 +[&..Ir!   c                 L   [        U R                  SS9nUR                  S 5       nUnUR                  S 5       nUn[        [        5       nU" S5        U" S5        SSS5        [        W5      S:X  d   eS[        US   R                  5      ;   d   eg! , (       d  f       N>= f)z=Check that name collisions with functions will raise warningsr   r#   c                     U $ )z&A first function called name_collisionr   r   s    r   name_collision2test_memory_name_collision.<locals>.name_collision$  	     r!   c                     U $ )z'A second function called name_collisionr   r   s    r   r   r   +  r   r!   r'   N	collision)r   r[   r(   r   r   r*   strmessage)ra   r-   r   abwarninfos         r   test_memory_name_collisionr      s    V^^Q7F\\  	A\\  	A	%	&(	!	! 
' x=A#hqk112222 
'	&s   B
B#c                 >   [        U R                  SS9nUR                  S 5      nUR                  S 5      n[        [        5       nU" S5      S:X  d   eU" S5      S:X  d   eU" S5      S:X  d   e S S S 5        [        W5      S:X  d   eg ! , (       d  f       N = f)Nr   r#   c                     U $ rA   r   r   s    r   r   7test_memory_warning_lambda_collisions.<locals>.<lambda>=  s    qr!   c                     U S-   $ rN   r   r   s    r   r   r   >  s    q1ur!   r'   r   rz   )r   r[   r(   r   r   r*   )ra   r-   r   r   r   s        r   %test_memory_warning_lambda_collisionsr   :  s    V^^Q7F[!A_%A	%	&(tqyytqyytqyy 
' x=A 
'	&s   +B
Bc                    [        U R                  SS9n[        S5      nUR                  U5      n[        S5      nUR                  U5      n[	        [
        5       nU" S5        U" S5        U" S5        S S S 5        [        W5      S:X  d   eS[        US   R                  5      R                  5       ;   d   eg ! , (       d  f       NL= f)Nr   r#   lambda x: xzlambda x: x+1r'   r   zcannot detect)
r   r[   r_   r(   r   r   r*   r   r   lower)ra   r-   a1b1r   s        r   'test_memory_warning_collision_detectionr   J  s     V^^Q7F	m	B	b	B	o	B	b	B	%	&(
1
1
1 
'
 x=Ac(1+"5"56<<>>>> 
'	&s   B;;
C	c                    ^ [        5       mU4S jnSSKnUR                  " US5      n[        UTU R                  5        g)z#Test memory with functools.partial.c                 *   > TR                  S5        U$ r   rB   r   r   r,   s     r   r+   !test_memory_partial.<locals>.func`  r   r!   r   Nr'   )rZ   	functoolspartialr0   r[   )ra   r+   r   functionr,   s       @r   test_memory_partialr   \  s6    &K
   q)H+v~~>r!   c                     [        U R                  SS9n[        S5      nUR                  U5      nU" S5      S:X  d   eg)zESmoke test memory with a function with a function defined in an eval.r   r#   r   r'   N)r   r[   r_   r(   )ra   r-   mmms       r   test_memory_evalr   l  s9    V^^Q7F]A	aBa5A::r!   c                 >    [        U 5      nU R                  S5        U$ )zkA function with a side effect in its arguments.

Return the length of its argument and append one element.
N)r*   rC   )r   len_xs     r   count_and_appendr   v  s    
 FEHHTNLr!   c                     [        U R                  SS9nUR                  [        5      nU" 5       S:X  d   eU" 5       S:X  d   eg)zkCheck that if a function has a side effect in its arguments, it
should use the hash of changing arguments.
r   r#   r'   N)r   r[   r(   r   )ra   r-   r+   s      r   test_argument_changer     sC     V^^Q7F<<()D 6Q;; 6Q;;r!   rU   rS   c                   ^	 [        5       m	SU	4S jjn[        U R                  USS9nUR                  U5      n[        R
                  R                  S5      n[        S5       H`  nUR                  S5      n[        S5       H=  n[        R                  " U" U5      U:H  5      (       d   e[        T	5      US-   :X  a  M=   e   Mb     g)	z.Test memory with a function with numpy arrays.Nc                 *   > TR                  S5        U $ rN   rB   rO   s    r   ntest_memory_numpy.<locals>.n  rR   r!   r   r$   rU   r%   r&   )rT   rT   r'   rA   )rZ   r   r[   r(   r   randomRandomStater)   random_sampleallr*   )
ra   rU   r   r-   cached_nrndr.   r   r/   r,   s
            @r   test_memory_numpyr     s     &K V^^y!LF||AH
))


"C1Xh'qA66(1+*++++{#q1u,,,  r!   c                 |   [        U R                  SSS9nUR                  5       S 5       n[        R                  " S5      nU" U5      nU" U5      n[        U[        R                  5      (       d   eUR                  S:X  d   e[        U[        R                  5      (       d   eUR                  S:X  d   eAA[        R                  " 5         [        U5        [        X15      nU" U5      n[        U5      S:X  d   eSn	XS   ;   d   e[        U[        R                  5      (       d   eUR                  S:X  d   eg)	z8Check that mmap_mode is respected even at the first callrS   r   r   c                     U S-  $ Nr   r   r   s    r   twice0test_memory_numpy_check_mmap_mode.<locals>.twice      1ur!   r&   r'   Exception while loading resultsN)r   r[   r(   r   ones
isinstancememmaprj   gccollectr>   rK   r*   )
ra   monkeypatchr-   r   r   r   crecorded_warningsdexception_msgs
             r   !test_memory_numpy_check_mmap_moder     s    V^^sAFF\\^  	
AaAaAa####66S==a####66S== 	
	JJLf% 5UHaA !Q&&&5Ma0000a####66S==r!   c                   ^ [        U R                  SS9n " S S[        5      mUR                  S	U4S jj5       nU" 5         [	        S5       H  n[        T5         U" S5        SSS5        M!     g! , (       d  f       M3  = f)
z+Smoketest the exception handling of Memory.r   r#   c                       \ rS rSrSrg)*test_memory_exception.<locals>.MyExceptioni  r   N__name__r`   __qualname____firstlineno____static_attributes__r   r!   r   MyExceptionr         r!   r   c                    > U (       a  Teg rA   r   )excr   s    r   h test_memory_exception.<locals>.h  s     r!   r&   r'   N)r   )r   r[   	Exceptionr(   r)   r   )ra   r-   r   r/   r   s       @r   test_memory_exceptionr     sj    V^^Q7Fi  \\ 
 C1XK aD !    s   	A22
B	c                 .  ^ [        U R                  SS9n[        5       mUR                  S/S9S
U4S jj5       nUR                  S/:X  d   eU" SSS9  [        T5      S:X  d   eU" SSS9  [        T5      S:X  d   eU" SSS9  [        T5      S:X  d   eg	)z!Test the ignore feature of memoryr   r#   r   ignorer'   c                 (   > TR                  S5        g rN   rB   r   s     r   ztest_memory_ignore.<locals>.z  s    1r!   r   r   Nr'   r   r[   rZ   r(   r   r*   )ra   r-   r   r,   s      @r   test_memory_ignorer    s    V^^Q7F&K\\#\   88ua1I{q   a1I{q   a1I{q   r!   c                 >  ^ [        U R                  SS9n[        5       mS nUR                  S/S9USU4S jj5       5       nUR                  S/:X  d   eU" SSS9  [        T5      S:X  d   eU" SSS9  [        T5      S:X  d   eU" SS	S9  [        T5      S:X  d   eg
)z9Test the ignore feature of memory on a decorated functionr   r#   c                 F   ^  [         R                  " T 5      U 4S j5       nU$ )Nc                     > T" U 0 UD6$ rA   r   )argskwargsr    s     r   wrapped?test_memory_ignore_decorated.<locals>.decorate.<locals>.wrapped  s    d%f%%r!   )r   wraps)r    r
  s   ` r   decorate.test_memory_ignore_decorated.<locals>.decorate  s%    			& 
	& r!   r   r   r'   c                 (   > TR                  S5        g rN   rB   r   s     r   r   'test_memory_ignore_decorated.<locals>.z  s     	1r!   r  r   Nr  r  )ra   r-   r  r   r,   s       @r   test_memory_ignore_decoratedr    s    V^^Q7F&K \\#\    88ua1I{q   a1I{q   a1I{q   r!   c                     [        U R                  SS9nUR                  S 5       nU" S5      S:X  d   eU" SS9S:X  d   eU" SS9S:X  d   eg)	zWNon-regression test against 0.12.0 changes.

https://github.com/joblib/joblib/pull/751
r   r#   c                     U S-   $ rN   r   r   s    r   plus_one,test_memory_args_as_kwargs.<locals>.plus_one  r   r!   r'   r   r   r&   N)r   r[   r(   )ra   r-   r  s      r   test_memory_args_as_kwargsr    sd    
 V^^Q7F\\  A;!a=A a=Ar!   zignore, verbose, mmap_moder   d   rT   c                     [        U R                  SS9nUR                  XUS9S 5       nUR                  U:X  d   eUR                  U:X  d   eUR
                  U:X  d   eg)z7Check cache may be called with kwargs before decoratingr   r#   )r   r%   rU   c                     g rA   r   r   s    r   r   "test_partial_decoration.<locals>.z'  s    r!   N)r   r[   r(   r   _verboserU   )ra   r   r%   rU   r-   r   s         r   test_partial_decorationr  "  sl     V^^Q7F\\I\F G 88v::   ;;)###r!   c                    [        U R                  SS9n[        R                  S5      nUR	                  S5        U R
                  " S/UQ76 R                  nUR                  [        5      n[        [        5      n[        R                  R                  UR                  R                  U5      nXR:X  d   e[        R                  R                  U5      (       d   eUR                  [        R                  R                  UR                  R                  5      :X  d   e[        R                   " 5         UR#                  5       (       a   e[        R                  R                  [        R                  R                  US5      5      (       d   eUR#                  5       (       d   eUR%                  S5      n[        R                  R                  UR                  R                  UR&                  U5      nU" S5      n[        R                  R                  U5      (       d   e[        R(                  " [        R                  R                  US5      5        X" S5      :X  d   eg )	Nr   r#   .r    rk   zfunc_code.pyr'   r2   )r   r[   r   splitrC   r9   r(   r    r   r7   r8   r5   r$   existsdirnamer   r^   _check_previous_func_code_get_args_idfunc_idremove)	ra   r-   r8   rb   r$  r$   args_id
output_dirr   s	            r   test_func_dirr(  0  s   V^^Q7F>>#DKK;;x'$'//DQA$Q'Gww||AOO44g>H77>>$??bggooaoo.F.FGGGG
 **,,,,77>>"'',,t^<====&&(((( nnQGaoo66		7KJ	!A77>>*%%%%IIbggll:|45!99r!   c                    [        U R                  SS9nUR                  [        5      nU" S5      n[        R
                  " [        R                  " U5      5      nUR                  S5      n[        R                  R                  UR                  R                  UR                  U5      n[        R                  R                  U5      (       d   eX4R                  R                  UR                  U/5      :X  d   e[        R
                  " [        R                  " U5      5      nUR                  R                  UR                  R                  :X  d   e[        S SS9n[        R
                  " [        R                  " U5      5        UR                  [        5      n[        R
                  " [        R                  " U5      5      nU" S5        g )Nr   r#   r'   )r   r[   r(   r    pickleloadsdumpsr#  r7   r8   r9   r5   r$   r$  r   	load_item)	ra   r-   rb   outputr   r&  r'  memory2gps	            r   test_persistencer1  P  s7   V^^Q7FQAqTFV\\!_%AnnQGaoo66		7KJ77>>*%%%%__..		7/CDDDDll6<</0G((G,A,A,J,JJJJ T1-F
LLf%&QA	fll1o	&BqEr!   consider_cache_validc                   ^ [        [        U R                  U4S jS9[        U R                  SS9R	                  [        U4S jS94 H  nUR                  S5      n[        U[        5      (       d   eU(       a   eU" S5      S:X  d   eUR                  S5      n[        U[        5      (       d   eUT:X  d   eUR                  5         M     [        [        5      nUR                  S5      (       a   eg )Nc                    > T$ rA   r   r/   r2  s    r   r   *test_check_call_in_cache.<locals>.<lambda>k  s    CWr!   cache_validation_callbackr   r#   c                    > T$ rA   r   r5  s    r   r   r6  n  s    3Gr!   r      )
r	   r    r[   r   r(   check_call_in_cacher   boolr^   r   )ra   r2  r+   results    `  r   test_check_call_in_cacher>  g  s     	v~~9W	
 	288)G 	9 	
	 ))!,&$''''zAw!||))!,&$''''----

" AD''*****r!   c           	      f   [        [        [        U R                  5      [	        [        5      [        U R                  SS9R                  [        5      [        S S9R                  [        5      4[        [        [        [        45       H  u  pU" S5      S:X  d   eUR                  S5      n[        X25      (       d   eUR                  5       S:X  d   eUR                  5         [        [        5         UR                  5         S S S 5        UR                  5         M     g ! , (       d  f       N#= f)Nr   r#   r$   r   r:  )zipr	   r    r[   r   r   r(   r
   r   call_and_shelver   getr^   r   KeyError)ra   r+   Resultr=  s       r   test_call_and_shelverF  ~  s     !V^^,QFNNA6<<Q?D!''*		
 
,o?QR Aw!||%%a(&))))zz|q   HJJL # s   4D""
D0	c                 8   U R                  S5      nUR                  S5        [        R                  " UR                  5      R
                  n[        R                  " S5        UR                  5       S:X  d   eU[        R                  " UR                  5      R
                  :X  a  [        R                  " S5        [        U R                  SS9nUR                  [        5      nUR                  S5      n[        R                  R                  UR                   R"                  UR$                  US5      nU" S5      S:X  d   e[        R                  " U5      R
                  n[        R                  " S	5        UR'                  S5      n[)        U[*        5      (       d   e[        R                  " U5      R
                  U:X  d   e[        R                  " S	5        UR-                  5       S:X  d   e[        R                  " U5      R
                  U:  d   eg
)z6Check call_and_shelve only load stored data if needed.test_access      ?z>filesystem does not support fine-grained access time attributer   r#   r   r2   r:  r'   N)r9   r;   r7   statr[   st_atimer   r   readpytestskipr   r(   r    r#  r8   r5   r$   r$  rB  r   r
   rC  )	ra   test_access_time_filetest_access_timer-   r+   r&  result_pathfirst_access_timer=  s	            r   .test_call_and_shelve_lazily_load_stored_resultrS    s   "KK6.ww4<<=FF 	JJsO %%'=888277#8#@#@AJJJ 	TUV^^Q7F<<?D"G'',,%%t||WlK 7a<<,55JJqM !!!$Ffo....77;((,====JJqM ::<177;((+<<<<r!   c                     [        [        U R                  5      [        [        5      4 H  nU R	                  S5      R                  nUR                  S5      n[        US5       n[        R                  " X45        S S S 5        [        US5       n[        R                  " U5      nS S S 5        WR                  5       UR                  5       :X  d   e[        R                  " U5        M     g ! , (       d  f       Nx= f! , (       d  f       N^= f)Nzpickling_test.datr   wbrb)r	   r    r[   r   r9   rB  r:   r*  dumploadrC  r7   r%  )ra   r+   ri   r=  fpresult2s         r   test_memorized_picklingr[    s    q&..13CA3FG;;23;;%%a((D!RKK# "(D!Rkk"oG "{{}

,,,
		( H "!!!s   %C.C?.
C<	?
D	c                    [        [        U R                  5      nUR                  S5      n[        [        U R                  5      nUR                  S5      nUR	                  5       UR	                  5       :X  d   e[        U5      [        U5      :X  d   e[        [        5      n[        U5        [        UR                  S5      5        [        [        U R                  S[        R                  " 5       S9nUR                  S5      nUR	                  5         [        [        U R                  SS9nUR                  S5      nUR	                  5         [        [        U R                  S[        R                  " 5       S9nUR                  S5      nUR	                  5         [        [        U R                  SS9nUR                  S5      nUR	                  5         g )Nr      )r%   	timestamp)r%   r:  )r	   r    r[   rB  rC  reprr   r   )ra   r+   r=  func2rZ  s        r   test_memorized_reprra    sV   FNN+D!!!$F!V^^,E##A&G::<7;;=(((:e$$$ ADJ		a	 ! FNNB$))+ND!!"%F
JJLFNNB7D!!"%F
JJLFNNAMD!!"%F
JJLFNNA6D!!"%F
JJLr!   c                 4   UR                  S5      R                  n[        R                  R	                  US5      nSn[        US5       nUR                  U5        S S S 5        UR                  U5        SS Kn[        UR                  SS9nUR                  UR                  5      n	U	" S5        U	" S5        U	" S5        [        US5       nUR                  S	U-   5        S S S 5        U	" S5        U	" S5        [        R                  " U5        [        R                   " U5        S
n[        US5       nUR                  U5        S S S 5        U	" S5        U	" S5        [        R                  R                  S5        [        R                   R#                  S5        SS KnUR                  UR                  5      n	U	" S5        U	" S5        U R%                  5       u  pU
S:X  d   eg ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f)N
tmp_importztmp_joblib_.pyz$def f(x):
    print(x)
    return x
r3   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
)mkdirr[   r7   r8   r9   r:   r;   syspath_prependrd  r   r(   r    r\   r]   sysstdoutmodulespop
readouterr)capsysra   r   dir_nameri   contentmodule_filetmpr-   r    rd   errs               r   test_memory_file_modificationrr    s    ||L)11Hww||H&67H7G	h	'" 
 )V^^Q7FSUUAaDaDaD 
h	&7*+ 
 aDaD MM(HHX@G	h	'" 
 aDaD JJ]#KKOOM"SUUA aDaD  "HC****a 
	 
	 
	s$   
G%G73H	%
G47
H	
Hc                     g rA   r   r   r   s     r   _function_to_cacheru    s    r!   c                 
    X-   $ rA   r   rt  s     r   _sumrw  #  	    5Lr!   c                 
    X-  $ rA   r   rt  s     r   _productrz  '  rx  r!   c                    [         R                  [        l        [        U R                  SS9nUR                  [        5      nU" SS5      S:X  d   eU" SS5      S:X  d   e[        [        5         [        R                  [        l        U" SS5      S:X  d   eU" SS5      S:X  d   e S S S 5        g ! , (       d  f       g = f)Nr   r#   r'   r   r&   )	rw  r   ru  r   r[   r(   r   r   rz  )ra   r-   r    s      r   *test_memory_in_memory_function_code_changer|  +  s    "&--V^^Q7F'(AQ7a<<Q7a<<	%	&&.&7&7#Aw!||Aw!||	 
'	&	&s   08B22
C c                  6    [        S S9n U R                  5         g )Nr@  )r   r^   )r-   s    r   $test_clear_memory_with_none_locationr~  ;  s    T"F
LLNr!   kw1kw2r  r  c                
    XX#4$ rA   r   )r   r   r  r  s       r   func_with_kwonly_argsr  @  s    >r!   r   r   returnc                 
    X-   $ rA   r   rt  s     r   func_with_signaturer  D  rx  r!   c                    [        U R                  SS9nUR                  [        5      nU" SSSS9S:X  d   e[	        [
        5       nU" SSSSS	9  S S S 5        WR                  S
5        U" SSSSS9  [	        [
        5       nU" SSSSS	9  S S S 5        UR                  S
5        UR                  [        S/S9nU" SSSSS9S:X  d   eU" SSSSS9S:X  d   eg ! , (       d  f       N= f! , (       d  f       Nd= f)Nr   r#   r'   r   r&   )r  )r'   r   r&   r  rz   )r  z?Keyword-only parameter 'kw1' was passed as positional parameterr  r  r   )r'   r   r&   rz   ignored)r   r[   r(   r  r   
ValueErrormatch)ra   r-   func_cachedexcinfos       r   !test_memory_func_with_kwonly_argsr  H  s    V^^Q7F,,45Kq!#'7777 

	wAq!# 
MMST 1!#	
	wAq!# 
MMST ,,4eW,EKq!*l:::q!	2lBBB 
	 
	s   
C
C*
C'*
C8c                 t    [        U R                  SS9nUR                  [        5      nU" SS5      S:X  d   eg )Nr   r#   r'   g       @g      @)r   r[   r(   r  )ra   r-   r  s      r   test_memory_func_with_signaturer  b  s6    V^^Q7F,,23Kq##%%%r!   c                    [        U R                  SS9nUR                  5       S 5       n[        [	        U5      5      nU H  nU" U5        M     [        U5      nU Vs/ s H  oSR                  U5      PM     nnU Vs/ s H7  n[        R                  R                  UR                  R                  Xh5      PM9     n	nX)U4$ s  snf s  snf )Nr   r#   c                     g)N  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   rP   s    r   get_1000_bytes(_setup_toy_cache.<locals>.get_1000_bytesl  s    r!   )r   r[   r(   rZ   r)   r   r#  r7   r8   r9   r5   r$   )
ra   
num_inputsr-   r  inputsrP   r$  hash_dirnamesr!  full_hashdirss
             r   _setup_toy_cacher  i  s    V^^Q7F\\^  %
#$Fs  %^4GAGH#005MH %$G 	^11::GM$   .00 Is   C?>Cc                    [        U 5      u  pnUR                  R                  5       nU Vs/ s H  oUR                  PM     nn[	        U5      [	        U5      :X  d   eS nU Vs/ s H
  o" U5      PM     n	nU Vs/ s H  oUR
                  PM     n
nX:X  d   eU Vs/ s H#  n[        R                  R                  US5      PM%     nnU Vs/ s H?  n[        R                  R                  [        R                  R                  U5      5      PMA     nnU Vs/ s H  oUR                  PM     nnX:X  d   eg s  snf s  snf s  snf s  snf s  snf s  snf )Nc                     [         R                  " U 5       Vs/ s H"  n[         R                  R                  X5      PM$     nn[	        S U 5       5      $ s  snf )Nc              3   `   #    U  H$  n[         R                  R                  U5      v   M&     g 7frA   )r7   r8   getsize)rq   rY  s     r   rs   :test__get_items.<locals>.get_files_size.<locals>.<genexpr>  s      <2277??2&&s   ,.)r7   r   r8   r9   sum)	directoryfn
full_pathss      r   get_files_size'test__get_items.<locals>.get_files_size  sE    <>JJy<QR<Qbbggll91<Q
R<<<< Ss   )Ar2   )r  r5   r6   r8   setsizer7   r9   datetimefromtimestampgetatimelast_access)ra   r-   expected_hash_dirsr/   itemsci	hash_dirsr  hash_direxpected_hash_cache_sizeshash_cache_sizesoutput_filenamesr  expected_last_accesseslast_accessess                  r   test__get_itemsr  ~  s@   $4V$<!F  **,E#()5R5I)y>S!34444= KT T)h!9) T*/0%B%0888MVWYX|<YW IYHX"''(8(8(<=HX   /44e^^eM4222# * !U0 X 5s$   D9%D><E*EAEEc                 l   [        U SS9u  n  nUR                  R                  S5      nU/ :X  d   e[        U 5      u  pnUR                  R                  5       nUR                  R                  S5      n[	        U5      n[
        R                  [        U5      [        U5      5      (       d   e[	        U5      US-
  :X  d   eUR                  R                  S5      n[        U5      [        U5      :X  d   eUR                  R                  S5      nU/ :X  d   eSn	UR                  R                  U	5      n
[        U
5      (       d   [        U5      5       eUR                  R                  S	5      n[        U5      R                  U5      n[        S
 U 5       5      [        S U 5       5      ::  d   eg )Nr   )r  1K2Kr'   i   1M  ip  c              3   8   #    U  H  oR                   v   M     g 7frA   r  rq   r  s     r   rs   ,test__get_items_to_delete.<locals>.<genexpr>  s     >(="~~(=   c              3   8   #    U  H  oR                   v   M     g 7frA   r  r  s     r   rs   r    s      F!02r  )r  r5   _get_items_to_deleter6   r*   r  issubsetsorted
differencemaxmin)ra   r-   r/   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9LFAq**??EOb   )9&)A&FQ  **,E **??EO+,I<<O,c%j99999q=000 #00EEdK/"f-B&CCCC #00EEdK B&&&  !//DD #$$0c%j0$ #00EEdK%j++,ABO>(=>># F!0F C   r!   c                    [        U 5      u  n  nUR                  R                  5       nUR                  5         UR                  R                  5       n[	        U5      [	        U5      :X  d   eUR                  SS9  UR                  R                  5       n[	        U5      [	        U5      :X  d   eUR                  SS9  UR                  R                  5       n[
        R                  [        U5      [        U5      5      (       d   e[        U5      S:X  d   eSnUR                  US9  UR                  R                  5       nU/ :X  d   eg )Nr  )bytes_limit3Kr   r  r  r5   r6   reduce_sizer  r  r  r*   )ra   r-   r/   ref_cache_itemscache_itemsr  s         r   #test_memory_reduce_size_bytes_limitr    s6   #F+LFAq**446O &&002K/"f[&9999 4(&&002K/"f[&9999 4(&&002K<<K(#o*>????{q     
#89&&002K"r!   c                    [        U 5      u  n  nUR                  R                  5       nUR                  5         UR                  R                  5       n[	        U5      [	        U5      :X  d   eUR                  SS9  UR                  R                  5       n[	        U5      [	        U5      :X  d   eUR                  SS9  UR                  R                  5       n[
        R                  [        U5      [        U5      5      (       d   e[        U5      S:X  d   eUR                  SS9  UR                  R                  5       nU/ :X  d   eg )NrT   )items_limitr   r   r  )ra   r-   r/   r  r  s        r   #test_memory_reduce_size_items_limitr    s/   #F+LFAq**446O &&002K/"f[&9999 2&&&002K/"f[&9999 1%&&002K<<K(#o*>????{q    1%&&002K"r!   c                    SS K nSS Kn[        U 5      u  p4nUR                  R	                  5       nUR                  5         UR                  R	                  5       n[        U5      [        U5      :X  d   eUR                  UR                  " SS9S9  UR                  R	                  5       n[        U5      [        U5      :X  d   eUR                  " S5        U" S5        U" S5        UR                  UR                  " SS9S9  UR                  R	                  5       n[        R                  [        U5      [        U5      5      (       a   e[        U5      S:X  d   e[        R                  " [        S	S
9   UR                  UR                  " SS9S9  S S S 5        UR                  " S5        UR                  UR                  " SS9S9  UR                  R	                  5       nU/ :X  d   eg ! , (       d  f       N`= f)Nr   r'   )days)	age_limitsecondsr   zhas to be a positiver  gMbP?)r  r   r  r5   r6   r  r  	timedeltar   r  r  r*   rM  r   r  )ra   r  r   r-   r/   	put_cacher  r  s           r   !test_memory_reduce_size_age_limitr    s   +F3Fy**446O &&002K/"f[&9999 !3!3!;<&&002K/"f[&9999 	JJqMbMbM
!3!3A!>?&&002K||C,c/.BCCCC{q    
z)?	@X%7%7%CD 
A 	JJu
!3!3A!>?&&002K" 
A	@s   8G00
G>c                     [        U 5      u  pnUR                  5         [        R                  " UR                  R
                  5      / :X  d   eUR                  SS9(       a   eg )Nrz   )
stacklevel)r  r^   r7   r   r5   r$   r"  )ra   r-   r/   rb   s       r   test_memory_clearr    sX    #F+LFq
LLN::f**334::: **a*8888r!   c                      S/S-  n U $ )Nr  i  r   )complex_objs    r   fast_func_with_complex_outputr  #  s    ,%Kr!   c                 ~    [        [        S5      5       Vs0 s H  n[        U5      U_M     nnU (       a  U$ S$ s  snf )Ng     j@zsimple output)r)   intr   )complex_outputr.   r  s      r   )fast_func_with_conditional_complex_outputr  (  s8    &+CHo6o3q619oK6(;=o= 7s   :c                    ^ [        U R                  S9nUR                  [        5      m[	        SS9" U4S j[        S5       5       5        UR                  5       u  p4SnXS;  d   eXT;  d   eg )Nr@  r   rl   c              3   D   >#    U  H  n[        T5      " 5       v   M     g 7frA   ro   rq   r.   r  s     r   rs   Mtest_cached_function_race_condition_when_persisting_output.<locals>.<genexpr>5  s     @x!w{+--xs    r&   r   )r   r[   r(   r  r   r)   rk  ra   capfdr-   rh  stderrr   r  s         @r   :test_cached_function_race_condition_when_persisting_outputr  -  sh    
 V^^,F,,<=KA@uQx@@%%'NF
 6M&&&&&&r!   c                    ^ [        U R                  S9nUR                  [        5      m[	        SS9" U4S j[        S5       5       5        UR                  5       u  p4SnXS;  d   eXT;  d   eg )Nr@  r   rl   c              3   \   >#    U  H!  n[        T5      " US -  S:X  a  SOS5      v   M#     g7f)r   r   TFNro   r  s     r   rs   Otest_cached_function_race_condition_when_persisting_output_2.<locals>.<genexpr>K  s-      EMQUaZTU;;Xs   ),r&   r   )r   r[   r(   r  r   r)   rk  r  s         @r   <test_cached_function_race_condition_when_persisting_output_2r  A  sq     V^^,F,,HIKA EJ1X  %%'NF
 6M&&&&&&r!   c                    [        U R                  S9nS nUR                  U5      nSnU" U5      u  pgXe:X  d   e[        U5        [	        XA5      nU" U5      u  p[        U5      S:X  d   eSnXS   ;   d   eX:X  d   eX:  d   e[        U5        UR                  U5      n UR                  5         [        S5      e! [         a'  nSnU[        UR                  5      ;   d   e S nAg S nAff = f)	Nr@  c                 \    [         R                  " S5        U [         R                   " 5       4$ )Ng{Gz?r   r   r  s    r   r+   Itest_memory_recomputes_after_an_error_while_loading_results.<locals>.func\  s!     	

4DIIKr!   rP   r'   r   r   z<It normally not possible to load a corrupted MemorizedResultzis corrupted)r   r[   r(   r>   rK   r*   rB  rC  AssertionErrorrD  r   r  )ra   r   r-   r+   cached_func	input_argrP   r^  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+6s+;(N !Q&&&5Ma0000   +++ f%++C0I&J
 	
  & #aff+%%%&s   #B> >
C/C**C/c                       \ rS rSrSrSrg)IncompleteStoreBackendi  zAThis backend cannot be instantiated and should raise a TypeError.r   N)r   r`   r   r   __doc__r   r   r!   r   r  r    s    Kr!   r  c                   H    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSrg)DummyStoreBackendi  z(A dummy store backend that does nothing.c                     g)zOpen an item on store.Nr   )selfr  r	  s      r   
_open_itemDummyStoreBackend._open_item      r!   c                     g)z!Check if an item location exists.Nr   r  r$   s     r   _item_existsDummyStoreBackend._item_exists  r  r!   c                     g)z&Move an item from src to dst in store.Nr   )r  srcdsts      r   
_move_itemDummyStoreBackend._move_item  r  r!   c                     g)zCreate location on store.Nr   r  s     r   create_location!DummyStoreBackend.create_location  r  r!   c                     g)z&Check if an object exists in the storeFr   r  objs     r   r   DummyStoreBackend.exists  s    r!   c                     g)zClear object on storeNr   r!  s     r   clear_location DummyStoreBackend.clear_location  r  r!   c                     / $ )z3Returns the whole list of items available in cache.r   )r  s    r   r6   DummyStoreBackend.get_items  s    	r!   c                     g)zConfigure the storeNr   )r  r$   r  r	  s       r   	configureDummyStoreBackend.configure  r  r!   r   N)r   r`   r   r   r  r  r  r  r  r   r%  r6   r*  r   r   r!   r   r  r    s-    2r!   r  invalid_prefixc                     [        [        5       n[        U S 5        S S S 5        WR                  S5        g ! , (       d  f       N = f)Nz&Store backend name should be a string*r   r  r   r  )r,  r  s     r   (test_register_invalid_store_backends_keyr/    s3     

	w~t4 
MM;< 
		   7
Ac                      [        [        5       n [        SS 5        S S S 5        W R                  S5        g ! , (       d  f       N = f)Nfsz.Store backend should inherit StoreBackendBase*r.  r  s    r   +test_register_invalid_store_backends_objectr4    s3     

	wtT* 
MMCD 
	r0  c                      [        [        5       n [        SSS9  S S S 5        W R                  S5        g ! , (       d  f       N = f)Nz/tmp/joblibunknown)r$   backendzUnknown location*)r   	TypeErrorr   r  r3  s    r   !test_memory_default_store_backendr9    s1    			gy9 
MM&' 
	s	   5
Ac                       " S S5      n U " 5       n[        [        5       n[        SUS9  S S S 5        SnU[        WS   R                  5      ;   d   eg ! , (       d  f       N/= f)Nc                       \ rS rSrSrg)Htest_warning_on_unknown_location_type.<locals>.NonSupportedLocationClassi  r   Nr   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_typerB    sc      56	{	xw1EF 
	 
 c(1+"5"56666 
	s   A
A#c                      Sn [        U [        5        U [        4[        R                  " 5       ;   d   e[	        [
        5       n[        U S5        S S S 5        WR                  S5        g ! , (       d  f       N = f)Nisbfake_locationznCan't instantiate abstract class IncompleteStoreBackend (without an implementation for|with) abstract methods*)r   r  r   r  r   r8  r   r  )backend_namer  s     r   )test_instanciate_incomplete_store_backendrG    se     L<)?@01_5J5J5LLLL			g|_= 
MM	A 
	s   A**
A8c                      Sn [        U [        5        U [        4[        R                  " 5       ;   d   e[	        U S5      n[        U[        5      (       d   eg )Ndsbdummy_location)r   r  r   r  r   r   )rF  backend_objs     r   test_dummy_store_backendrL    sR     L<):;+,0E0E0GGGG(7GHKk#45555r!   c                      [         R                  " S5      n [        SU 5      n UR                  S:X  d   e [        R
                  " SSS9  g ! [        R
                  " SSS9  f = f)Nsome_folderr>  TrW   )pathlibPathr   r$   r\   r]   )r8   rK  s     r   0test_instanciate_store_backend_with_pathlib_pathrQ    sR    <<&D($7K9##}444m48m48s   A A$c                 (   Sn[        5       nUR                  b   e[        U5        [        U5      UR	                  S S9:X  d   eUR                  U R                  5        [        U5      UR	                  U R                  S9:X  d   e[        U5        g )Nz-FileSystemStoreBackend(location="{location}")r@  )r   r$   r_  r   r{   r*  r[   )ra   repr_patternr7  s      r   "test_filesystem_store_backend_reprrT    s     CL$&G###Mw<<...==== fnn%w<<...GGGGMr!   c                    S n[        U R                  SS9nUR                  U5      nSn[        U5      UR	                  XR
                  R                  S9:X  d   eUR                  SS5      nSn[        U5      UR	                  UR
                  R                  UR                  UR                  S9:X  d   e[        U5      S	R	                  UR
                  R                  S
9:X  d   eg )Nc                 
    X-   $ rA   r   rt  s     r   my_func)test_memory_objects_repr.<locals>.my_func  s	    u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   r[   r(   r   r{   r5   r$   rB  r$  r&  )ra   rW  r-   memorized_funcmemorized_func_reprmemorized_resultmemorized_result_reprs          r   test_memory_objects_reprr^    s    V^^Q7F\\'*NK~"5"<"<33<< #= #    &55b"= 	U   $9$@$@%%..%% (( %A %    v;7>>%%.. ?    r!   c                    [        U R                  S9nUR                  S 5       nUR                  S5      n[        R
                  " U5      n[        R                  " U5      nUR                  R                  UR                  R                  :X  d   eUR                  UR                  :X  d   eUR                  UR                  :X  d   e[        U5      [        U5      :X  d   eg )Nr@  c                     U S-  $ r   r   r   s    r   rb   'test_memorized_result_pickle.<locals>.g6      !tr!   rz   )r   r[   r(   rB  r*  r,  r+  r5   r$   r+   r&  r   )ra   r-   rb   r\  memorized_result_picklememorized_result_loadss         r   test_memorized_result_picklere  /  s    
 V^^,F\\  ((+$ll+;<#\\*AB 	&&//!//88	9	9   $:$?$????##'='E'EEEE C(>$????r!   c                     Uc  / n[        U 5      n[        U5      n[        UR                  5       5      [        UR                  5       5      :X  d   eUR                  5        H  nXR;   a  M
  X5   XE   :X  a  M   e   g rA   )varsr  keys)leftrightignored_attrs	left_vars
right_varsattrs         r   comparero  G  sr    T
IeJy~~ C
(9$::::  *"2222 !r!   memory_kwargsr&   r   )rV   r%   r:  	parameterunused)rU   r%   backend_optionsc                 Z   [        SSU R                  0UD6n[        R                  " [        R                  " U5      5      n[        UR                  UR                  5        [        UU[        / SQ5      S9  [        U5      [        U5      :X  d   eUR                  [        5      n[        R                  " [        R                  " U5      5      n[        UR                  UR                  5        [        UU[        / SQ5      S9  [        U5      [        U5      :X  d   eUR                  S5      n[        R                  " [        R                  " U5      5      n[        UR                  UR                  5        [        UU[        / SQ5      S9  [        U5      [        U5      :X  d   eg )Nr$   )r5   r^  _func_code_id)rk  r'   r   )r   r[   r*  r+  r,  ro  r5   r  r   r(   r    rB  )ra   rp  r-   memory_reloadedr  func_cached_reloadedr\  memorized_result_reloadeds           r   test_memory_pickle_dump_loadry  T  s`    =V^^=}=Fll6<<#78O F  /"?"?@IJ
 <40000,,q/K!<<[(AB K%%';'I'IJIJ
 %9 :::: #2215 &V\\:J-K L**,E,S,ST!IJ
  !T*C%DDDDr!   c                    UR                  [        R                  5        Sn[        U R                  SS9nUR
                  S 5       nU" U5      nSUR                  ;   d   eUR                  5         [        U R                  SS9nUR
                  S 5       nU" U5      nSUR                  ;  d   eUR                  5         g )Nr&      r#   c                     U S-  $ r   r   r   s    r   r    test_info_log.<locals>.f  rb  r!   Queryingr   c                     U S-  $ r   r   r   s    r   r    r}    rb  r!   )	set_levelloggingINFOr   r[   r(   textr^   )ra   caplogr   r-   r    r/   s         r   test_info_logr    s    
W\\"	AV^^R8F\\  	
!A$$$
LLNV^^Q7F\\  	
!AV[[(((
LLNr!   c                   |    \ rS rSrSrSS jrS r\R                  R                  SSS/5      S	 5       r
S
 rS rSrg)TestCacheValidationCallbacki  z.Tests on parameter `cache_validation_callback`Nc                 H    SUS'   Ub  [         R                  " U5        US-  $ )NTrunr   r   )r  r   r   delays       r   fooTestCacheValidationCallback.foo  s&    %JJu1ur!   c                     Sn[         R                  " [        US9   UR                  SS9  SSS5        g! , (       d  f       g= f)z2Test invalid values for `cache_validation_callbackz9cache_validation_callback needs to be callable. Got True.r  Tr7  N)rM  r   r  r(   )r  r-   r  s      r   &test_invalid_cache_validation_callbackBTestCacheValidationCallback.test_invalid_cache_validation_callback  s/    K]]:U3LL4L8 433s	   5
Ar2  TFc                    ^ UR                  U R                  U4S jS/S9nSS0SS0pTU" SU5      S:X  d   eU" SU5      S:X  d   eUS   (       d   eUS   T:w  d   eg)	zTest expiry of old resultsc                    > T$ rA   r   r5  s    r   r   UTestCacheValidationCallback.test_constant_cache_validation_callback.<locals>.<lambda>  s    0Dr!   r   r8  r   r  Fr   rz   Nr(   r  )r  r-   r2  r    d1d2s     `   r   'test_constant_cache_validation_callbackCTestCacheValidationCallback.test_constant_cache_validation_callback  s{     LLHH&D5  
 %BBx1}}Bx1}}%yy%y0000r!   c                 .   S nUR                  U R                  US/S9nSS0SS0pTU" SUSS9S	:X  d   eU" SUSS9S	:X  d   eUS   (       d   eUS   (       d   eSS0SS0pTU" SUS
S9S	:X  d   eU" SUS
S9S	:X  d   eUS   (       d   eUS   (       a   eg)z*Test cache validity based on run duration.c                     U S   nUS:  a  gg )Ndurationg?Tr   )metadatar  s     r   r8  ^TestCacheValidationCallback.test_memory_only_cache_long_run.<locals>.cache_validation_callback  s    
+H#~ r!   r   r  r  Fr   r   )r  rz   ry   Nr  )r  r-   r8  r    r  r  s         r   test_memory_only_cache_long_run;TestCacheValidationCallback.test_memory_only_cache_long_run  s    	
 LLHH0ISVRW  

 %BBa A%%%Ba A%%%%yy%yy %BBc"a'''Bc"a'''%yye9}9r!   c                 .   UR                  U R                  [        SS9S/S9nSS0SS0SS0pTnU" SU5      S:X  d   eU" SU5      S:X  d   e[        R                  " S	5        U" SU5      S:X  d   eUS   (       d   eUS   (       a   eUS   (       d   eg
)z!Test expiry of old cached resultsg333333?r  r   r  r  Fr   rz   rI  N)r(   r  r   r   r   )r  r-   r    r  r  d3s         r   test_memory_expires_after5TestCacheValidationCallback.test_memory_expires_after  s     LLHHc0JTWSX  
 U^eU^eU^Bx1}}Bx1}}

3Bx1}}%yye9}%yyr!   r   rA   )r   r`   r   r   r  r  r  rM  markr   r  r  r  r   r   r!   r   r  r    sD    49 [[3dE]C1 D14r!   r  c                   4    \ rS rSrSr\S 5       rS rS rSr	g)TestMemorizedFunci  z8Tests for the MemorizedFunc and NotMemorizedFunc classesc                 8    UR                  U S5      S-   X'   X   $ )Nr   r'   )rC  )r   counters     r   r    TestMemorizedFunc.f  s!    [[A&*
zr!   c                     UR                  U R                  S/S9n0 nU" SU5      S:X  d   eU" SU5      S:X  d   eUR                  SU5      u  pEUS:X  d   S5       e[        U[        5      (       d   S5       eg)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_memorized,TestMemorizedFunc.test_call_method_memorized  s     LLL4G}!!!G}!!!&&G$Av777v$%% 	
>	
%r!   c                     [        U R                  5      n0 nU" SU5      S:X  d   eU" SU5      S:X  d   eUR                  SU5      u  pEUS:X  d   S5       e[        U[        5      (       d   S5       eg)r  r   r'   r&   r  r  N)r   r    r  r   r  r  s         r   test_call_method_not_memorized0TestMemorizedFunc.test_call_method_not_memorized  s     TVV$G}!!!G}!!!&&G$Av777v$%% 	
>	
%r!   r   N)
r   r`   r   r   r  staticmethodr    r  r  r   r   r!   r   r  r    s!    > 

r!   r  r$   test_cache_dirc                    [        U 5      n[        R                  " / SQ/ SQ/5      nUR                  [        R                  5      nU" U5        [
        R                  " U 5      n  [        R                  R                  U S5      nSn[        U5       nXVR                  5       :X  d   e SSS5        [        R                  " U SS9  g! , (       d  f       N$= f! [        R                  " U SS9  f = f)zkTest that using the memory object automatically creates a `.gitignore` file
within the new cache directory.)r'   r   r&   )rz   r:     z
.gitignorez%# Created by joblib automatically.
*
NTrW   )r   r   asarrayr(   squarerO  rP  r7   r8   r9   r:   rL  r\   r]   )r$   memarrcostly_operationpath_to_gitignore_filegitignore_file_contentr    s          r   test_memory_creates_gitignorer    s     
C
**i+
,Cyy+S||H%H4!#h!E!J()Q)VVX555 * 	hd3	 *) 	hd3s$   &-C C*C 
CC C0r  )rT   )TrA   )xr  r  r   r   r  r7   os.pathrO  r*  r\   rg  r}   r   rM  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    r0   r>   rK   re   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r(  r1  r  r>  rF  rS  r[  ra  rr  ru  rw  rz  r|  r~  r  r  floatr  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  rZ   r/  r4  r9  rB  rG  rL  rQ  rT  r^  re  ro  ry  r  r  r  rP  resolver  r   r!   r   <module>r     sw     	  	     
    K     . C C 5 5
- +\ #dE]3fA 4fAR; $ 	J34 ?$?    [4+&- ' -& $ $N*!&!6( )cUC,=B~+NO
$ P
$@
. /$?+ @+,.!=H	@6+r	
 
 (-% 3 5 U C4&1*3.%P86"J9
>
 ' '& ' '.*&Z	- 	!( !H dfdf56= 7=E(7"69(@@0
3 1%a[(<ST%E%EP2H HV$
 $
N %&%&..04 4r!   