L i dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlmZmZddlmZddlmZmZmZmZmZmZmZmZmZmZmZmZddl m!Z!m"Z"ddl#m$Z$m%Z%m&Z&ddl'm(Z(m)Z)m*Z*dnd Z+d Z,d Z-d Z.d Z/e(dddgdZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8gfdZ9dZ:e&e(dddgdZ;e&dZd"Z?d#Z@e(d$d%gd&dfgd'dfgd(ZAd)ZBd*ZCe jjQd+ddgd,ZEd-ZFd.ZGd/ZHd0ZId1ZJd2ZKd3ZLd4ZMd5ZNd6ZOd7d8d9d:ZPd;eQdZSd?ZTd@ZUdodAZVdBZWdCZXdDZYdEZZdFZ[dGZ\dHZ]dpdIZ^e%dJZ_e%dKZ`dLZaGdMdNeZbGdOdPeZce(dQdedeegdRZfdSZgdTZhdUZidVZjdWZkdXZldYZmdZZnd[Zodqd\Zpe jjQd]d^d_d`ddadbdciddgdeZqdfZrGdgdhZsGdidjZte&e(dkdlejdlejdljgdmZwy)rz Test the memory module. N)FileSystemStoreBackendStoreBackendBase)hash) _FUNCTION_HASHES_STORE_BACKENDSJobLibCollisionWarning MemorizedFuncMemorizedResultMemoryNotMemorizedFuncNotMemorizedResult_build_func_identifier_store_backend_factory expires_afterregister_store_backend)Paralleldelayed)npwith_multiprocessing with_numpy) parametrizeraiseswarnsc|dz|zS)z-A module-level function for testing purposes.)xys ]/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/joblib/test/test_memory.pyfr /s a4!8Oct|d}|j|}tdD]2}tdD]"}|||k(sJt||dzk(r"J4y)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. rlocationverboserN)r cacherangelen)func accumulatorr$memoryi_s rcheck_identity_lazyr06skXq 1F << D 1X-q -A7a< <{#q1u, ,, --r!c|jj\}tjj |jd}t |d5}|j ddddy#1swYyxYw)N output.pklwgarbage) store_backend get_itemsospathjoinopenwrite)r-single_cache_itemoutput_filenamer s rcorrupt_single_cache_itemr>Esb!//99;ggll#4#9#9<HO os #q  s A..A7c<gfd}|j|d|S)Nc(j|yNappend)itemrecordeds rappend_to_recordz6monkeypatch_cached_func_warn..append_to_recordSsr!warn)setattr)r+monkeypatch_fixturerFrEs @rmonkeypatch_cached_func_warnrJLs) Hf.>? Or!cBtfd}t||jdD]}dD]z}t|jd||}t j |jd|j |}|d|jd t}|d}|tdzk(sJj|dk(sJt|dzk(rJd |_ t|jd }|j |dy)z&Simple test of memory lazy evaluation.c*jd|SNr'rBargr,s rr z"test_memory_integration..fc1 r!)FT)rN )r$r% mmap_modecompressT ignore_errorsr'F)rG__main__rr#N) listr0strpathr shutilrmtreer(clearr*eval __module__) tmpdirr rTrSr-gcurrent_accumulatoroutr,s @rtest_memory_integrationrc\s&K ;7";$ I#! F MM&.. = QA aD GGG "%k"2 A$C# &;#6#::::{{1a C''';#6#::::/;6AL V^^Q 7FFLLOAr!call_before_reducingTFc$ dD]}d}dj|}i}tttj||dd||d}d|_|ddk(sJ|j j|k(sJt|jd }|j| ttj|d z dk(sJtj|d z d }d |vsJ|d z |z } |d k(r@tj| dgk(sJtj| dz gk(sJ|rJ d ttj| dz dk(sJtd fddDntd fddDtdD]=} ttj| dz d k(rnt!j"d?ttj| dz d k(sJ d ttj| dz dk(r4Jttj| dz dk(sJ d ttj| dz dk(rJy)N)rr'z0 def f(x): return x zexec)filenamemoder rWr'rr#joblibz ipython-inputr&rn_jobsc3@K|]}t|ywrAr.0r.cached_fs r zHtest_parallel_call_cached_function_defined_in_jupyter.."HA#478#4Q#7"H)r'rc3@K|]}t|ywrArmrns rrqzHtest_parallel_call_cached_function_defined_in_jupyter..rrrs皙?)formatrfcompiletextwrapdedentr^__code__ co_filenamer rYr(r*r7listdirrr)timesleep) r_rd session_noipython_cell_sourceipython_cell_id my_localsr r-f_cache_relative_directoryf_cache_directoryr/rps @r5test_parallel_call_cached_function_defined_in_jupyterrs"VA   <BB:N   34(     cN! tqyyzz%%888;<<?2::fx/01Q666%'ZZ0A%B1%E""<<<<"X-0JJ ?::/0SE9 99::/#56"< <<# 2::&7#&=>?1DDD#""H"HH #""H"HHr$A2::&7#&=>?1DJJsO$2::&7#&=>?1DDD rzz"3c"9:;q@ @@rzz"3c"9:;q@ @@ QKrzz"3c"9:;q@ @@mVAr!ctfd}tdd}|j|}tdD](}t }|dt |dzk(r(Jy)z*Test memory with location=None: no memoizec*jd|SrMrBrNs rffztest_no_memory..ffrPr!Nrr#rwr')rXr r(r)r*)rr-ggr/rar,s @rtest_no_memoryrsi&KT1 -F b B 1X;!+. 1;#6#::::;r!ctdfd }t||jt|jd}|j |}|dddk(sJy) z3Test memory with a function with keyword arguments.Nc*jd|SrMrB)arg1arg2r,s rr`ztest_memory_kwarg..gs1 r!rr#r)rrrM)rXr0rYr r()r_r`r-r,s @rtest_memory_kwargrsS&K;7 V^^Q 7F QA "1  ## #r!cZtfdtfd|jy)z*Test memory with a function with a lambda.c*jd|Sz*A helper function to define l as a lambda.r'rB)rr,s rhelperz"test_memory_lambda..helper1r!c|SrAr)rrs rz$test_memory_lambda..s &)r!N)rXr0rY)r_r,rs @@rtest_memory_lambdars"&K +[&..Ir!cBt|jd}|jd}|}|jd}|}tt5}|d|ddddt dk(sJdt |djvsJy#1swY6xYw)z=Check that name collisions with functions will raise warningsrr#c|S)z&A first function called name_collisionrrs rname_collisionz2test_memory_name_collision..name_collision$ r!c|S)z'A second function called name_collisionrrs rrz2test_memory_name_collision..name_collision+rr!r'N collision)r rYr(rrr*strmessage)r_r-rabwarninfos rtest_memory_name_collisionr s V^^Q 7F \\ A \\ A % & ( ! !  x=A   #hqk112 22 2   s BBc2t|jd}|jd}|jd}tt5}|ddk(sJ|ddk(sJ|ddk(sJ dddt dk(sJy#1swYxYw)Nrr#c|SrArrs rrz7test_memory_warning_lambda_collisions..=sqr!c |dzSrMrrs rrz7test_memory_warning_lambda_collisions..>s q1ur!r'rrw)r rYr(rrr*)r_r-rrrs r%test_memory_warning_lambda_collisionsr:s V^^Q 7F [!A _%A % &(tqyytqyytqyy x=A  s (B  Bct|jd}td}|j|}td}|j|}t t 5}|d|d|ddddt dk(sJdt|djjvsJy#1swYDxYw)Nrr# lambda x: xz lambda x: x+1r'rz cannot detect) r rYr]r(rrr*rrlower)r_r-a1b1rs r'test_memory_warning_collision_detectionrJsV^^Q 7F m B b B o B b B % &( 1 1 1 x=A   c(1+"5"56<<> >> > s B;;Cctfd}ddl}|j|d}t||jy)z#Test memory with functools.partial.c*jd|SrrBrrr,s rr+z!test_memory_partial..func`rr!rNr')rX functoolspartialr0rY)r_r+rfunctionr,s @rtest_memory_partialr\s8&K  y  q)H+v~~>r!ct|jd}td}|j|}|ddk(sJy)zESmoke test memory with a function with a function defined in an eval.rr#rr'N)r rYr]r()r_r-mmms rtest_memory_evalrls9 V^^Q 7F ]A aB a5A::r!c>t|}|jd|S)zsA function with a side effect in its arguments. Return the length of its argument and append one element. N)r*rC)rlen_xs rcount_and_appendrvs FEHHTN Lr!ct|jd}|jt}|dk(sJ|dk(sJy)zsCheck that if a function has a side effect in its arguments, it should use the hash of changing arguments. rr#r'N)r rYr(r)r_r-r+s rtest_argument_changersCV^^Q 7F <<( )D 6Q;; 6Q;;r!rSrQc~ t d fd }t|j|d}|j|}tj j d}tdD]V}|jd}tdD]5}t j|||k(sJt |dzk(r5JXy) z.Test memory with a function with numpy arrays.Nc*jd|SrMrBrNs rnztest_memory_numpy..nrPr!rr$rSr%r&)rRrRr'rA) rXr rYr(rrandom RandomStater) random_sampleallr*) r_rSrr-cached_nrndr.rr/r,s @rtest_memory_numpyrs&KV^^y! LF||AH ))   "C 1X-   h 'q -A66(1+*+ ++{#q1u, ,, --r!cXt|jdd}|jd}tjd}||}||}t |tj sJ|jdk(sJt |tj sJ|jdk(sJ~~tjt|t||}||}t|dk(sJd} | |dvsJt |tj sJ|jdk(sJy) z8Check that mmap_mode is respected even at the first callrQrrc |dzSNrrrs rtwicez0test_memory_numpy_check_mmap_mode..twice 1u r!r&r'Exception while loading resultsN) r rYr(rones isinstancememmaprhgccollectr>rJr*) r_ monkeypatchr-rrrcrecorded_warningsd exception_msgs r!test_memory_numpy_check_mmap_modersV^^sA FF \\^  A aA aA a ## # 66S== a ## # 66S==  JJLf%5UKH aA  !Q && &5M -a0 00 0 a ## # 66S==r!ct|jd}Gddt|jd fd }|t dD]}t 5|dddd y#1swY+xYw) z+Smoketest the exception handling of Memory.rr#c eZdZy)*test_memory_exception..MyExceptionN__name__r^ __qualname__rr!r MyExceptionr r!rc|ryrAr)excrs rhz test_memory_exception..hs   r!r&r'N)r)r rY Exceptionr(r)r)r_r-rr/rs @rtest_memory_exceptionrsz V^^Q 7F i  \\ C 1X K   aD    s  A11A: c@t|jd}t|jdgd fd }|jdgk(sJ|ddt dk(sJ|ddt dk(sJ|ddt dk(sJy ) z!Test the ignore feature of memoryrr#rignorer'c(jdyrMrBrs rzztest_memory_ignore..zs1r!rrNr'r rYrXr(rr*)r_r-rr,s @rtest_memory_ignorers V^^Q 7F&K \\#\  88u  a1I { q  a1I { q  a1I { q  r!cPt|jd}td}|jdg|d fd }|jdgk(sJ|ddt dk(sJ|ddt dk(sJ|dd t dk(sJy ) z9Test the ignore feature of memory on a decorated functionrr#cBtjfd}|S)Nc|i|SrAr)argskwargsr s rwrappedz?test_memory_ignore_decorated..decorate..wrappedsd%f% %r!)rwraps)r rs` rdecoratez.test_memory_ignore_decorated..decorates%   &  &r!rrr'c(jdyrMrBrs rrz'test_memory_ignore_decorated..zs 1r!rrNrr)r_r-rrr,s @rtest_memory_ignore_decoratedrs V^^Q 7F&K \\#\   88u  a1I { q  a1I { q  a1I { q  r!ct|jd}|jd}|ddk(sJ|ddk(sJ|ddk(sJy) z_Non-regression test against 0.12.0 changes. https://github.com/joblib/joblib/pull/751 rr#c |dzSrMrrs rplus_onez,test_memory_args_as_kwargs..plus_onerr!r'rrr&N)r rYr()r_r-rs rtest_memory_args_as_kwargsrsd V^^Q 7F \\ A;!   a=A   a=A  r!zignore, verbose, mmap_moderdrRct|jd}|j|||d}|j|k(sJ|j|k(sJ|j |k(sJy)z7Check cache may be called with kwargs before decoratingrr#)rr%rScyrArrs rrz"test_partial_decoration..z's r!N)r rYr(r_verboserS)r_rr%rSr-rs rtest_partial_decorationr"snV^^Q 7F \\I\F G  88v   ::  ;;) ## #r!ct|jd}tjd}|j d|j dg|j}|j t}tt}tjj |jj|}||k(sJtjj|sJ|jtjj|jjk(sJtj |j#rJtjjtjj |dsJ|j#sJ|j%d}tjj |jj|j&|}|d}tjj|sJtj(tjj |d||dk(sJy) Nrr#.r riz func_code.pyr'r2)r rYrsplitrCr9r(r rr7r8r5r$existsdirnamerr\_check_previous_func_code _get_args_idfunc_idremove) r_r-r8r`rr$args_id output_dirrs r test_func_dirr0s V^^Q 7F >># DKK 6;;x '$ ' / /D QA$Q'Gww||AOO44g>H t   77>>$   ??bggooaoo.F.FG GG G **,, , 77>>"'',,t^< == = & & (( (nnQGaoo66 7KJ !A 77>>* %% %IIbggll:|45 !99r!ct|jd}|jt}|d}t j t j |}|jd}tjj|jj|j|}tjj|sJ||jj|j|gk(sJt j t j |}|jj|jjk(sJtdd}t j t j ||jt}t j t j |}|dy)Nrr#r')r rYr(r pickleloadsdumpsrr7r8r9r5r$rr  load_item) r_r-r`outputrrrmemory2gps rtest_persistencerPs6 V^^Q 7F QA qTF V\\!_%AnnQGaoo66 7KJ 77>>* %% % Q__.. 7/CD DD Dll6<</0G    ( (G,A,A,J,J JJ JT1 -F LLf%& QA fll1o &BqEr!consider_cache_validctt|jfdt|jdj tfdfD]p}|j d}t |tsJ|rJ|ddk(sJ|j d}t |tsJ|k(sJ|jrtt}|j drJy)NcSrArr/rs rrz*test_check_call_in_cache..ksCWr!cache_validation_callbackrr#cSrArr s rrz*test_check_call_in_cache..ns3Gr!r) r r rYr r(check_call_in_cacherboolr\r )r_rr+results ` rtest_check_call_in_cacher(gs  v~~9W  288 )G 9 ))!,&$'''zAw!||))!,&$'''---- " A D''** **r!cZttt|jt tt |jdj tt dj tfttttfD]\}}|ddk(sJ|jd}t||sJ|jdk(sJ|jtt5|jddd|jy#1swYxYw)Nrr#r$rr$)zipr r rYr r r(r r call_and_shelvergetr\rKeyError)r_r+Resultr's rtest_call_and_shelver0~s !V^^ , Q  FNNA 6 < filesystem does not support fine-grained access time attributerr#rr2r$r'N)r9r;r7statrYst_atimerrreadpytestskipr r(r rr8r5r$rr,rr r-) r_test_access_time_filetest_access_timer-r+r result_pathfirst_access_timer's r.test_call_and_shelve_lazily_load_stored_resultr=s"KK 6 .ww4<<=FF JJsO % % '= 88 8277#8#@#@AJJJ  TU V^^Q 7F <<?D"G'',,%%t||WlK 7a<< ,55JJqM ! !! $F fo .. . 77;  ( (,= == =JJqM ::<1   77;  ( (+< << ctt|j}|jd}tt|j}|jd}|j |j k(sJt |t |k(sJt t}t |t |jdtt|jdtj}|jd}|j tt|jd}|jd}|j tt|jdtj}|jd}|j tt|jd}|jd}|j y)Nr )r% timestamp)r%r$)r r rYr,r-reprr r)r_r+r'func2rDs rtest_memorized_reprrKsV FNN +D  ! !! $F !V^^ ,E##A&G ::<7;;= (( ( :e $$ $ A DJ  a ! FNNB$))+ ND  ! !" %F JJL FNNB 7D  ! !" %F JJL FNNA MD  ! !" %F JJL FNNA 6D  ! !" %F JJLr!c|jdj}tjj |d}d}t |d5}|j |ddd|j|ddl}t|jd}|j|j} | d| d| dt |d5}|j d |zddd| d| dtj|tj|d }t |d5}|j |ddd| d| dtjj d tj j#d ddl}|j|j} | d| d|j%\} } | d k(sJy#1swYxYw#1swYxYw#1swYxYw)N tmp_importztmp_joblib_.pyz$def f(x): print(x) return x r3rr#r'rz z-def f(x): print("x=%s" % x) return x z Reloading tmp_joblib_z1 2 Reloading x=1 )mkdirrYr7r8r9r:r;syspath_prependrNr r(r rZr[sysstdoutmodulespop readouterr) capsysr_rdir_namergcontent module_filetmpr-r rberrs rtest_memory_file_modificationr\s||L)11Hww||H&67H7G h # '"#) V^^Q 7F SUUAaDaDaD h , &7*+,aDaD MM(HHX@G h # '"# aDaDJJ]#KKOOM" SUUAaDaD  "HC * ** *a##,,##s$ G&G34H&G03G=H cyrArrrs r_function_to_cacher_sr!c ||zSrArr^s r_sumra# q5Lr!c ||zSrArr^s r_productrd'rbr!cztjt_t|jd}|j t}|dddk(sJ|dddk(sJt t5tjt_|dddk(sJ|dddk(sJ dddy#1swYyxYw)Nrr#r'rr&) rar|r_r rYr(rrrd)r_r-r s r*test_memory_in_memory_function_code_changerf+s"&-- V^^Q 7F '(A Q7a<< Q7a<< % &&.&7&7#Aw!||Aw!|| s 16B11B:c<td}|jy)Nr*)r r\)r-s r$test_clear_memory_with_none_locationrh;s T "F LLNr!kw1kw2rirjc||||fSrAr)rrrirjs rfunc_with_kwonly_argsrm@s ac>r!rrreturnc ||zSrArr^s rfunc_with_signaturerpDrbr!c t|jd}|jt}|ddddk(sJt t 5}|dddd dddj d |dddd t t 5}|dddd ddd|j d |jtd g }|dddd dk(sJ|dddd dk(sJy#1swYxYw#1swYaxYw)Nrr#r'rr&)ri)r'rr&rjrw)rjz?Keyword-only parameter 'kw1' was passed as positional parameterrkrjr)r'rr&rwignored)r rYr(rmr ValueErrormatch)r_r- func_cachedexcinfos r!test_memory_func_with_kwonly_argsrwHs V^^Q 7F,,45K q! #'7 77 7  $wAq!#$ MMST1!#  $wAq!#$ MMST,,4eW,EK q! *l :: : q! 2l BB B$$$$s C. C:.C7:Dcxt|jd}|jt}|dddk(sJy)Nrr#r'g@g@)r rYr(rp)r_r-rus rtest_memory_func_with_signaturerybs6 V^^Q 7F,,23K q# # %% %r!ct|jd}|jd}tt |}|D] }|| t |}|Dcgc]}|j |}}|Dcgc]7}tjj|jj||9} }|| |fScc}wcc}w)Nrr#cy)NaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrOs rget_1000_bytesz(_setup_toy_cache..get_1000_byteslsr!) r rYr(rXr)rrr7r8r9r5r$) r_ num_inputsr-r~inputsrOr hash_dirnamesr  full_hashdirss r_setup_toy_cacheris V^^Q 7F \\^% # $Fs%^4GAGH#^005HMH%   ^11::GWMM =. 00 Is C>} tjjt jj| @} } |Dcgc]}|j}}|| k(sJycc}wcc}wcc}wcc}wcc} wcc}w)Nctj|Dcgc]"}tjj||$}}t d|DScc}w)Nc3ZK|]#}tjj|%ywrA)r7r8getsize)rorCs rrqz:test__get_items..get_files_size..s<2277??2&.get_files_sizesD<>JJyS!34 44 4=KT Th!9 T T*/0B00 8 88 8MVW X|<WWIYBD''(8(8(<=/44R^^4M4 2 22 2#*!U0X5s$D+#D08D5'D:AD?EcVt|d\}}}|jjd}|gk(sJt|\}}}|jj}|jjd}t |}t j t |t |sJt ||dz k(sJ|jjd}t|t|k(sJ|jjd}|gk(sJd} |jj| } t | sJt ||jjd } t |j| } td | Dtd | DksJy) Nr)r1K2Kr'i1Mipc34K|]}|jywrArrors rrqz,test__get_items_to_delete..s>"r~~>c34K|]}|jywrArrs rrqz,test__get_items_to_delete..sFFr) rr5_get_items_to_deleter6r*rissubsetsorted differencemaxmin) r_r-r/items_to_deleteexpected_hash_cachedirsr nb_hashesitems_to_delete_2048bitems_to_delete_emptybytes_limit_too_smallitems_to_delete_500bitems_to_delete_6000bsurviving_itemss rtest__get_items_to_deleters#Fq9LFAq**??EO b  )9&)A&F #Q  * * ,E**??EO+,I <<O,c%j 99 9  9q= 00 0#00EEdK / "f-B&C CC C#00EEdK B && & !//DD # $0c%j0 $#00EEdK%j++,ABO >(=> >#F!0FC  r!ct|\}}}|jj}|j|jj}t |t |k(sJ|jd|jj}t |t |k(sJ|jd|jj}t j t |t |sJt|dk(sJd}|j||jj}|gk(sJy)Nr) bytes_limit3Krrrr5r6 reduce_sizerrrr*)r_r-r/ref_cache_items cache_itemsrs r#test_memory_reduce_size_bytes_limitrs3#F+LFAq**446O &&002K / "f[&9 99 9 4(&&002K / "f[&9 99 9 4(&&002K <<K(#o*> ?? ? { q    #89&&002K "  r!ct|\}}}|jj}|j|jj}t |t |k(sJ|jd|jj}t |t |k(sJ|jd|jj}t j t |t |sJt|dk(sJ|jd|jj}|gk(sJy)NrR) items_limitrrr)r_r-r/rrs r#test_memory_reduce_size_items_limitrs,#F+LFAq**446O &&002K / "f[&9 99 9 2&&&002K / "f[&9 99 9 1%&&002K <<K(#o*> ?? ? { q   1%&&002K "  r!cddl}ddl}t|\}}}|jj }|j |jj }t |t |k(sJ|j |jd|jj }t |t |k(sJ|jd|d|d|j |jd|jj }tjt|t|rJt|dk(sJtjtd 5|j |jdddd|jd |j |jd|jj }|gk(sJy#1swY`xYw) Nrr')days) age_limitsecondsrzhas to be a positivertgMbP?)rrrr5r6rr timedeltarrrr*r7rrs)r_rrr-r/ put_cacherrs r!test_memory_reduce_size_age_limitrs+F3FAy**446O &&002K / "f[&9 99 9 !3!3!3!;<&&002K / "f[&9 99 9DJJqM bM bM !3!3!3A!>?&&002K||C ,c/.BCC C { q   z)? @E%7X%7%7%CDEDJJu !3!3!3A!>?&&002K "  EEs ?$HH ct|\}}}|jtj|jj gk(sJ|j drJy)Nrw) stacklevel)rr\r7r~r5r$r )r_r-r/r`s rtest_memory_clearrsZ#F+LFAq LLN ::f**33 4 :: :**a*88 88r!cdgdz}|S)Nr|ir) complex_objs rfast_func_with_complex_outputr#s,%K r!cnttdDcic]}t||}}|r|SdScc}w)Ngj@z simple output)r)intr)complex_outputr.rs r)fast_func_with_conditional_complex_outputr(s7&+CHo63q6196K6(;=o=7s2ct|j}|jtt dfdt dD|j \}}d}||vsJ||vsJy)Nr*rrjc3>K|]}tywrArmror.rus rrqzMtest_cached_function_race_condition_when_persisting_output..5s@!+w{+-@sr&r)r rYr(rrr)rUr_capfdr-rRstderrrrus @r:test_cached_function_race_condition_when_persisting_outputr-sp V^^ ,F,,<=KHA@uQx@@%%'NFF 6M  && &  && &r!ct|j}|jtt dfdt dD|j \}}d}||vsJ||vsJy)Nr*rrjc3TK|]}t|dzdk(rdnd!yw)rrTFNrmrs rrqzOtest_cached_function_race_condition_when_persisting_output_2..Ks/@A QUaZTU;s%(r&r)r rYr(rrr)rUrs @r.func\s! 4DIIKr!rOr'rrzrJr*r,r-AssertionErrorr.rr)r_rr-r+ cached_func input_argrOrHrrecomputed_argrecomputed_timestampr referenceers r;test_memory_recomputes_after_an_error_while_loading_resultsrYs V^^ ,F ,,t$KI +NC )  f%5[+N+6s+;(N(  !Q && &5M -a0 00 0 S  ) ++ +f%++C0I&  J   & #aff+%%%&s'C C0 C++C0ceZdZdZy)IncompleteStoreBackendzAThis backend cannot be instantiated and should raise a TypeError.N)rr^r__doc__rr!rrrsKr!rc@eZdZdZdZdZdZdZdZdZ dZ d Z y ) DummyStoreBackendz(A dummy store backend that does nothing.cy)zOpen an item on store.Nr)selfrrs r _open_itemzDummyStoreBackend._open_itemr!cy)z!Check if an item location exists.Nrrr$s r _item_existszDummyStoreBackend._item_existsrr!cy)z&Move an item from src to dst in store.Nr)rsrcdsts r _move_itemzDummyStoreBackend._move_itemrr!cy)zCreate location on store.Nrrs rcreate_locationz!DummyStoreBackend.create_locationrr!cy)z&Check if an object exists in the storeFrrobjs rr zDummyStoreBackend.existssr!cy)zClear object on storeNrrs rclear_locationz DummyStoreBackend.clear_locationrr!cgS)z3Returns the whole list of items available in cache.r)rs rr6zDummyStoreBackend.get_itemss r!cy)zConfigure the storeNr)rr$rrs r configurezDummyStoreBackend.configurerr!N) rr^rrrrrrr rr6rrr!rrrs-2r!rinvalid_prefixctt5}t|ddddjdy#1swYxYw)Nz&Store backend name should be a string*rrsrrt)rrvs r(test_register_invalid_store_backends_keyr s:  5w~t45 MM;<55 7Actt5}tdddddjdy#1swYxYw)Nfsz.Store backend should inherit StoreBackendBase*r rvs r+test_register_invalid_store_backends_objectrs:  +wtT*+ MMCD++r ctt5}tdddddjdy#1swYxYw)Nz /tmp/joblibunknown)r$backendzUnknown location*)r TypeErrorr rtrs r!test_memory_default_store_backendrs8  :g y9: MM&'::s 8AcGdd}|}tt5}td|dddd}|tdjvsJy#1swY(xYw)Nc eZdZy)Htest_warning_on_unknown_location_type..NonSupportedLocationClassNrrr!rNonSupportedLocationClassrrr!rlocalr*zbInstantiating a backend using a NonSupportedLocationClass as a location is not supported by joblibr)r UserWarningrrr)runsupported_locationrexpected_mesages r%test_warning_on_unknown_location_typersn  56 { Gxw1EFG  c(1+"5"56 66 6GGs AAcd}t|t|tftjvsJt t 5}t |ddddjdy#1swYxYw)Nisb fake_locationznCan't instantiate abstract class IncompleteStoreBackend (without an implementation for|with) abstract methods*)rrrrrrrrt) backend_namervs r)test_instanciate_incomplete_store_backendr"slL<)?@ 0 1_5J5J5L LL L  >g|_=> MM A>>s A''A0cd}t|t|tftjvsJt |d}t |tsJy)Ndsbdummy_location)rrrrrr)r! backend_objs rtest_dummy_store_backendr'sOL<):; + ,0E0E0G GG G(7GHK k#4 55 5r!ctjd}td|} |jdk(sJ t j ddy#t j ddwxYw)N some_folderrTrU)pathlibPathrr$rZr[)r8r&s r0test_instanciate_store_backend_with_pathlib_pathr,sR << &D($7K9##}444 m48 m48s A A&c.d}t}|jJt|t||j dk(sJ|j |j t||j |j k(sJt|y)Nz-FileSystemStoreBackend(location="{location}")r*)rr$rIrrxrrY)r_ repr_patternrs r"test_filesystem_store_backend_reprr/sCL$&G    ## #M w<<...= == = fnn% w<<...G GG GMr!cd}t|jd}|j|}d}t||j ||j j k(sJ|jdd}d}t||j |j j |j|jk(sJt|d j |j j k(sJy) Nc ||zSrArr^s rmy_funcz)test_memory_objects_repr..my_funcs 1u r!rr#z/MemorizedFunc(func={func}, location={location}))r+r$*zJMemorizedResult(location="{location}", func="{func}", args_id="{args_id}"))r$r+rzMemory(location={location})r*) r rYr(rrxr5r$r,rr)r_r2r-memorized_funcmemorized_func_reprmemorized_resultmemorized_result_reprs rtest_memory_objects_reprr8sV^^Q 7F\\'*NK ~ "5"<"< v33<<#=#  &55b"= U  $9$@$@%%..  % % ((%A%   v;7>>%%..?  r!ct|j}|jd}|jd}t j |}t j |}|jj|jjk(sJ|j|jk(sJ|j|jk(sJt|t|k(sJy)Nr*c |dzSrrrs rr`z'test_memorized_result_pickle..g6 !t r!rw) r rYr(r,rrrr5r$r+rr)r_r-r`r6memorized_result_picklememorized_result_loadss rtest_memorized_result_pickler>/s V^^ ,F \\((+$ll+;<#\\*AB &&// ! / / 8 8 9 9  $:$?$? ?? ?  # #'='E'E EE E  C(>$? ?? ?r!c|g}t|}t|}t|jt|jk(sJ|jD]}||vr||||k(rJyrA)varsrkeys)leftright ignored_attrs left_vars right_varsattrs rcomparerHGs} T IeJ y~~ C (9$: :: : 3 = *T"22223r! memory_kwargsr&r)rTr%r$ parameterunused)rSr%backend_optionscZtdd|ji|}tjtj|}t |j |j t ||tgdt|t|k(sJ|jt}tjtj|}t |j |j t ||tgdt|t|k(sJ|jd}tjtj|}t |j |j t ||tgdt|t|k(sJy)Nr$)r5rH _func_code_id)rDr'r) r rYrrrrHr5rrr(r r,)r_rIr-memory_reloadedrufunc_cached_reloadedr6memorized_result_reloadeds rtest_memory_pickle_dump_loadrRTs` =V^^ =} =Fll6<<#78O F /"?"?@ IJ <40 00 0,,q/K!<< [(AB K % %';'I'IJ IJ  %9 : :: :#2215 & V\\:J-K L  * *,E,S,ST !IJ  !T*C%D DD Dr!c|jtjd}t|jd}|j d}||}d|j vsJ|jt|jd}|j d}||}d|j vsJ|jy)Nr&r#c |dzSrrrs rr ztest_info_log..fr;r!Queryingrc |dzSrrrs rr ztest_info_log..fr;r!) set_levelloggingINFOr rYr(textr\)r_caplogrr-r r/s r test_info_logr]s W\\" A V^^R 8F \\ !A  $$ $ LLN V^^Q 7F \\ !A V[[ (( ( LLNr!creZdZdZd dZdZejjdddgdZ d Z d Z y) TestCacheValidationCallbackz.Tests on parameter `cache_validation_callback`NcDd|d<|tj||dzS)NTrunrr)rrrdelays rfoozTestCacheValidationCallback.foos&%   JJu 1u r!cd}tjt|5|jddddy#1swYyxYw)z2Test invalid values for `cache_validation_callbackz9cache_validation_callback needs to be callable. Got True.rTr!N)r7rrsr()rr-rts r&test_invalid_cache_validation_callbackzBTestCacheValidationCallback.test_invalid_cache_validation_callbacks8K ]]:U 3 9 LL4L 8 9 9 9s :ArTFc|j|jfddg}ddiddi}}|d|dk(sJ|d|dk(sJ|dsJ|dk7sJy) zTest expiry of old resultscSrArr s rrzUTestCacheValidationCallback.test_constant_cache_validation_callback..s0Dr!rr"rraFrrwNr(rc)rr-rr d1d2s ` r'test_constant_cache_validation_callbackzCTestCacheValidationCallback.test_constant_cache_validation_callbacks} LL HH&D5   %BBx1}}Bx1}}%yy%y0000r!c d}|j|j|dg}ddiddi}}|d|dd k(sJ|d|dd k(sJ|dsJ|dsJddiddi}}|d|d d k(sJ|d|d d k(sJ|dsJ|drJy ) z*Test cache validity based on run duration.c|d}|dkDryy)Ndurationg?Tr)metadataros rr"z^TestCacheValidationCallback.test_memory_only_cache_long_run..cache_validation_callbacks +H#~r!rrhraFrr)rbrwrvNri)rr-r"r rjrks rtest_memory_only_cache_long_runz;TestCacheValidationCallback.test_memory_only_cache_long_runs  LL HH0ISVRW   %BBa A%%%Ba A%%%%yy%yy%BBc"a'''Bc"a'''%yye9}9r!c|j|jtddg}ddiddiddi}}}|d|dk(sJ|d|dk(sJtjd |d|dk(sJ|dsJ|drJ|dsJy ) z!Test expiry of old cached resultsg333333?rrrhraFrrwr3N)r(rcrrr)rr-r rjrkd3s rtest_memory_expires_afterz5TestCacheValidationCallback.test_memory_expires_afters LL HH c0JTWSX  U^eU^eU^BBx1}}Bx1}} 3Bx1}}%yye9}%yyr!rA) rr^rrrcrer7markrrlrqrtrr!rr_r_sD4 9  [[3dE]C 1D 14r!r_c,eZdZdZedZdZdZy)TestMemorizedFuncz8Tests for the MemorizedFunc and NotMemorizedFunc classesc<|j|ddz||<||S)Nrr')r-)rcounters rr zTestMemorizedFunc.fs%[[A&* qzr!c|j|jdg}i}|d|dk(sJ|d|dk(sJ|jd|\}}|dk(sJdt|tsJdy)Test calling the functionryrrr'f has not been called properly0Metadata are not returned by MemorizedFunc.call.N)r(r callrdictrr-r ryrmetas rtest_call_method_memorizedz,TestMemorizedFunc.test_call_method_memorizeds LL L 4G}!!!G}!!!&&G$4Av777v$% > %r!ct|j}i}|d|dk(sJ|d|dk(sJ|jd|\}}|dk(sJdt|tsJdy)r{rr'r&r|r}N)r r r~rrrs rtest_call_method_not_memorizedz0TestMemorizedFunc.test_call_method_not_memorizeds TVV $G}!!!G}!!!&&G$4Av777v$% > %r!N)rr^rr staticmethodr rrrr!rrwrws!>    r!rwr$test_cache_dirct|}tjgdgdg}|jtj}||t j |} tjj|d}d}t|5}||jk(sJ dddtj|dy#1swY!xYw#tj|dwxYw)zoTest that using the memory object automatically creates a `.gitignore` file within the new cache directory.)r'rr&)rwr$z .gitignorez%# Created by joblib automatically. * NTrU)r rasarrayr(squarer*r+r7r8r9r:r6rZr[)r$memarrcostly_operationpath_to_gitignore_filegitignore_file_contentr s rtest_memory_creates_gitignorers  C **i+ ,Cyy+S||H%H4!#h !E!J ( ) 6Q)QVVX5 55 6  hd3  6 6  hd3s$$-CC(CC CC-r)rR)TrA)xrrrrrYr7os.pathr*rrZrQrzrr7joblib._store_backendsrrjoblib.hashingr joblib.memoryrrrr r r r r rrrrjoblib.parallelrrjoblib.test.commonrrrjoblib.testingrrrr r0r>rJrcrrrrrrrrrrrrrrrrrrrrrur(r0r=rErKr\r_rardrfrhrmrfloatrprwryrrrrrrrrrrrrrrrrXr rrrr"r'r,r/r8r>rHrRr]r_rwr+resolverrr!rrs{    K    .CC55  -  +\ #dE]3fA4fAR ; $ J34  ?$ ?    [4+&-' -& $ $N*!&!6( )cUC,=B~+NO $P $@ ./$?+@+,.!=H @6+r    (-%35UC4&1*3.%P86"J9 > ''&''.*&Z - !(!H dfdf56=7=E(7" 69(@@0 31%a[(