
    HWh                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKJr  SSKJr  SSKJrJr  SSKJrJr  SSKJr  SSKJrJr  SS	KJrJr  SS
KJr  SSKJrJr  SSKJrJ r   SSK!J"r"J#r#  SSK!J$r$  SSK%J&r&J'r'J(r(  SSK)J*r*  StS jr+S r,S r-S r.S r/\R`                  Rb                  \&" SSS/5      S 5       5       r2S r3S r4S r5S r6S r7S r8S  r9S! r:/ 4S" jr;S# r<\"\&" S$SS%/5      S& 5       5       r=\"S' 5       r>S( r?S) r@S* rAS+ rB\&" S,S-/S.S%4/ S/S4/5      S0 5       rCS1 rDS2 rES3 rFS4 rGS5 rHS6 rIS7 rJS8 rKS9 rLS: rMS; rNS< rOS= rPS> rQS?S@SA.SB jrRSC\SSD\TSE\T4SF jrUSG rVSH rWSuSI jrXSJ rYSK rZSL r[SM r\SN r]SO r^SP r_SvSQ jr`\$SR 5       ra\$SS 5       rbST rc " SU SV\5      rd " SW SX\5      re\&" SYS\f" 5       \g" 5       /5      SZ 5       rhS[ riS\ rjS] rkS^ rlS_ rmS` rnSa roSb rpSc rqSwSd jrr\R`                  RM                  SeSfSgSh.S%SiSjSk0Sl./5      Sm 5       rsSn rtSo ru " Sp Sq5      rv " Sr Ss5      rwg)xz
Test the memory module.
    N)Memory)expires_after)MemorizedFuncNotMemorizedFunc)MemorizedResultNotMemorizedResult)_FUNCTION_HASHES)register_store_backend_STORE_BACKENDS)_build_func_identifier_store_backend_factory)JobLibCollisionWarning)Paralleldelayed)StoreBackendBaseFileSystemStoreBackend)
with_numpynp)with_multiprocessing)parametrizeraiseswarns)hashc                     U S-  U-   $ )z2A module-level function for testing purposes.
        )xys     9/usr/lib/python3/dist-packages/joblib/test/test_memory.pyfr    *   s     6A:    c                     [        USS9nUR                  U 5      n [        S5       H7  n[        S5       H%  nU " U5      U:X  d   e[        U5      US-   :X  a  M%   e   M9     g)zGiven a function and an accumulator (a list that grows every
time the function is called), check that the function can be
decorated by memory to be a lazy identity.
r   locationverbose   r      N)r   cacherangelen)funcaccumulatorr$   memoryi_s         r   check_identity_lazyr0   2   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>   A   sY    --77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_recordO   s    r!   warn)setattr)r+   monkeypatch_fixturerF   rE   s      @r   monkeypatch_cached_func_warnrK   H   s'    
 Hf.>?Or!   c           	      :  ^ [        5       mU4S jn[        UTU R                  5        S H  nS Hr  n[        U R                  SX2S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Mt     [        T5      WS-   :X  d   eWR                  US5      W:X  d   e[        T5      US-   :X  a  M   e   SUl
        [        U R                  SS9nUR                  U5      " S5        g)z+Simple test of memory lazy evaluation.
    c                 *   > TR                  S5        U $ Nr'   rB   argr,   s    r   r    "test_memory_integration.<locals>.f_       1
r!   )FT)rN
   )r$   r%   	mmap_modecompressT)ignore_errorsr'   F)rH   __main__r   r#   N)listr0   strpathr   shutilrmtreer(   clearr*   eval
__module__)	tmpdirr    rV   rU   r-   gcurrent_accumulatoroutr,   s	           @r   test_memory_integrationrd   W   s    &K
 ;7 "$IV^^R&/DF MM&..=QAaDGGG"%k"2A$C % ;#6#::::{{1a C''';#6#::::' ". ALV^^Q7F
LLOAr!   call_before_reducingTFc           	        ^
 S GHV  nSnSR                  U5      n[        [        [        R                  " U5      USS95        [        5       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a  [        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      n	OI[        SS9" U
4S jS 5       5      n	[        [        R                  " US-  5      5      S:X  d   eT
" S5        [        [        R                  " US-  5      5      S:X  d   eGM  [        [        R                  " US-  5      5      S:X  d   eT
" S5        [        [        R                  " US-  5      5      S:X  a  GMW   e   g )N)r   r'   z0
        def f(x):
            return x
        z<ipython-input-{}-000000000000>exec)filenamemoder    rX   r'   r   r#   joblibzipython-inputr&   r   n_jobsc              3   F   >#    U  H  n[        T5      " U5      v   M     g 7frA   r   .0r.   cached_fs     r   	<genexpr>Htest_parallel_call_cached_function_defined_in_jupyter.<locals>.<genexpr>        (Nv!):1)=)=v   !)r'   r   c              3   F   >#    U  H  n[        T5      " U5      v   M     g 7frA   rn   ro   s     r   rr   rs      rt   ru      )formatrg   compiletextwrapdedentlocalsr_   __code__co_filenamer   rZ   r(   r*   r7   listdirr   )r`   re   
session_noipython_cell_sourceipython_cell_id	aliased_fr-   f_cache_relative_directoryf_cache_directoryresrq   s             @r   5test_parallel_call_cached_function_defined_in_jupyterr      s>   ( 

 <BB:N 34(	
 HSM	)	 |q   !!--@@@;<<	*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 a((Nv(NN a((Nv(NN2::&7#&=>?1DDD
 rzz"3c"9:;q@@@ rzz"3c"9:;q@@@QK rzz"3c"9:;q@@@[ 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 memoize c                 *   > TR                  S5        U $ rN   rB   rO   s    r   fftest_no_memory.<locals>.ff   rR   r!   Nr   r#   rw   r'   )rY   r   r(   r)   r*   )r   r-   ggr/   rb   r,   s        @r   test_no_memoryr      sd    &K T1-F	b	B1X!+.
1;#6#:::: r!   c                    ^ [        5       mSU4S jjn[        UTU R                  5        [        U R                  SS9nUR	                  U5      nU" SSS9S:X  d   eg)	z3Test memory with a function with keyword arguments.Nc                 *   > TR                  S5        U $ rN   rB   )arg1arg2r,   s     r   ra   test_memory_kwarg.<locals>.g   s    1r!   r   r#      r   )r   r   rN   )rY   r0   rZ   r   r(   )r`   ra   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 $ z3A helper function to define l as a lambda.
        r'   rB   )r   r,   s    r   helper"test_memory_lambda.<locals>.helper	       	1r!   c                    > T" U 5      $ rA   r   )r   r   s    r   <lambda>$test_memory_lambda.<locals>.<lambda>  s	    &)r!   N)rY   r0   rZ   )r`   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_collision
        r   r   s    r   name_collision2test_memory_name_collision.<locals>.name_collision  	     r!   c                     U $ )z0A second function called name_collision
        r   r   s    r   r   r     r   r!   r'   N	collision)r   rZ   r(   r   r   r*   strmessage)r`   r-   r   abwarninfos         r   test_memory_name_collisionr     s    V^^Q7F\\ 
 	A\\ 
 	A	%	&(	!	! 
' x=A#hqk112222 
'	&s   B
B#c                 >   [        U R                  SS9nUR                  S 5      nUR                  S 5      n[        [        5       nU" S5      S:X  d   eU" S5      S:X  d   eU" S5      S:X  d   e S S S 5        [        W5      S:X  d   eg ! , (       d  f       N = f)Nr   r#   c                     U $ rA   r   r   s    r   r   7test_memory_warning_lambda_collisions.<locals>.<lambda>1  s    qr!   c                     U S-   $ rN   r   r   s    r   r   r   2  s    q1ur!   r'   r   rw   )r   rZ   r(   r   r   r*   )r`   r-   r   r   r   s        r   %test_memory_warning_lambda_collisionsr   .  s    V^^Q7F[!A_%A	%	&(tqyytqyytqyy 
' x=A 
'	&s   +B
Bc                    [        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   rZ   r^   r(   r   r   r*   r   r   lower)r`   r-   a1b1r   s        r   'test_memory_warning_collision_detectionr   >  s     V^^Q7F	m	B	b	B	o	B	b	B	%	&(
1
1
1 
'
 x=Ac(1+"5"56<<>>>> 
'	&s   B;;
C	c                    ^ [        5       mU4S jnSSKnUR                  " US5      n[        UTU R                  5        g)z#Test memory with functools.partial.c                 *   > TR                  S5        U$ r   rB   r   r   r,   s     r   r+   !test_memory_partial.<locals>.funcT  r   r!   r   Nr'   )rY   	functoolspartialr0   rZ   )r`   r+   r   functionr,   s       @r   test_memory_partialr   P  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   rZ   r^   r(   )r`   r-   mmms       r   test_memory_evalr   `  s9    V^^Q7F]A	aBa5A::r!   c                 >    [        U 5      nU R                  S5        U$ )zkA function with a side effect in its arguments.

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

https://github.com/joblib/joblib/pull/751
r   r#   c                     U S-   $ rN   r   r   s    r   plus_one,test_memory_args_as_kwargs.<locals>.plus_one
  r   r!   r'   r   r   r&   N)r   rZ   r(   )r`   r-   r  s      r   test_memory_args_as_kwargsr    sd    
 V^^Q7F\\  A;!a=A a=Ar!   zignore, verbose, mmap_moder   d   rT   c                     [        U R                  SS9nUR                  XUS9S 5       nUR                  U:X  d   eUR                  U:X  d   eUR
                  U:X  d   eg)z7Check cache may be called with kwargs before decoratingr   r#   )r   r%   rU   c                     g rA   r   r   s    r   r   "test_partial_decoration.<locals>.z  s    r!   N)r   rZ   r(   r   _verboserU   )r`   r   r%   rU   r-   r   s         r   test_partial_decorationr    sl     V^^Q7F\\I\F G 88v::   ;;)###r!   c                    [        U R                  SS9n[        R                  S5      nUR	                  S5        U R
                  " S/UQ76 R                  nUR                  [        5      n[        [        5      n[        R                  R                  UR                  R                  U5      nXR:X  d   e[        R                  R                  U5      (       d   eUR                  [        R                  R                  UR                  R                  5      :X  d   e[        R                   " 5         UR#                  5       (       a   e[        R                  R                  [        R                  R                  US5      5      (       d   eUR#                  5       (       d   eUR%                  S5      n[        R                  R                  UR                  R                  UR&                  U5      nU" S5      n[        R                  R                  U5      (       d   e[        R(                  " [        R                  R                  US5      5        X" S5      :X  d   eg )	Nr   r#   .r    rj   zfunc_code.pyr'   r2   )r   rZ   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   ra   r!  r$   args_id
output_dirr   s	            r   test_func_dirr%  &  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   rZ   r(   r    pickleloadsdumpsr   r7   r8   r9   r5   r$   r!  r  	load_item)	r`   r-   ra   outputr   r#  r$  memory2gps	            r   test_persistencer.  F  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!   c                    [        [        U R                  5      [        U R                  SS9R	                  [        5      4 H  nUR                  S5      nU(       a   e[        U[        5      (       d   eU" S5      S:X  d   eUR                  S5      nU(       d   e[        U[        5      (       d   eUR                  5         M     g )Nr   r#   r      )	r   r    rZ   r   r(   check_call_in_cacher   boolr]   )r`   r+   results      r   test_check_call_in_cacher4  ]  s    q&..1;AA!DF))!,z&$''''Aw!||))!,v&$''''

F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   r0  )zipr   r    rZ   r   r   r(   r   r   call_and_shelver   getr]   r   KeyError)r`   r+   Resultr3  s       r   test_call_and_shelver<  j  s     ]1fnn=-a0#V^^,-//4uQx#T288;	 -.@,.@BC Aw!||%%a(&))))zz|q   HJJL !C s   4D""
D0	c                    [        U R                  SS9R                  [        5      nUR	                  S5      n[        U[        5      (       d   e[        [        5       nUR                  UR                  :X  d   e S S S 5        [        W5      S:X  d   eS[        US   R                  5      ;   d   eg ! , (       d  f       N>= f)Nr   r#   r   r'   z1The 'argument_hash' attribute has been deprecated)r   rZ   r(   r    r8  r   r   r   DeprecationWarningargument_hashr#  r*   r   r   )r`   r+   r3  r3   s       r   "test_call_and_shelve_argument_hashrA    s     6>>15;;A>D!!!$Ffo....	!	"a##v~~555 
#q6Q;;>qu}}   
#	"s   B55
Cc                 8   U R                  S5      nUR                  S5        [        R                  " UR                  5      R
                  n[        R                  " S5        UR                  5       S:X  d   eU[        R                  " UR                  5      R
                  :X  a  [        R                  " S5        [        U R                  SS9nUR                  [        5      nUR                  S5      n[        R                  R                  UR                   R"                  UR$                  US5      nU" S5      S:X  d   e[        R                  " U5      R
                  n[        R                  " S	5        UR'                  S5      n[)        U[*        5      (       d   e[        R                  " U5      R
                  U:X  d   e[        R                  " S	5        UR-                  5       S:X  d   e[        R                  " U5      R
                  U:  d   eg
)z6Check call_and_shelve only load stored data if needed.test_access      ?z>filesystem does not support fine-grained access time attributer   r#   r   r2   r0  r'   N)r9   r;   r7   statrZ   st_atimetimesleepreadpytestskipr   r(   r    r   r8   r5   r$   r!  r8  r   r   r9  )	r`   test_access_time_filetest_access_timer-   r+   r#  result_pathfirst_access_timer3  s	            r   .test_call_and_shelve_lazily_load_stored_resultrP    s   "KK6.ww4<<=FF 	JJsO %%'=888277#8#@#@AJJJ 	   	! V^^Q7F<<?D"G'',,v33<<#||WlD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    rZ   r   r9   r8  r:   r'  dumploadr9  r7   r"  )r`   r+   rh   r3  fpresult2s         r   test_memorized_picklingrX    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%   r0  )r   r    rZ   r8  r9  reprr   rG  )r`   r+   r3  func2rW  s        r   test_memorized_reprr^    sV   FNN+D!!!$F!V^^,E##A&G::<7;;=(((:e$$$ ADJ		a	 ! FNNB$))+ND!!"%F
JJLFNNB7D!!"%F
JJLFNNAMD!!"%F
JJLFNNA6D!!"%F
JJLr!   c                 4   UR                  S5      R                  n[        R                  R	                  US5      nSn[        US5       nUR                  U5        S S S 5        UR                  U5        SS Kn[        UR                  SS9nUR                  UR                  5      n	U	" S5        U	" S5        U	" S5        [        US5       nUR                  S	U-   5        S S S 5        U	" S5        U	" S5        [        R                  " U5        [        R                   " U5        S
n[        US5       nUR                  U5        S S S 5        U	" S5        U	" S5        [        R                  R                  S5        [        R                   R#                  S5        SS KnUR                  UR                  5      n	U	" S5        U	" S5        U R%                  5       u  pU
S:X  d   eg ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f)N
tmp_importztmp_joblib_.pyz$def f(x):
    print(x)
    return x
r3   r   r#   r'   r   z

z-def f(x):
    print("x=%s" % x)
    return x
z
Reloading
tmp_joblib_z1
2
Reloading
x=1
)mkdirrZ   r7   r8   r9   r:   r;   syspath_prependra  r   r(   r    r[   r\   sysstdoutmodulespop
readouterr)capsysr`   r   dir_namerh   contentmodule_filetmpr-   r    rc   errs               r   test_memory_file_modificationro    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****_ 
	 
	 
	s$   
G%G73H	%
G47
H	
Hc                     g rA   r   r   r   s     r   _function_to_cacherr    s    r!   c                 
    X-   $ rA   r   rq  s     r   _sumrt    	    5Lr!   c                 
    X-  $ rA   r   rq  s     r   _productrw    ru  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&   )	rt  r}   rr  r   rZ   r(   r   r   rw  )r`   r-   r    s      r   *test_memory_in_memory_function_code_changery  "  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 )Nr6  )r   r]   )r-   s    r   $test_clear_memory_with_none_locationr{  2  s    T"F
LLNr!   kw1kw2r|  r}  c                
    XX#4$ rA   r   )r   r   r|  r}  s       r   func_with_kwonly_argsr  7  s    >r!   r   r   returnc                 
    X-   $ rA   r   rq  s     r   func_with_signaturer  ;  ru  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}  rw   )r}  z?Keyword-only parameter 'kw1' was passed as positional parameterr~  r}  r   )r'   r   r&   rw   ignored)r   rZ   r(   r  r   
ValueErrormatch)r`   r-   func_cachedexcinfos       r   !test_memory_func_with_kwonly_argsr  ?  s   V^^Q7F,,45Kq!#'7777 

	wAq!# 
MM  
 1!#	
	wAq!# 
MM   ,,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   rZ   r(   r  )r`   r-   r  s      r   test_memory_func_with_signaturer  [  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  nUR                  U5      PM     nnU Vs/ s H7  n[        R                  R                  UR                  R                  Xh5      PM9     n	nX)U4$ s  snf s  snf )Nr   r#   c                     g)N  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   rP   s    r   get_1000_bytes(_setup_toy_cache.<locals>.get_1000_bytese  s    r!   )r   rZ   r(   rY   r)   r   r   r7   r8   r9   r5   r$   )
r`   
num_inputsr-   r  inputsrP   r!  hash_dirnamesr  full_hashdirss
             r   _setup_toy_cacher  b  s    V^^Q7F\\^  %
#$Fs  %^4G &( & $005 &  (
 %23$1 WW\\.">">"G"G")4$1  3 .00(3s   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  nU" U5      PM     n	nU Vs/ s H  oUR
                  PM     n
nX:X  d   eU Vs/ s H#  n[        R                  R                  US5      PM%     nnU Vs/ s H?  n[        R                  R                  [        R                  R                  U5      5      PMA     nnU Vs/ s H  oUR                  PM     nnX:X  d   eg s  snf s  snf s  snf s  snf s  snf s  snf )Nc                     [         R                  " U 5       Vs/ s H"  n[         R                  R                  X5      PM$     nn[	        S U 5       5      $ s  snf )Nc              3   `   #    U  H$  n[         R                  R                  U5      v   M&     g 7frA   )r7   r8   getsize)rp   rV  s     r   rr   :test__get_items.<locals>.get_files_size.<locals>.<genexpr>  s      <2277??2&&s   ,.)r7   r   r8   r9   sum)	directoryfn
full_pathss      r   get_files_size'test__get_items.<locals>.get_files_size}  sN     "

9 57 5" ggll91 5 	 7<<<<7s   )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  w  sU   $4V$<!F  **,E#()5R5I)y>S!34444= 2;!<1:X "0!91:  !<*/0%B%0888 )23(1H X|<(1  3
 #$"B 	''(8(8(<="  $ /44e^^eM4222) *!<03$ 5s$   D:%D?=E*E	AEEc                 l   [        U SS9u  n  nUR                  R                  S5      nU/ :X  d   e[        U 5      u  pnUR                  R                  5       nUR                  R                  S5      n[	        U5      n[
        R                  [        U5      [        U5      5      (       d   e[	        U5      US-
  :X  d   eUR                  R                  S5      n[        U5      [        U5      :X  d   eUR                  R                  S5      nU/ :X  d   eSn	UR                  R                  U	5      n
[        U
5      (       d   [        U5      5       eUR                  R                  S	5      n[        U5      R                  U5      n[        S
 U 5       5      [        S U 5       5      ::  d   eg )Nr   )r  1K2Kr'   i   1M  ip  c              3   8   #    U  H  oR                   v   M     g 7frA   r  rp   r  s     r   rr   ,test__get_items_to_delete.<locals>.<genexpr>  s     ?)>2)>   c              3   8   #    U  H  oR                   v   M     g 7frA   r  r  s     r   rr   r    s     92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&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?)>??999: ; :r!   c                    [        U 5      u  n  nUR                  R                  5       nUR                  5         UR                  R                  5       n[	        U5      [	        U5      :X  d   eUR                  SS9  UR                  R                  5       n[	        U5      [	        U5      :X  d   eUR                  SS9  UR                  R                  5       n[
        R                  [        U5      [        U5      5      (       d   e[        U5      S:X  d   eSnUR                  US9  UR                  R                  5       nU/ :X  d   eg )Nr  )bytes_limit3Kr   r  r  r5   r6   reduce_sizer  r  r  r*   )r`   r-   r/   ref_cache_itemscache_itemsr  s         r   #test_memory_reduce_size_bytes_limitr    s6   #F+LFAq**446O &&002K/"f[&9999 4(&&002K/"f[&9999 4(&&002K<<K(#o*>????{q     
#89&&002K"r!   c                    [        U 5      u  n  nUR                  R                  5       nUR                  5         UR                  R                  5       n[	        U5      [	        U5      :X  d   eUR                  SS9  UR                  R                  5       n[	        U5      [	        U5      :X  d   eUR                  SS9  UR                  R                  5       n[
        R                  [        U5      [        U5      5      (       d   e[        U5      S:X  d   eUR                  SS9  UR                  R                  5       nU/ :X  d   eg )NrT   )items_limitr   r   r  )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                 >   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UR                  UR                  " SS9S9  UR                  R	                  5       nU/ :X  d   eg )	Nr   r'   )days)	age_limitr>  secondsr   )rG  r  r  r5   r6   r  r  	timedeltarH  r  r  r*   )r`   rG  r  r-   r/   	put_cacher  r  s           r   !test_memory_reduce_size_age_limitr    sn   +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    !3!3A!>?&&002K"r!   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 )Nrw   )
stacklevel)r  r]   r7   r   r5   r$   r  )r`   r-   r/   ra   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 )Nr6  r   rk   c              3   D   >#    U  H  n[        T5      " 5       v   M     g 7frA   rn   rp   r.   r  s     r   rr   Mtest_cached_function_race_condition_when_persisting_output.<locals>.<genexpr>*  s     @x!w{+--xs    r&   r   )r   rZ   r(   r  r   r)   rh  r`   capfdr-   re  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 )Nr6  r   rk   c              3   \   >#    U  H!  n[        T5      " US -  S:X  a  SOS5      v   M#     g7f)r   r   TFNrn   r  s     r   rr   Otest_cached_function_race_condition_when_persisting_output_2.<locals>.<genexpr>A  s1      * (1 {+AEQJDEJJ (s   ),r&   r   )r   rZ   r(   r  r   r)   rh  r  s         @r   <test_cached_function_race_condition_when_persisting_output_2r  6  sq     V^^,F,,HIKA * %a* * %%'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)	Nr6  c                 \    [         R                  " S5        U [         R                   " 5       4$ )Ng{Gz?rG  rH  r  s    r   r+   Itest_memory_recomputes_after_an_error_while_loading_results.<locals>.funcR  s!     	

4DIIKr!   rP   r'   r   r   z<It normally not possible to load a corrupted MemorizedResultzis corrupted)r   rZ   r(   r>   rK   r*   r8  r9  AssertionErrorr:  r   r  )r`   r   r-   r+   cached_func	input_argrP   r[  r   recomputed_argrecomputed_timestampr   	referenceer   s                  r   ;test_memory_recomputes_after_an_error_while_loading_resultsr  N  s   V^^,F  ,,t$KI +NC  f% 5[N+6s+;(N !Q&&&5Ma0000   +++ f%++C0I&
 	
  & #aff+%%%&s   #B> >
C/C**C/c                       \ rS rSrSrSrg)IncompleteStoreBackendi}  zAThis backend cannot be instantiated and should raise a TypeError.r   N)r   r_   r   r   __doc__r   r   r!   r   r  r  }  s    Kr!   r  c                   H    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSrg)DummyStoreBackendi  z(A dummy store backend that does nothing.c                     g)zOpen an item on store.Nr   )selfr  r  s      r   
_open_itemDummyStoreBackend._open_item      r!   c                     g)z!Check if an item location exists.Nr   r  r$   s     r   _item_existsDummyStoreBackend._item_exists  r  r!   c                     g)z&Move an item from src to dst in store.Nr   )r  srcdsts      r   
_move_itemDummyStoreBackend._move_item  r  r!   c                     g)zCreate location on store.Nr   r  s     r   create_location!DummyStoreBackend.create_location  r  r!   c                     g)z&Check if an object exists in the storeFr   r  objs     r   r  DummyStoreBackend.exists  s    r!   c                     g)zClear object on storeNr   r  s     r   clear_location DummyStoreBackend.clear_location  r  r!   c                     / $ )z3Returns the whole list of items available in cache.r   )r  s    r   r6   DummyStoreBackend.get_items  s    	r!   c                     g)zConfigure the storeNr   )r  r$   r  r  s       r   	configureDummyStoreBackend.configure  r  r!   r   N)r   r_   r   r   r  r  r  r  r  r  r   r6   r%  r   r   r!   r   r	  r	    s-    2r!   r	  invalid_prefixc                     [        [        5       n[        U S 5        S S S 5        WR                  S5        g ! , (       d  f       N = f)Nz&Store backend name should be a string*r   r  r
   r  )r'  r  s     r   (test_register_invalid_store_backends_keyr*    s3     

	w~t4 
MM;< 
		   7
Ac                      [        [        5       n [        SS 5        S S S 5        W R                  S5        g ! , (       d  f       N = f)Nfsz.Store backend should inherit StoreBackendBase*r)  r  s    r   +test_register_invalid_store_backends_objectr/    s3     

	wtT* 
MMCD 
	r+  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  r.  s    r   !test_memory_default_store_backendr4    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   NonSupportedLocationClassr7    r   r!   r8  localr6  zbInstantiating a backend using a NonSupportedLocationClass as a location is not supported by joblibr   )r   UserWarningr   r   r   )r8  unsupported_locationr   expected_mesages       r   %test_warning_on_unknown_location_typer=    s^     46	{	xw1EF 
-O 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   r3  r   r  )backend_namer  s     r   )test_instanciate_incomplete_store_backendrB    sf     L<)?@01_5J5J5LLLL			g|_= 
MM K L 
	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   )rA  backend_objs     r   test_dummy_store_backendrG    sR     L<):;+,0E0E0GGGG(7GHKk#45555r!   c                  l    [         R                  " S5      n [        SU 5      nUR                  S:X  d   eg )Nsome_folderr9  )pathlibPathr   r$   )r8   rF  s     r   0test_instanciate_store_backend_with_pathlib_pathrL    s0    <<&D($7K=000r!   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}")r6  )r   r$   r\  r   rx   r%  rZ   )r`   repr_patternr2  s      r   "test_filesystem_store_backend_reprrO    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	                  UUR
                  R                  S9:X  d   eUR                  SS5      nSn[        U5      UR	                  UR
                  R                  UR                  UR                  S9:X  d   e[        U5      S	R	                  UR
                  R                  S
9:X  d   eg )Nc                 
    X-   $ rA   r   rq  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})r6  )
r   rZ   r(   r   rx   r5   r$   r8  r!  r#  )r`   rR  r-   memorized_funcmemorized_func_reprmemorized_resultmemorized_result_reprs          r   test_memory_objects_reprrY    s    V^^Q7F\\'*NK~"5"<"<%%.. #= #0 0 0 0 &55b"=C  $9$@$@%%..%% (( %A %* * * *
 v;7>>%%.. ? 0 0 0 0r!   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 )Nr6  c                     U S-  $ r   r   r   s    r   ra   'test_memorized_result_pickle.<locals>.g!  s    !tr!   rw   )r   rZ   r(   r8  r'  r)  r(  r5   r$   r+   r#  r   )r`   r-   ra   rW  memorized_result_picklememorized_result_loadss         r   test_memorized_result_pickler_    s    
 V^^,F\\  ((+$ll+;<#\\*AB))22,,556 6 6  $:$?$????##'='E'EEEE C(>$????r!   c                     Uc  / n[        U 5      n[        U5      n[        UR                  5       5      [        UR                  5       5      :X  d   eUR                  5        H  nXR;   a  M
  X5   XE   :X  a  M   e   g rA   )varsr  keys)leftrightignored_attrs	left_vars
right_varsattrs         r   compareri  0  sr    T
IeJy~~ C
(9$::::  *"2222 !r!   memory_kwargsr&   r   )rV   r%   r0  	parameterunused)rU   r%   backend_optionsc                 T   [        SSU R                  0UD6n[        R                  " [        R                  " U5      5      n[        UR                  UR                  5        [        X#[        / 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        [        XE[        / 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        [        Xg[        / SQ5      S9  [        U5      [        U5      :X  d   eg )Nr$   )r5   r[  _func_code_id)re  r'   r   )r   rZ   r'  r(  r)  ri  r5   r  r   r(   r    r8  )r`   rj  r-   memory_reloadedr  func_cached_reloadedrW  memorized_result_reloadeds           r   test_memory_pickle_dump_loadrs  =  sT   
 =V^^=}=Fll6<<#78O F  /"?"?@FMNP<40000,,q/K!<<[(AB K%%';'I'IJKMNP%9 :::: #2215 &V\\:J-K L**%335MNP !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>.fg      Avr!   Queryingr   c                     U S-  $ r   r   r   s    r   r    rw  q  rx  r!   )	set_levelloggingINFOr   rZ   r(   textr]   )r`   caplogr   r-   r    r/   s         r   test_info_logr  a  s    
W\\"	AV^^R8F\\  	
!A$$$
LLNV^^Q7F\\  	
!AV[[(((
LLNr!   c                     SSK Jn  US:  a  [        S5      e[        R                  " [        SS9   [        U R                  SS9nS S S 5        g ! , (       d  f       g = f)	Nr   )__version__z1.5z6Bytes limit is deprecated and should be removed by 1.4r  r  r  )r$   r  )rj   r  r?  rJ  r   r   rZ   )r`   r  r/   s      r   test_deprecated_bytes_limitr  z  sJ    "e D
 	
 
(	>FNN= 
?	>	>s   A
A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  T)cache_validation_callbackN)rJ  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consider_cache_validTFc                    ^ UR                  U R                  U4S jS/S9nSS0SS0pTU" SU5      S:X  d   eU" SU5      S:X  d   eUS   (       d   eUS   T:w  d   eg)	zTest expiry of old resultsc                    > T$ rA   r   )r/   r  s    r   r   UTestCacheValidationCallback.test_constant_cache_validation_callback.<locals>.<lambda>  s    :Nr!   r   r  r   r  Fr   rw   Nr(   r  )r  r-   r  r    d1d2s     `   r   'test_constant_cache_validation_callbackCTestCacheValidationCallback.test_constant_cache_validation_callback  s{    
 LLHH0N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   r  ^TestCacheValidationCallback.test_memory_only_cache_long_run.<locals>.cache_validation_callback  s    
+H#~ r!   r   r  r  Fr   r   )r  rw   g?Nr  )r  r-   r  r    r  r  s         r   test_memory_only_cache_long_run;TestCacheValidationCallback.test_memory_only_cache_long_run  s    	
 LLHH0I5  
 %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   rw   rD  N)r(   r  r   rG  rH  )r  r-   r    r  r  d3s         r   test_memory_expires_after5TestCacheValidationCallback.test_memory_expires_after  s     LLHHb0I5  

 U^eU^eU^Bx1}}Bx1}}

2Bx1}}%yye9}%yyr!   r   rA   )r   r_   r   r   r  r  r  rJ  markr   r  r  r  r   r   r!   r   r  r    sD    49 [[3dE]C1 D1 6r!   r  c                   4    \ rS rSrSr\S 5       rS rS rSr	g)TestMemorizedFunci  z8Tests for the MemorizedFunc and NotMemorizedFunc classesc                 8    UR                  U S5      S-   X'   X   $ )Nr   r'   )r9  )r   counters     r   r    TestMemorizedFunc.f  s!    [[A&*
zr!   c                     UR                  U R                  S/S9n0 nU" SU5      S:X  d   eU" SU5      S:X  d   eUR                  SU5      u  pEUS:X  d   S5       e[        U[        5      (       d   S5       eg)Test calling the functionr  r   r   r'   f has not been called properly0Metadata are not returned by MemorizedFunc.call.N)r(   r    callr   dictr  r-   r    r  r   metas         r   test_call_method_memorized,TestMemorizedFunc.test_call_method_memorized  s     LLL4G}!!!G}!!!&&G$Av777v$%% 	
>	
%r!   c                     [        U R                  5      n0 nU" SU5      S:X  d   eU" SU5      S:X  d   eUR                  SU5      u  pEUS:X  d   S5       e[        U[        5      (       d   S5       eg)r  r   r'   r&   r  r  N)r   r    r  r   r  r  s         r   test_call_method_not_memorized0TestMemorizedFunc.test_call_method_not_memorized  s     TVV$G}!!!G}!!!&&G$Av777v$%% 	
>	
%r!   r   N)
r   r_   r   r   r  staticmethodr    r  r  r   r   r!   r   r  r    s!    > 

r!   r  r   )rT   )TrA   )xr  r   r   r|  r[   r7   os.pathrJ  r'  rd  rG  r  rz   rJ  joblib.memoryr   r   r   r   r   r   r	   r
   r   r   r   r   joblib.parallelr   r   joblib._store_backendsr   r   joblib.test.commonr   r   r   joblib.testingr   r   r   joblib.hashingr   r    r0   r>   rK   rd   r  xfailr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r%  r.  r4  r<  rA  rP  rX  r^  ro  rr  rt  rw  ry  r{  r  r  floatr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  rY   r*  r/  r4  r=  rB  rG  rL  rO  rY  r_  ri  rs  r  r  r  r  r   r!   r   <module>r     s(    	   	    
       ' 9 = * A H 0 - K - 3 5 5 
-
(T #dE]3_A 4 _AD; $ 
J38 ?$?    [4+&- ' -( $ $N,!&!4( )cUC,=-/TN,< =
$=
$@
.
,
!=H	@5+p	
 
 (-% 3 5 U C8$1*34$;N86>9
>
 ' '& ' '.,&^	- 	
!( !H dfdf56= 7=E(7	L61(0:@,
3 '(Q7(+/:H.EGHIE	IE@2>K K\$
 $
r!   