
    KiC                     p   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J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 r0\)" SSS/5      S 5       r1S r2S r3S r4S r5S r6S r7S r8S r9/ 4S jr:S r;\'\)" SSS/5      S 5       5       r<\'S  5       r=S! r>S" r?S# r@S$ rA\)" S%S&/S'S4/ S(S4/5      S) 5       rBS* rCS+ rD\R                  RS                  S,SS/5      S- 5       rFS. rGS/ rHS0 rIS1 rJS2 rKS3 rLS4 rMS5 rNS6 rOS7 rPS8S9S:.S; jrQS<\RS=\SS>\S4S? jrTS@ rUSA rVSoSB jrWSC rXSD rYSE rZSF r[SG r\SH r]SI r^SpSJ jr_\&SK 5       r`\&SL 5       raSM rb " SN SO\5      rc " SP SQ\5      rd\)" SRS\e" 5       \f" 5       /5      SS 5       rgST rhSU riSV rjSW rkSX rlSY rmSZ rnS[ roS\ rpSqS] jrq\R                  RS                  S^S_S`Sa.SSbScSd0Se./5      Sf 5       rrSg rs " Sh Si5      rt " Sj Sk5      ru " Sl Sm5      rvg)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                     U S-  U-   $ )z-A module-level function for testing purposes.    )xys     Y/var/www/html/dynamic-report/venv/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_lazyr1   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_fixturerG   rF   s      @r    monkeypatch_cached_func_warnrL   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(   rC   argr-   s    r    r!   "test_memory_integration.<locals>.fc       1
r"   )FT)rN
   )r%   r&   	mmap_modecompressTignore_errorsr(   F)rI   __main__r   r$   N)listr1   strpathr   shutilrmtreer)   clearr+   eval
__module__)	tmpdirr!   rW   rV   r.   gcurrent_accumulatoroutr-   s	           @r    test_memory_integrationrf   \   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!   rZ   r(   r   r$   joblibzipython-inputr'   r   n_jobsc              3   F   >#    U  H  n[        T5      " U5      v   M     g 7frB   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rB   rp   rq   s     r    rt   ru      rv   rw      皙?   )formatri   compiletextwrapdedentra   __code__co_filenamer   r\   r)   r+   r8   listdirr   r*   timesleep)rb   rg   
session_noipython_cell_sourceipython_cell_id	my_localsr!   r.   f_cache_relative_directoryf_cache_directoryr0   rs   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 $ rO   rC   rP   s    r    fftest_no_memory.<locals>.ff   rS   r"   Nr   r$   r{   r(   )r[   r   r)   r*   r+   )r   r.   ggr0   rd   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 $ rO   rC   )arg1arg2r-   s     r    rc   test_memory_kwarg.<locals>.g  s    1r"   r   r$      r   )r   r   rO   )r[   r1   r\   r   r)   )rb   rc   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(   rC   )r   r-   s    r    helper"test_memory_lambda.<locals>.helper      1r"   c                    > T" U 5      $ rB   r   )r   r   s    r    <lambda>$test_memory_lambda.<locals>.<lambda>  s	    &)r"   N)r[   r1   r\   )rb   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)rb   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 $ rB   r   r   s    r    r   7test_memory_warning_lambda_collisions.<locals>.<lambda>=  s    qr"   c                     U S-   $ rO   r   r   s    r    r   r   >  s    q1ur"   r(   r   r{   )r   r\   r)   r   r	   r+   )rb   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)rb   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   rC   r   r   r-   s     r    r,   !test_memory_partial.<locals>.func`  r   r"   r   Nr(   )r[   	functoolspartialr1   r\   )rb   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)   )rb   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+   rD   )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   )rb   r.   r,   s      r    test_argument_changer     sC     V^^Q7F<<()D 6Q;; 6Q;;r"   rV   rT   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 $ rO   rC   rP   s    r    ntest_memory_numpy.<locals>.n  rS   r"   r   r%   rV   r&   r'   )rU   rU   r(   rB   )r[   r   r\   r)   r   randomRandomStater*   random_sampleallr+   )
rb   rV   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                 |   [        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 callrT   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memmaprk   gccollectr?   rL   r+   )
rb   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__ra   __qualname____firstlineno____static_attributes__r   r"   r    MyExceptionr         r"   r   c                    > U (       a  Teg rB   r   )excr   s    r    h test_memory_exception.<locals>.h  s     r"   r'   r(   N)r   )r   r\   	Exceptionr)   r*   r   )rb   r.   r   r0   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 rO   rC   r   s     r    ztest_memory_ignore.<locals>.z  s    1r"   r   r   Nr(   r   r\   r[   r)   r   r+   )rb   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$ rB   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 rO   rC   r   s     r    r   'test_memory_ignore_decorated.<locals>.z  s     	1r"   r  r   Nr  r  )rb   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-   $ rO   r   r   s    r    plus_one,test_memory_args_as_kwargs.<locals>.plus_one  r   r"   r(   r   r   r'   N)r   r\   r)   )rb   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   rU   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&   rV   c                     g rB   r   r   s    r    r   "test_partial_decoration.<locals>.z'  s    r"   N)r   r\   r)   r   _verboserV   )rb   r   r&   rV   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!   rl   zfunc_code.pyr(   r3   )r   r\   r   splitrD   r:   r)   r!   r   r8   r9   r6   r%   existsdirnamer   r_   _check_previous_func_code_get_args_idfunc_idremove)	rb   r.   r9   rc   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$  r8   r9   r:   r6   r%   r%  r!  	load_item)	rb   r.   rc   outputr   r'  r(  memory2gps	            r    test_persistencer2  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$ rB   r   r0   r3  s    r    r   *test_check_call_in_cache.<locals>.<lambda>k  s    CWr"   cache_validation_callbackr   r$   c                    > T$ rB   r   r6  s    r    r   r7  n  s    3Gr"   r      )
r
   r!   r\   r   r)   check_call_in_cacher   boolr_   r   )rb   r3  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)rb   r,   Resultr>  s       r    test_call_and_shelverG  ~  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   r3   r;  r(   N)r:   r<   r8   statr\   st_atimer   r   readpytestskipr   r)   r!   r$  r9   r6   r%   r%  rC  r   r   rD  )	rb   test_access_time_filetest_access_timer.   r,   r'  result_pathfirst_access_timer>  s	            r    .test_call_and_shelve_lazily_load_stored_resultrT    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   r:   rC  r;   r+  dumploadrD  r8   r&  )rb   r,   rj   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\   rC  rD  reprr   r   )rb   r,   r>  func2r[  s        r    test_memorized_reprrb    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
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
)mkdirr\   r8   r9   r:   r;   r<   syspath_prependre  r   r)   r!   r]   r^   sysstdoutmodulespop
readouterr)capsysrb   r   dir_namerj   contentmodule_filetmpr.   r!   re   errs               r    test_memory_file_modificationrs    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 rB   r   r   r   s     r    _function_to_cacherv    s    r"   c                 
    X-   $ rB   r   ru  s     r    _sumrx  #  	    5Lr"   c                 
    X-  $ rB   r   ru  s     r    _productr{  '  ry  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'   )	rx  r   rv  r   r\   r)   r   r	   r{  )rb   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 )NrA  )r   r_   )r.   s    r    $test_clear_memory_with_none_locationr  ;  s    T"F
LLNr"   kw1kw2r  r  c                
    XX#4$ rB   r   )r   r   r  r  s       r    func_with_kwonly_argsr  @  s    >r"   r   r   returnc                 
    X-   $ rB   r   ru  s     r    func_with_signaturer  D  ry  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  r{   )r  z?Keyword-only parameter 'kw1' was passed as positional parameterr  r  r   )r(   r   r'   r{   ignored)r   r\   r)   r  r   
ValueErrormatch)rb   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  )rb   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   rQ   s    r    get_1000_bytes(_setup_toy_cache.<locals>.get_1000_bytesl  s    r"   )r   r\   r)   r[   r*   r   r$  r8   r9   r:   r6   r%   )
rb   
num_inputsr.   r  inputsrQ   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rB   )r8   r9   getsize)rr   rZ  s     r    rt   :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_size'test__get_items.<locals>.get_files_size  sE    <>JJy<QR<Qbbggll91<Q
R<<<< Ss   )Ar3   )r  r6   r7   r9   setsizer8   r:   datetimefromtimestampgetatimelast_access)rb   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  ~  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rB   r  rr   r  s     r    rt   ,test__get_items_to_delete.<locals>.<genexpr>  s     >(="~~(=   c              3   8   #    U  H  oR                   v   M     g 7frB   r  r  s     r    rt   r    s      F!02r  )r  r6   _get_items_to_deleter7   r+   r  issubsetsorted
differencemaxmin)rb   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&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  r6   r7   reduce_sizer  r  r  r+   )rb   r.   r0   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 )NrU   )items_limitr   r   r  )rb   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                    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  r6   r7   r  r  	timedeltar   r  r  r+   rN  r   r  )rb   r  r   r.   r0   	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 )Nr{   )
stacklevel)r  r_   r8   r   r6   r%   r#  )rb   r.   r0   rc   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 )NrA  r   rm   c              3   D   >#    U  H  n[        T5      " 5       v   M     g 7frB   rp   rr   r/   r  s     r    rt   Mtest_cached_function_race_condition_when_persisting_output.<locals>.<genexpr>5  s     @x!w{+--xs    r'   r   )r   r\   r)   r  r   r*   rl  rb   capfdr.   ri  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 )NrA  r   rm   c              3   \   >#    U  H!  n[        T5      " US -  S:X  a  SOS5      v   M#     g7f)r   r   TFNrp   r  s     r    rt   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*   rl  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)	NrA  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"   rQ   r(   r   r   z<It normally not possible to load a corrupted MemorizedResultzis corrupted)r   r\   r)   r?   rL   r+   rC  rD  AssertionErrorrE  r   r	  )rb   r   r.   r,   cached_func	input_argrQ   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   ra   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    r7   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   ra   r   r   r  r  r  r  r  r!  r&  r7   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_keyr0    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_objectr5    s3     

	wtT* 
MMCD 
	r1  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  r4  s    r    !test_memory_default_store_backendr:    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>  localrA  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_typerC    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   r9  r   r  )backend_namer  s     r    )test_instanciate_incomplete_store_backendrH    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   )rG  backend_objs     r    test_dummy_store_backendrM    sR     L<):;+,0E0E0GGGG(7GHKk#45555r"   c                      [        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?  TrX   )r   r   r%   r]   r^   )r9   rL  s     r    0test_instanciate_store_backend_with_pathlib_pathrP    sN    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}")rA  )r   r%   r`  r   r|   r+  r\   )rb   repr_patternr8  s      r    "test_filesystem_store_backend_reprrS    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-   $ rB   r   ru  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})rA  )
r   r\   r)   r   r|   r6   r%   rC  r%  r'  )rb   rV  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 )NrA  c                     U S-  $ r   r   r   s    r    rc   'test_memorized_result_pickle.<locals>.g6      !tr"   r{   )r   r\   r)   rC  r+  r-  r,  r6   r%   r,   r'  r   )rb   r.   rc   r[  memorized_result_picklememorized_result_loadss         r    test_memorized_result_picklerd  /  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 rB   )varsr  keys)leftrightignored_attrs	left_vars
right_varsattrs         r    comparern  G  sr    T
IeJy~~ C
(9$::::  *"2222 !r"   memory_kwargsr'   r   )rW   r&   r;  	parameterunused)rV   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%   )r6   r_  _func_code_id)rj  r(   r   )r   r\   r+  r,  r-  rn  r6   r  r   r)   r!   rC  )rb   ro  r.   memory_reloadedr  func_cached_reloadedr[  memorized_result_reloadeds           r    test_memory_pickle_dump_loadrx  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  ra  r"   Queryingr   c                     U S-  $ r   r   r   s    r    r!   r|    ra  r"   )	set_levelloggingINFOr   r\   r)   textr_   )rb   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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  Tr8  N)rN  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r3  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$ rB   r   r6  s    r    r   UTestCacheValidationCallback.test_constant_cache_validation_callback.<locals>.<lambda>  s    0Dr"   r   r9  r   r  Fr   r{   Nr)   r  )r  r.   r3  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    r9  ^TestCacheValidationCallback.test_memory_only_cache_long_run.<locals>.cache_validation_callback  s    
+H#~ r"   r   r  r  Fr   r   )r  r{   rz   Nr  )r  r.   r9  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   r{   rJ  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   rB   )r   ra   r   r   r  r  r  rN  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  8Tests for the MemorizedFunc and NotMemorizedFunc classesc                 8    UR                  U S5      S-   X'   X   $ )Nr   r(   )rD  )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   ra   r   r   r  staticmethodr!   r  r  r   r   r"   r    r  r    s!    > 

r"   r  c                   $    \ rS rSrSrS rS rSrg)TestAutoGitignorei  r  c                     [        UR                  S5      5      n[        U5      nUR                  [        5      nU" S5        US-  nUR                  5       (       d   eUR                  5       S:X  d   eg)zkTest 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   rf  r   r)   idr!  	read_text)r  rb   r%   memcostly_operationgitignore_files         r    test_memory_creates_gitignore/TestAutoGitignore.test_memory_creates_gitignore  so     %567X99R=!L0$$&&&&'')-VVVVr"   c                    [        UR                  S5      5      nUS-  nSnUR                  U5        [        U5      nUR	                  [
        5      " S5        UR                  5       (       d   eUR                  5       U:X  d   eg)znTest 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   rf  
write_textr   r)   r  r!  r  )r  rb   r%   r  existing_contentr  s         r    1test_memory_does_not_overwrite_existing_gitignoreCTestAutoGitignore.test_memory_does_not_overwrite_existing_gitignore  s     %567!L08!!"23 X		"a$$&&&&'')-====r"   r   N)r   ra   r   r   r  r  r  r   r   r"   r    r  r    s    >W>r"   r  r  )rU   )TrB   )wr  r  r   r   r  r8   os.pathr+  r]   rh  r~   r   pathlibr   rN  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?   rL   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r)  r2  r  r?  rG  rT  r\  rb  rs  rv  rx  r{  r}  r  r  r  floatr  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r[   r0  r5  r:  rC  rH  rM  rP  rS  r]  rd  rn  rx  r  r  r  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"   