
     h/              
          d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ ddlZddlZddlZddlZddlmZ dd	lmZmZ dd
lm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  eddl!m"Z" ddl#m$Z$ 	 ddl%Z%n# e&$ r dZ%Y nw xY w	 ddl'm(Z( n# e&$ r dZ(Y nw xY w	 ddl)Z)n# e&$ r dZ)Y nw xY wddl*m+Z+ ddl*m,Z, ddl*m-Z- ddl*m.Z. ddl*m/Z/ ddl*m0Z0 ddl1m2Z2m3Z3 ddl1m4Z4m5Z5 ddl1m6Z6m7Z7 ddl1mZm8Z8m9Z9m:Z: ddl;m<Z< ddl;m=Z= dg e> e8j?                              z   Z@e@d e8D             z  Z@eg ZAndd gZAeAd!gz   ZB eCed"          r#e@D                     ejE        d#                     e8e9         ZFd$ ZGd% ZHd& ZI G d' d(eJ          ZKdd*ZLd+ ZMdd,ZNd- ZOd. ZPd/ ZQd0 ZRejS                            d1d2d3 e6d34          fd5gg d67          ed8                         ZT ed9e@           ed:g d;           ed<g d=          d>                                     ZU ed9e@          d?             ZVd@ ZWe edAg dB          dC                         ZXe ed9g dD          dE                         ZYdF ZZ edGe8           edHe8          dI                         Z[dJ Z\edK             Z]dL Z^ ed:g dM          dN             Z_ ed9eB          dO             Z`edP             Za ed9eB          dQ             Zbe ed9eB          dR                         Zce ed9eA          dS                         ZddT Ze ed9e8           edUdg dVfdWg dXfg          dY                         Zfe ed9eB          dZ                         Zgd[ Zhe ed9eA          d\                         Zid] Zjd^ Zkd_ Zle ed9eB          ejS        m                    d`a          db                                     Zn G dc dde+          Zode Zp ed9e@          df             Zqdg Zrdh Zs eedudia          dj             Ztdk ZueBdd         Zvevw                    dl  exdm          D                        e ed9ev          dn                         Zy G do dpe+          Zzdq Z{dr Z|ds Z}dt Z~ G du dvej        j/                  Z e4dwe           e ed9g dx          dy                         Ze ed:g dz           ed9eB          d{                                     Zd| Ze ed}eB           ed~eB          d                                     Zed             Zd Zd Z edg d          d             Z edg d          d             Zed             Zee ed9eA          d                                     ZdZe ed9eA          d                         ZdZdZdZdZe ed9eAeg nd#gz              edeeeg           edg d          d                                                 Zd                    ej                            ej                            ej                                      Zed             Zd                    ej                            ej                            ej                                      Zed             Zd Zd Zee ed9eA          d                                     Zd Zeed                         Zd Z ed9e@           ed:g d          d                         Zee ed9eA          d                                     Z ed9edd!gng d          d             Ze ed9eA          d                         Zed             Zd Zd Zd Zd ZddZe ed9d d!g          d                         Ze ee)du da          d                         ZddZ ed9ed!gnd d!g          d             Zd Z ed9edd gndg           ee(du da          d                         Z ee)duda          d             Zd Zd Zd Zd Zd Zee ed:g d          d                                     Zee edg d           ed:dd3g          d                                                 Ze ed:dd3g           edg d¢          dÄ                                     Zee ed9dd! e-             e,            g          dĄ                                     Ze ed:g dŢ          dƄ                         ZdS )z
Test the parallel module.
    N)format_exceptionsqrt)sleep)PicklingErrorTimeoutErrorparallel)dumpload)mp)np
with_numpy)with_multiprocessing)parametrizeraisescheck_subprocess_callskipifwarns)get_reusable_executor)Queue   )parallel_sum)SequentialBackend)ThreadingBackend)MultiprocessingBackend)ParallelBackendBase)LokyBackend)SafeFunction)Paralleldelayed)register_parallel_backendparallel_backend)effective_n_jobs	cpu_count)r   BACKENDSDEFAULT_BACKENDEXTERNAL_BACKENDS)JoblibException)WorkerInterruptc                 6    g | ]}t          |                     S  )r'   ).0backend_strs     U/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/joblib/test/test_parallel.py
<listcomp>r1   J   s#    KKK;x,..KKK    multiprocessingloky	threadingget_contextspawnc           	      B    t          | dt          | dd                     S )N_pool_workers)getattrbackends    r0   get_workersr>   X   s     7GWWj$%G%GHHHr2   c                     | |z  S Nr-   )xys     r0   divisionrC   \   s    q5Lr2   c                     | dz  S N   r-   rA   s    r0   squarerH   `   s    6Mr2   c                       e Zd ZdZd ZdS )MyExceptionWithFinickyInitz1An exception class with non trivial __init__
    c                     d S r@   r-   )selfabcds        r0   __init__z#MyExceptionWithFinickyInit.__init__g   s    r2   N__name__
__module____qualname____doc__rQ   r-   r2   r0   rJ   rJ   d   s-             r2   rJ   Fc                 H    | dk    r|rt          dddd          nt          | S )N   rM   rN   rO   rP   )rJ   
ValueError)rA   custom_exceptions     r0   exception_raiserr[   k   s4    Avv"3)#sC===(2	4Hr2   c                 8    t          j        d           t          )Ng?)timer   KeyboardInterruptrG   s    r0   interrupt_raiserr_   r   s    JsOOO
r2   c                     | dz  |z   |z   S )zO A module-level function so that it can be spawn with
    multiprocessing.
    rF   r-   )rA   rB   zs      r0   frb   w   s     6A:>r2   c                  N    t          t          j                    d                   S Nr   )typer   get_active_backendr-   r2   r0   _active_backend_typerg   ~   s    +--a0111r2   c                 d     t          | |          d t          d          D                       S )Nn_jobsr=   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r"   rH   r.   is     r0   	<genexpr>z parallel_func.<locals>.<genexpr>   sC       :. :. :. :. :. :. :. :.r2      r!   range)inner_n_jobsr=   s     r0   parallel_funcrt      sE    98<999 :. :.$)!HH:. :. :. . . .r2   c                  .    t                      dk    sJ d S rd   )r&   r-   r2   r0   test_cpu_countrv      s    ;;??????r2   c                  .    t                      dk    sJ d S rd   )r%   r-   r2   r0   test_effective_n_jobsrx      s    !!!!!!r2   zbackend_n_jobs, expected_n_jobs)rp   rp   rj   Nr   )zpositive-intznegative-intNone)idsc                     t          d|           5  t          d           |k    sJ 	 d d d            n# 1 swxY w Y   t          d           dk    sJ d S )Nr5   rz   r   )r$   r%   )backend_n_jobsexpected_n_jobss     r0   test_effective_n_jobs_Noner      s     
+n	=	=	= @ @  t,,,?????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @
 4(((A------s   6::r=   rj   )r   rF   ry   verbose)rF      d   c                     d t          d          D              t          || |          d t          d          D                       k    sJ d S )Nc                 ,    g | ]}t          |          S r-   rH   r.   rA   s     r0   r1   z(test_simple_parallel.<locals>.<listcomp>   s    )))1VAYY)))r2      )rj   r=   r   c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   r   s     r0   ro   z'test_simple_parallel.<locals>.<genexpr>   sC       &6 &6'(""&6 &6 &6 &6 &6 &6r2   rr   r!   )r=   rj   r   s      r0   test_simple_parallelr      s     *)a)))&HFG$& & &&6 &6,1!HH&6 &6 &66 66 6 6 6 6 6r2   c                 l   |                     t          j                    dd           t          j        d          5 } t          d|           d t          d	          D                       }|g d
k    sJ 	 d d d            n# 1 swxY w Y   d |D             }t          |          dk    sJ d S )Nname!some_new_name_for_the_main_thread)targetr   valueTrecordrF   ri   c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   r   s     r0   ro   z6test_main_thread_renamed_no_warning.<locals>.<genexpr>   sC       62 62#$OGFOOA62 62 62 62 62 62r2   rp   )r   r      c                 >    g | ]}d t          |j                  v|S )zworker timeout)strmessager.   ws     r0   r1   z7test_main_thread_renamed_no_warning.<locals>.<listcomp>   s+    NNNa'7s19~~'M'M'M'M'Mr2   r   )setattrr5   current_threadwarningscatch_warningsr!   rr   len)r=   monkeypatchwarninforesultss       r0   #test_main_thread_renamed_no_warningr      s)    y799A  C C C 
	 	-	-	- $5(!W555 62 62(-a62 62 62 2 2)))#####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ON8NNNH
 x==As   <BBBc                 &   t          j        d          5 }t          j        d           t          | |           d d d            n# 1 swxY w Y   d |D             }|r,|r(t	          |          dk    od|d         j        d         v S d	S |rJ dS )
NTr   always)r=   rs   c                     g | ]	}|j         
S r-   )r   r   s     r0   r1   z*_assert_warning_nested.<locals>.<listcomp>   s    ,,,a	,,,r2   r   zbacked parallel loops cannotr   F)r   r   simplefilterrt   r   args)r=   rs   expectedr   s       r0   _assert_warning_nestedr      s   		 	-	-	- Bh'''gLAAAAB B B B B B B B B B B B B B B -,8,,,H 
 	H" F.(1+2B12EE u|ts   &AAAz%parent_backend,child_backend,expected))r4   r3   T)r4   r4   F)r3   r3   T)r3   r4   T)r5   r3   T)r5   r4   Tc                 ,    t          d|           fdt          d          D                         t          d|           fdt          d          D                       }| dk    rt          |          sJ d S t          |          sJ d S )NrF   ri   c              3   X   K   | ]$} t          t                    d d          V  %dS )r   Fr=   rs   r   Nr"   r   r.   _child_backends     r0   ro   z0test_nested_parallel_warnings.<locals>.<genexpr>   s[       / /  	(&''!	 	 	/ / / / / /r2   r   c              3   X   K   | ]$} t          t                    d           V  %dS )rF   r   Nr   )r.   r   r   r   s     r0   ro   z0test_nested_parallel_warnings.<locals>.<genexpr>   s[       5 5  	(&''!	 	 	5 5 5 5 5 5r2   r5   )r!   rr   anyall)parent_backendr   r   ress    `` r0   test_nested_parallel_warningsr      s     /HA~... / / / / q	/ / /    5(!^
4
4
4 5 5 5 5 5 q	5 5 5  C $$3xxx3xxxr2   )r4   r3   r5   c                     dg}d }t          j        ||f          }|                                 |                                 |d         sJ d S )NFc                 $   t          j        d          5 } t          d          d t          d          D                        d d d            n# 1 swxY w Y   t	          t          |                     t          |          dk    | d<   d S )NTr   rF   rz   c              3   P   K   | ]!} t          t                    d           V  "dS )皙?Nr"   r   r.   r   s     r0   ro   zPtest_background_thread_parallelism.<locals>.background_thread.<locals>.<genexpr>  sC       6 6'(r""6 6 6 6 6 6r2   r   r   )r   r   r!   rr   printr   )is_run_parallelr   s     r0   background_threadz=test_background_thread_parallelism.<locals>.background_thread   s    $D111 	6XHA 6 6,1!HH6 6 6 6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	c(mm ]]a/   1AAA)r   r   r   )r5   Threadstartjoin)r=   r   r   ts       r0   "test_background_thread_parallelismr      sf     gO0 0 0 	 18JKKKAGGIIIFFHHH1r2   c                 h     t          d|           d t          d          D                        d S )NrF   ri   c              3   P   K   | ]!} t          t                    d           V  "dS ){Gz?Nrl   r   s     r0   ro   znested_loop.<locals>.<genexpr>  sC       (0 (0!"(0 (0 (0 (0 (0 (0r2   rq   r<   s    r0   nested_loopr     sO    'HAw''' (0 (0&+Ahh(0 (0 (0 0 0 0 0 0r2   r   r   c                 n     t          d|           fdt          d          D                        d S )NrF   ri   c              3   R   K   | ]!} t          t                              V  "d S r@   )r"   r   r   s     r0   ro   z#test_nested_loop.<locals>.<genexpr>  sG       /? /?01]++/? /? /? /? /? /?r2   rq   )r   r   s    `r0   test_nested_loopr     s\     /HA~... /? /? /? /?5:1XX/? /? /? ? ? ? ? ?r2   c                     t           r@   )rY   r<   s    r0   raise_exceptionr     s    
r2   c            	      8   t          t                    5  t          dd          5 }  |  t          t                    d           t          t
                    d          g           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrF   r4   ri   )r   rY   r!   r"   r   r   r
   s    r0   )test_nested_loop_with_exception_with_lokyr     s   	
		 9 9Q/// 	98H*gk**622.go..v668 9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	99 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s5   BAA7+B7A;	;B>A;	?BBBc                       t          d            t          dd           fdt          d          D                                                         sJ dS )z1Input is mutable when using the threading backendr   )maxsizerF   r5   ri   c              3   R   K   | ]!} t          j                  d           V  "dS r   N)r"   put)r.   r   qs     r0   ro   z1test_mutate_input_with_threads.<locals>.<genexpr>'  sF       ,- ,-q,- ,- ,- ,- ,- ,-r2   N)r   r!   rr   full)r   s   @r0   test_mutate_input_with_threadsr   $  su    aA+HA{+++ ,- ,- ,- ,-#(88,- ,- ,- - - -6688OO8OOr2   )r   rF   rp   c                     t          d          }d |D              t          |           d |D                       k    sJ dS )z.Check the keyword argument processing of pmap.
   c                 0    g | ]}t          |d           S r   rB   rb   r   s     r0   r1   z(test_parallel_kwargs.<locals>.<listcomp>0  s"    $$$1QqAYYY$$$r2   rz   c              3   T   K   | ]#} t          t                    |d           V  $dS r   r   Nr"   rb   r   s     r0   ro   z'test_parallel_kwargs.<locals>.<genexpr>1  s7      #D#D1JGAJJqA$6$6$6#D#D#D#D#D#Dr2   Nr   )rj   lsts     r0   test_parallel_kwargsr   ,  sk     ))C$$$$$#HF####D#D#D#D#DDDE E E E E Er2   c                    t          d          }d |D             }t          d|           5 }|j        }| |d |D                       k    sJ | |d |D                       k    sJ t          %t	          |          t	          |j                  u sJ d d d            n# 1 swxY w Y   t          t	          |j                  J | |d |D                       k    sJ t          t	          |j                  J d S d S )Nr   c                 0    g | ]}t          |d           S r   r   r   s     r0   r1   z4test_parallel_as_context_manager.<locals>.<listcomp>7  s"    '''a!q			'''r2   r   ri   c              3   T   K   | ]#} t          t                    |d           V  $dS r   r   r   s     r0   ro   z3test_parallel_as_context_manager.<locals>.<genexpr>@  7      ==AZWQZZQ///======r2   c              3   T   K   | ]#} t          t                    |d           V  $dS r   r   r   s     r0   ro   z3test_parallel_as_context_manager.<locals>.<genexpr>A  r   r2   c              3   T   K   | ]#} t          t                    |d           V  $dS r   r   r   s     r0   ro   z3test_parallel_as_context_manager.<locals>.<genexpr>M  s7      99A+++999999r2   )rr   r!   _backendr   r>   )r=   r   r   pmanaged_backends        r0    test_parallel_as_context_managerr   4  s   
))C''3'''H	G	,	,	, K * 11===========11=========== >//;qz3J3JJJJJK K K K K K K K K K K K K K K  
~1:&&... qq99S999999999	~1:&&... ~..s   A*B##B'*B'c                        G d dt                      t          t          d          5   t          d           fdt	          d          D                        d	d	d	           d	S # 1 swxY w Y   d	S )
ze Check that pmap captures the errors when it is passed an object
        that cannot be pickled.
    c                       e Zd Zd ZdS )1test_parallel_pickling.<locals>.UnpicklableObjectc                      t          d          )N123)RuntimeErrorrL   s    r0   
__reduce__z<test_parallel_pickling.<locals>.UnpicklableObject.__reduce__X  s    u%%%r2   N)rS   rT   rU   r   r-   r2   r0   UnpicklableObjectr   W  s#        	& 	& 	& 	& 	&r2   r   zthe task to sendmatchrF   rz   c              3   b   K   | ])} t          t                                           V  *d S r@   r"   id)r.   r   r   s     r0   ro   z)test_parallel_pickling.<locals>.<genexpr>\  s=      OO;72;;'8'8':':;;OOOOOOr2   r   N)objectr   r   r!   rr   )r   s   @r0   test_parallel_picklingr   R  s    
& & & & &F & & & 
%8	9	9	9 P POOOOU2YYOOOOOOP P P P P P P P P P P P P P P P P Ps   3A++A/2A/c                     t           t          d| d          d t          d          D                                 dk    sJ d S )NrF   r   rj   r=   timeoutc              3   P   K   | ]!} t          t                    d           V  "dS )gMbP?Nr   r   s     r0   ro   z0test_parallel_timeout_success.<locals>.<genexpr>b  sC       ?2 ?2"#u?2 ?2 ?2 ?2 ?2 ?2r2   )r   r!   rr   r<   s    r0   test_parallel_timeout_successr  _  sr     >xq'2>>> ?2 ?2',Ryy?2 ?2 ?2 2 2 3 3689 9 9 9 9 9r2   c                     t          t                    5   t          d| d          d t          d          D                        d d d            d S # 1 swxY w Y   d S )NrF   r   r  c              3   P   K   | ]!} t          t                    d           V  "dS )r   Nr   r   s     r0   ro   z-test_parallel_timeout_fail.<locals>.<genexpr>k  sC       :3 :3#$NGENN2:3 :3 :3 :3 :3 :3r2   r   )r   r	   r!   rr   r<   s    r0   test_parallel_timeout_failr  f  s     
		 3 397D999 :3 :3(-b		:3 :3 :3 	3 	3 	33 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3   3AAAc           	      2   t           t          t                    5   t          d|           d t	          dd          D                        d d d            n# 1 swxY w Y   t          t
                    5   t          d|           d dD                        d d d            n# 1 swxY w Y   t          d|           5 }t          |j                  J t          |j                  }t          t                    5   |d t	          dd          D                        d d d            n# 1 swxY w Y   t          |j                  J t          |j                  |usJ d t          d	          D              |d
 t          d	          D                       k    sJ t          |j                  }t          t
                    5   |d dD                        d d d            n# 1 swxY w Y   t          |j                  J t          |j                  |usJ d t          d	          D              |d t          d	          D                       k    sJ 	 d d d            n# 1 swxY w Y   t          |j                  J nOt          t                    5   t          d          d dD                        d d d            n# 1 swxY w Y   t          t                    5   t          d          d t	          dd          D                        d d d            n# 1 swxY w Y   t          t                    5   t          dd          d t          d          D                        d d d            n# 1 swxY w Y   	  t          d          d t	          dd          D                        t          d          # t          $ r"}t          |t                    rJ Y d }~d S d }~ww xY w)NrF   ri   c                 P    g | ]#\  }} t          t                    ||          $S r-   r"   rC   r.   rA   rB   s      r0   r1   z&test_error_capture.<locals>.<listcomp>w  s@     5 5 51 #""1a(( 5 5 5r2   )r   r   )r   r   c                 H    g | ]} t          t                    |           S r-   r"   r_   r   s     r0   r1   z&test_error_capture.<locals>.<listcomp>{  ,    >>>!*)**1-->>>r2   c                 P    g | ]#\  }} t          t                    ||          $S r-   r  r  s      r0   r1   z&test_error_capture.<locals>.<listcomp>  s@     ; ; ;"a ,'(++Aq11 ; ; ;r2   c                 0    g | ]}t          |d           S r   r   r   s     r0   r1   z&test_error_capture.<locals>.<listcomp>  "    2221QqAYYY222r2   r   c              3   T   K   | ]#} t          t                    |d           V  $dS r   r   r   s     r0   ro   z%test_error_capture.<locals>.<genexpr>  7      CCAZWQZZQ///CCCCCCr2   c                 H    g | ]} t          t                    |           S r-   r  r   s     r0   r1   z&test_error_capture.<locals>.<listcomp>  s,    GGG13'"233A66GGGr2   c                 0    g | ]}t          |d           S r   r   r   s     r0   r1   z&test_error_capture.<locals>.<listcomp>  r  r2   c              3   T   K   | ]#} t          t                    |d           V  $dS r   r   r   s     r0   ro   z%test_error_capture.<locals>.<genexpr>  r  r2   rz   c                 H    g | ]} t          t                    |           S r-   r  r   s     r0   r1   z&test_error_capture.<locals>.<listcomp>  r  r2   c                 P    g | ]#\  }} t          t                    ||          $S r-   r  r  s      r0   r1   z&test_error_capture.<locals>.<listcomp>  s1    EEEAWXq!$$EEEr2   r   )rj   r   c              3   T   K   | ]#} t          t                    |d           V  $dS )T)rZ   Nr"   r[   rm   s     r0   ro   z%test_error_capture.<locals>.<genexpr>  sN       ! ! 'W%&&q4@@@ ! ! ! ! ! !r2      r   c              3   X   K   | ]%\  }} t          t                    ||          V  &d S r@   r  r  s      r0   ro   z%test_error_capture.<locals>.<genexpr>  sT       E E(,1GHa##E E E E E Er2   z'The excepted error has not been raised.)r   r   ZeroDivisionErrorr!   zipr+   r>   r   rr   r^   rJ   rY   	Exception
isinstancer*   )r=   r   original_workersexs       r0   test_error_capturer$  o  s)   
 
~%&& 	6 	6/HAw///5 5 #FF 3 35 5 56 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 O$$ 	@ 	@/HAw///>>v>>>@ @ @	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@
 Q000 	EHx011===*8+<==)** < < ; ;&)&&&9&9; ; ; < < << < < < < < < < < < < < < < < x011=== x0119IIIII22b		222HCCrCCCCCD D D D  +8+<==(( I IGGGGGHHHI I I I I I I I I I I I I I I x011=== x0119IIIII22b		222HCCrCCCCCD D D D D9	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	EB 8,--5555%&& 	@ 	@HA>>v>>>@ @ @	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 
!	"	" G GEEVV1D1DEEE	G 	G 	GG G G G G G G G G G G G G G G 
*	+	+ " "%1%%%! !Bii! ! !	" 	" 	"" " " " " " " " " " " " " " "
D E E03FF0C0CE E E 	E 	E 	E
 BCCC  3 3 3b/222222222223s   3AA #A ;%B,,B03B0?I>$D7+I>7D;	;I>>D;	?BI>G9-I>9G=	=I> G=	A0I>>JJ4$K$$K(+K(2MMM 2NN"%N"*1O* *
P4PPc                 6    |                      d|z             d S )NzConsumed %s)append)queueitems     r0   consumerr)    s    	LL%&&&&&r2   zbatch_size, expected_queue)
Produced 0
Consumed 0
Produced 1
Consumed 1
Produced 2
Consumed 2
Produced 3
Consumed 3
Produced 4
Consumed 4
Produced 5
Consumed 5r   )r*  r,  r.  r0  r+  r-  r/  r1  r2  r4  r3  r5  c                     t                      fd} t          d||           fd |            D                        |k    sJ t                    dk    sJ dS )zC Test that with only one job, Parallel does act as a iterator.
    c               3   h   K   t          d          D ]}                     d| z             | V  d S N   zProduced %irr   r&  rn   r'  s    r0   producerz'test_dispatch_one_job.<locals>.producer  H      q 	 	ALL*+++GGGG	 	r2   r   rj   
batch_sizer=   c              3   T   K   | ]"} t          t                    |          V  #d S r@   r"   r)  )r.   rA   r'  s     r0   ro   z(test_dispatch_one_job.<locals>.<genexpr>  sI       ?9 ?9()%##?9 ?9 ?9 ?9 ?9 ?9r2      N)listr!   r   )r=   r?  expected_queuer<  r'  s       @r0   test_dispatch_one_jobrE    s      FFE    
 ?HA*g>>> ?9 ?9 ?9 ?9-5XZZ?9 ?9 ?9 9 9 9N""""u::r2   c                    t          j                    }|                                fd} t          ddd|           fd |            D                        t                    }|d         dk    sJ |d	d
                             d          }|dk    sJ |                    d          }||k    sJ t                    dk    sJ d	S )zW Check that using pre_dispatch Parallel does indeed dispatch items
        lazily.
    c               3   h   K   t          d          D ]}                     d| z             | V  d S r8  r:  r;  s    r0   r<  z/test_dispatch_multiprocessing.<locals>.producer  r=  r2   rF   r   rp   )rj   r?  pre_dispatchr=   c              3   T   K   | ]"} t          t                    d           V  #dS )r   NrA  )r.   r   r'  s     r0   ro   z0test_dispatch_multiprocessing.<locals>.<genexpr>  sQ       F= F=,-%''F= F= F= F= F= F=r2   r   r*  Nr   zConsumed anyry   r0  rB  )r   ManagerrC  r!   indexr   )r=   managerr<  queue_contentsfirst_consumption_indexproduced_3_indexr'  s         @r0   test_dispatch_multiprocessingrP    s'    jllGLLNNE    
 FHA!!WEEE F= F= F= F=19F= F= F= = = = %[[N!,,,, -RaR066~FF"R''''%++L9955555u::r2   c                      t          ddd          5 }  | d t          d          D                        | j                                        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )NrF   autor5   r>  c              3   P   K   | ]!} t          t                    |          V  "d S r@   r   rm   s     r0   ro   z/test_batching_auto_threading.<locals>.<genexpr>   0      	.	.Q+'"++a..	.	.	.	.	.	.r2     r   r!   rr   r   compute_batch_size)r   s    r0   test_batching_auto_threadingrX    s    
 
v{	C	C	C 4q		.	.%++	.	.	....z,,..!333334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4   AA##A'*A'c                     t          dd|           5 } |d t          d          D                        |j                                        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )NrF   rR  r>  c              3   P   K   | ]!} t          t                    |          V  "d S r@   r   rm   s     r0   ro   z2test_batching_auto_subprocesses.<locals>.<genexpr>  rT  r2   rU  r   rV  )r=   r   s     r0   test_batching_auto_subprocessesr\    s     
vw	?	?	? 31		.	.%++	.	.	....
 z,,..222223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3rY  c                      t          t                    5   t          ddd          d t          d          D                        ddd           dS # 1 swxY w Y   dS )zCMake sure that exception raised during dispatch are indeed capturedrF      r   )rj   rH  r   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r  rm   s     r0   ro   z*test_exception_dispatch.<locals>.<genexpr>  sG       7= 7=-.%G$%%a((7= 7= 7= 7= 7= 7=r2   r  N)r   rY   r!   rr   r-   r2   r0   test_exception_dispatchr`    s    	
		 = =6A666 7= 7=27))7= 7= 7= 	= 	= 	== = = = = = = = = = = = = = = = = =r  c                 f     t          d          d t          d          D                        d S )NrF   rz   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r  r.   js     r0   ro   z(nested_function_inner.<locals>.<genexpr>  sG       9 9)*! !!!$$9 9 9 9 9 9r2   r  rq   rn   s    r0   nested_function_innerrf    sM    HA 9 9.3Bii9 9 9 9 9 9 9 9r2   c                 f     t          d          d t          d          D                        d S )NrF   rz   c              3   P   K   | ]!} t          t                    |          V  "d S r@   )r"   rf  rc  s     r0   ro   z(nested_function_outer.<locals>.<genexpr>  sG       > >./&%&&q))> > > > > >r2   r  rq   re  s    r0   nested_function_outerri    sM    HA > >3899> > > > > > > >r2   z'https://github.com/joblib/loky/pull/255)reasonc                    t          t                    5 } t          d|           d t          d          D                        ddd           n# 1 swxY w Y   t	          |j        |j        |j                  }d                    |          }d|v sJ d|v sJ d	|v sJ t          |j                  t          u sJ dS )
zEnsure errors for nested joblib cases gets propagated

    We rely on the Python 3 built-in __cause__ system that already
    report this kind of information to the user.
    rF   ri   c              3   P   K   | ]!} t          t                    |          V  "d S r@   )r"   ri  rm   s     r0   ro   z1test_nested_exception_dispatch.<locals>.<genexpr>+  sO       ,B ,B23*G)**1--,B ,B ,B ,B ,B ,Br2   r  N ri  rf  r[   )	r   rY   r!   rr   r   re   r   tbr   )r=   excinforeport_linesreports       r0   test_nested_exception_dispatchrr  !  s=    

		 Bw+7+++ ,B ,B7<Ryy,B ,B ,B 	B 	B 	BB B B B B B B B B B B B B B B $GL'-LLLWW\""F"f,,,,"f,,,,''''*,,,,,,s   2AAAc                   "    e Zd ZdZddZddZdS )FakeParallelBackendz8Pretends to run concurrently while running sequentially.r   Nc                 H    |                      |          | _        || _        |S r@   )r%   rj   r   )rL   rj   r   backend_argss       r0   	configurezFakeParallelBackend.configure<  s#    ++F33 r2   c                 `    |dk     r't          t          j                    dz   |z   d          }|S )Nr   r   )maxr   r&   rL   rj   s     r0   r%   z$FakeParallelBackend.effective_n_jobsA  s/    A::!+f4a88Fr2   r   )r   )rS   rT   rU   rV   rw  r%   r-   r2   r0   rt  rt  9  sB        BB   
     r2   rt  c                     t          t                    5 } t          d           d d d            n# 1 swxY w Y   dt          | j                  v sJ t          t                    5 } t          d          5  	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   dt          | j                  v sJ d S )Nzunit-testingr<   zInvalid backend:)r   rY   r!   r   r   r$   )ro  s    r0   test_invalid_backendr|  G  sw   	
		 )w(((() ) ) ) ) ) ) ) ) ) ) ) ) ) )W]!3!33333	
		 wn-- 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	               W]!3!3333333sB   266)B9B;BB	BB	BB"%B"c                     t          t                    5 }t          d|                                            d d d            n# 1 swxY w Y   dt	          |j                  v sJ d S )Nr   ri   z&n_jobs == 0 in Parallel has no meaning)r   rY   r!   _initialize_backendr   r   )r=   ro  s     r0   test_invalid_njobsr  R  s    	
		 Bw7+++??AAAB B B B B B B B B B B B B B B3s7=7I7IIIIIIIs   $AA	A	c                      	 t          dt                     dt          v sJ t          d         t          k    sJ 	 t          d= d S # t          d= w xY w)Ntest_backend)r#   rt  r'   r-   r2   r0   test_register_parallel_backendr  Y  se    %!.2EFFF))))'+>>>>>>^$$$H^$$$$$s   8A 
Ac                  *   t                      t          k    sJ 	 t          dt          d         d           t                      t          k    sJ 	 t
          t          _        n# t
          t          _        w xY wt                      t          k    sJ d S )Nr5   T)make_default)rg   DefaultBackendr#   r'   r   r(   r   r-   r2   r0   test_overwrite_default_backendr  b  s    !!^33333!+x/D/3	5 	5 	5 	5#%%)999999 $3  ? 2222!!^333333s   6A$ $A7zOnly without multiprocessingc                  n   t          t          d          5   t          d          d t          d          D                        d d d            n# 1 swxY w Y   t	          d          5   t                      d t          d          D                        d d d            d S # 1 swxY w Y   d S )Nz)joblib backend '.*' is not available on.*r   r4   r<   c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   rm   s     r0   ro   z2test_backend_no_multiprocessing.<locals>.<genexpr>r  s2       F F!3!3 F F F F F Fr2   rp   c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   rm   s     r0   ro   z2test_backend_no_multiprocessing.<locals>.<genexpr>v  s2      88!?76??1%%888888r2   )r   UserWarningr!   rr   r$   r-   r2   r0   test_backend_no_multiprocessingr  n  sR   	{@
B 
B 
B G G     F FU1XX F F FFFFG G G G G G G G G G G G G G G
 
&	!	! 9 9

88uQxx8888889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s#   1AAA./B**B.1B.c                    t          | d          5  t          j                    \  }}|dk    sJ t          d          dk    sJ t	                      }|j        dk    sJ | dk    r:t          |          t          k    sJ t          |j                  t          k    sJ n| dk    r:t          |          t          k    sJ t          |j                  t          k    sJ n| dk    r:t          |          t          k    sJ t          |j                  t          k    sJ nN|                     d          r9t          |          t          k    sJ t          |j                  t          k    sJ d d d            d S # 1 swxY w Y   d S )Nrp   rz   r3   r4   r5   test_)r$   r   rf   r%   r!   rj   re   r   r   r   r   
startswithrt  )backend_nameactive_backendactive_n_jobsr   s       r0   check_backend_context_managerr  y  s   	,q	1	1	1 ; ;(0(C(E(E%!!!!""a''''JJx1}}}},,,''+AAAAA
##'======V##'';6666
##{22222[((''+;;;;;
##'777777$$W-- 	;''+>>>>>
##':::::#; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   EE<<F F c                     g | ]}d |z  S )ztest_backend_%dr-   rm   s     r0   r1   r1     s    ---q---r2   rp   c                 `   |t           vr!|                     t           |t                     t                      t          k    sJ t          |           t                      t          k    sJ  t          dd          d t          D                        t                      t          k    sJ d S )NrF   r5   ri   c              3   T   K   | ]#}| t          t                    |          V  $d S r@   )r"   r  )r.   rN   s     r0   ro   z/test_backend_context_manager.<locals>.<genexpr>  sN       ,< ,<,<.-..q11,< ,< ,< ,< ,< ,<r2   )r'   setitemrt  rg   r  r  r!    all_backends_for_context_manager)r   r=   s     r0   test_backend_context_managerr    s     hHg/BCCC!!^3333!'***  !!^3333 ,HA{+++ ,< ,<1,< ,< ,< < < <
  !!^333333r2   c                       e Zd ZdZddZdS )ParameterizedParallelBackendz9Pretends to run conncurrently while running sequentially.Nc                 6    |t          d          || _        d S )Nzparam should not be None)rY   param)rL   r  s     r0   rQ   z%ParameterizedParallelBackend.__init__  s!    =7888


r2   r@   rR   r-   r2   r0   r  r    s.        CC     r2   r  c                 X   |                      t          dt                     t                      t          k    sJ t          ddd          5  t          j                    \  }}t          |          t          k    sJ |j	        dk    sJ |dk    sJ t                      }|j        dk    sJ |j        |u sJ  |d t          d          D                       }d d d            n# 1 swxY w Y   |d t          d          D             k    sJ t                      t          k    sJ d S )Nparam_backend*   rp   )r  rj   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r"   r   rm   s     r0   ro   z=test_parameterized_backend_context_manager.<locals>.<genexpr>  2      77MGDMM!$$777777r2   r   c                 ,    g | ]}t          |          S r-   r   rm   s     r0   r1   z>test_parameterized_backend_context_manager.<locals>.<listcomp>      1111tAww111r2   )r  r'   r  rg   r  r$   r   rf   re   r  r!   rj   r   rr   )r   r  r  r   r   s        r0   *test_parameterized_backend_context_managerr    s   /46 6 6!!^3333	/A	>	>	> 8 8(0(C(E(E%N##'CCCCC#r))))!!!!JJx1}}}}z^++++!77eAhh777778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 11a1111111  !!^333333s   BC''C+.C+c                  0   t                      t          k    sJ t          t          d          d          5  t	          j                    \  } }t          |           t          k    sJ | j        dk    sJ |dk    sJ t                      }|j	        dk    sJ |j
        | u sJ  |d t          d          D                       }d d d            n# 1 swxY w Y   |d t          d          D             k    sJ t                      t          k    sJ d S )N+   )r  r   rz   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r  rm   s     r0   ro   zFtest_directly_parameterized_backend_context_manager.<locals>.<genexpr>  r  r2   c                 ,    g | ]}t          |          S r-   r   rm   s     r0   r1   zGtest_directly_parameterized_backend_context_manager.<locals>.<listcomp>  r  r2   )rg   r  r$   r  r   rf   re   r  r!   rj   r   rr   )r  r  r   r   s       r0   3test_directly_parameterized_backend_context_managerr    sw   !!^3333 
6R@@@	K	K	K 8 8(0(C(E(E%N##'CCCCC#r))))!!!!JJx1}}}}z^++++!77eAhh777778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 11a1111111  !!^333333s   BCCCc                  F    t          d           t          j                    S )Nr   )r   osgetpidr-   r2   r0   sleep_and_return_pidr    s    	"III9;;r2   c                      t                      t          k    sJ t                                                      dk    sJ  t          d          d t	          d          D                       S )Nr   rF   rz   c              3   N   K   | ] } t          t                                V  !d S r@   )r"   r  r   s     r0   ro   z"get_nested_pids.<locals>.<genexpr>  sG       1 1"# <g&:;;== 1 1 1 1 1 1r2   )rg   r   r!   _effective_n_jobsrr   r-   r2   r0   get_nested_pidsr    s    !!%55555 ::''))Q.... 81 1 1',Qxx1 1 1 1 1 1r2   c                   "     e Zd ZdZ fdZ xZS )	MyBackendz:Backend to test backward compatibility with older backendsc                 ^    t          t          |                                           d         S rd   )superr  get_nested_backend)rL   	__class__s    r0   r  zMyBackend.get_nested_backend  s$    Y%%88::1==r2   )rS   rT   rU   rV   r  __classcell__)r  s   @r0   r  r    s>        DD> > > > > > > > >r2   r  back_compat_backend)r5   r4   r3   r  c                    t          |           5   t          d          d t          d          D                       }|D ]$}t          t	          |                    dk    sJ %	 d d d            d S # 1 swxY w Y   d S )NrF   rz   c              3   N   K   | ] } t          t                                V  !d S r@   )r"   r  r   s     r0   ro   z6test_nested_backend_context_manager.<locals>.<genexpr>  sF       (
 (
 %GO$$&&(
 (
 (
 (
 (
 (
r2   r   r   )r$   r!   rr   r   set)r=   
pid_groups	pid_groups      r0   #test_nested_backend_context_managerr    s     
'	"	" , ,'XQ''' (
 (
2YY(
 (
 (
 
 

 $ 	, 	,Is9~~&&!+++++	,, , , , , , , , , , , , , , , , , ,s   AA66A:=A:)rF   ry   Nc                 2    d  t          d          fdt          d          D                        t                     5   t          d           fdt          d          D                        d d d            d S # 1 swxY w Y   d S )Nc                     t                      t          |          k    sJ t          |          }t                                                      |k    sJ d S r@   )rg   r'   r%   r!   r  )expected_backend_typeexpected_n_jobs     r0   check_nested_backendz?test_nested_backend_in_sequential.<locals>.check_nested_backend  sW     $%%2G)HHHHH *.99zz++--??????r2   r   rz   c              3   J   K   | ]} t                    d d          V  dS )r4   r   Nr"   )r.   r   r  s     r0   ro   z4test_nested_backend_in_sequential.<locals>.<genexpr>  sL         	&$%%fa00     r2   r   c              3   J   K   | ]} t                              V  d S r@   r  )r.   r   r=   r  rj   s     r0   ro   z4test_nested_backend_in_sequential.<locals>.<genexpr>  sL       
 
 *G())'6::
 
 
 
 
 
r2   )r!   rr   r$   )r=   rj   r  s   ``@r0   !test_nested_backend_in_sequentialr    s2   @ @ @ HA    r     
 
'&	1	1	1 
 
 
 
 
 
 
 
2YY
 
 
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   
5BBBc                 x    t          |           5 \  }}|j        |k    sJ 	 d d d            d S # 1 swxY w Y   d S r@   )r$   nesting_level)inner_backendexpected_levelr=   rj   s       r0   check_nesting_levelr  "  s    	-	(	( 7,=Wf$666667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   /33outer_backendr  c                 B   t          | d            t          d|           fdt          d          D                        t          d          5   t                      fdt          d          D                        d d d            d S # 1 swxY w Y   d S )Nr   rF   ri   c              3   T   K   | ]"} t          t                    d           V  #dS r   r"   r  r.   r   r  s     r0   ro   z-test_backend_nesting_level.<locals>.<genexpr>.  sL       . . 	%#$$]A66. . . . . .r2   r   rz   c              3   T   K   | ]"} t          t                    d           V  #dS r   r  r  s     r0   ro   z-test_backend_nesting_level.<locals>.<genexpr>4  sL       ' ' 07.//qAA ' ' ' ' ' 'r2   )r  r!   rr   r$   )r  r  s    `r0   test_backend_nesting_levelr  '  s   
 q)))-HA}--- . . . .r. . .   
 
-	2	2	2 ' '

 ' ' ' '!"II' ' ' 	' 	' 	'' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   1BBBc                  8   dd l  G fddt                    } t          d|            d t          d          5 \  }} t	          d          fdt          d	          D                        |j        d
k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   c                   4    e Zd ZdZ j        d             ZdS ))test_retrieval_context.<locals>.MyBackendr   c              3   2   K   | xj         dz  c_         d V  d S r{   re  r   s    r0   retrieval_contextz;test_retrieval_context.<locals>.MyBackend.retrieval_context?  s"      FFaKFFEEEEEr2   N)rS   rT   rU   rn   contextmanagerr  )
contextlibs   r0   r  r  <  s7        		"	 	 
#	"	 	 	r2   r  	retrievalc                 b     t          d          d t          |           D                       S )NrF   rz   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r   rm   s     r0   ro   z>test_retrieval_context.<locals>.nested_call.<locals>.<genexpr>G  s0      !C!CQ+'"++a..!C!C!C!C!C!Cr2   rq   )ns    r0   nested_callz+test_retrieval_context.<locals>.nested_callF  s2    !xq!!!!C!C%((!C!C!CCCCr2   rF   rz   c              3   H   K   | ]} t                    |          V  d S r@   r  )r.   rn   r  s     r0   ro   z)test_retrieval_context.<locals>.<genexpr>J  sI       
 
 !GK  ##
 
 
 
 
 
r2   r   r   )r  r   r#   r$   r!   rr   rn   )r  bar   r  r  s      @@r0   test_retrieval_contextr  8  s<         $    k9555D D D 
+	&	& '2q 
 
 
 
1XX
 
 
 	
 	
 	
 tqyyyyy                 s   ABBBc                  j    t          d          } t          |            t          j        |            d S )Nfoobar)r*   reprpickledumps)es    r0   test_joblib_exceptionr  S  s+    !!AGGG
LOOOOOr2   c                  6   t          t                    } t          t                    5   | dd           d d d            n# 1 swxY w Y   t          t                    }t          t
                    5   |d           d d d            d S # 1 swxY w Y   d S )Nr   r   rA   )r    rC   r   r  r_   r+   )safe_divisionsafe_interrupts     r0   test_safe_functionr  \  s    **M	!	"	"  a               ""233N		 	   s                 s#   AA	A5BBBr?  )r   ry   gQ?c                     t          t                    5  t          |            d d d            d S # 1 swxY w Y   d S )Nr?  )r   rY   r!   r  s    r0   test_invalid_batch_sizer  f  s    	
		 ( (J''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   377z)n_tasks, n_jobs, pre_dispatch, batch_size))rF   rF   r   rR  )rF   rF   rj   rR  r   rF   rj   rR  )i  rF   rj   rR  r  )r   r   rj   rR  )   rB  rj   rR  )   rB  
2 * n_jobsr   )   rB  r   r   )r  rB  r  rX   )r  rB  r  rR  c                     |||d}d t          |           D             } t          di |d t          |           D                       }||k    sJ d S )N)rj   rH  r?  c                 ,    g | ]}t          |          S r-   r   rm   s     r0   r1   z0test_dispatch_race_condition.<locals>.<listcomp>~  s    222aq		222r2   c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   rm   s     r0   ro   z/test_dispatch_race_condition.<locals>.<genexpr>  s2       L L!3!3 L L L L L Lr2   r-   r   )n_tasksrj   rH  r?  paramsr   r   s          r0   test_dispatch_race_conditionr  l  sz      &( (F225>>222H h     L LU7^^ L L LLLGhr2   c                      t          j                    } t          dd          }|j                            d          }|                                }|| k    sJ d S )NrF   r3   ri   context)r   get_start_methodr!   _backend_argsget)mp_start_methodr   r  start_methods       r0   test_default_mp_contextr    s`    )++O#4555Ao!!),,G++--L?******r2   c                 @   | dk    rt          j        d          } t          j                            d          }|                    dd          t          j        j                    t          d|           fdt          d          D                        d S )Nr3   r7   r  i  rF   ri   c              3   h   K   | ],} t          t          j                  j                  V  -d S r@   )r"   r   dotT)r.   rn   rM   s     r0   ro   zAtest_no_blas_crash_or_freeze_with_subprocesses.<locals>.<genexpr>  sJ       (3 (3$%13(3 (3 (3 (3 (3 (3r2   )
r   r6   r   randomRandomStaterandnr  r	  r!   rr   )r=   rngrM   s     @r0   .test_no_blas_crash_or_freeze_with_subprocessesr    s     ### .)) )


#
#C 			$AF1acNNN (HAw''' (3 (3 (3 (3).q(3 (3 (3 3 3 3 3 3r2   a  from joblib import Parallel, delayed

def square(x):
    return x ** 2

backend = "{}"
if backend == "spawn":
    from multiprocessing import get_context
    backend = get_context(backend)

print(Parallel(n_jobs=2, backend=backend)(
      delayed(square)(i) for i in range(5)))
c                     | dk    r+t          j                    dk    rt          j        d           t                              |           }t          t          j        d|gdd           d S )Nr3   forkzVRequire fork start method to use interactively defined functions with multiprocessing.z-cr   \[0, 1, 4, 9, 16\]r  stdout_regex)	r   r   pytestskip,UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_NO_MAINformatr   sys
executable)r=   codes     r0   2test_parallel_with_interactively_defined_functionsr    s    
 ###(;(=(=(G(G 6 	7 	7 	77>>wGGD	t$b*, , , , , ,r2   a  import sys
# Make sure that joblib is importable in the subprocess launching this
# script. This is needed in case we run the tests from the joblib root
# folder without having installed joblib
sys.path.insert(0, {joblib_root_folder!r})

from joblib import Parallel, delayed

def run(f, x):
    return f(x)

{define_func}

if __name__ == "__main__":
    backend = "{backend}"
    if backend == "spawn":
        from multiprocessing import get_context
        backend = get_context(backend)

    callable_position = "{callable_position}"
    if callable_position == "delayed":
        print(Parallel(n_jobs=2, backend=backend)(
                delayed(square)(i) for i in range(5)))
    elif callable_position == "args":
        print(Parallel(n_jobs=2, backend=backend)(
                delayed(run)(square, i) for i in range(5)))
    else:
        print(Parallel(n_jobs=2, backend=backend)(
                delayed(run)(f=square, x=i) for i in range(5)))
z!def square(x):
    return x ** 2
zcdef gen_square():
    def square(x):
        return x ** 2
    return square
square = gen_square()
zsquare = lambda x: x ** 2
define_funccallable_position)r"   r   kwargsc           
         | dv r/|t           k    st          j        dk    rt          j        d           t
                              || |t          j        	                    t          j        	                    t          j                                      }|                    d          }|                    |           t          t          j        |j        gdd           d S )	N)r3   r7   win32zNot picklable with pickle)r  r=   r  joblib_root_folderzunpicklable_func_script.pyr   r  r  )SQUARE_MAINr  platformr  r  )UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_MAINr  r  pathdirnamejoblib__file__r   writer   r  strpath)r=   r  r  tmpdirr  	code_files         r0   0test_parallel_with_unpicklable_functions_in_argsr-    s     ...;&&#,'*A*A/0004;;+7??27??6?+K+KLL < N ND 899IOOD	*+R*, , , , , ,r2   a  import sys
import faulthandler
# Make sure that joblib is importable in the subprocess launching this
# script. This is needed in case we run the tests from the joblib root
# folder without having installed joblib
sys.path.insert(0, {joblib_root_folder!r})

from joblib import Parallel, delayed
from functools import partial

class MyClass:
    '''Class defined in the __main__ namespace'''
    def __init__(self, value):
        self.value = value


def square(x, ignored=None, ignored2=None):
    '''Function defined in the __main__ namespace'''
    return x.value ** 2


square2 = partial(square, ignored2='something')

# Here, we do not need the `if __name__ == "__main__":` safeguard when
# using the default `loky` backend (even on Windows).

# To make debugging easier
faulthandler.dump_traceback_later(30, exit=True)

# The following baroque function call is meant to check that joblib
# introspection rightfully uses cloudpickle instead of the (faster) pickle
# module of the standard library when necessary. In particular cloudpickle is
# necessary for functions and instances of classes interactively defined in the
# __main__ module.

print(Parallel(n_jobs=2)(
    delayed(square2)(MyClass(i), ignored=[dict(a=MyClass(1))])
    for i in range(5)
))
)r!  c                     |                      d          }|                    t                     t          t          j        |j        gdd            d S )Nz(joblib_interactively_defined_function.pyr  )r  r  )r   r)  5INTERACTIVE_DEFINED_FUNCTION_AND_CLASS_SCRIPT_CONTENTr   r  r  r*  r+  scripts     r0   Btest_parallel_with_interactively_defined_functions_default_backendr2  4  s\     [[CDDF
LLFGGG	(*     r2   au  import sys
# Make sure that joblib is importable in the subprocess launching this
# script. This is needed in case we run the tests from the joblib root
# folder without having installed joblib
sys.path.insert(0, {joblib_root_folder!r})

from joblib import Parallel, delayed, hash
import multiprocessing as mp
mp.util.log_to_stderr(5)

class MyList(list):
    '''MyList is interactively defined by MyList.append is a built-in'''
    def __hash__(self):
        # XXX: workaround limitation in cloudpickle
        return hash(self).__hash__()

l = MyList()

print(Parallel(n_jobs=2)(
    delayed(l.append)(i) for i in range(3)
))
c                     |                      d          }|                    t                     t          t          j        |j        gddd           d S )Nz)joblib_interactive_bound_method_script.pyz\[None, None, None\]LokyProcess   )r  stderr_regexr  )r   r)  9INTERACTIVELY_DEFINED_SUBCLASS_WITH_METHOD_SCRIPT_CONTENTr   r  r  r*  r0  s     r0   5test_parallel_with_interactively_defined_bound_methodr8  ]  s\    [[DEEF
LLJKKK3>6>:'>'5"$& & & & & &r2   c                  b    t          g           }  t          d          |           g k    sJ d S )NrF   rz   )iterr!   )exhausted_iterators    r0   %test_parallel_with_exhausted_iteratorr<  g  s;    b81011R777777r2   c                     t          | t          j                  st          dt	          |                     |                                 S )Nz#Expected np.memmap instance, got %r)r!  r   memmap	TypeErrorre   copy)rM   s    r0   check_memmaprA  l  sA    a## !=Q! ! 	!6688Or2   c                    d } t          dd|           d  |d          D                       }t          | |t          |                              D ]%\  }}t          j                            ||           & t          dd|           d  |d          D                       }t          | |t          |                              D ]%\  }}t          j                            ||           &d S )	Nc              3   x   K   t          |           D ]'}t          j        dt          j                  |z  V  (d S )Nr   dtype)rr   r   onesfloat32)r  rn   s     r0   generate_arrayszBtest_auto_memmap_on_arrays_from_generator.<locals>.generate_arrays{  sJ      q 	4 	4A'"BJ///!33333	4 	4r2   rF   r   rj   
max_nbytesr=   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r"   rA  r.   rM   s     r0   ro   z<test_auto_memmap_on_arrays_from_generator.<locals>.<genexpr>  V       @@ @@%&a  @@ @@ @@ @@ @@ @@r2   r   r   c              3   P   K   | ]!} t          t                    |          V  "d S r@   rL  rM  s     r0   ro   z<test_auto_memmap_on_arrays_from_generator.<locals>.<genexpr>  rN  r2   )r!   r  r   r   testingassert_array_equal)r=   rH  r   resultr   s        r0   )test_auto_memmap_on_arrays_from_generatorrS  s  sW   4 4 4
 @haAw??? @@ @@*9/#*>*>@@ @@ @@ @ @GW)F)FGG 8 8

%%h7777
 @haAw??? @@ @@*9/#*>*>@@ @@ @@ @ @GW)F)FGG 8 8

%%h77778 8r2   c                     | S r@   r-   )args    r0   identityrV    s    Jr2   c                    |                      d          j        }t          j        }t	          j        |d          t	          j        |d          g}t          ||           t          |d           t          d          fdd	D                       \  }t          d
         t          j                  sJ d
         j        |k    sJ t          j                            ||           d S )Nz	test.mmapuint8rD  r)	mmap_moderF   rz   c              3   R   K   | ]!} t          t                              V  "d S r@   )r"   rV  )r.   r   r>  s     r0   ro   z.test_memmap_with_big_offset.<locals>.<genexpr>  s6       H Hq!2!2!26!:!: H H H H H Hr2   )r   r   )r   r*  mmapALLOCATIONGRANULARITYr   zerosrF  r   r   r!   r!  r>  offsetrP  rQ  )r+  fnamesizeobjrR  r>  s        @r0   test_memmap_with_big_offsetrc    s     KK$$,E%D8D((("'$g*F*F*F
GCe%3'''F ha    H H H HC H H HHHGFfQi+++++!9d""""J!!#v.....r2   c                  f   t          j        d          5 }  t          d          d t          d          D                        d d d            n# 1 swxY w Y   t	          |           dk    sJ | d         }t          |j        t                    sJ t          |j                  dk    sJ d S )	NTr   r   )r  c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   rm   s     r0   ro   zFtest_warning_about_timeout_not_supported_by_backend.<locals>.<genexpr>  s2      BB1OGFOOA..BBBBBBr2   2   r   zThe backend class 'SequentialBackend' does not support timeout. You have set 'timeout=1' in Parallel but the 'timeout' parameter will not be used.)	r   r   r!   rr   r   r!  r   r  r   )r   r   s     r0   3test_warning_about_timeout_not_supported_by_backendrg    s   		 	-	-	- CBBb		BBBBBBC C C C C C C C C C C C C C Cx==AAai-----qy>>	     r   )r   rF   r   ry   c                    dgdgdz  z   }t          t                    5  t          j                    } t          | |          d |D                        d d d            n# 1 swxY w Y   t          j                    |z
  }|dk     sJ d S )NrM   r   r   ri   c              3   Z   K   | ]&} t          t          j                  |          V  'd S r@   r"   r]   r   rm   s     r0   ro   z%test_abort_backend.<locals>.<genexpr>  sH       14 14'(GDJ""14 14 14 14 14 14r2      )r   r?  r]   r!   )rj   r=   delayst_startdts        r0   test_abort_backendro    s     UbTCZF				 4 4)++0000 14 14,214 14 14 	4 	4 	44 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
w	B777777s   8A##A'*A'c                    |j         }t          dd| |          5 } |d t          j                            d          gdz  D                        t	          t          j        |                    dk    sJ 	 d d d            n# 1 swxY w Y   t          d          D ]'}t          j        |          s nt          d           (t          d	          t          dd| 
          } |d t          j                            d          gdz  D                        t          d          D ](}t          j        |          s d S t          d           )t          d	          )NrF   r   )rj   rJ  r=   temp_folderc              3   P   K   | ]!} t          t                    |          V  "d S r@   rL  rM  s     r0   ro   z(test_memmapping_leaks.<locals>.<genexpr>  s5      	G	Gq
',


"
"	G	G	G	G	G	Gr2   r   r   r   r   z/temporary directory of Parallel was not removedrI  c              3   P   K   | ]!} t          t                    |          V  "d S r@   rL  rM  s     r0   ro   z(test_memmapping_leaks.<locals>.<genexpr>  s5      CC1glACCCCCCr2   )
r*  r!   r   r
  r   r  listdirrr   r   AssertionError)r=   r+  r   r   s       r0   test_memmapping_leaksrv    s    ^F 
q'$
& 
& 
& +)*		G	GRY-=-=b-A-A,BQ,F	G	G	GGGG 2:f%%&&*****+ + + + + + + + + + + + + + + 3ZZ P Pz&!! 	Eb				NOOO 	a999AACC)9)9")=)=(>(BCCCCCC3ZZ P Pz&!! 	EEb				NOOOs   ABB
B
)Nr4   r5   c                      t          d|           d t          d          D                       }|d t          d          D             k    sJ d S )NrF   ri   c              3   H   K   | ]} t          d            |          V  dS )c                     | dz  S rE   r-   rG   s    r0   <lambda>z2test_lambda_expression.<locals>.<genexpr>.<lambda>  s
    !q& r2   Nr  rm   s     r0   ro   z)test_lambda_expression.<locals>.<genexpr>  sJ       29 29)*!  !!!$$29 29 29 29 29 29r2   r   c                     g | ]}|d z  S )rF   r-   rm   s     r0   r1   z*test_lambda_expression.<locals>.<listcomp>  s    111!qAv111r2   rq   )r=   r   s     r0   test_lambda_expressionr|    sp     2ha111 29 29.3Bii29 29 29 9 9G11uRyy111111111r2   c                    d}d}d|z  t          d||           } |fdt          |          D                        |j        j        |j        j        k    sJ |j        j        |j        j        k    sJ  |fdt          |          D                        |j        j        |j        j        k    sJ |j        j        |j        j        k    sJ dS )	zCTest that a parallel backend correctly resets its batch statistics.rF   i  g       @r   )r   rj   r=   c              3   \   K   | ]&} t          t          j                            V  'd S r@   rj  r.   rn   	task_times     r0   ro   z6test_backend_batch_statistics_reset.<locals>.<genexpr>  8      >>gdj)$$>>>>>>r2   c              3   \   K   | ]&} t          t          j                            V  'd S r@   rj  r  s     r0   ro   z6test_backend_batch_statistics_reset.<locals>.<genexpr>  r  r2   N)r!   rr   r   _effective_batch_size_DEFAULT_EFFECTIVE_BATCH_SIZE_smoothed_batch_duration _DEFAULT_SMOOTHED_BATCH_DURATION)r=   rj   n_inputsr   r  s       @r0   #test_backend_batch_statistics_resetr    s    FHXIFG<<<AA>>>>eHoo>>>>>>J,J45 5 5 5J/J78 8 8 8 A>>>>eHoo>>>>>>J,J45 5 5 5J/J78 8 8 8 8 8r2   c                  "   dD ]} t          t          |           j                  t          k    sJ t          | d          }t          |j                  t          k    sJ t          | d          }t          |j                  t          k    sJ t          | d          }t          |j                  t          k    sJ t          dd	d
          }t          |j                  t          k    sJ t          d	d          5  t          d          }t          |j                  t          k    sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   t          d	d          5  t          dd          }t          |j                  t          k    sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   t          d	d          5  t          d          }t          |j                  t          k    sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   t          d	d          5  t          dd          }t          |j                  t          k    sJ |j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )N)r   rF   ry   rz   threadsrj   prefer	processes	sharedmemrj   requirerF   r4   )rj   r=   r  r  rp   r  r   )re   r!   r   r   r   r$   rj   )rj   r   s     r0   $test_backend_hinting_and_constraintsr    s    
4 
4HF+++455DDDDF9555AJ#33333F;777AJ;....FK888AJ#333333 	6)<<<A
{****	&	+	+	+   I&&&AJ;....x1}}}}}               
&	+	+	+  Ai000AJ;....x1}}}}}	               
&	+	+	+  
 [)))AJ#33333x1}}}}}               
&	+	+	+  A{333AJ#33333x1}}}}}                 sH   =EEE+>F66F:=F:=HH #H 8>JJJc                     G d dt                     }t           |                      5  t          dd          }t          |j                  |k    sJ t          dd          }t          |j                  |k    sJ 	 d d d            n# 1 swxY w Y    G d d	t                     }t           |                      5  t          dd          }t          |j                  |k    sJ |                                 \  }}|d
k    sJ |d
k    sJ t          ddd          }t          |j                  t          k    sJ |                                 \  }}d}|                                |k    sJ |d
k    sJ 	 d d d            n# 1 swxY w Y   t          t                    5  t           |            d           d d d            d S # 1 swxY w Y   d S )Nc                   "    e Zd ZdZdZd Zd ZdS )[test_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomThreadingBackendTc                     d S r@   r-   r   s    r0   apply_asynczgtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomThreadingBackend.apply_async5      Dr2   c                     |S r@   r-   rz  s     r0   r%   zltest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomThreadingBackend.effective_n_jobs8      Mr2   NrS   rT   rU   supports_sharedmemuse_threadsr  r%   r-   r2   r0   MyCustomThreadingBackendr  1  s=        !	 	 		 	 	 	 	r2   r  rF   r  r  r  r  c                   "    e Zd ZdZdZd Zd ZdS )\test_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomProcessingBackendFc                     d S r@   r-   r   s    r0   r  zhtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomProcessingBackend.apply_asyncF  r  r2   c                     |S r@   r-   rz  s     r0   r%   zmtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomProcessingBackend.effective_n_jobsI  r  r2   Nr  r-   r2   r0   MyCustomProcessingBackendr  B  s=        "	 	 		 	 	 	 	r2   r  rm  r   )rj   r  r   zUsing ThreadingBackend as joblib.Parallel backend instead of MyCustomProcessingBackend as the latter does not provide shared memory semantics.r=   r  )
r   r$   r!   re   r   
readouterrr   stripr   rY   )capsysr  r   r  outerrr   s          r0   9test_backend_hinting_and_constraints_with_custom_backendsr  .  s       #6    
2244	5	5 < <Ak222AJ#;;;;;A{333AJ#;;;;;;< < < < < < < < < < < < < < <    $7    
3355	6	6  Ak222AJ#<<<<<$$&&SbyyyybyyyyA{B???AJ#33333$$&&S@ yy{{h&&&&byyyyy!              $ 

		 K K2244kJJJJK K K K K K K K K K K K K K K K K Ks7   ABBBB?FFF/GGGc                  x   t          t                    5  t          d           d d d            n# 1 swxY w Y   t          t                    5  t          d           d d d            n# 1 swxY w Y   t          t                    5  t          dd           d d d            n# 1 swxY w Y   t          }t          t                    5  t          dd           d d d            n# 1 swxY w Y   t          t                    5  t          d	d           d d d            d S # 1 swxY w Y   d S d S )
Ninvalidr  r  r  r  )r  r  r4   r  r3   )r   rY   r!   r   r-   r2   r0   ,test_invalid_backend_hinting_and_constraintsr  b  s   	
		 # #	""""# # # # # # # # # # # # # # # 

		 $ $####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 

		 : : 	[9999: : : : : : : : : : : : : : :
 
~ J 	: 	:V[9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:J 	E 	E.DDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E ~sT   266A..A25A2B++B/2B/C//C36C3D--D14D1c                  $   t                      j        } t          d          }t          t                      j        t                    sJ |                                 t          t                      j                  t          |           u sJ d S )Nr5   )r!   r   r$   r!  r   
unregisterre   )defaultpbs     r0   test_global_parallel_backendr  w  sr    jj!G	+	&	&Bhjj)+;<<<<<MMOOO

#$$W555555r2   c                      d } | t           d<   t          d          5  t          t                      j        t
                    sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                  $    t           t          d<   d S )Nfoo)r   r'   r-   r2   r0   register_fooz,test_external_backends.<locals>.register_foo  s    *r2   r  )r)   r$   r!  r!   r   r   )r  s    r0   test_external_backendsr    s    + + +  ,e	%	 	  A A(**-/?@@@@@@A A A A A A A A A A A A A A A A A As   )AAAc                 .    t          d          5 }t          |j                  j        |j        j        fg} dk    r|cddd           S  | fdt          d          D                       }||d         z   cddd           S # 1 swxY w Y   dS )zCPerform nested parallel calls and introspect the backend on the wayrF   rz   r   Nc              3   V   K   | ]#} t          t                    dd dz
  iV  $dS )limitr   Nr-   )r"   _recursive_backend_info)r.   rn   r  r  s     r0   ro   z*_recursive_backend_info.<locals>.<genexpr>  sY       ' ' 5G344OO519OOO ' ' ' ' ' 'r2   r   )r!   re   r   rS   r  rr   )r  r  r   
this_levelr   s   ``   r0   r  r    s    
			 'qAJ''0!*2JKL
A::' ' ' ' ' ' ' ' ! ' ' ' ' '"1XX' ' ' ' 'GAJ&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   .B
/B

BBc                    t          | d          5  t                      }d d d            n# 1 swxY w Y   t                      dk    rd}d}nd}d}|                                 dz   }|df|dfd|fd|fg}||k    sJ d S )NrF   rz   r   r   r   Backendr   )r$   r  r&   title)r=   backend_types_and_levelssecond_level_backend_type	max_leveltop_level_backend_typeexpected_types_and_levelss         r0   test_nested_parallelism_limitr    s     
'!	,	,	, = =#:#<#< = = = = = = = = = = = = = = = {{a$7!		$6!	$]]__y8	#	"A&	i(	i(	! $'@@@@@@@s   -11zThis test requires daskc                  H   t          j        dd          } t          j        t	          d          t          j                  }t          d          D ]i}t          d          5  t          |          }d d d            n# 1 swxY w Y   t          |          dk    sJ t          d |D                       sJ jt          d          5  t                      }d d d            n# 1 swxY w Y   t          |          dk    sJ t          d	 |D                       sJ d S )
NrF   )	n_workersthreads_per_workerg    cArD  dask)datar   c              3   (   K   | ]\  }}|d k    V  dS DaskDistributedBackendNr-   r.   r   r   s      r0   ro   z4test_nested_parallelism_with_dask.<locals>.<genexpr>  s@       < <tQ 33 < < < < < <r2   c              3   (   K   | ]\  }}|d k    V  dS r  r-   r  s      r0   ro   z4test_nested_parallelism_with_dask.<locals>.<genexpr>  s@       8 84 // 8 8 8 8 8 8r2   )distributedClientr   rF  intrX  rr   r$   r  r   r   )clientr  rn   r  s       r0   !test_nested_parallelism_with_daskr    s    !BBBF 73s8828,,,D1XX < <f%% 	J 	J'>D'I'I'I$	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J+,,1111 < <":< < < < < 	< 	< < 	< 
&	!	! = =#:#<#< = = = = = = = = = = = = = = ='((A---- 8 868 8 8 8 8 8 8 8 8 8s$   $BB	B	C''C+.C+c                 ^     t                      d t          d          D                       S )z6A horrible function that does recursive parallel callsc              3   N   K   | ] } t          t                                V  !d S r@   )r"   _recursive_parallelrm   s     r0   ro   z&_recursive_parallel.<locals>.<genexpr>  s4      GG2g12244GGGGGGr2   rF   rq   )nesting_limits    r0   r  r    s+    8::GGeAhhGGGGGGr2   c                 p   t          | d          5  t          t                    5 }t                       d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        }| dk    r.ddlm} t          ||          rt          j	        d           d S d S t          |t                    sJ d S )NrF   rz   r4   r   )TerminatedWorkerErrorz1Loky worker crash when serializing RecursionError)r$   r   BaseExceptionr  r   &joblib.externals.loky.process_executorr  r!  r  xfailRecursionError)r=   ro  excr  s       r0   test_thread_bomb_mitigationr    sX    
'!	,	,	, " "M"" 	"g!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"" " " " " " " " " " " " " " " -C& 	QPPPPPc011 	N LLMMMMM	N 	N #~.......s3   AAAA	A	A	
AA Ac                  v    i } dD ]$}t           j                            |          | |<   %| t          d          fS )N)OMP_NUM_THREADSOPENBLAS_NUM_THREADSMKL_NUM_THREADSVECLIB_MAXIMUM_THREADSNUMEXPR_NUM_THREADSNUMBA_NUM_THREADS
ENABLE_IPCr   )r  environr  r   )env_varsvars     r0   _run_parallel_sumr    sF    H3 , , 
s++\#&&&&r2   zNeed OpenMP helper compiledc                 p    t          d|           d t          d          D                       }t          t                      dz  d          }|D ]b\  }}||k    sJ |                                D ]@\  }}|                    d          r|t          |          k    sJ 0|dk    sJ |dk    sJ Acd S )NrF   ri   c              3   N   K   | ] } t          t                                V  !d S r@   )r"   r  r   s     r0   ro   z-test_parallel_thread_limit.<locals>.<genexpr>  sE       2 2)*"!""$$2 2 2 2 2 2r2   r   _THREADSr  1)r!   rr   ry  r&   itemsendswithr   )r=   r   expected_num_threadsworker_env_varsomp_num_threadsr   r   s          r0   test_parallel_thread_limitr    s    2ha111 2 2.3Ahh2 2 2  G y{{a/33,3 $ $("66666*0022 	$ 	$KD%}}Z(( $$8 9 999999|++++|||||	$$ $r2   z%This test requires dask NOT installedc                      t          t          d          5  t          d           d d d            d S # 1 swxY w Y   d S )NzPlease install daskr   r  )r   rY   r$   r-   r2   r0   )test_dask_backend_when_dask_not_installedr    s     

"7	8	8	8 ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   488c                  V    G d dt                     } d}t           |                       5  t          j        t          |          5   t          d          d t          d          D                        d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                   "    e Zd Zd ZddZd ZdS )3test_zero_worker_backend.<locals>.ZeroWorkerBackendc                     dS rd   r-   )rL   r   r  s      r0   rw  z=test_zero_worker_backend.<locals>.ZeroWorkerBackend.configure      1r2   Nc                      t          d          )NzNo worker availabler   )rL   funccallbacks      r0   r  z?test_zero_worker_backend.<locals>.ZeroWorkerBackend.apply_async  s    4555r2   c                     dS rd   r-   rz  s     r0   r%   zDtest_zero_worker_backend.<locals>.ZeroWorkerBackend.effective_n_jobs  r  r2   r@   )rS   rT   rU   rw  r  r%   r-   r2   r0   ZeroWorkerBackendr    sF        	 	 		6 	6 	6 	6	 	 	 	 	r2   r  z&ZeroWorkerBackend has no active workerr   rF   rz   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r   rm   s     r0   ro   z+test_zero_worker_backend.<locals>.<genexpr>  s0      @@!{wr{{1~~@@@@@@r2   )r   r$   r  r   r   r!   rr   )r  expected_msgs     r0   test_zero_worker_backendr    so       ,    <L	++--	.	. A A]<|<<< 	A 	AHA@@uQxx@@@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	AA A A A A A A A A A A A A A A A A As5   B	1B:BB
	
BB
	BB"%B"c                  v   da d              dk    sJ  t          d          fdt          d          D                       } t          |           dhk    sJ da              dk    sJ  t          d          fdt          d          D                       } t          |           dhk    sJ d S )Nzoriginal valuec                      t           S r@   )MY_GLOBAL_VARIABLEr-   r2   r0   check_globalsz@test_globals_update_at_each_parallel_call.<locals>.check_globals  s    !!r2   rF   rz   c              3   F   K   | ]} t                                V  d S r@   r  r.   rn   r
  s     r0   ro   z<test_globals_update_at_each_parallel_call.<locals>.<genexpr>%  E       14 14%&  14 14 14 14 14 14r2   zchanged valuec              3   F   K   | ]} t                                V  d S r@   r  r  s     r0   ro   z<test_globals_update_at_each_parallel_call.<locals>.<genexpr>.  r  r2   )r	  r!   rr   r  )workers_global_variabler
  s    @r0   )test_globals_update_at_each_parallel_callr    s&    *" " " =??.....0ha000 14 14 14 14*/((14 14 14 4 4&'',<+===== )=??o----0ha000 14 14 14 14*/((14 14 14 4 4&''O+<<<<<<<r2   c                      dd l } | j                            dd          } | j        ||           ddlm}  |            S )Nr   r   )threadpool_info)numpyr
  r  r  threadpoolctlr  )r   rM   r  s      r0   _check_numpy_threadpool_limitsr  8  sV     		S!!A
BF1aLLL------?r2   c                     |D ]}|d         | d         k    r
|d         c S t          d                    |                     )Nfilepathnum_threadsz,An unexpected module was loaded in child:
{})rY   r  )child_moduleparent_infoparent_modules      r0   _parent_max_num_threads_forr  C  s_    $ 0 0$Z(@@@ //// A
Df\**, , ,r2   c                 v    | D ]5}|D ]0}t          ||          }t          ||          |h}|d         |v sJ 16d S )Nr  )r  min)workers_infor  r  child_threadpool_infor  parent_max_num_threadsr   s          r0   check_child_num_threadsr"  K  su     ". ; ;1 	; 	;L%@k&+ &+"K)?@@+NH.(:::::		;; ;r2   )rF   r   r   ry   c                 P   t                      }t          |          dk    rt          j        d            t	          |           d t          d          D                       }t          |           } t          t                      | z  d          }t          |||           d S )Nr   &Need a version of numpy linked to BLASmsgrz   c              3   N   K   | ] } t          t                                V  !d S r@   r"   r  rm   s     r0   ro   z6test_threadpool_limitation_in_child.<locals>.<genexpr>c  sM       7E 7E67/.//117E 7E 7E 7E 7E 7Er2   rF   r   )
r  r   r  r  r!   rr   r%   ry  r&   r"  )rj   r  workers_threadpool_infosexpected_child_num_threadss       r0   #test_threadpool_limitation_in_childr+  W  s     122K
;1@AAAA6xv666 7E 7E;@887E 7E 7E  E  E f%%F!$Y[[F%:A!>!>4k68 8 8 8 8r2   inner_max_num_threads)r   rF   r   NrF   c                    t                      }t          |          dk    rt          j        d           t	          d|          5   t          |           d t          d          D                       }d d d            n# 1 swxY w Y   t          |           } | t          t                      | z  d	          }n|}t          |||           d S )
Nr   r$  r%  r4   r,  rz   c              3   N   K   | ] } t          t                                V  !d S r@   r(  rm   s     r0   ro   z>test_threadpool_limitation_in_child_context.<locals>.<genexpr>{  sM       ;I ;I:;3G23355;I ;I ;I ;I ;I ;Ir2   rF   r   )r  r   r  r  r$   r!   rr   r%   ry  r&   r"  )rj   r,  r  r)  r*  s        r0   +test_threadpool_limitation_in_child_contextr0  m  sQ    122K
;1@AAAA	&8M	N	N	N I I#:86#:#:#: ;I ;I?DQxx;I ;I ;I $I $I I I I I I I I I I I I I I I I f%%F$%()>%B%B""%:"4k68 8 8 8 8s   1BB	B	var_name)r  r  r  c                    t          d                                           d t          j                                      }	 dt          j        <    t          |           fdt          d          D                       }|ddgk    sJ t          dd	
          5   t          |           fdt          d          D                       }d d d            n# 1 swxY w Y   |ddgk    sJ 	 |t          j        = d S |t          j        <   d S # |t          j        = n|t          j        <   w xY w)NTreusec                 @    t           j                            |           S r@   )r  r  r  )r1  s    r0   _get_envz>test_threadpool_limitation_in_child_override.<locals>._get_env  s    z~~h'''r2   4rz   c              3   H   K   | ]} t                              V  d S r@   r  r.   rn   r6  r1  s     r0   ro   z?test_threadpool_limitation_in_child_override.<locals>.<genexpr>  sG       *; *;,-GHh''*; *; *; *; *; *;r2   rF   r4   r   r.  c              3   H   K   | ]} t                              V  d S r@   r  r9  s     r0   ro   z?test_threadpool_limitation_in_child_override.<locals>.<genexpr>  sG       .? .?01!!!(++.? .? .? .? .? .?r2   r  )r   shutdownr  r  r  r!   rr   r$   )rj   r1  original_var_valuer   r6  s    `  @r0   ,test_threadpool_limitation_in_child_overrider=    s    %%%..000( ( ( 116"
8)(&))) *; *; *; *; *;16q*; *; *; ; ;3*$$$$fA>>> 	? 	?-hf--- .? .? .? .? .?5:1XX.? .? .? ? ?G	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 3*$$$$$ %
8$$$#5BJx    %
8$$#5BJx 5555s1   AD %4C%D %C))D ,C)-D !D>c                     t          t          d          5  t          | d           d d d            d S # 1 swxY w Y   d S )Nz#does not acc.*inner_max_num_threadsr   r   r.  )r   ru  r$   r<   s    r0   1test_threadpool_limitation_in_child_context_errorr?    s     
&L	M	M	M ; ;::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   6::)rF   r   ry   c                     d } ||            t          d          }t          d          D ]%} ||            t          d          }||k    sJ &d S )Nc                     t          d           t          |           fdt          d          D                        d S )Nr   rz   c              3   R   K   | ]!} t          t                              V  "d S r@   )r"   sum)r.   rn   rA   s     r0   ro   zAtest_loky_reuse_workers.<locals>.parallel_call.<locals>.<genexpr>  s1      CCAQCCCCCCr2   r   )rj   rA   s    @r0   parallel_callz.test_loky_reuse_workers.<locals>.parallel_call  sJ    "IICCCCrCCCCCCCCr2   Tr3  r   )r   rr   )rj   rD  first_executorr   executors        r0   test_loky_reuse_workersrG    s    D D D
 M&*666N 2YY * *f(t444>)))))* *r2   )F)r   r   )rp   r@   )rV   r  r  r]   r\  r   r5   	tracebackr   mathr   r   r  r   r3   r	   r  r'  r   r   r   joblib._multiprocessing_helpersr   joblib.test.commonr   r   r   joblib.testingr   r   r   r   r   joblib.externals.lokyr   r'  r   posixImportError _openmp_test_helper.parallel_sumr   r  joblib._parallel_backendsr   r   r   r   r   r    joblib.parallelr!   r"   r#   r$   r%   r&   r'   r(   r)   joblib.my_exceptionsr*   r+   sortedkeysALL_VALID_BACKENDSPROCESS_BACKENDSPARALLEL_BACKENDShasattrr&  r6   r  r>   rC   rH   r   rJ   r[   r_   rb   rg   rt   rv   rx   markr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r$  r)  rE  rP  rX  r\  r`  rf  ri  r  rr  rt  r|  r  r  r  r  r  r  extendrr   r  r  r  r  r  r  _parallel_backendsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r"  SQUARE_LOCALSQUARE_LAMBDAr-  r  r%  r&  r(  r/  r2  r7  r8  r<  rA  rS  rV  rc  rg  ro  rv  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r+  r0  r=  r?  rG  r-   r2   r0   <module>r_     sC    
			 



        & & & & & &                         ( ( ( ( ( (                   . . . . . . - - - - - - - - 3 3 3 3 3 3+ + + + + + + + + + + + + + >;;;;;;      LLLL   EEE>>>>>>>   LLL   KKK 8 7 7 7 7 7 6 6 6 6 6 6 < < < < < < 9 9 9 9 9 9 1 1 1 1 1 1 2 2 2 2 2 2 - - - - - - - - G G G G G G G G 7 7 7 7 7 7 7 7 L L L L L L L L L L L L 0 0 0 0 0 0 0 0 0 0 0 0 Vff]X]__555  KK(KKK K :)62$}4 
72} 7nbnW55666/*I I I                
   2 2 2. . .  " " " %b"""---.	:000   
 . .  . Y*++X~~~&&Y%%7 7 &% '& ,+7 Y*++  ,+.  & 4 7 7 7     0 Y@@@AA  BA  0 0 0
 _h''x((? ? )( ('?
   9 9 9   Xyyy!!F F "!F Y)**/ / +*/: 	P 	P 	P Y)**9 9 +*9 Y)**3 3 +* 3 Y())FD FD *) FDR' ' ' Y!!) / / / 0  J J J K
LM M M M "!  Y)**  +* :4 4 4 Y())3 3 *) 3= = =9 9 9
> > >
 Y)**CDD- - ED +* -*    +   4 4 4 Y*++J J ,+J% % %	4 	4 	4 $=>>>9 9 ?>9; ; ;* $5QQQ#7     ' '--EE!HH---  
 Y8994 4 :9 4(    #4   4 4 4(4 4 4(  
1 1 1> > > > >)5 > > >  / ; ; ; Y 0 0 0 1 1
, 
,1 1 
, X}}}%%Y)**
 
 +* &% 
47 7 7
 _/00_/00' ' 10 10 '   4     \===))( ( *)(
 8
/ 
/ 
/0 0 0 0 + + + Y())3 3 *)  3.0 ,  Y())	, 	, *) 	,- )@
 Y("*BB7)LMM][,FGG "?"?"?@@, , A@ HG NM , (9P FbgooGOOFO$$& &F ' 'Q 6X   =, FbgooGOOFO$$& &F ' '- :4 & & &8 8 8
   Y())8 8 *)  80   	/ 	/  	/	 	 	 Y*++X~~~&&  '& ,+ Y()) P  P *)   PF Y%'Zt[!!... 2 2	 2 Y())9 9 *) 9( + + +\1K 1K 1KhE E E*6 6 6A A A	' 	' 	' 	' Y-..A A /. A* t$=>>>8 8 ?> 8(H H H H
 Y!z{mm/DG G/ /G G/0' ' ' Y2>$vGG%BCCC$ $ DC HG$ 468 8 8! !8 8!
A A A&= = =B  , , ,	; 	; 	; X~~~&&8 8 '&  8& $ooo66X2w8 8   76  8. X2wZ - - - . .6 6. .   
6> Y*K//113C3C3E3EG H H; ;H H  ; Xzzz""* * #" * * *s6   B BBB" "B,+B,0B5 5B?>B?