
    3[g                     T   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 ddlmZ ddlmZmZ ddlmZmZ ddlmZ ddlmZmZ dd	lmZmZ dd
lmZ ddlmZmZ ddlmZm Z  ddl!m"Z"m#Z# ddl!m$Z$ ddl%m&Z&m'Z'm(Z( ddl)m*Z* dtd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      d0        ZAd1 ZBd2 ZCd3 ZDd4 ZEd5 ZFd6 ZGd7 ZHd8 ZId9 ZJd: ZKd; ZLd< ZMd= ZNd> ZOd?d@dAdBZPdCeQdDeRdEeRfdFZSdG ZTdH ZUdudIZVdJ ZWdK ZXdL ZYdM ZZdN Z[dO Z\dP Z]dvdQZ^e$dR        Z_e$dS        Z`dT Za G dU dVe      Zb G dW dXe      Zc e&dYd ed        ee       g      dZ        Zfd[ Zgd\ Zhd] Zid^ Zjd_ Zkd` Zlda Zmdb Zndc ZodwddZpej                  jM                  dedfdgdhd%didjdkidlg      dm        Zrdn Zsdo Zt G dp dq      Zu G dr ds      Zvy)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                     | dz  |z   S )z3 A module-level function for testing purposes.
        )xys     R/var/www/html/bid-api/venv/lib/python3.12/site-packages/joblib/test/test_memory.pyfr    *   s     6A:    c                     t        |d      }|j                  |       } t        d      D ]2  }t        d      D ]"  } | |      |k(  sJ t        |      |dz   k(  r"J  4 y)z Given 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                     | 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>   A   sY    --77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_recordO   s    r!   warn)setattr)r+   monkeypatch_fixturerF   rE   s      @r   monkeypatch_cached_func_warnrJ   H   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>.f_       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_integrationrb   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FLLOAr!   call_before_reducingTFc                   
 dD ]A  }d}dj                  |      }t        t        t        j                  |      |d             t               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(  rt        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              }	nI t        d      
fddD              }	t        t        j                  |dz              dk(  sJ  
d       t        t        j                  |dz              dk(  rJ t        t        j                  |dz              dk(  sJ  
d       t        t        j                  |dz              dk(  rBJ  y )N)r   r'   z0
        def f(x):
            return x
        z<ipython-input-{}-000000000000>exec)filenamemoder    rV   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>        (Nv!):):1)=v   )r'   r   c              3   @   K   | ]  } t              |        y wrA   rl   rm   s     r   rp   zHtest_parallel_call_cached_function_defined_in_jupyter.<locals>.<genexpr>   rq   rr      )formatre   compiletextwrapdedentlocalsr]   __code__co_filenamer   rX   r(   r*   r7   listdirr   )r^   rc   
session_noipython_cell_sourceipython_cell_id	aliased_fr-   f_cache_relative_directoryf_cache_directoryresro   s             @r   5test_parallel_call_cached_function_defined_in_jupyterr      sB   & 

 <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 )ha((Nv(NN )ha((Nv(NN2::&7#&=>?1DDD
 rzz"3c"9:;q@@@ rzz"3c"9:;q@@@QK rzz"3c"9:;q@@@[ 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 memoize c                 *    j                  d       | S rM   rB   rN   s    r   ffztest_no_memory.<locals>.ff   rP   r!   Nr   r#   rt   r'   )rW   r   r(   r)   r*   )r   r-   ggr/   r`   r,   s        @r   test_no_memoryr      sd    &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)	z4 Test 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   )rW   r0   rX   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 z4 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)rW   r0   rX   )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 )z0 A first function called name_collision
        r   r   s    r   name_collisionz2test_memory_name_collision.<locals>.name_collision  	     r!   c                     | S )z1 A second function called name_collision
        r   r   s    r   r   z2test_memory_name_collision.<locals>.name_collision  r   r!   r'   N	collision)r   rX   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>1  s    qr!   c                     | dz   S rM   r   r   s    r   r   z7test_memory_warning_lambda_collisions.<locals>.<lambda>2  s    q1ur!   r'   r   rt   )r   rX   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   rX   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                     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>.funcT  r   r!   r   Nr'   )rW   	functoolspartialr0   rX   )r^   r+   r   functionr,   s       @r   test_memory_partialr   P  s8    &K  y  q)H+v~~>r!   c                     t        | j                  d      }t        d      }|j                  |      } |d      dk(  sJ y)zF Smoke test memory with a function with a function defined in an eval.r   r#   r   r'   N)r   rX   r\   r(   )r^   r-   mmms       r   test_memory_evalr   `  s9    V^^Q7F]A	aBa5A::r!   c                 >    t        |       }| j                  d       |S )zx A 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                     t        | j                  d      }|j                  t              } |       dk(  sJ  |       dk(  sJ y)zx Check that if a function has a side effect in its arguments, it
        should use the hash of changing arguments.
    r   r#   r'   N)r   rX   r(   r   )r^   r-   r+   s      r   test_argument_changer   t  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   )rW   r   rX   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F||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   rX   r(   r   ones
isinstancememmaprg   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)
z1 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   rX   	Exceptionr(   r)   r   )r^   r-   r   r/   r   s       @r   test_memory_exceptionr     sl     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 memory r   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   rX   rW   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
)z; Test the ignore feature of memory on a decorated function r   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   rX   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   rX   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    rh   zfunc_code.pyr'   r2   )r   rX   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  &  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   rX   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  F  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!   c                 l   t        t        | j                        t        | j                  d      j	                  t              fD ]m  }|j                  d      }|rJ t        |t              sJ  |d      dk(  sJ |j                  d      }|sJ t        |t              sJ |j                          o y )Nr   r#   r      )	r   r    rX   r   r(   check_call_in_cacher   boolr[   )r^   r+   results      r   test_check_call_in_cacher  ]  s    q&..1;AA!DF))!,z&$'''Aw!||))!,v&$'''

F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    rX   r   r   r(   r   r   call_and_shelver   getr[   r   KeyError)r^   r+   Resultr  s       r   test_call_and_shelver'  j  s     ]1fnn=-a0#V^^,-//4uQx#T288;	 -.@,.@BCf Aw!||%%a(&&)))zz|q   HJJL !C s   5D!!D*	c                 v   t        | j                  d      j                  t              }|j	                  d      }t        |t              sJ t        t              5 }|j                  |j                  k(  sJ 	 d d d        t              dk(  sJ dt        |d   j                        v sJ y # 1 sw Y   6xY w)Nr   r#   r   r'   z1The 'argument_hash' attribute has been deprecated)r   rX   r(   r    r#  r   r   r   DeprecationWarningargument_hashr  r*   r   r   )r^   r+   r  r3   s       r   "test_call_and_shelve_argument_hashr,    s     6>>15;;A>D!!!$Ffo...	!	"a##v~~555 
#q6Q;;>qu}}   
#	"s   B//B8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   statrX   st_atimetimesleep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 	   	! V^^Q7F<<?D"G'',,v33<<#||WlD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    rX   r   r9   r#  r:   r  dumploadr$  r7   r  )r^   r+   rf   r  fpresult2s         r   test_memorized_picklingrC    s    q&..13CA3FG;;23;;%%a((D!RKK# "(D!Rkk"oG "{{}

,,,
		( H "!!!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    rX   r#  r$  reprr   r2  )r^   r+   r  func2rB  s        r   test_memorized_reprrI    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
)mkdirrX   r7   r8   r9   r:   r;   syspath_prependrL  r   r(   r    rY   rZ   sysstdoutmodulespop
readouterr)capsysr^   r   dir_namerf   contentmodule_filetmpr-   r    ra   errs               r   test_memory_file_modificationrZ    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&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   _sumr_        q5Lr!   c                     | |z  S rA   r   r\  s     r   _productrb    r`  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&   )	r_  rz   r]  r   rX   r(   r   r   rb  )r^   r-   r    s      r   *test_memory_in_memory_function_code_changerd  "  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_locationrf  2  s    T"F
LLNr!   kw1kw2rg  rh  c                    | |||fS rA   r   )r   r   rg  rh  s       r   func_with_kwonly_argsrk  7  s    ac>r!   r   r   returnc                     | |z   S rA   r   r\  s     r   func_with_signaturern  ;  r`  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&   )rg  )r'   r   r&   rh  rt   )rh  z?Keyword-only parameter 'kw1' was passed as positional parameterri  rh  r   )r'   r   r&   rt   ignored)r   rX   r(   rk  r   
ValueErrormatch)r^   r-   func_cachedexcinfos       r   !test_memory_func_with_kwonly_argsru  ?  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:.C7:Dc                 x    t        | j                  d      }|j                  t              } |dd      dk(  sJ y )Nr   r#   r'   g       @g      @)r   rX   r(   rn  )r^   r-   rs  s      r   test_memory_func_with_signaturerw  [  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_bytese  s    r!   )r   rX   r(   rW   r)   r   r  r7   r8   r9   r5   r$   )
r^   
num_inputsr-   r|  inputsrO   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")74$1  3 =.00(3s    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)rn   rA  s     r   rp   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}  sP     "

9 57 5" ggll9b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  sd   $4V$<!F  **,E#()5R5I)y>S!34444= 2;!<1:X "0!91:  !<*/0%B%08888 )23(1H X|<(1  3
 #$"B 	''(8(8(<="  $ /44eR^^eM42222) *!<03$ 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  rn   r  s     r   rp   z,test__get_items_to_delete.<locals>.<genexpr>  s     ?)>2)>   c              3   4   K   | ]  }|j                     y wrA   r  r  s     r   rp   z,test__get_items_to_delete.<locals>.<genexpr>  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&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?)>??999: ; :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                 R   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 |j                   |j                  d             |j                  j	                         }|g k(  sJ y )	Nr   r'   )days)	age_limitr)  secondsr   )r2  r  r  r5   r6   r  r  	timedeltar3  r  r  r*   )r^   r2  r  r-   r/   	put_cacher  r  s           r   !test_memory_reduce_size_age_limitr    sx   +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    !3!3!3A!>?&&002K"r!   c                     t        |       \  }}}|j                          t        j                  |j                  j
                        g k(  sJ |j                  d      rJ y )Nrt   )
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 )Nrz  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    s8    &+CHo6o3q619oK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   ri   c              3   >   K   | ]  } t                       y wrA   rl   rn   r.   rs  s     r   rp   zMtest_cached_function_race_condition_when_persisting_output.<locals>.<genexpr>*  s     @x!+w{+-xs   r&   r   )r   rX   r(   r  r   r)   rS  r^   capfdr-   rP  stderrr   rs  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   ri   c              3   T   K   | ]  } t              |d z  dk(  rdnd       ! yw)r   r   TFNrl   r  s     r   rp   zOtest_cached_function_race_condition_when_persisting_output_2.<locals>.<genexpr>A  s1      * (1 ,w{+AEQJDEJ (s   %(r&   r   )r   rX   r(   r  r   r)   rS  r  s         @r   <test_cached_function_race_condition_when_persisting_output_2r  6  sy     V^^,F,,HIKHA * %a* * %%'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?r2  r3  r{  s    r   r+   zItest_memory_recomputes_after_an_error_while_loading_results.<locals>.funcR  s!     	

4DIIKr!   rO   r'   r   r   z<It normally not possible to load a corrupted MemorizedResultzis corrupted)r   rX   r(   r>   rJ   r*   r#  r$  AssertionErrorr%  r   r   )r^   r   r-   r+   cached_func	input_argrO   rF  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S   )+++ f%++C0I&
 	
  & #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   rq  r
   rr  )r  rt  s     r   (test_register_invalid_store_backends_keyr    s3     

	w~t4 
MM;< 
		   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  rt  s    r   +test_register_invalid_store_backends_objectr    s3     

	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   rr  r
  s    r   !test_memory_default_store_backendr    s1    			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    s^     46	{	xw1EF 
-O c(1+"5"56666 
	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   rr  )backend_namert  s     r   )test_instanciate_incomplete_store_backendr    sf     L<)?@01_5J5J5LLLL			g|_= 
MM K L 
	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                  h    t        j                  d      } t        d|       }|j                  dk(  sJ y )Nsome_folderr  )pathlibPathr   r$   )r8   r"  s     r   0test_instanciate_store_backend_with_pathlib_pathr(    s0    <<&D($7K=000r!   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$   rG  r   ru   r  rX   )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   rX   r(   r   ru   r5   r$   r#  r  r  )r^   r.  r-   memorized_funcmemorized_func_reprmemorized_resultmemorized_result_reprs          r   test_memory_objects_reprr4    s    V^^Q7F\\'*NK~"5"<"<%%.. #= #0 0 0 0 &55b"=C  $9$@$@%%..%% (( %A %* * * *
 v;7>>%%.. ? 0 0 0 0r!   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>.g!  s    !tr!   rt   )r   rX   r(   r#  r  r  r  r5   r$   r+   r  r   )r^   r-   r_   r2  memorized_result_picklememorized_result_loadss         r   test_memorized_result_pickler9    s    
 V^^,F\\  ((+$ll+;<#\\*AB))22,,556 6 6  $:$?$????##'='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   comparerC  0  sx    T
IeJy~~ C
(9$:::: = *T"2222 !r!   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   rF  _func_code_id)r?  r'   r   )r   rX   r  r  r  rC  r5   r  r   r(   r    r#  )r^   rD  r-   memory_reloadedrs  func_cached_reloadedr2  memorized_result_reloadeds           r   test_memory_pickle_dump_loadrM  =  s\   
 =V^^=}=Fll6<<#78O F  /"?"?@FO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7MNP !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>.fg      Avr!   Queryingr   c                     | dz  S r   r   r   s    r   r    ztest_info_log.<locals>.fq  rQ  r!   )	set_levelloggingINFOr   rX   r(   textr[   )r^   caplogr   r-   r    r/   s         r   test_info_logrY  a  s    
W\\"	AV^^R8F\\  	
!A$$$
LLNV^^Q7F\\  	
!AV[[(((
LLNr!   c                     ddl m} |dk\  rt        d      t        j                  t        d      5  t        | j                  d      }d d d        y # 1 sw Y   y xY w)	Nr   )__version__z1.5z6Bytes limit is deprecated and should be removed by 1.4r  rr  r  )r$   r  )rh   r[  r*  r5  r   r   rX   )r^   r[  r/   s      r   test_deprecated_bytes_limitr]  z  sJ    "e D
 	
 
(	>FNN= 
?	>	>s   AA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\  T)cache_validation_callbackN)r5  r   rq  r(   )r  r-   rr  s      r   &test_invalid_cache_validation_callbackzBTestCacheValidationCallback.test_invalid_cache_validation_callback  s/    K]]:U3LL4L8 433s	   :Aconsider_cache_validTFc                     |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/   rg  s    r   r   zUTestCacheValidationCallback.test_constant_cache_validation_callback.<locals>.<lambda>  s    :Nr!   r   re  r   ra  Fr   rt   Nr(   rc  )r  r-   rg  r    d1d2s     `   r   'test_constant_cache_validation_callbackzCTestCacheValidationCallback.test_constant_cache_validation_callback  s}    
 LLHH0N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   )metadatarq  s     r   re  z^TestCacheValidationCallback.test_memory_only_cache_long_run.<locals>.cache_validation_callback  s    
+H#~ r!   r   rj  ra  Fr   r   )rb  rt   g?Nrk  )r  r-   re  r    rl  rm  s         r   test_memory_only_cache_long_runz;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                    |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   rj  ra  Fr   rt   r/  N)r(   rc  r   r2  r3  )r  r-   r    rl  rm  d3s         r   test_memory_expires_afterz5TestCacheValidationCallback.test_memory_expires_after  s     LLHHb0I5  

 U^eU^eU^BBx1}}Bx1}}

2Bx1}}%yye9}%yyr!   rA   )r   r]   r   r  rc  rf  r5  markr   rn  rs  rv  r   r!   r   r_  r_    sD    49 [[3dE]C1 D1 6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 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_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   ry  ry    s!    > 

r!   ry  r   )rR   )TrA   )wr  r   r   rU  rY   r7   os.pathr&  r  rO  r2  r  rw   r5  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>   rJ   rb   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r'  r,  r;  rC  rI  rZ  r]  r_  rb  rd  rf  rk  r  floatrn  ru  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rW   r  r  r  r  r  r#  r(  r+  r4  r9  rC  rw  rM  rY  r]  r_  ry  r   r!   r   <module>r     s    	   	    
       ' 9 = * A H 0 - K - 3 5 5 
-
(V #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!   