
    e!h              	          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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 Z/ e(dddg      d        Z0d Z1d Z2d Z3d Z4d Z5d Z6d Z7d Z8g fdZ9d Z:e& e(dddg      d               Z;e&d        Z<d  Z=d! Z>d" Z?d# Z@ e(d$d%gd&dfg d'dfg      d(        ZAd) ZBd* ZCej                  jQ                  d+ddg      d,        ZEd- ZFd. ZGd/ ZHd0 ZId1 ZJd2 ZKd3 ZLd4 ZMd5 ZNd6 ZOd7d8d9d:ZPd;eQd<eRd=eRfd>ZSd? ZTd@ ZUdodAZVdB ZWdC ZXdD ZYdE ZZdF Z[dG Z\dH Z]dpdIZ^e%dJ        Z_e%dK        Z`dL Za G dM dNe      Zb G dO dPe      Zc e(dQd ed        ee       g      dR        ZfdS ZgdT ZhdU ZidV ZjdW ZkdX ZldY ZmdZ Znd[ Zodqd\Zpej                  jQ                  d]d^d_d`ddadbdciddg      de        Zqdf Zr G dg dh      Zs G di dj      Zte& e(dkdl ej                  dl       ej                  dl      j                         g      dm               Zwy)rz
Test the memory module.
    N)FileSystemStoreBackendStoreBackendBase)hash)_FUNCTION_HASHES_STORE_BACKENDSJobLibCollisionWarningMemorizedFuncMemorizedResultMemoryNotMemorizedFuncNotMemorizedResult_build_func_identifier_store_backend_factoryexpires_afterregister_store_backend)Paralleldelayed)npwith_multiprocessing
with_numpy)parametrizeraiseswarnsc                     | dz  |z   S )z-A module-level function for testing purposes.    )xys     _/var/www/html/diagnosisapp-backend/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_lazyr0   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_fixturerF   rE   s      @r   monkeypatch_cached_func_warnrJ   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'   rB   argr,   s    r   r    z"test_memory_integration.<locals>.fc       1
r!   )FT)rN
   )r$   r%   	mmap_modecompressTignore_errorsr'   F)rG   __main__r   r#   N)listr0   strpathr   shutilrmtreer(   clearr*   eval
__module__)	tmpdirr    rT   rS   r-   gcurrent_accumulatoroutr,   s	           @r   test_memory_integrationrc   \   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    rW   r'   r   r#   joblibzipython-inputr&   r   n_jobsc              3   @   K   | ]  } t              |        y wrA   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rA   rm   rn   s     r   rq   zHtest_parallel_call_cached_function_defined_in_jupyter.<locals>.<genexpr>   rr   rs      皙?   )formatrf   compiletextwrapdedentr^   __code__co_filenamer   rY   r(   r*   r7   listdirr   r)   timesleep)r_   rd   
session_noipython_cell_sourceipython_cell_id	my_localsr    r-   f_cache_relative_directoryf_cache_directoryr/   rp   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 rM   rB   rN   s    r   ffztest_no_memory.<locals>.ff   rP   r!   Nr   r#   rw   r'   )rX   r   r(   r)   r*   )r   r-   ggr/   ra   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 rM   rB   )arg1arg2r,   s     r   r`   ztest_memory_kwarg.<locals>.g  s    1r!   r   r#      r   )r   r   rM   )rX   r0   rY   r   r(   )r_   r`   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'   rB   )r   r,   s    r   helperz"test_memory_lambda.<locals>.helper      1r!   c                      |       S rA   r   )r   r   s    r   <lambda>z$test_memory_lambda.<locals>.<lambda>  s    &) r!   N)rX   r0   rY   )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   rY   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 rA   r   r   s    r   r   z7test_memory_warning_lambda_collisions.<locals>.<lambda>=  s    q r!   c                     | dz   S rM   r   r   s    r   r   z7test_memory_warning_lambda_collisions.<locals>.<lambda>>  s
    q1u r!   r'   r   rw   )r   rY   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   rY   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   rB   r   r   r,   s     r   r+   z!test_memory_partial.<locals>.func`  r   r!   r   Nr'   )rX   	functoolspartialr0   rY   )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   rY   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*   rC   )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   rY   r(   r   )r_   r-   r+   s      r   test_argument_changer     sC     V^^Q7F<<()D 6Q;; 6Q;;r!   rS   rQ   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 rM   rB   rN   s    r   nztest_memory_numpy.<locals>.n  rP   r!   r   r$   rS   r%   r&   )rR   rR   r'   rA   )rX   r   rY   r(   r   randomRandomStater)   random_sampleallr*   )
r_   rS   r   r-   cached_nrndr.   r   r/   r,   s
            @r   test_memory_numpyr     s     &K V^^y!LF||AH
))


"C1X -h'q 	-A66(1+*+++{#q1u,,,	--r!   c                 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 callrQ   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   rY   r(   r   ones
isinstancememmaprh   gccollectr>   rJ   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 rA   r   )excr   s    r   hz test_memory_exception.<locals>.h  s     r!   r&   r'   N)r   )r   rY   	Exceptionr(   r)   r   )r_   r-   r   r/   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 rM   rB   r   s     r   zztest_memory_ignore.<locals>.z  s    1r!   r   r   Nr'   r   rY   rX   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 rA   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 rM   rB   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 rM   r   r   s    r   plus_onez,test_memory_args_as_kwargs.<locals>.plus_one  r   r!   r'   r   r   r&   N)r   rY   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   rR   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%   rS   c                      y rA   r   r   s    r   r   z"test_partial_decoration.<locals>.z'  s    r!   N)r   rY   r(   r   _verboserS   )r_   r   r%   rS   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    ri   zfunc_code.pyr'   r2   )r   rY   r   splitrC   r9   r(   r    r   r7   r8   r5   r$   existsdirnamer   r\   _check_previous_func_code_get_args_idfunc_idremove)	r_   r-   r8   r`   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   rY   r(   r    pickleloadsdumpsr  r7   r8   r9   r5   r$   r  r  	load_item)	r_   r-   r`   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 rA   r   r/   r  s    r   r   z*test_check_call_in_cache.<locals>.<lambda>k  s    CW r!   cache_validation_callbackr   r#   c                     S rA   r   r   s    r   r   z*test_check_call_in_cache.<locals>.<lambda>n  s    3G r!   r      )
r	   r    rY   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    rY   r   r   r(   r
   r   call_and_shelver   getr\   r   KeyError)r_   r+   Resultr'  s       r   test_call_and_shelver0  ~  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   r2   r$  r'   N)r9   r;   r7   statrY   st_atimer   r   readpytestskipr   r(   r    r  r8   r5   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    rY   r   r9   r,  r:   r  dumploadr-  r7   r  )r_   r+   rg   r'  fpresult2s         r   test_memorized_picklingrE    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    rY   r,  r-  reprr   r   )r_   r+   r'  func2rD  s        r   test_memorized_reprrK    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
r3   r   r#   r'   r   z

z-def f(x):
    print("x=%s" % x)
    return x
z
Reloading
tmp_joblib_z1
2
Reloading
x=1
)mkdirrY   r7   r8   r9   r:   r;   syspath_prependrN  r   r(   r    rZ   r[   sysstdoutmodulespop
readouterr)capsysr_   r   dir_namerg   contentmodule_filetmpr-   r    rb   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 rA   r   r   r   s     r   _function_to_cacher_    s    r!   c                     | |z   S rA   r   r^  s     r   _sumra  #      q5Lr!   c                     | |z  S rA   r   r^  s     r   _productrd  '  rb  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&   )	ra  r|   r_  r   rY   r(   r   r   rd  )r_   r-   r    s      r   *test_memory_in_memory_function_code_changerf  +  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_locationrh  ;  s    T"F
LLNr!   kw1kw2ri  rj  c                    | |||fS rA   r   )r   r   ri  rj  s       r   func_with_kwonly_argsrm  @  s    ac>r!   r   r   returnc                     | |z   S rA   r   r^  s     r   func_with_signaturerp  D  rb  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&   )ri  )r'   r   r&   rj  rw   )rj  z?Keyword-only parameter 'kw1' was passed as positional parameterrk  rj  r   )r'   r   r&   rw   ignored)r   rY   r(   rm  r   
ValueErrormatch)r_   r-   func_cachedexcinfos       r   !test_memory_func_with_kwonly_argsrw  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   rY   r(   rp  )r_   r-   ru  s      r   test_memory_func_with_signaturery  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   rO   s    r   get_1000_bytesz(_setup_toy_cache.<locals>.get_1000_bytesl  s    r!   )r   rY   r(   rX   r)   r   r  r7   r8   r9   r5   r$   )
r_   
num_inputsr-   r~  inputsrO   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rA   )r7   r8   getsize)ro   rC  s     r   rq   z:test__get_items.<locals>.get_files_size.<locals>.<genexpr>  s     <2277??2&<s   )+)r7   r~   r8   r9   sum)	directoryfn
full_pathss      r   get_files_sizez'test__get_items.<locals>.get_files_size  sD    <>JJy<QRbbggll9b1R
R<<<< Ss   'Ar2   )r  r5   r6   r8   setsizer7   r9   datetimefromtimestampgetatimelast_access)r_   r-   expected_hash_dirsr/   itemsci	hash_dirsr  hash_direxpected_hash_cache_sizeshash_cache_sizesoutput_filenamesr  expected_last_accesseslast_accessess                  r   test__get_itemsr  ~  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rA   r  ro   r  s     r   rq   z,test__get_items_to_delete.<locals>.<genexpr>  s     >"r~~>   c              3   4   K   | ]  }|j                     y wrA   r  r  s     r   rq   z,test__get_items_to_delete.<locals>.<genexpr>  s      FFr  )r  r5   _get_items_to_deleter6   r*   r  issubsetsorted
differencemaxmin)r_   r-   r/   items_to_deleteexpected_hash_cachedirsr  	nb_hashesitems_to_delete_2048bitems_to_delete_emptybytes_limit_too_smallitems_to_delete_500bitems_to_delete_6000bsurviving_itemss                r   test__get_items_to_deleter    s   #Fq9LFAq**??EOb   )9&)A&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  r5   r6   reduce_sizer  r  r  r*   )r_   r-   r/   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 )NrR   )items_limitr   r   r  )r_   r-   r/   r  r  s        r   #test_memory_reduce_size_items_limitr    s,   #F+LFAq**446O &&002K/"f[&9999 2&&&002K/"f[&9999 1%&&002K<<K(#o*>???{q    1%&&002K"r!   c                    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rt  gMbP?)r  r   r  r5   r6   r  r  	timedeltar   r  r  r*   r7  r   rs  )r_   r  r   r-   r/   	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 )Nrw   )
stacklevel)r  r\   r7   r~   r5   r$   r  )r_   r-   r/   r`   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   rj   c              3   >   K   | ]  } t                       y wrA   rm   ro   r.   ru  s     r   rq   zMtest_cached_function_race_condition_when_persisting_output.<locals>.<genexpr>5  s     @!+w{+-@s   r&   r   )r   rY   r(   r  r   r)   rU  r_   capfdr-   rR  stderrr   ru  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   rj   c              3   T   K   | ]  } t              |d z  dk(  rdnd       ! yw)r   r   TFNrm   r  s     r   rq   zOtest_cached_function_race_condition_when_persisting_output_2.<locals>.<genexpr>K  s/      @AQUaZTU;s   %(r&   r   )r   rY   r(   r  r   r)   rU  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!   rO   r'   r   r   z<It normally not possible to load a corrupted MemorizedResultzis corrupted)r   rY   r(   r>   rJ   r*   r,  r-  AssertionErrorr.  r   r   )r_   r   r-   r+   cached_func	input_argrO   rH  r   recomputed_argrecomputed_timestampr   	referenceer   s                  r   ;test_memory_recomputes_after_an_error_while_loading_resultsr  Y  s   V^^,F  ,,t$KI +NC ) f% 5[+N+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   r6   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  r6   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   rs  r   rt  )r  rv  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	  rv  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   rt  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   rt  )backend_namerv  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        j                  d      } t        d|       }	 |j                  dk(  sJ 	 t	        j
                  dd       y # t	        j
                  dd       w xY w)Nsome_folderr  TrU   )pathlibPathr   r$   rZ   r[   )r8   r&  s     r   0test_instanciate_store_backend_with_pathlib_pathr,    sR    <<&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$   rI  r   rx   r  rY   )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 rA   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   rY   r(   r   rx   r5   r$   r,  r  r  )r_   r2  r-   memorized_funcmemorized_func_reprmemorized_resultmemorized_result_reprs          r   test_memory_objects_reprr8    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   r`   z'test_memorized_result_pickle.<locals>.g6      !tr!   rw   )r   rY   r(   r,  r  r  r  r5   r$   r+   r  r   )r_   r-   r`   r6  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 rA   )varsr  keys)leftrightignored_attrs	left_vars
right_varsattrs         r   comparerH  G  s}    T
IeJy~~ C
(9$::::  3= *T"22223r!   memory_kwargsr&   r   )rT   r%   r$  	parameterunused)rS   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$   )r5   rH  _func_code_id)rD  r'   r   )r   rY   r  r  r  rH  r5   r  r   r(   r    r,  )r_   rI  r-   memory_reloadedru  func_cached_reloadedr6  memorized_result_reloadeds           r   test_memory_pickle_dump_loadrR  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   rY   r(   textr\   )r_   caplogr   r-   r    r/   s         r   test_info_logr]    s    
W\\"	AV^^R8F\\  	
!A$$$
LLNV^^Q7F\\  	
!AV[[(((
LLNr!   c                   r    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)r7  r   rs  r(   )r  r-   rt  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 rA   r   r   s    r   r   zUTestCacheValidationCallback.test_constant_cache_validation_callback.<locals>.<lambda>  s    0D r!   r   r"  r   ra  Fr   rw   Nr(   rc  )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   )metadataro  s     r   r"  z^TestCacheValidationCallback.test_memory_only_cache_long_run.<locals>.cache_validation_callback  s    
+H#~ r!   r   rh  ra  Fr   r   )rb  rw   rv   Nri  )r  r-   r"  r    rj  rk  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   rh  ra  Fr   rw   r3  N)r(   rc  r   r   r   )r  r-   r    rj  rk  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!   rA   )r   r^   r   r  rc  re  r7  markr   rl  rq  rt  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)TestMemorizedFuncz8Tests 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   rw  rw    s!    > 

r!   rw  r$   test_cache_dirc                    t        |       }t        j                  g dg dg      }|j                  t        j                        } ||       t        j                  |       } 	 t        j                  j                  | d      }d}t        |      5 }||j                         k(  sJ 	 ddd       t        j                  | d       y# 1 sw Y   !xY w# t        j                  | d       w xY w)zoTest that using the memory object automatically creates a `.gitignore` file
    within the new cache directory.)r'   r   r&   )rw   r$     z
.gitignorez%# Created by joblib automatically.
*
NTrU   )r   r   asarrayr(   squarer*  r+  r7   r8   r9   r:   r6  rZ   r[   )r$   memarrcostly_operationpath_to_gitignore_filegitignore_file_contentr    s          r   test_memory_creates_gitignorer    s     
C
**i+
,Cyy+S||H%H4!#h!E!J() 	6Q)QVVX555	6 	hd3		6 	6 	hd3s$   $-C C(C CC C-r   )rR   )TrA   )xr  r  r   r   rY  r7   os.pathr*  r  rZ   rQ  rz   r   r7  joblib._store_backendsr   r   joblib.hashingr   joblib.memoryr   r   r   r	   r
   r   r   r   r   r   r   r   joblib.parallelr   r   joblib.test.commonr   r   r   joblib.testingr   r   r   r    r0   r>   rJ   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  ru  r(  r0  r=  rE  rK  r\  r_  ra  rd  rf  rh  rm  r  floatrp  rw  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rX   r
  r  r  r  r"  r'  r,  r/  r8  r>  rH  rR  r]  r_  rw  r+  resolver  r   r!   r   <module>r     s{     	  	     
    K     . C C 5 5
- +\ #dE]3fA 4fAR; $ 	J34 ?$?    [4+&- ' -& $ $N*!&!6( )cUC,=B~+NO
$ P
$@
. /$?+ @+,.!=H	@6+r	
 
 (-% 3 5 U C4&1*3.%P86"J9
>
 ' '& ' '.*&Z	- 	!( !H dfdf56= 7=E(7"69(@@0
3 1%a[(<ST%E%EP2H HV$
 $
N %&%&..04 4r!   