
    biC                     b   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+ dnd
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j                  jS                  d,ddg      d-        ZFd. ZGd/ ZHd0 ZId1 ZJd2 ZKd3 ZLd4 ZMd5 ZNd6 ZOd7 ZPd8d9d:d;ZQd<eRd=eSd>eSfd?ZTd@ ZUdA ZVdodBZWdC ZXdD ZYdE ZZdF Z[dG Z\dH Z]dI Z^dpdJZ_e&dK        Z`e&dL        ZadM Zb G dN dOe      Zc G dP dQe      Zd e)dRd ee        ef       g      dS        ZgdT ZhdU ZidV ZjdW ZkdX ZldY ZmdZ Znd[ Zod\ Zpdqd]Zqej                  jS                  d^d_d`daddbdcddideg      df        Zrdg Zs G dh di      Zt G dj dk      Zu G dl dm      Zvy)rz
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warnsc                     | dz  |z   S )z-A module-level function for testing purposes.    )xys     R/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/joblib/test/test_memory.pyfr!   /   s    a4!8O    c                     t        |d      }|j                  |       } t        d      D ]2  }t        d      D ]"  } | |      |k(  sJ t        |      |dz   k(  r"J  4 y)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_lazyr1   6   sk     Xq1F<<D1X -q 	-A7a<<{#q1u,,,	--r"   c                     | j                   j                         \  }t        j                  j	                  |j                  d      }t        |d      5 }|j                  d       d d d        y # 1 sw Y   y xY w)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   sb    !//99;ggll#4#9#9<HO	os	# q		  s   A..A7c                 <    g fd}|j                  | d|       S )Nc                 (    j                  |        y 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   s)    
 H f.>?Or"   c                 B   t               fd}t        || j                         dD ]  }dD ]z  }t        | j                  d||      }t	        j
                  | j                  d       |j                  |      } |d       |j                  d	
       t              } |d      }| t              dz   k(  sJ j                  |d      k(  sJ t              |dz   k(  rJ  d|_
        t        | j                  d      } |j                  |      d       y)z&Simple test of memory lazy evaluation.c                 *    j                  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 " ;$ 	I#!	F MM&..=QAaDGGG"%k"2A$C#	& ;#6#::::{{1a C''';#6#::::/;6 ALV^^Q7FFLLOAr"   call_before_reducingTFc                 $   dD ]  }d}dj                  |      }i }t        t        t        j                  |      |d      d |       |d   }d|_         |d      dk(  sJ |j                  j                  |k(  sJ t        | j                  d	
      }|j                  |      t        t        j                  | dz              dk(  sJ t        j                  | dz        d	   }d|v sJ | dz  |z  }	|d	k(  r@t        j                  |	      dgk(  sJ t        j                  |	dz        g k(  sJ |rJ 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       ? t        t        j                  |	dz              dk(  sJ  d       t        t        j                  |	dz              dk(  r4J t        t        j                  |	dz              dk(  sJ  d       t        t        j                  |	dz              dk(  rJ  y )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   @   K   | ]  } t              |        y wrB   r   .0r/   cached_fs     r    	<genexpr>zHtest_parallel_call_cached_function_defined_in_jupyter.<locals>.<genexpr>        "HA#478#4Q#7"H   )r(   r   c              3   @   K   | ]  } t              |        y wrB   rn   ro   s     r    rr   zHtest_parallel_call_cached_function_defined_in_jupyter.<locals>.<genexpr>   rs   rt      皙?   )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      s   "  VA

 <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VAr"   c                      t               fd} t        dd      }|j                  |       }t        d      D ](  }t	              } |d       t	              |dz   k(  r(J  y)z*Test memory with location=None: no memoizec                 *    j                  d       | S rN   rC   rO   s    r    ffztest_no_memory.<locals>.ff   rQ   r"   Nr   r$   rx   r(   )rY   r   r)   r*   r+   )r   r.   ggr0   rb   r-   s        @r    test_no_memoryr      si    &K T1-F	b	B1X ;!+.
1;#6#::::;r"   c                     t               dfd	}t        || j                         t        | j                  d      }|j	                  |      } |dd      dk(  sJ y)	z3Test memory with a function with keyword arguments.Nc                 *    j                  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     sS    &K ;7V^^Q7FQA"1###r"   c                 Z    t               fdt        fd| j                         y)z*Test memory with a function with a lambda.c                 *    j                  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     s"    &K
 +[&..Ir"   c                 B   t        | j                  d      }|j                  d        }|}|j                  d        }|}t        t              5 } |d        |d       ddd       t              dk(  sJ dt        |d   j                        v sJ y# 1 sw Y   6xY w)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7F\\  	A\\  	A	%	& (	!	! x=A#hqk112222 s   BBc                 2   t        | j                  d      }|j                  d       }|j                  d       }t        t              5 } |d      dk(  sJ  |d      dk(  sJ  |d      dk(  sJ 	 d d d        t              dk(  sJ y # 1 sw Y   xY w)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   rx   )r   rZ   r)   r   r	   r+   )r`   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                    t        | j                  d      }t        d      }|j                  |      }t        d      }|j                  |      }t	        t
              5 } |d        |d        |d       d d d        t              dk(  sJ dt        |d   j                        j                         v sJ y # 1 sw Y   DxY w)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7F	m	B	b	B	o	B	b	B	%	& (
1
1
1
 x=Ac(1+"5"56<<>>>> s   B;;Cc                     t               fd}ddl} |j                  |d      }t        || j                         y)z#Test memory with functools.partial.c                 *    j                  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   \  s8    &K
  y  q)H+v~~>r"   c                     t        | j                  d      }t        d      }|j                  |      } |d      dk(  sJ y)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  s9    V^^Q7F]A	aBa5A::r"   c                 >    t        |       }| j                  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    
 FEHHTNLr"   c                     t        | j                  d      }|j                  t              } |       dk(  sJ  |       dk(  sJ y)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     sC     V^^Q7F<<()D 6Q;; 6Q;;r"   rT   rR   c                 ~  	 t               	d	fd	}t        | j                  |d      }|j                  |      }t        j
                  j                  d      }t        d      D ]V  }|j                  d      }t        d      D ]5  }t	        j                   ||      |k(        sJ t        	      |dz   k(  r5J  X y)	z.Test memory with a function with numpy arrays.Nc                 *    j                  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!LF||AH
))


"C1X -h'q 	-A66(1+*+++{#q1u,,,	--r"   c                 X   t        | j                  dd      }|j                         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 y)	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     s    V^^sAFF\\^  	
AaAaAa###66S==a###66S== 	
	JJLf% 5UKHaA !Q&&&5M-a0000a###66S==r"   c                     t        | j                  d      } G d dt              |j                  d	fd	       } |        t	        d      D ]  }t              5   |d       ddd         y# 1 sw Y   +xY w)
z+Smoketest the exception handling of Memory.r   r$   c                       e Zd Zy)*test_memory_exception.<locals>.MyExceptionN__name__r_   __qualname__r   r"   r    MyExceptionr         r"   r   c                     | ry 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     sz    V^^Q7Fi  \\ 
 C1X K  	aD	 		 	s   	A11A:	c                 @   t        | j                  d      }t               |j                  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 y	)z!Test the ignore feature of memoryr   r$   r   ignorer(   c                 (    j                  d       y 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7F&K\\#\   88ua1I{q   a1I{q   a1I{q   r"   c                 P   t        | j                  d      }t               d }|j                  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 y
)z9Test the ignore feature of memory on a decorated functionr   r$   c                 B     t        j                          fd       }|S )Nc                       | i |S rB   r   )argskwargsr!   s     r    wrappedz?test_memory_ignore_decorated.<locals>.decorate.<locals>.wrapped  s    d%f%%r"   )r   wraps)r!   r   s   ` r    decoratez.test_memory_ignore_decorated.<locals>.decorate  s%    			& 
	& r"   r   r   r(   c                 (    j                  d       y 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7F&K \\#\    88ua1I{q   a1I{q   a1I{q   r"   c                     t        | j                  d      }|j                  d        } |d      dk(  sJ  |d      dk(  sJ  |d      dk(  sJ y)	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    sd    
 V^^Q7F\\  A;!a=A a=Ar"   zignore, verbose, mmap_moder   d   rS   c                     t        | j                  d      }|j                  |||      d        }|j                  |k(  sJ |j                  |k(  sJ |j
                  |k(  sJ y)z7Check cache may be called with kwargs before decoratingr   r$   )r   r&   rT   c                      y 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  "  sn     V^^Q7F\\I\F G 88v::   ;;)###r"   c                    t        | j                  d      }t        j                  d      }|j	                  d        | j
                  dg| j                  }|j                  t              }t        t              }t        j                  j                  |j                  j                  |      }||k(  sJ t        j                  j                  |      sJ |j                  t        j                  j                  |j                  j                        k(  sJ t        j                           |j#                         rJ t        j                  j                  t        j                  j                  |d            sJ |j#                         sJ |j%                  d      }t        j                  j                  |j                  j                  |j&                  |      } |d      }t        j                  j                  |      sJ t        j(                  t        j                  j                  |d             | |d      k(  sJ y )	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7F>>#DKK6;;x'$'//DQA$Q'Gww||AOO44g>Ht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                    t        | j                  d      }|j                  t              } |d      }t	        j
                  t	        j                  |            }|j                  d      }t        j                  j                  |j                  j                  |j                  |      }t        j                  j                  |      sJ ||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                  |             |j                  t              }t	        j
                  t	        j                  |            } |d       y )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  s6   V^^Q7FQAqTFV\\!_%AnnQGaoo66		7KJ77>>*%%%Q__..		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                    t        t        | j                  fd      t        | j                  d      j	                  t        fd      fD ]p  }|j                  d      }t        |t              sJ |rJ  |d      dk(  sJ |j                  d      }t        |t              sJ |k(  sJ |j                          r t        t              }|j                  d      rJ y )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  s     	v~~9W	
 	288)G 	9 	
	  ))!,&$'''zAw!||))!,&$'''----

" AD''****r"   c                 Z   t        t        t        | j                        t	        t              t        | j                  d      j                  t              t        d       j                  t              ft        t        t        t        f      D ]  \  }} |d      dk(  sJ |j                  d      }t        ||      sJ |j                         dk(  sJ |j                          t        t              5  |j                          d d d        |j                           y # 1 sw Y   xY w)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_shelver1  ~  s     !V^^,QFNNA6<<Q?D!''*		
 
,o?QR f Aw!||%%a(&&)))zz|q   H 	JJL	#	 	s   5D!!D*	c                    | j                  d      }|j                  d       t        j                  |j                        j
                  }t        j                  d       |j                         dk(  sJ |t        j                  |j                        j
                  k(  rt        j                  d       t        | j                  d      }|j                  t              }|j                  d      }t        j                  j                  |j                   j"                  |j$                  |d      } |d      dk(  sJ t        j                  |      j
                  }t        j                  d	       |j'                  d      }t)        |t*              sJ t        j                  |      j
                  |k(  sJ t        j                  d	       |j-                         dk(  sJ t        j                  |      j
                  |kD  sJ y
)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.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                    t        t        | j                        t        t              fD ]  }| j	                  d      j                  }|j                  d      }t        |d      5 }t        j                  ||       d d d        t        |d      5 }t        j                  |      }d d d        j                         |j                         k(  sJ t        j                  |        y # 1 sw Y   nxY w# 1 sw Y   PxY w)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_picklingrF    s    q&..13CA3FG ;;23;;%%a((D! 	$RKK#	$(D! 	&Rkk"oG	&{{}

,,,
		(	$ 	$	& 	&s   %C)C5)C2	5C>	c                    t        t        | j                        }|j                  d      }t        t        | j                        }|j                  d      }|j	                         |j	                         k(  sJ t        |      t        |      k(  sJ t        t              }t        |       t        |j                  d             t        t        | j                  dt        j                               }|j                  d      }|j	                          t        t        | j                  d      }|j                  d      }|j	                          t        t        | j                  dt        j                               }|j                  d      }|j	                          t        t        | j                  d      }|j                  d      }|j	                          y )Nr      )r&   	timestamp)r&   r%  )r
   r!   rZ   r-  r.  reprr   r   )r`   r,   r(  func2rE  s        r    test_memorized_reprrL    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                    |j                  d      j                  }t        j                  j	                  |d      }d}t        |d      5 }|j                  |       d d d        |j                  |       dd l}t        |j                  d      }|j                  |j                        }	 |	d        |	d        |	d       t        |d      5 }|j                  d	|z          d d d         |	d        |	d       t        j                  |       t        j                   |       d
}t        |d      5 }|j                  |       d d d         |	d        |	d       t        j                  j                  d       t        j                   j#                  d       dd l}|j                  |j                        }	 |	d        |	d       | j%                         \  }
}|
dk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)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_prependrO  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)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&G34H &G03G= H	c                      y rB   r   r   r   s     r    _function_to_cacher`    s    r"   c                     | |z   S rB   r   r_  s     r    _sumrb  #      q5Lr"   c                     | |z  S rB   r   r_  s     r    _productre  '  rc  r"   c                 z   t         j                  t        _        t        | j                  d      }|j                  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        y # 1 sw Y   y xY w)Nr   r$   r(   r   r'   )	rb  r}   r`  r   rZ   r)   r   r	   re  )r`   r.   r!   s      r    *test_memory_in_memory_function_code_changerg  +  s    "&--V^^Q7F'(AQ7a<<Q7a<<	%	& &.&7&7#Aw!||Aw!||	  s   16B11B:c                  <    t        d       } | j                          y )Nr+  )r   r]   )r.   s    r    $test_clear_memory_with_none_locationri  ;  s    T"F
LLNr"   kw1kw2rj  rk  c                    | |||fS rB   r   )r   r   rj  rk  s       r    func_with_kwonly_argsrn  @  s    ac>r"   r   r   returnc                     | |z   S rB   r   r_  s     r    func_with_signaturerq  D  rc  r"   c                    t        | j                  d      }|j                  t              } |ddd      dk(  sJ t	        t
              5 } |dddd	       d d d        j                  d
        |dddd       t	        t
              5 } |dddd	       d d d        |j                  d
       |j                  t        dg      } |dddd      dk(  sJ  |dddd      dk(  sJ y # 1 sw Y   xY w# 1 sw Y   axY w)Nr   r$   r(   r   r'   )rj  )r(   r   r'   rk  rx   )rk  z?Keyword-only parameter 'kw1' was passed as positional parameterrl  rk  r   )r(   r   r'   rx   ignored)r   rZ   r)   rn  r   
ValueErrormatch)r`   r.   func_cachedexcinfos       r    !test_memory_func_with_kwonly_argsrx  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:.C7:Dc                 x    t        | j                  d      }|j                  t              } |dd      dk(  sJ y )Nr   r$   r(   g       @g      @)r   rZ   r)   rq  )r`   r.   rv  s      r    test_memory_func_with_signaturerz  b  s6    V^^Q7F,,23Kq##%%%r"   c                    t        | j                  d      }|j                         d        }t        t	        |            }|D ]
  } ||        t        |      }|D cg c]  }|j                  |       }}|D cg c]7  }t        j                  j                  |j                  j                  ||      9 }	}||	|fS c c}w c c}w )Nr   r$   c                      y)N  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   rP   s    r    get_1000_bytesz(_setup_toy_cache.<locals>.get_1000_bytesl  s    r"   )r   rZ   r)   rY   r*   r   r  r8   r9   r:   r6   r%   )
r`   
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HMH % 	^11::GWMM  =.00 Is    C><Cc                    t        |       \  }}}|j                  j                         }|D cg c]  }|j                   }}t	        |      t	        |      k(  sJ d }|D cg c]
  } ||       }	}|D cg c]  }|j
                   }
}|
|	k(  sJ |D cg c]"  }t        j                  j                  |d      $ }}|D cg c]>  }t        j                  j                  t        j                  j                  |            @ }}|D cg c]  }|j                   }}||k(  sJ y c c}w c c}w c c}w c c}w c c}w c c}w )Nc                     t        j                  |       D cg c]"  }t         j                  j                  | |      $ }}t	        d |D              S c c}w )Nc              3   Z   K   | ]#  }t         j                  j                  |       % y wrB   )r8   r9   getsize)rp   rD  s     r    rr   z:test__get_items.<locals>.get_files_size.<locals>.<genexpr>  s     <2277??2&<s   )+)r8   r   r9   r:   sum)	directoryfn
full_pathss      r    get_files_sizez'test__get_items.<locals>.get_files_size  sD    <>JJy<QRbbggll9b1R
R<<<< Ss   'Ar3   )r  r6   r7   r9   setsizer8   r:   datetimefromtimestampgetatimelast_access)r`   r.   expected_hash_dirsr0   itemsci	hash_dirsr  hash_direxpected_hash_cache_sizeshash_cache_sizesoutput_filenamesr  expected_last_accesseslast_accessess                  r    test__get_itemsr  ~  sH   $4V$<!F  **,E#()R)I)y>S!34444= KT Th!9 T T*/0B008888MVWX|<WW IYBD''(8(8(<=  /44R^^4M42222# * !U0 X 5s$   D+#D08D5'D:AD?Ec                 V   t        | d      \  }}}|j                  j                  d      }|g k(  sJ t        |       \  }}}|j                  j                         }|j                  j                  d      }t	        |      }t
        j                  t        |      t        |            sJ t	        |      |dz
  k(  sJ |j                  j                  d      }t        |      t        |      k(  sJ |j                  j                  d      }|g k(  sJ d}	|j                  j                  |	      }
t        |
      sJ t        |             |j                  j                  d	      }t        |      j                  |      }t        d
 |D              t        d |D              k  sJ y )Nr   )r  1K2Kr(   i   1M  ip  c              3   4   K   | ]  }|j                     y wrB   r  rp   r  s     r    rr   z,test__get_items_to_delete.<locals>.<genexpr>  s     >"r~~>   c              3   4   K   | ]  }|j                     y wrB   r  r  s     r    rr   z,test__get_items_to_delete.<locals>.<genexpr>  s      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9LFAq**??EOb   )9&)A&F#Q  **,E **??EO+,I<<O,c%j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                    t        |       \  }}}|j                  j                         }|j                          |j                  j                         }t	        |      t	        |      k(  sJ |j                  d       |j                  j                         }t	        |      t	        |      k(  sJ |j                  d       |j                  j                         }t
        j                  t        |      t        |            sJ t        |      dk(  sJ d}|j                  |       |j                  j                         }|g k(  sJ y )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    s3   #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                    t        |       \  }}}|j                  j                         }|j                          |j                  j                         }t	        |      t	        |      k(  sJ |j                  d       |j                  j                         }t	        |      t	        |      k(  sJ |j                  d       |j                  j                         }t
        j                  t        |      t        |            sJ t        |      dk(  sJ |j                  d       |j                  j                         }|g k(  sJ y )NrS   )items_limitr   r   r  )r`   r.   r0   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                    dd l }dd l}t        |       \  }}}|j                  j	                         }|j                          |j                  j	                         }t        |      t        |      k(  sJ |j                   |j                  d             |j                  j	                         }t        |      t        |      k(  sJ  |j                  d        |d        |d       |j                   |j                  d             |j                  j	                         }t        j                  t        |      t        |            rJ t        |      dk(  sJ t        j                  t        d	
      5  |j                   |j                  d             d d d         |j                  d       |j                   |j                  d             |j                  j	                         }|g k(  sJ y # 1 sw Y   `xY w)Nr   r(   )days)	age_limitsecondsr   zhas to be a positiveru  gMbP?)r  r   r  r6   r7   r  r  	timedeltar   r  r  r+   r8  r   rt  )r`   r  r   r.   r0   	put_cacher  r  s           r    !test_memory_reduce_size_age_limitr    s   +F3FAy**446O &&002K/"f[&9999 !3!3!3!;<&&002K/"f[&9999 DJJqMbMbM
!3!3!3A!>?&&002K||C,c/.BCCC{q    
z)?	@ E%7X%7%7%CDE DJJu
!3!3!3A!>?&&002K"E Es   ?$HHc                     t        |       \  }}}|j                          t        j                  |j                  j
                        g k(  sJ |j                  d      rJ y )Nrx   )
stacklevel)r  r]   r8   r   r6   r%   r  )r`   r.   r0   ra   s       r    test_memory_clearr    sZ    #F+LFAq
LLN::f**334::: **a*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                 n    t        t        d            D ci c]  }t        |      | }}| r|S dS c c}w )Ng     j@zsimple output)r*   intr   )complex_outputr/   r  s      r    )fast_func_with_conditional_complex_outputr  (  s7    &+CHo63q6196K6(;=o= 7s   2c                     t        | j                        }|j                  t               t	        d      fdt        d      D               |j                         \  }}d}||vsJ ||vsJ y )Nr+  r   rk   c              3   >   K   | ]  } t                       y wrB   rn   rp   r/   rv  s     r    rr   zMtest_cached_function_race_condition_when_persisting_output.<locals>.<genexpr>5  s     @!+w{+-@s   r'   r   )r   rZ   r)   r  r   r*   rV  r`   capfdr.   rS  stderrr   rv  s         @r    :test_cached_function_race_condition_when_persisting_outputr  -  sp    
 V^^,F,,<=KHA@uQx@@%%'NFF
 6M&&&&&&r"   c                     t        | j                        }|j                  t               t	        d      fdt        d      D               |j                         \  }}d}||vsJ ||vsJ y )Nr+  r   rk   c              3   T   K   | ]  } t              |d z  dk(  rdnd       ! yw)r   r   TFNrn   r  s     r    rr   zOtest_cached_function_race_condition_when_persisting_output_2.<locals>.<genexpr>K  s/      @AQUaZTU;s   %(r'   r   )r   rZ   r)   r  r   r*   rV  r  s         @r    <test_cached_function_race_condition_when_persisting_output_2r  A  sy     V^^,F,,HIKHA EJ1X  %%'NFF
 6M&&&&&&r"   c                    t        | j                        }d }|j                  |      }d} ||      \  }}||k(  sJ t        |       t	        ||      } ||      \  }	}
t        |      dk(  sJ d}||d   v sJ |	|k(  sJ |
|kD  sJ t        |       |j                  |      }	 |j                          t        d      # t        $ r%}d}|t        |j                        v sJ Y d }~y d }~ww xY w)	Nr+  c                 X    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DIIK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   rI  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S   )+++ f%++C0I&J
 	
  & #aff+%%%&s   'C 	C0C++C0c                       e Zd ZdZy)IncompleteStoreBackendzAThis backend cannot be instantiated and should raise a TypeError.N)r   r_   r   __doc__r   r"   r    r  r    s    Kr"   r  c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)DummyStoreBackendz(A dummy store backend that does nothing.c                      y)zOpen an item on store.Nr   )selfr   r   s      r    
_open_itemzDummyStoreBackend._open_item      r"   c                      y)z!Check if an item location exists.Nr   r  r%   s     r    _item_existszDummyStoreBackend._item_exists  r  r"   c                      y)z&Move an item from src to dst in store.Nr   )r  srcdsts      r    
_move_itemzDummyStoreBackend._move_item  r  r"   c                      y)zCreate location on store.Nr   r  s     r    create_locationz!DummyStoreBackend.create_location  r  r"   c                      y)z&Check if an object exists in the storeFr   r  objs     r    r  zDummyStoreBackend.exists  s    r"   c                      y)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                      y)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r"   r  invalid_prefixc                     t        t              5 }t        | d        d d d        j                  d       y # 1 sw Y   xY w)Nz&Store backend name should be a string*r   rt  r   ru  )r  rw  s     r    (test_register_invalid_store_backends_keyr    s:     

	 5w~t45MM;<5 5	   7A c                      t        t              5 } t        dd        d d d         j                  d       y # 1 sw Y   xY w)Nfsz.Store backend should inherit StoreBackendBase*r
  rw  s    r    +test_register_invalid_store_backends_objectr    s:     

	 +wtT*+MMCD+ +r  c                      t        t              5 } t        dd       d d d         j                  d       y # 1 sw Y   xY w)Nz/tmp/joblibunknown)r%   backendzUnknown location*)r   	TypeErrorr   ru  r  s    r    !test_memory_default_store_backendr    s8    			 :gy9:MM&': :s	   8Ac                       G d d      }  |        }t        t              5 }t        d|       d d d        d}|t        d   j                        v sJ y # 1 sw Y   (xY w)Nc                       e Zd Zy)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    sn      56	{	 Gxw1EFG	 
 c(1+"5"56666G Gs   AAc                      d} t        | t               | t        ft        j                         v sJ t	        t
              5 }t        | d       d d d        j                  d       y # 1 sw Y   xY w)Nisbfake_locationznCan't instantiate abstract class IncompleteStoreBackend (without an implementation for|with) abstract methods*)r   r  r   r  r   r  r   ru  )backend_namerw  s     r    )test_instanciate_incomplete_store_backendr#    sl     L<)?@01_5J5J5LLLL			 >g|_=>MM	A> >s    A''A0c                      d} t        | t               | t        ft        j                         v sJ t	        | d      }t        |t              sJ y )Ndsbdummy_location)r   r  r   r  r   r   )r"  backend_objs     r    test_dummy_store_backendr(    sO     L<):;+,0E0E0GGGG(7GHKk#4555r"   c                      t        d      } t        d|       }	 |j                  dk(  sJ 	 t        j                  dd       y # t        j                  dd       w xY w)Nsome_folderr  TrV   )r   r   r%   r[   r\   )r9   r'  s     r    0test_instanciate_store_backend_with_pathlib_pathr+    sN    D($7K9##}444m48m48s   A Ac                 .   d}t               }|j                  J t        |       t        |      |j	                  d       k(  sJ |j                  | j                         t        |      |j	                  | j                        k(  sJ t        |       y )Nz-FileSystemStoreBackend(location="{location}")r+  )r   r%   rJ  r   ry   r  rZ   )r`   repr_patternr  s      r    "test_filesystem_store_backend_reprr.    s     CL$&G###Mw<<...==== fnn%w<<...GGGGMr"   c                    d }t        | j                  d      }|j                  |      }d}t        |      |j	                  ||j
                  j                        k(  sJ |j                  dd      }d}t        |      |j	                  |j
                  j                  |j                  |j                        k(  sJ t        |      d	j	                  |j
                  j                  
      k(  sJ y )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   ry   r6   r%   r-  r  r  )r`   r1  r.   memorized_funcmemorized_func_reprmemorized_resultmemorized_result_reprs          r    test_memory_objects_reprr7    s    V^^Q7F\\'*NK~"5"<"<v33<< #= #    &55b"= 	U   $9$@$@%%..%% (( %A %    v;7>>%%.. ?    r"   c                    t        | j                        }|j                  d        }|j                  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 y )Nr+  c                     | dz  S r   r   r   s    r    ra   z'test_memorized_result_pickle.<locals>.g6      !tr"   rx   )r   rZ   r)   r-  r  r  r  r6   r%   r,   r  r   )r`   r.   ra   r5  memorized_result_picklememorized_result_loadss         r    test_memorized_result_pickler=  /  s    
 V^^,F\\  ((+$ll+;<#\\*AB 	&&//!//88	9	9   $:$?$????##'='E'EEEE C(>$????r"   c                     |g }t        |       }t        |      }t        |j                               t        |j                               k(  sJ |j                         D ]  }||v r||   ||   k(  rJ  y rB   )varsr  keys)leftrightignored_attrs	left_vars
right_varsattrs         r    comparerG  G  s}    T
IeJy~~ C
(9$::::  3= *T"22223r"   memory_kwargsr'   r   )rU   r&   r%  	parameterunused)rT   r&   backend_optionsc                 Z   t        dd| j                  i|}t        j                  t        j                  |            }t        |j                  |j                         t        ||t        g d             t        |      t        |      k(  sJ |j                  t              }t        j                  t        j                  |            }t        |j                  |j                         t        ||t        g d             t        |      t        |      k(  sJ |j                  d      }t        j                  t        j                  |            }t        |j                  |j                         t        ||t        g d             t        |      t        |      k(  sJ y )Nr%   )r6   rI  _func_code_id)rC  r(   r   )r   rZ   r  r  r  rG  r6   r  r   r)   r!   r-  )r`   rH  r.   memory_reloadedrv  func_cached_reloadedr5  memorized_result_reloadeds           r    test_memory_pickle_dump_loadrQ  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                    |j                  t        j                         d}t        | j                  d      }|j
                  d        } ||      }d|j                  v sJ |j                          t        | j                  d      }|j
                  d        } ||      }d|j                  vsJ |j                          y )Nr'      r$   c                     | dz  S r   r   r   s    r    r!   ztest_info_log.<locals>.f  r:  r"   Queryingr   c                     | dz  S r   r   r   s    r    r!   ztest_info_log.<locals>.f  r:  r"   )	set_levelloggingINFOr   rZ   r)   textr]   )r`   caplogr   r.   r!   r0   s         r    test_info_logr\    s    
W\\"	AV^^R8F\\  	
!A$$$
LLNV^^Q7F\\  	
!AV[[(((
LLNr"   c                   r    e Zd ZdZddZd Zej                  j                  dddg      d        Z	d	 Z
d
 Zy)TestCacheValidationCallbackz.Tests on parameter `cache_validation_callback`Nc                 D    d|d<   |t        j                  |       |dz  S )NTrunr   r  )r  r   r   delays       r    foozTestCacheValidationCallback.foo  s&    %JJu1ur"   c                     d}t        j                  t        |      5  |j                  d       ddd       y# 1 sw Y   yxY w)z2Test invalid values for `cache_validation_callbackz9cache_validation_callback needs to be callable. Got True.r  Tr"  N)r8  r   rt  r)   )r  r.   ru  s      r    &test_invalid_cache_validation_callbackzBTestCacheValidationCallback.test_invalid_cache_validation_callback  s8    K]]:U3 	9LL4L8	9 	9 	9s	   :Ar  TFc                     |j                  | 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   k7  sJ y)	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   r`  Fr   rx   Nr)   rb  )r  r.   r  r!   d1d2s     `   r    'test_constant_cache_validation_callbackzCTestCacheValidationCallback.test_constant_cache_validation_callback  s}     LLHH&D5  
 %BBx1}}Bx1}}%yy%y0000r"   c                     d }|j                  | 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 y)z*Test cache validity based on run duration.c                     | d   }|dkD  ryy )Ndurationg?Tr   )metadatarn  s     r    r#  z^TestCacheValidationCallback.test_memory_only_cache_long_run.<locals>.cache_validation_callback  s    
+H#~ r"   r   rg  r`  Fr   r   )ra  rx   rw   Nrh  )r  r.   r#  r!   ri  rj  s         r    test_memory_only_cache_long_runz;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                    |j                  | 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 y
)z!Test expiry of old cached resultsg333333?r  r   rg  r`  Fr   rx   r4  N)r)   rb  r   r   r   )r  r.   r!   ri  rj  d3s         r    test_memory_expires_afterz5TestCacheValidationCallback.test_memory_expires_after  s     LLHHc0JTWSX  
 U^eU^eU^BBx1}}Bx1}}

3Bx1}}%yye9}%yyr"   rB   )r   r_   r   r  rb  rd  r8  markr   rk  rp  rs  r   r"   r    r^  r^    sD    49 [[3dE]C1 D14r"   r^  c                   ,    e Zd ZdZed        Zd Zd Zy)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                  | j                  dg      }i } |d|      dk(  sJ  |d|      dk(  sJ |j                  d|      \  }}|dk(  sJ d       t        |t              sJ d       y)Test calling the functionry  r   r   r(   f has not been called properly0Metadata are not returned by MemorizedFunc.call.N)r)   r!   callr   dictr  r.   r!   ry  r   metas         r    test_call_method_memorizedz,TestMemorizedFunc.test_call_method_memorized  s     LLL4G}!!!G}!!!&&G$4Av777v$% 	
>	
%r"   c                     t        | j                        }i } |d|      dk(  sJ  |d|      dk(  sJ |j                  d|      \  }}|dk(  sJ d       t        |t              sJ d       y)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     TVV$G}!!!G}!!!&&G$4Av777v$% 	
>	
%r"   N)r   r_   r   r  staticmethodr!   r  r  r   r"   r    rv  rv    s!    > 

r"   rv  c                       e Zd ZdZd Zd Zy)TestAutoGitignorerw  c                     t        |j                  d            }t        |      }|j                  t              } |d       |dz  }|j                         sJ |j                         dk(  sJ y)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   rP  r   r)   idr  	read_text)r  r`   r%   memcostly_operationgitignore_files         r    test_memory_creates_gitignorez/TestAutoGitignore.test_memory_creates_gitignore  sl     %567X99R=!L0$$&&&'')-VVVVr"   c                    t        |j                  d            }|dz  }d}|j                  |       t        |      } |j	                  t
              d       |j                         sJ |j                         |k(  sJ y)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   rP  
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7!L08!!"23 X		"a$$&&&'')-====r"   N)r   r_   r   r  r  r  r   r"   r    r  r    s    >W>r"   r  r   )rS   )TrB   )wr  r  r   r   rX  r8   os.pathr  r[   rR  r{   r   pathlibr   r8  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  rt  r)  r1  r>  rF  rL  r]  r`  rb  re  rg  ri  rn  r  floatrq  rx  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rY   r  r  r  r  r#  r(  r+  r.  r7  r=  rG  rQ  r\  r^  rv  r  r   r"   r    <module>r     s2     	  	    
     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 >  >r"   