
    .Ph              	       \   d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZ ddl m!Z!m"Z" ddl#m$Z$m%Z%m&Z& ddl'm(Z(m)Z)m*Z* dod
Z+d Z,d Z-d Z.d Z/ e(dddg          d             Z0d Z1d Z2d Z3d Z4d Z5d Z6d Z7d Z8g fdZ9d Z:e& e(dddg          d                         Z;e&d              Z<d! Z=d" Z>d# Z?d$ Z@ e(d%d&gd'dfg d(dfg          d)             ZAd* ZBd+ ZCejD        (                    d,ddg          d-             ZEd. ZFd/ ZGd0 ZHd1 ZId2 ZJd3 ZKd4 ZLd5 ZMd6 ZNd7 ZOd8d9d:d;ZPd<eQd=eRd>eRfd?ZSd@ ZTdA ZUdpdBZVdC ZWdD ZXdE ZYdF ZZdG Z[dH Z\dI Z]dqdJZ^e%dK             Z_e%dL             Z`dM Za G dN dOe          Zb G dP dQe          Zc e(dRd ed             ee            g          dS             ZfdT ZgdU ZhdV ZidW ZjdX ZkdY ZldZ Zmd[ Znd\ Zodrd]ZpejD        (                    d^d_d`daddbdcddideg          df             Zqdg Zr G dh di          Zs G dj dk          Zte& e(dldm eju        dm           eju        dm          v                                g          dn                         ZwdS )sz
Test the memory module.
    N)FileSystemStoreBackendStoreBackendBase)hash)_FUNCTION_HASHES_STORE_BACKENDSJobLibCollisionWarningMemorizedFuncMemorizedResultMemoryNotMemorizedFuncNotMemorizedResult_build_func_identifier_store_backend_factoryexpires_afterregister_store_backend)Paralleldelayed)npwith_multiprocessing
with_numpy)parametrizeraiseswarns   c                     | dz  |z   S )z-A module-level function for testing purposes.    )xys     W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/joblib/test/test_memory.pyfr!   /   s    a4!8O    c                     t          |d          }|                    |           } t          d          D ]=}t          d          D ]+} | |          |k    sJ t          |          |dz   k    sJ ,>dS )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   r   N)r   cacherangelen)funcaccumulatorr%   memoryi_s         r    check_identity_lazyr0   6   s     Xq111F<<D1XX - -q 	- 	-A477a<<<<{##q1u,,,,,	-- -r"   c                    | j                                         \  }t          j                            |j        d          }t          |d          5 }|                    d           d d d            d S # 1 swxY w Y   d S )N
output.pklwgarbage)store_backend	get_itemsospathjoinopenwrite)r-   single_cache_itemoutput_filenamer!   s       r    corrupt_single_cache_itemr>   E   s    !/99;;gll#4#9<HHO	os	#	# q		                 s   A44A8;A8c                 D    g fd}|                     | d|           S )Nc                 2                         |            d S Nappend)itemrecordeds    r    append_to_recordz6monkeypatch_cached_func_warn.<locals>.append_to_recordS   s    r"   warn)setattr)r+   monkeypatch_fixturerF   rE   s      @r    monkeypatch_cached_func_warnrJ   L   sC    
 H     f.>???Or"   c                    t                      fd}t          || j                   dD ]}dD ]}t          | j        d||          }t	          j        | j        d           |                    |          } |d           |                    d	
           t                    } |d          }t                    |dz   k    sJ |	                    |d          |k    sJ t                    |dz   k    sJ d|_
        t          | j        d          } |                    |          d           dS )z&Simple test of memory lazy evaluation.c                 2                         d           | S Nr   rB   argr,   s    r    r!   z"test_memory_integration.<locals>.fc       1
r"   )FT)rN
   )r%   r&   	mmap_modecompressTignore_errorsr   F)rG   __main__r   r$   N)listr0   strpathr   shutilrmtreer(   clearr*   eval
__module__)	tmpdirr!   rT   rS   r-   gcurrent_accumulatoroutr,   s	           @r    test_memory_integrationrc   \   s   &&K
     ;777 " ; ;$ 	 	I#!	  F M&.====QAAaDDDGGG"%k"2"2!A$$CC;#6#:::::{{1a  C'''';#6#:::::: ALV^Q777FFLLOOAr"   call_before_reducingTFc                    dD ]}d}d                     |          }i }t          t          t          j        |          |d          d |           |d         }d|_         |d          dk    sJ |j        j        |k    sJ t          | j	        d	
          }|
                    |          t          t          j        | dz                      dk    sJ t          j        | dz            d	         }d|v sJ | dz  |z  }	|d	k    rkt          j        |	          dgk    sJ t          j        |	dz            g k    sJ |r[ d           t          t          j        |	dz                      dk    sJ  t          d          fddD                        n t          d          fddD                        t          d          D ]@}
t          t          j        |	dz                      dk    r nt!          j        d           At          t          j        |	dz                      dk    sJ  d           t          t          j        |	dz                      dk    sJ st          t          j        |	dz                      dk    sJ  d           t          t          j        |	dz                      dk    sJ d S )N)r   r   z0
        def f(x):
            return x
        z<ipython-input-{}-000000000000>exec)filenamemoder!   rW   r   r   r$   joblibzipython-inputr'   r   n_jobsc              3   H   K   | ]} t                    |          V  d S rA   r   .0r.   cached_fs     r    	<genexpr>zHtest_parallel_call_cached_function_defined_in_jupyter.<locals>.<genexpr>   6      "H"HA#478#4#4Q#7#7"H"H"H"H"H"Hr"   )r   r   c              3   H   K   | ]} t                    |          V  d S rA   rm   rn   s     r    rq   zHtest_parallel_call_cached_function_defined_in_jupyter.<locals>.<genexpr>   rr   r"      皙?   )formatrf   compiletextwrapdedentr^   __code__co_filenamer   rY   r(   r*   r7   listdirr   r)   timesleep)r_   rd   
session_noipython_cell_sourceipython_cell_id	my_localsr!   r-   f_cache_relative_directoryf_cache_directoryr/   rp   s              @r    5test_parallel_call_cached_function_defined_in_jupyterr      sW   "  VA VA

 <BB:NN	 344(   	
 	
 	
 cN! qttqyyyyz%8888;;;<<??2:fx/0011Q6666%'Z0A%B%B1%E""<<<<<"X-0JJ??:/00SE9999:/#566"<<<<#  2:&7#&=>>??1DDDD #""""H"H"H"H"H"H"HHHHH #""""H"H"H"H"H"H"HHHH r $ $A2:&7#&=>>??1DDJsOOOO2:&7#&=>>??1DDDD
 rz"3c"9::;;q@@@@@ rz"3c"9::;;q@@@@HQKKK rz"3c"9::;;q@@@@@mVA VAr"   c                     t                      fd} t          dd          }|                    |           }t          d          D ]4}t	                    } |d           t	                    |dz   k    sJ 5dS )z*Test memory with location=None: no memoizec                 2                         d           | S rM   rB   rN   s    r    ffztest_no_memory.<locals>.ff   rP   r"   Nr   r$   rv   r   )rX   r   r(   r)   r*   )r   r-   ggr/   ra   r,   s        @r    test_no_memoryr      s    &&K     T1---F	b		B1XX ; ;!+..
1;#6#::::::; ;r"   c                     t                      d	fd	}t          || j                   t          | j        d          }|                    |          } |dd          dk    sJ dS )
z3Test memory with a function with keyword arguments.Nr   c                 2                         d           | S rM   rB   )arg1arg2r,   s     r    r`   ztest_memory_kwarg.<locals>.g  s    1r"   r   r$      r   )r   r   rM   )rX   r0   rY   r   r(   )r_   r`   r-   r,   s      @r    test_memory_kwargr     s    &&K      ;777V^Q777FQA1"1######r"   c                 b    t                      fdt          fd| j                   dS )z*Test memory with a function with a lambda.c                 2                         d           | S z*A helper function to define l as a lambda.r   rB   )r   r,   s    r    helperz"test_memory_lambda.<locals>.helper      1r"   c                      |           S rA   r   )r   r   s    r    <lambda>z$test_memory_lambda.<locals>.<lambda>  s    &&)) r"   N)rX   r0   rY   )r_   r,   r   s    @@r    test_memory_lambdar     sL    &&K    
 ++++[&.IIIIIr"   c                 d   t          | j        d          }|j        d             }|}|j        d             }|}t          t                    5 } |d            |d           ddd           n# 1 swxY w Y   t          |          dk    sJ dt          |d         j                  v sJ dS )z=Check that name collisions with functions will raise warningsr   r$   c                     | S )z&A first function called name_collisionr   r   s    r    name_collisionz2test_memory_name_collision.<locals>.name_collision$  	     r"   c                     | S )z'A second function called name_collisionr   r   s    r    r   z2test_memory_name_collision.<locals>.name_collision+  r   r"   r   N	collision)r   rY   r(   r   r   r*   strmessage)r_   r-   r   abwarninfos         r    test_memory_name_collisionr      s   V^Q777F\  \ 	A\  \ 	A	%	&	& (	!	!               x==A#hqk122222222s   A22A69A6c                 t   t          | j        d          }|                    d           }|                    d           }t          t                    5 } |d          dk    sJ  |d          dk    sJ  |d          dk    sJ 	 d d d            n# 1 swxY w Y   t          |          dk    sJ d S )Nr   r$   c                     | S rA   r   r   s    r    r   z7test_memory_warning_lambda_collisions.<locals>.<lambda>=  s    q r"   c                     | dz   S rM   r   r   s    r    r   z7test_memory_warning_lambda_collisions.<locals>.<lambda>>  s
    q1u r"   r   r   rv   )r   rY   r(   r   r   r*   )r_   r-   r   r   r   s        r    %test_memory_warning_lambda_collisionsr   :  s    V^Q777F[[!!A__%%A	%	&	& (qttqyyyyqttqyyyyqttqyyyyy               x==As   4BBBc                    t          | j        d          }t          d          }|                    |          }t          d          }|                    |          }t	          t
                    5 } |d            |d            |d           d d d            n# 1 swxY w Y   t          |          dk    sJ dt          |d         j                  	                                v sJ d S )Nr   r$   lambda x: xzlambda x: x+1r   r   zcannot detect)
r   rY   r]   r(   r   r   r*   r   r   lower)r_   r-   a1b1r   s        r    'test_memory_warning_collision_detectionr   J  s'    V^Q777F	m		B	b		B	o		B	b		B	%	&	& (
1
1
1              
 x==Ac(1+"566<<>>>>>>>>s   3"B!!B%(B%c                     t                      fd}ddl} |j        |d          }t          || j                   dS )z#Test memory with functools.partial.c                 2                         d           |S r   rB   r   r   r,   s     r    r+   z!test_memory_partial.<locals>.func`  r   r"   r   Nr   )rX   	functoolspartialr0   rY   )r_   r+   r   functionr,   s       @r    test_memory_partialr   \  sa    &&K    
  y q))H+v~>>>>>r"   c                     t          | j        d          }t          d          }|                    |          } |d          dk    sJ dS )zESmoke test memory with a function with a function defined in an eval.r   r$   r   r   N)r   rY   r]   r(   )r_   r-   mmms       r    test_memory_evalr   l  sK    V^Q777F]A	aB2a55A::::::r"   c                 N    t          |           }|                     d           |S )zsA function with a side effect in its arguments.

    Return the length of its argument and append one element.
    N)r*   rC   )r   len_xs     r    count_and_appendr   v  s#    
 FFEHHTNNNLr"   c                     t          | j        d          }|                    t                    } |            dk    sJ  |            dk    sJ dS )zsCheck that if a function has a side effect in its arguments, it
    should use the hash of changing arguments.
    r   r$   r   N)r   rY   r(   r   )r_   r-   r+   s      r    test_argument_changer     sX     V^Q777F<<())D 466Q;;;; 466Q;;;;;;r"   rS   rQ   c                   	 t                      	d	fd	}t          | j        |d          }|                    |          }t          j                            d          }t          d          D ]d}|                    d          }t          d          D ]=}t	          j	         ||          |k              sJ t          	          |dz   k    sJ >edS )	z.Test memory with a function with numpy arrays.Nc                 2                         d           | S rM   rB   rN   s    r    nztest_memory_numpy.<locals>.n  rP   r"   r   r%   rS   r&   r'   )rR   rR   r   rA   )rX   r   rY   r(   r   randomRandomStater)   random_sampleallr*   )
r_   rS   r   r-   cached_nrndr.   r   r/   r,   s
            @r    test_memory_numpyr     s     &&K      V^y!LLLF||AH
)


"
"C1XX - -h''q 	- 	-A6((1++*+++++{##q1u,,,,,	-- -r"   c                 |   t          | j        dd          }|                                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 dS )	z8Check that mmap_mode is respected even at the first callrQ   r   r   c                     | dz  S Nr   r   r   s    r    twicez0test_memory_numpy_check_mmap_mode.<locals>.twice      1ur"   r'   r   Exception while loading resultsN)r   rY   r(   r   ones
isinstancememmaprh   gccollectr>   rJ   r*   )
r_   monkeypatchr-   r   r   r   crecorded_warningsdexception_msgs
             r    !test_memory_numpy_check_mmap_moder     sS    V^sAFFFF\\^^  ^ 	

AaAaAa#####6S====a#####6S==== 	
	JLLLf%%% 5UKHHaA !!Q&&&&5M-a00000a#####6S======r"   c                    t          | j        d          } G d dt                    |j        d	fd	            } |             t	          d          D ]4}t                    5   |d           ddd           n# 1 swxY w Y   5dS )
z+Smoketest the exception handling of Memory.r   r$   c                       e Zd ZdS )*test_memory_exception.<locals>.MyExceptionN__name__r^   __qualname__r   r"   r    MyExceptionr             r"   r   c                     | rd S rA   r   )excr   s    r    hz test_memory_exception.<locals>.h  s     		 	r"   r'   r   N)r   )r   rY   	Exceptionr(   r)   r   )r_   r-   r   r/   r   s       @r    test_memory_exceptionr     s
   V^Q777F    i    \     \
 ACCC1XX  K   	 	AaDDD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   (B  B	B	c                 ~   t          | j        d          }t                      |                    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 d	S )z!Test the ignore feature of memoryr   r$   r   ignorer   c                 2                         d           d S rM   rB   r   s     r    zztest_memory_ignore.<locals>.z  s    1r"   r   r   Nr   r   rY   rX   r(   r   r*   )r_   r-   r   r,   s      @r    test_memory_ignorer     s    V^Q777F&&K\\#\       8uAa1IIII{q    Aa1IIII{q    Aa1IIII{q      r"   c                    t          | j        d          }t                      d }|                    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 d
S )z9Test the ignore feature of memory on a decorated functionr   r$   c                 F     t          j                    fd            }|S )Nc                       | i |S rA   r   )argskwargsr!   s     r    wrappedz?test_memory_ignore_decorated.<locals>.decorate.<locals>.wrapped  s    1d%f%%%r"   )r   wraps)r!   r   s   ` r    decoratez.test_memory_ignore_decorated.<locals>.decorate  s8    				& 	& 	& 	& 
		& r"   r   r   r   c                 2                         d           d S 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777F&&K   \\#\     X   8uAa1IIII{q    Aa1IIII{q    Aa1IIII{q      r"   c                     t          | j        d          }|j        d             } |d          dk    sJ  |d          dk    sJ  |d          dk    sJ dS )	z_Non-regression test against 0.12.0 changes.

    https://github.com/joblib/joblib/pull/751
    r   r$   c                     | dz   S rM   r   r   s    r    plus_onez,test_memory_args_as_kwargs.<locals>.plus_one  r   r"   r   r   r   r'   N)r   rY   r(   )r_   r-   r   s      r    test_memory_args_as_kwargsr    s    
 V^Q777F\  \ 8A;;!8a===A 8a===Ar"   zignore, verbose, mmap_moder   d   rR   c                     t          | j        d          }|                    |||          d             }|j        |k    sJ |j        |k    sJ |j        |k    sJ dS )z7Check cache may be called with kwargs before decoratingr   r$   )r   r&   rS   c                     d S rA   r   r   s    r    r   z"test_partial_decoration.<locals>.z'  s    r"   N)r   rY   r(   r   _verboserS   )r_   r   r&   rS   r-   r   s         r    test_partial_decorationr  "  s     V^Q777F\\I\FF  GF 8v:    ;)######r"   c                    t          | j        d          }t                              d          }|                    d            | j        dg|R  j        }|                    t                    }t          t                    }t          j
                            |j        j        |          }||k    sJ t          j
                            |          sJ |j        t          j
                            |j        j                  k    sJ t          j                     |                                rJ t          j
                            t          j
                            |d                    sJ |                                sJ |                    d          }t          j
                            |j        j        |j        |          } |d          }t          j
                            |          sJ t          j        t          j
                            |d                     | |d          k    sJ d S )	Nr   r$   .r!   ri   zfunc_code.pyr   r2   )r   rY   r   splitrC   r9   r(   r!   r   r7   r8   r5   r%   existsdirnamer   r\   _check_previous_func_code_get_args_idfunc_idremove)	r_   r-   r8   r`   r  r%   args_id
output_dirr   s	            r    test_func_dirr  0  s   V^Q777F>>#DKK6;x'$'''/DQA$Q''Gw||AO4g>>Ht7>>$?bgooao.FGGGGGG
 **,,,,,7>>"',,t^<<=====&&((((( nnQGao6	7KKJ	!A7>>*%%%%%Ibgll:|44555!999999r"   c                 j   t          | j        d          }|                    t                    } |d          }t	          j        t	          j        |                    }|                    d          }t          j	        
                    |j        j        |j        |          }t          j	                            |          s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        |                     |                    t                    }t	          j        t	          j        |                    } |d           d S )Nr   r$   r   )r   rY   r(   r!   pickleloadsdumpsr  r7   r8   r9   r5   r%   r  r
  	load_item)	r_   r-   r`   outputr   r  r  memory2gps	            r    test_persistencer  P  sU   V^Q777FQAQqTTFV\!__%%AnnQGao6	7KKJ7>>*%%%%%Q_..	7/CDDDDDDl6<//00G(G,A,JJJJJ T1---F
Lf%%&&&QA	fl1oo	&	&BBqEEEEEr"   consider_cache_validc                    t          t          | j        fd          t          | j        d                              t          fd          fD ]}|                    d          }t          |t                    sJ |rJ  |d          dk    sJ |                    d          }t          |t                    sJ |k    sJ |                                 t          t                    }|                    d          rJ d S )Nc                     S rA   r   r/   r  s    r    r   z*test_check_call_in_cache.<locals>.<lambda>k  s    CW r"   cache_validation_callbackr   r$   c                     S rA   r   r  s    r    r   z*test_check_call_in_cache.<locals>.<lambda>n  s    3G r"   r      )
r	   r!   rY   r   r(   check_call_in_cacher   boolr\   r   )r_   r  r+   results    `  r    test_check_call_in_cacher'  g  s6    	v~9W9W9W9W	
 	
 	
 	22288)G)G)G)G 	9 	
 	
	   ))!,,&$'''''tAww!||||))!,,&$'''''-----

AD''*******r"   c                    t          t          t          | j                  t	          t                    t          | j        d                              t                    t          d                               t                    ft          t          t          t          f          D ]\  }} |d          dk    sJ |	                    d          }t          ||          sJ |                                dk    sJ |                                 t          t                    5  |                                 d d d            n# 1 swxY w Y   |                                 d S )Nr   r$   r%   r   r#  )zipr	   r!   rY   r   r   r(   r
   r   call_and_shelver   getr\   r   KeyError)r_   r+   Resultr&  s       r    test_call_and_shelver/  ~  s{    !V^,,QFNA666<<Q??D!!!''**		
 
,o?QR   f tAww!||||%%a((&&)))))zz||q    H 	 	JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	# s   (E		E	E	c                    |                      d          }|                    d           t          j        |j                  j        }t          j        d           |                                dk    sJ |t          j        |j                  j        k    rt          j
        d           t          | j        d          }|                    t                    }|                    d          }t          j                             |j        j        |j        |d          } |d          dk    sJ t          j        |          j        }t          j        d	           |                    d          }t)          |t*                    sJ t          j        |          j        |k    sJ t          j        d	           |                                dk    sJ t          j        |          j        |k    sJ d
S )z6Check call_and_shelve only load stored data if needed.test_access      ?z>filesystem does not support fine-grained access time attributer   r$   r   r2   r#  r   N)r9   r;   r7   statrY   st_atimer~   r   readpytestskipr   r(   r!   r  r8   r5   r%   r  r+  r   r
   r,  )	r_   test_access_time_filetest_access_timer-   r+   r  result_pathfirst_access_timer&  s	            r    .test_call_and_shelve_lazily_load_stored_resultr<    s   "KK66...w4<==F 	JsOOO %%''=888827#8#@AAJJJ 	TUUUV^Q777F<<??D""G',,%t|Wl K 477a<<<<,,5JqMMM !!!$$Ffo.....7;(,=====JqMMM ::<<17;(+<<<<<<<r"   c                 8   t          t          | j                  t          t                    fD ]}|                     d          j        }|                    d          }t          |d          5 }t          j        ||           d d d            n# 1 swxY w Y   t          |d          5 }t          j	        |          }d d d            n# 1 swxY w Y   |
                                |
                                k    sJ t          j        |           d S )Nzpickling_test.datr   wbrb)r	   r!   rY   r   r9   r+  r:   r  dumploadr,  r7   r  )r_   r+   rg   r&  fpresult2s         r    test_memorized_picklingrD    st   q&.113CA3F3FG  ;;233;%%a(((D!! 	$RK###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$(D!! 	&Rk"ooG	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&{{}}

,,,,
	( s$   0BB	B	-CC	C	c                 X   t          t          | j                  }|                    d          }t          t          | j                  }|                    d          }|                                |                                k    sJ t          |          t          |          k    sJ t          t                    }t          |           t          |                    d                     t          t          | j        dt          j                              }|                    d          }|                                 t          t          | j        d          }|                    d          }|                                 t          t          | j        dt          j                              }|                    d          }|                                 t          t          | j        d          }|                    d          }|                                 d S )Nr      )r&   	timestamp)r&   r#  )r	   r!   rY   r+  r,  reprr   r~   )r_   r+   r&  func2rC  s        r    test_memorized_reprrJ    s   FN++D!!!$$F!V^,,E##A&&G::<<7;;==((((::e$$$$ ADJJJ		a	 	 !!! FNB$)++NNND!!"%%F
JJLLLFNB777D!!"%%F
JJLLLFNAMMMD!!"%%F
JJLLLFNA666D!!"%%F
JJLLLLLr"   c                    |                     d          j        }t          j                            |d          }d}t          |d          5 }|                    |           d d d            n# 1 swxY w Y   |                    |           dd l}t          |j        d          }|
                    |j                  }	 |	d            |	d            |	d           t          |d          5 }|                    d	|z              d d d            n# 1 swxY w Y    |	d            |	d           t          j        |           t          j         |           d
}t          |d          5 }|                    |           d d d            n# 1 swxY w Y    |	d            |	d           t          j                            d           t          j                            d           dd l}|
                    |j                  }	 |	d            |	d           |                                 \  }
}|
dk    sJ d S )N
tmp_importztmp_joblib_.pyz$def f(x):
    print(x)
    return x
r3   r   r$   r   r   z

z-def f(x):
    print("x=%s" % x)
    return x
z
Reloading
tmp_joblib_z1
2
Reloading
x=1
)mkdirrY   r7   r8   r9   r:   r;   syspath_prependrM  r   r(   r!   rZ   r[   sysstdoutmodulespop
readouterr)capsysr_   r   dir_namerg   contentmodule_filetmpr-   r!   rb   errs               r    test_memory_file_modificationr[    s    ||L))1Hw||H&677H7G	h		 #'"""# # # # # # # # # # # # # # # )))V^Q777FSUAAaDDDAaDDDAaDDD 
h		 ,&7*+++, , , , , , , , , , , , , , , AaDDDAaDDD M(HX@G	h		 #'"""# # # # # # # # # # # # # # # AaDDDAaDDD J]###KOOM"""SUA AaDDDAaDDD  ""HC*******s6   A//A36A34DD D4FFFc                     d S rA   r   r   r   s     r    _function_to_cacher^    s    Dr"   c                     | |z   S rA   r   r]  s     r    _sumr`  #      q5Lr"   c                     | |z  S rA   r   r]  s     r    _productrc  '  ra  r"   c                    t           j        t          _        t          | j        d          }|                    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            d S # 1 swxY w Y   d S )Nr   r$   r   r   r'   )	r`  r{   r^  r   rY   r(   r   r   rc  )r_   r-   r!   s      r    *test_memory_in_memory_function_code_changere  +  s   "&-V^Q777F'((A1Q77a<<<<1Q77a<<<<	%	&	&  &.&7#qAww!||||qAww!|||||	                 s   ?;CCCc                  N    t          d           } |                                  d S )Nr)  )r   r\   )r-   s    r    $test_clear_memory_with_none_locationrg  ;  s#    T"""F
LLNNNNNr"   kw1kw2rh  ri  c                    | |||fS rA   r   )r   r   rh  ri  s       r    func_with_kwonly_argsrl  @  s    ac>r"   r   r   returnc                     | |z   S rA   r   r]  s     r    func_with_signaturero  D  ra  r"   c                 z   t          | j        d          }|                    t                    } |ddd          dk    sJ t	          t
                    5 } |dddd	           d d d            n# 1 swxY w Y   |                    d
            |dddd           t	          t
                    5 } |dddd	           d d d            n# 1 swxY w Y   |                    d
           |                    t          dg          } |dddd          dk    sJ  |dddd          dk    sJ d S )Nr   r$   r   r   r'   )rh  )r   r   r'   ri  rv   )ri  z?Keyword-only parameter 'kw1' was passed as positional parameterrj  ri  r   )r   r   r'   rv   ignored)r   rY   r(   rl  r   
ValueErrormatch)r_   r-   func_cachedexcinfos       r    !test_memory_func_with_kwonly_argsrv  H  s   V^Q777F,,455K;q!###'77777 

		 $wAq!####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $MMSTTT K1!####	
		 $wAq!####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $MMSTTT ,,4eW,EEK;q!***l::::;q!	222lBBBBBBs$   A55A9<A98CCCc                     t          | j        d          }|                    t                    } |dd          dk    sJ d S )Nr   r$   r   g       @g      @)r   rY   r(   ro  )r_   r-   rt  s      r    test_memory_func_with_signaturerx  b  sK    V^Q777F,,233K;q##%%%%%%r"   c                 &   t          | j        d          }|                                d             t          t	          |                    }|D ]} |           t                    fd|D             }fd|D             }||fS )Nr   r$   c                     dS )N  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   rO   s    r    get_1000_bytesz(_setup_toy_cache.<locals>.get_1000_bytesl  s    zr"   c                 :    g | ]}                     |          S r   )r  )ro   rO   r}  s     r    
<listcomp>z$_setup_toy_cache.<locals>.<listcomp>u  s'    HHH#^0055HHHr"   c                 f    g | ]-}t           j                            j        j        |          .S r   )r7   r8   r9   r5   r%   )ro   r  r  r}  s     r    r  z$_setup_toy_cache.<locals>.<listcomp>w  sA        	^1:GWMM  r"   )r   rY   r(   rX   r)   r   )	r_   
num_inputsr-   inputsrO   hash_dirnamesfull_hashdirsr  r}  s	          @@r    _setup_toy_cacher  i  s    V^Q777F\\^^  ^ %
##$$F  s$^44GHHHHHHHM    $  M =.00r"   c                 ^   t          |           \  }}}|j                                        }d |D             }t          |          t          |          k    sJ d fd|D             }d |D             }||k    sJ d |D             }d |D             }	d |D             }
|
|	k    sJ d S )Nc                     g | ]	}|j         
S r   )r8   ro   cis     r    r  z#test__get_items.<locals>.<listcomp>  s    )))R)))r"   c                 v      fdt          j                   D             }t          d |D                       S )Nc                 P    g | ]"}t           j                            |          #S r   r7   r8   r9   )ro   fn	directorys     r    r  z;test__get_items.<locals>.get_files_size.<locals>.<listcomp>  s)    RRRbbgll9b11RRRr"   c              3   T   K   | ]#}t           j                            |          V  $d S rA   )r7   r8   getsize)ro   rB  s     r    rq   z:test__get_items.<locals>.get_files_size.<locals>.<genexpr>  s0      <<227??2&&<<<<<<r"   )r7   r}   sum)r  
full_pathss   ` r    get_files_sizez'test__get_items.<locals>.get_files_size  sC    RRRRBJy<Q<QRRR
<<<<<<<<r"   c                 &    g | ]} |          S r   r   )ro   hash_dirr  s     r    r  z#test__get_items.<locals>.<listcomp>  s#     T T Th!9!9 T T Tr"   c                     g | ]	}|j         
S r   )sizer  s     r    r  z#test__get_items.<locals>.<listcomp>  s    000B000r"   c                 N    g | ]"}t           j                            |d           #S )r2   r  )ro   r  s     r    r  z#test__get_items.<locals>.<listcomp>  s(    WWWX|<<WWWr"   c                     g | ]>}t           j                             t          j                            |                    ?S r   )datetimefromtimestampr7   r8   getatime)ro   r  s     r    r  z#test__get_items.<locals>.<listcomp>  sF       BD''(8(8(<(<==  r"   c                     g | ]	}|j         
S r   last_accessr  s     r    r  z#test__get_items.<locals>.<listcomp>  s    444R^444r"   )r  r5   r6   set)r_   r-   expected_hash_dirsr/   items	hash_dirsexpected_hash_cache_sizeshash_cache_sizesoutput_filenamesexpected_last_accesseslast_accessesr  s              @r    test__get_itemsr  ~  s   $4V$<$<!F **,,E))5)))Iy>>S!3444444= = = !U T T T) T T T00%00088888WWYWWW HX   54e444M2222222r"   c                    t          | d          \  }}}|j                            d          }|g k    sJ t          |           \  }}}|j                                        }|j                            d          }t	          |          }t
                              t          |          t          |                    sJ t	          |          |dz
  k    sJ |j                            d          }t          |          t          |          k    sJ |j                            d          }|g k    sJ d}	|j                            |	          }
t          |
          sJ t          |                      |j                            d	          }t          |                              |          }t          d
 |D                       t          d |D                       k    sJ d S )Nr   )r  1K2Kr   i   1M  ip  c              3   $   K   | ]}|j         V  d S rA   r  r  s     r    rq   z,test__get_items_to_delete.<locals>.<genexpr>  s$      >>"r~>>>>>>r"   c              3   $   K   | ]}|j         V  d S rA   r  r  s     r    rq   z,test__get_items_to_delete.<locals>.<genexpr>  s=       F FF F F F F Fr"   )r  r5   _get_items_to_deleter6   r*   r  issubsetsorted
differencemaxmin)r_   r-   r/   items_to_deleteexpected_hash_cachedirsr  	nb_hashesitems_to_delete_2048bitems_to_delete_emptybytes_limit_too_smallitems_to_delete_500bitems_to_delete_6000bsurviving_itemss                r    test__get_items_to_deleter    s   #Fq999LFAq*??EEOb    )9&)A)A&F#Q **,,E *??EEO+,,I<<O,,c%jj999999q=0000 #0EEdKK/""f-B&C&CCCCC #0EEdKK B&&&&  !/DD  #$$00c%jj000 #0EEdKK%jj++,ABBO>>(=>>>>># F F!0F F F C C      r"   c                    t          |           \  }}}|j                                        }|                                 |j                                        }t	          |          t	          |          k    sJ |                    d           |j                                        }t	          |          t	          |          k    sJ |                    d           |j                                        }t
                              t          |          t          |                    sJ t          |          dk    sJ d}|                    |           |j                                        }|g k    sJ d S )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    s{   #F++LFAq*4466O &0022K/""f[&9&99999 4(((&0022K/""f[&9&99999 4(((&0022K<<K((#o*>*>?????{q      
#8999&0022K"r"   c                    t          |           \  }}}|j                                        }|                                 |j                                        }t	          |          t	          |          k    sJ |                    d           |j                                        }t	          |          t	          |          k    sJ |                    d           |j                                        }t
                              t          |          t          |                    sJ t          |          dk    sJ |                    d           |j                                        }|g k    sJ d S )NrR   )items_limitr   r   r  )r_   r-   r/   r  r  s        r    #test_memory_reduce_size_items_limitr    st   #F++LFAq*4466O &0022K/""f[&9&99999 2&&&&0022K/""f[&9&99999 1%%%&0022K<<K((#o*>*>?????{q     1%%%&0022K"r"   c                    dd l }dd l}t          |           \  }}}|j                                        }|                                 |j                                        }t          |          t          |          k    sJ |                     |j        d                     |j                                        }t          |          t          |          k    sJ  |j        d            |d            |d           |                     |j        d                     |j                                        }t          
                    t          |          t          |                    rJ t          |          dk    sJ t          j        t          d	
          5  |                     |j        d                     d d d            n# 1 swxY w Y    |j        d           |                     |j        d                     |j                                        }|g k    sJ d S )Nr   r   )days)	age_limitsecondsr   zhas to be a positivers  gMbP?)r  r~   r  r5   r6   r  r  	timedeltar   r  r  r*   r6  r   rr  )r_   r  r~   r-   r/   	put_cacher  r  s           r    !test_memory_reduce_size_age_limitr    s   OOOKKK+F33FAy*4466O &0022K/""f[&9&99999 !3!3!;!;!;<<<&0022K/""f[&9&99999 DJqMMMIbMMMIbMMM
!3!3A!>!>!>???&0022K||C,,c/.B.BCCCCC{q     
z)?	@	@	@ E E%7X%7%C%C%CDDDE E E E E E E E E E E E E E E DJu
!3!3A!>!>!>???&0022K"s   /&G!!G%(G%c                     t          |           \  }}}|                                 t          j        |j        j                  g k    sJ |                    d          rJ d S )Nrv   )
stacklevel)r  r\   r7   r}   r5   r%   r  )r_   r-   r/   r`   s       r    test_memory_clearr    sh    #F++LFAq
LLNNN:f*344:::: **a*8888888r"   c                      dgdz  } | S )Nr{  i  r   )complex_objs    r    fast_func_with_complex_outputr  #  s    ,%Kr"   c                 Z    d t          t          d                    D             }| r|ndS )Nc                 .    i | ]}t          |          |S r   )r   )ro   r.   s     r    
<dictcomp>z=fast_func_with_conditional_complex_output.<locals>.<dictcomp>)  s     6663q661666r"   g     j@zsimple output)r)   int)complex_outputr  s     r    )fast_func_with_conditional_complex_outputr  (  s0    66eCHHoo666K(=;;o=r"   c                    t          | j                  }|                    t                     t	          d          fdt          d          D                        |                                \  }}d}||vsJ ||vsJ d S )Nr)  r   rj   c              3   F   K   | ]} t                                V  d S rA   rm   ro   r.   rt  s     r    rq   zMtest_cached_function_race_condition_when_persisting_output.<locals>.<genexpr>5  s4      @@!+w{++--@@@@@@r"   r'   r   )r   rY   r(   r  r   r)   rT  r_   capfdr-   rQ  stderrr   rt  s         @r    :test_cached_function_race_condition_when_persisting_outputr  -  s    
 V^,,,F,,<==KHA@@@@uQxx@@@@@@%%''NFF
 6M&&&&&&&&&&r"   c                    t          | j                  }|                    t                     t	          d          fdt          d          D                        |                                \  }}d}||vsJ ||vsJ d S )Nr)  r   rj   c              3   ^   K   | ]'} t                    |d z  dk    rdnd          V  (dS )r   r   TFNrm   r  s     r    rq   zOtest_cached_function_race_condition_when_persisting_output_2.<locals>.<genexpr>K  sW        @AQUaZZTTU;;     r"   r'   r   )r   rY   r(   r  r   r)   rT  r  s         @r    <test_cached_function_race_condition_when_persisting_output_2r  A  s     V^,,,F,,HIIKHA    EJ1XX      %%''NFF
 6M&&&&&&&&&&r"   c                 @   t          | j                  }d }|                    |          }d} ||          \  }}||k    sJ t          |           t	          ||          } ||          \  }	}
t          |          dk    sJ d}||d         v sJ |	|k    sJ |
|k    sJ t          |           |                    |          }	 |                                 t          d          # t          $ r%}d}|t          |j                  v sJ Y d }~d S d }~ww xY w)	Nr)  c                 T    t          j        d           | t          j                     fS )Ng{Gz?r~   r   r|  s    r    r+   zItest_memory_recomputes_after_an_error_while_loading_results.<locals>.func\  s%     	
4DIKKr"   rO   r   r   r   z<It normally not possible to load a corrupted MemorizedResultzis corrupted)r   rY   r(   r>   rJ   r*   r+  r,  AssertionErrorr-  r   r   )r_   r   r-   r+   cached_func	input_argrO   rG  r   recomputed_argrecomputed_timestampr   	referenceer   s                  r    ;test_memory_recomputes_after_an_error_while_loading_resultsr  Y  s   V^,,,F      ,,t$$KI [++NC ) f%%% 5[+NN+6;s+;+;(N( !!Q&&&&5M-a00000S    )++++ f%%%++C00I&J
 
 	
  & & & #af++%%%%%%%%%%&s   #C. .
D8DDc                       e Zd ZdZdS )IncompleteStoreBackendzAThis backend cannot be instantiated and should raise a TypeError.N)r   r^   r   __doc__r   r"   r    r  r    s        KKDr"   r  c                   B    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )DummyStoreBackendz(A dummy store backend that does nothing.c                     dS )zOpen an item on store.Nr   )selfr   r   s      r    
_open_itemzDummyStoreBackend._open_item      r"   c                     dS )z!Check if an item location exists.Nr   r  r%   s     r    _item_existszDummyStoreBackend._item_exists  r   r"   c                     dS )z&Move an item from src to dst in store.Nr   )r  srcdsts      r    
_move_itemzDummyStoreBackend._move_item  r   r"   c                     dS )zCreate location on store.Nr   r  s     r    create_locationz!DummyStoreBackend.create_location  r   r"   c                     dS )z&Check if an object exists in the storeFr   r  objs     r    r
  zDummyStoreBackend.exists  s    ur"   c                     dS )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                     dS )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2                  r"   r  invalid_prefixc                     t          t                    5 }t          | d            d d d            n# 1 swxY w Y   |                    d           d S )Nz&Store backend name should be a string*r   rr  r   rs  )r  ru  s     r    (test_register_invalid_store_backends_keyr    s     

		 5w~t4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5MM;<<<<<   266c                      t          t                    5 } t          dd            d d d            n# 1 swxY w Y   |                     d           d S )Nfsz.Store backend should inherit StoreBackendBase*r  ru  s    r    +test_register_invalid_store_backends_objectr    s     

		 +wtT***+ + + + + + + + + + + + + + +MMCDDDDDr  c                      t          t                    5 } t          dd           d d d            n# 1 swxY w Y   |                     d           d S )Nz/tmp/joblibunknown)r%   backendzUnknown location*)r   	TypeErrorr   rs  r  s    r    !test_memory_default_store_backendr    s    				 :gy9999: : : : : : : : : : : : : : :MM&'''''s   377c                       G d d          }  |             }t          t                    5 }t          d|           d d d            n# 1 swxY w Y   d}|t          |d         j                  v sJ d S )Nc                       e Zd ZdS )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            5466	{		 Gxw1EFFFFG G G G G G G G G G G G G G G	 
 c(1+"566666666s   A

AAc                     d} t          | t                     | t          ft          j                    v sJ t	          t
                    5 }t          | d           d d d            n# 1 swxY w Y   |                    d           d S )Nisbfake_locationznCan't instantiate abstract class IncompleteStoreBackend (without an implementation for|with) abstract methods*)r   r  r   r  r   r  r   rs  )backend_nameru  s     r    )test_instanciate_incomplete_store_backendr-    s     L<)?@@@01_5J5L5LLLLL				 >g|_===> > > > > > > > > > > > > > >MM	A    s   
A''A+.A+c                      d} t          | t                     | t          ft          j                    v sJ t	          | d          }t          |t                    sJ d S )Ndsbdummy_location)r   r  r   r  r   r   )r,  backend_objs     r    test_dummy_store_backendr2    sg     L<):;;;+,0E0G0GGGGG(7GHHKk#45555555r"   c                      t          j        d          } t          d|           }	 |j        dk    sJ 	 t	          j        dd           d S # t	          j        dd           w xY w)Nsome_folderr$  TrU   )pathlibPathr   r%   rZ   r[   )r8   r1  s     r    0test_instanciate_store_backend_with_pathlib_pathr7    sr    <&&D($77K9#}44444m4888888m488888s   A A$c                 V   d}t                      }|j        J t          |           t          |          |                    d           k    sJ |                    | j                   t          |          |                    | j                  k    sJ t          |           d S )Nz-FileSystemStoreBackend(location="{location}")r)  )r   r%   rH  r   rw   r  rY   )r_   repr_patternr  s      r    "test_filesystem_store_backend_reprr:    s     CL$&&G###MMMw<<<...====== fn%%%w<<<...GGGGGGMMMMMr"   c                    d }t          | j        d          }|                    |          }d}t          |          |                    ||j        j                  k    sJ |                    dd          }d}t          |          |                    |j        j        |j        |j	                  k    sJ t          |          d	                    |j        j        
          k    sJ d S )Nc                     | |z   S rA   r   r]  s     r    my_funcz)test_memory_objects_repr.<locals>.my_func  s    1ur"   r   r$   z/MemorizedFunc(func={func}, location={location}))r+   r%   *   zJMemorizedResult(location="{location}", func="{func}", args_id="{args_id}"))r%   r+   r  zMemory(location={location})r)  )
r   rY   r(   r   rw   r5   r%   r+  r  r  )r_   r=  r-   memorized_funcmemorized_func_reprmemorized_resultmemorized_result_reprs          r    test_memory_objects_reprrC    s=      V^Q777F\\'**NK~"5"<"<v3< #= # #     &55b"== 	U    $9$@$@%.% ( %A % %     v;;7>>%. ?        r"   c                    t          | j                  }|j        d             }|                    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 d S )Nr)  c                     | dz  S r   r   r   s    r    r`   z'test_memorized_result_pickle.<locals>.g6      !tr"   rv   )r   rY   r(   r+  r  r  r  r5   r%   r+   r  r   )r_   r-   r`   rA  memorized_result_picklememorized_result_loadss         r    test_memorized_result_picklerI  /  s    
 V^,,,F\  \ ((++$l+;<<#\*ABB 	&/!/8	9 	9 	9 	9  $:$?????#'='EEEEE  C(>$?$???????r"   c                 6   |g }t          |           }t          |          }t          |                                          t          |                                          k    sJ |                                D ]}||v r||         ||         k    sJ d S rA   )varsr  keys)leftrightignored_attrs	left_vars
right_varsattrs         r    comparerS  G  s    T

IeJy~~  C
(9(9$:$:::::   3 3=  *T"2222223 3r"   memory_kwargsr'   r   )rT   r&   r#  	parameterunused)rS   r&   backend_optionsc                    t          dd| j        i|}t          j        t          j        |                    }t          |j        |j                   t          ||t          g d                     t          |          t          |          k    sJ |	                    t                    }t          j        t          j        |                    }t          |j        |j                   t          ||t          g d                     t          |          t          |          k    sJ |                    d          }t          j        t          j        |                    }t          |j        |j                   t          ||t          g d                     t          |          t          |          k    sJ d S )Nr%   )r5   rG  _func_code_id)rO  r   r   )r   rY   r  r  r  rS  r5   r  r   r(   r!   r+  )r_   rT  r-   memory_reloadedrt  func_cached_reloadedrA  memorized_result_reloadeds           r    test_memory_pickle_dump_loadr]  T  s    ==V^=}==Fl6<#7#788O F /"?@@@IIIJJ   
 <<4000000,,q//K!<[(A(ABB K%';'IJJJIIIJJ   
 %9 : ::::: #22155 &V\:J-K-K L L*,E,STTT!IIIJJ   
  !!T*C%D%DDDDDDDr"   c                    |                     t          j                   d}t          | j        d          }|j        d             } ||          }d|j        v sJ |                                 t          | j        d          }|j        d             } ||          }d|j        vsJ |                                 d S )Nr'      r$   c                     | dz  S r   r   r   s    r    r!   ztest_info_log.<locals>.f  rF  r"   Queryingr   c                     | dz  S r   r   r   s    r    r!   ztest_info_log.<locals>.f  rF  r"   )	set_levelloggingINFOr   rY   r(   textr\   )r_   caplogr   r-   r!   r/   s         r    test_info_logrh    s    
W\"""	AV^R888F\  \ 	
!A$$$$
LLNNNV^Q777F\  \ 	
!AV[((((
LLNNNNNr"   c                   x    e Zd ZdZddZd Zej                            dddg          d             Z	d	 Z
d
 ZdS )TestCacheValidationCallbackz.Tests on parameter `cache_validation_callback`Nc                 B    d|d<   |t          j        |           |dz  S )NTrunr   r  )r  r   r   delays       r    foozTestCacheValidationCallback.foo  s*    %Ju1ur"   c                     d}t          j        t          |          5  |                    d           ddd           dS # 1 swxY w Y   dS )z2Test invalid values for `cache_validation_callbackz9cache_validation_callback needs to be callable. Got True.r  Tr   N)r6  r   rr  r(   )r  r-   rs  s      r    &test_invalid_cache_validation_callbackzBTestCacheValidationCallback.test_invalid_cache_validation_callback  s    K]:U333 	9 	9LL4L888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   AA	Ar  TFc                     |                     | 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         k    sJ dS )	zTest expiry of old resultsc                     S rA   r   r  s    r    r   zUTestCacheValidationCallback.test_constant_cache_validation_callback.<locals>.<lambda>  s    0D r"   r   r!  r   rl  Fr   rv   Nr(   rn  )r  r-   r  r!   d1d2s     `   r    'test_constant_cache_validation_callbackzCTestCacheValidationCallback.test_constant_cache_validation_callback  s     LLH&D&D&D&D5  
 
 %BqBxx1}}}}qBxx1}}}}%y%y0000000r"   c                 X   d }|                     | 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 dS )z*Test cache validity based on run duration.c                 &    | d         }|dk    rdS d S )Ndurationg?Tr   )metadatarz  s     r    r!  z^TestCacheValidationCallback.test_memory_only_cache_long_run.<locals>.cache_validation_callback  s!    
+H#~~t ~r"   r   rs  rl  Fr   r   )rm  rv   ru   Nrt  )r  r-   r!  r!   ru  rv  s         r    test_memory_only_cache_long_runz;TestCacheValidationCallback.test_memory_only_cache_long_run  s-   	 	 	
 LLH0ISVRW  
 

 %BqBa   A%%%%qBa   A%%%%%y%y %BqBc"""a''''qBc"""a''''%ye9r"   c                 F   |                     | 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 d
S )z!Test expiry of old cached resultsg333333?r  r   rs  rl  Fr   rv   r2  N)r(   rn  r   r~   r   )r  r-   r!   ru  rv  d3s         r    test_memory_expires_afterz5TestCacheValidationCallback.test_memory_expires_after  s     LLHc0J0J0JTWSX  
 
 U^eU^eU^BqBxx1}}}}qBxx1}}}}
3qBxx1}}}}%ye9%yr"   rA   )r   r^   r   r  rn  rp  r6  markr   rw  r|  r  r   r"   r    rj  rj    s        44   9 9 9 [3dE]CC1 1 DC1  4    r"   rj  c                   4    e Zd ZdZed             Zd Zd ZdS )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        dg          }i } |d|          dk    sJ  |d|          dk    sJ |                    d|          \  }}|dk    s
J d            t          |t                    s
J d            dS )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4qG}}!!!!qG}}!!!!&&G$$4Avvv7vvv$%% 	
 	
>	
 	
 	
 	
 	
r"   c                 
   t          | j                  }i } |d|          dk    sJ  |d|          dk    sJ |                    d|          \  }}|dk    s
J d            t          |t                    s
J d            dS )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     TV$$qG}}!!!!qG}}!!!!&&G$$4Avvv7vvv$%% 	
 	
>	
 	
 	
 	
 	
r"   N)r   r^   r   r  staticmethodr!   r  r  r   r"   r    r  r    sQ        >>  \
 
 

 
 
 
 
r"   r  r%   test_cache_dirc                     t          |           }t          j        g dg dg          }|                    t          j                  } ||           t          j        |           } 	 t          j        	                    | d          }d}t          |          5 }||                                k    sJ 	 ddd           n# 1 swxY w Y   t          j        | d           dS # t          j        | d           w xY w)zoTest that using the memory object automatically creates a `.gitignore` file
    within the new cache directory.)r   r   r'   )rv   r#     z
.gitignorez%# Created by joblib automatically.
*
NTrU   )r   r   asarrayr(   squarer5  r6  r7   r8   r9   r:   r5  rZ   r[   )r%   memarrcostly_operationpath_to_gitignore_filegitignore_file_contentr!   s          r    test_memory_creates_gitignorer    s7    

C
*iii+
,
,Cyy++S|H%%H4!#h!E!E!J()) 	6Q)QVVXX55555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	hd333333hd33333s0   )1C% C6C% CC% 	C
C% %C=r   )rR   )TrA   )xr  r  r   r   rd  r7   os.pathr5  r  rZ   rP  ry   r~   r6  joblib._store_backendsr   r   joblib.hashingr   joblib.memoryr   r   r   r	   r
   r   r   r   r   r   r   r   joblib.parallelr   r   joblib.test.commonr   r   r   joblib.testingr   r   r   r!   r0   r>   rJ   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r'  r/  r<  rD  rJ  r[  r^  r`  rc  re  rg  rl  r  floatro  rv  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rX   r  r  r  r(  r-  r2  r7  r:  rC  rI  rS  r]  rh  rj  r  r6  resolver  r   r"   r    <module>r     s&         				  				     



    K K K K K K K K                                  . - - - - - - - C C C C C C C C C C 5 5 5 5 5 5 5 5 5 5
   - - -     + + +\ #dE]33fA fA 43fAR; ; ; $ $ $ 	J 	J 	J3 3 34   ? ? ?$? ? ?           [4+&&- - '& -& $ $ $N  *! ! !&! ! !6  ( )cUC,=B~+NOO
$ 
$ PO
$  @
 
 
. /$??+ + @?+,  .!= != !=H	 	 	  @6+ 6+ 6+r	 	 	
         
 (-%     3 5 U    C C C4& & &1 1 1 1*3 3 3.% % %P  8  6" " "J9 9 9  
> > > >
 ' ' '& ' ' '.*& *& *&Z	 	 	 	 	- 	 	 	! ! ! ! !( ! ! !H ddffddff566= = 76=E E E( ( (7 7 7"  6 6 69 9 9  (  @@ @ @0
3 
3 
3 
3 1%%a[(<STT %E %E %EP  2H H H H H H H HV$
 $
 $
 $
 $
 $
 $
 $
N %&&%&&..00 4 4  4 4 4r"   