
    .Ph1             	       X   d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	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mZ ddlZddlZdd	lmZmZmZ dd
lmZ ddlmZmZmZ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/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z:mZm;Z;m<Z<m=Z=  e6j>                    Z?e?@                    dd           dg eA e6jB                              z   ZCeCd e6D             z  ZCeg ZDnddgZDeDdgz   ZE eFed          r#eCG                     ejH        d                     d ZId ZJd ZKd ZL G d deM          ZNdd ZOd! ZPdd"ZQd# ZRd$ ZSd% ZTd& ZU e"d'e<e;g          ejV        "                    d(d)d* e:d*+          fd,gg d-.          ed/                                     ZW e"d0eC           e"d1g d2           e"d3g d4          d5                                     ZX e"d0eC           e"d1dd6g          d7                         ZY e"d0eC          d8             ZZd9 Z[e e"d:g d;          d<                         Z\e e"d0g d=          d>                         Z]d? Z^ e"d@e6           e"dAe6          dB                         Z_dC Z`edD             ZadE Zb e"d1g dF          dG             Zc e"d0eE          dH             ZdedI             Zeee e"dJg dK           e"dLddMg          dN                                                 Zf e"d0eE          dO             Zge e"d0eE          dP                         Zhe e"d0 eie?          dQhz
             e"dRdSdTg          dU                                     Zje e"d0eD          dV                         Zke e"d0e6          dW                         ZldX Zm e"d0e6           e"dYdg dZfd[g d\fg          d]                         Zne e"d0eE          d^                         Zod_ Zpe e"d0eD          d`                         Zqda Zrdb Zsdc Zte e"d0eE          ejV        u                    dde          df                                     Zv G dg dhe3          Zwdi Zx e"d0eC          dj             Zye e"d0eE           e"d1g dk          dl                                     Zzdm Z{dn Z| e$edudoe          dp             Z}dq Z~eEdd         Ze                    dr  eds          D                        e e"d0e           e"d'e;e<g          dt                                     Z G du dve3          Z e"d'e<e;g          dw             Z e"d'e<e;g          dx             Zdy Zdz Z G d{ d|ej        j0                  Z e=d}e           e e"d0g d~           e"d'e<e;g          d                                     Ze e"d1g d           e"d0eE           e"d'e<e;g          d                                                 Zd Ze e"deE           e"deE           e"d'e<e;g          d                                                 Ze e"d'e<e;g           e"dddg          d                                     Z e"dg d          d             Z e"dg d          d             Zed             Zee e"d0eD          d                                     ZdZe e"d0eD          d                         ZdZdZdZdZe e"d0eDe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"d0eD          d                                     Zd Zeed                         Zd Zd ZejV        "                    d1g d          d             Zd Zd ZejV        "                    d1d6d[g          e e"d0 eie?          dQhz
            d                                     Z e"d0eC           e"d1g d          d                         Zd Zd Ze e"d0e?           e"dRdSdTg           e"d1g d          d                                                 Z e"d0e?           e"dRdSdTg           e"d1g d          d                                     Z e"d0e?           e"dRdSdTg           e"d1g d          d                                     Z e"d0e?           e"ddSdTg           e"ddSdTg           e"d1g d          d                                                 Z e"dg d           e"ddSdTg           e"ddSdTg          d                                     Zee e"d0eD          d                                     Z e"d0eddgng d          d             Ze e"d0eD          d                         Ze e"d'e<e;g          d                         Z e"d1dd6g           e"dg d          d                         Z e"d'e<e;g          d             Zd ZddÄZe e"d0ddg           e"d'e<e;g          dĄ                                     ZddńZejV        j         e"d'e<e;g           e"d0edgnddg          dƄ                                     ZdǄ Z e"d0eddgndg           e$e-du dȬe          dɄ                         Z e"d'e<e;g           e$e.dudʬe          d˄                         Z e"d'e<e;g          d̄             Zd̈́ Zd΄ Zdτ ZdЄ Zee e"d1g dѢ          d҄                                     Zee e"dg dԢ           e"d1d6d*g           e"d'e<e;g          dՄ                                                             Ze e"d1d6d*g           e"dg dע           e"d'e<e;g          d؄                                                 Ze e"d1g d٢          dڄ                         Zdۄ Zdd܄Ze e"d1d6d[g           e"d0eD           e"d'e<e;g          d݄                                                 Ze e"d1d6d[g           e"d0eD          dބ                                     ZeejV        "                    d1d6d[g          d߄                         ZeejV        "                    d1d6d[g          d                         ZdS )z
Test the parallel module.
    N)nullcontextsqrtTimeoutError)PicklingError)sleep)format_exception)dumploadparallel)mp)IS_GIL_DISABLEDnpwith_multiprocessing
with_numpy)check_subprocess_callparametrizeraisesskipifwarns)get_reusable_executor)Queue   )parallel_sum)LokyBackendMultiprocessingBackendParallelBackendBaseSequentialBackendThreadingBackend)	BACKENDSParallel	cpu_countdelayedeffective_n_jobsr   parallel_backendparallel_configregister_parallel_backendmultiprocessingc                 6    g | ]}t          |                     S  )r!   ).0backend_strs     Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/joblib/test/test_parallel.py
<listcomp>r/   R   s#    KKK;x,..KKK    loky	threadingget_contextspawnc                  0    t           t          j                 S N)r!   r   DEFAULT_BACKENDr+   r0   r.   get_default_backend_instancer8   ^   s    
 H,--r0   c           	      B    t          | dt          | dd                     S )N_pool_workers)getattrbackends    r.   get_workersr?   f   s     7GWWj$%G%GHHHr0   c                     | |z  S r6   r+   )xys     r.   divisionrC   j   s    q5Lr0   c                     | dz  S N   r+   rA   s    r.   squarerH   n   s    a4Kr0   c                       e Zd ZdZd ZdS )MyExceptionWithFinickyInitz,An exception class with non trivial __init__c                     d S r6   r+   )selfabcds        r.   __init__z#MyExceptionWithFinickyInit.__init__u   s    r0   N__name__
__module____qualname____doc__rQ   r+   r0   r.   rJ   rJ   r   s)        66    r0   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     r.   exception_raiserr[   y   s8    Avv  &sCc:::	

 Hr0   c                 8    t          j        d           t          )Ng?)timer	   KeyboardInterruptrG   s    r.   interrupt_raiserr_      s    Jt
r0   c                     | dz  |z   |z   S )zNA module-level function so that it can be spawn with
    multiprocessing.
    rF   r+   )rA   rB   zs      r.   frb      s     a4!8a<r0   c                  N    t          t          j                    d                   S Nr   )typer   get_active_backendr+   r0   r.   _active_backend_typerg      s    +--a0111r0   c                 d     t          | |          d t          d          D                       S )Nn_jobsr>   c              3   P   K   | ]!} t          t                    |          V  "d S r6   r$   rH   r,   is     r.   	<genexpr>z parallel_func.<locals>.<genexpr>   sC       : : : : : : : :r0      r"   range)inner_n_jobsr>   s     r.   parallel_funcrt      sE    98<999 : :$)!HH: : :   r0   c                  .    t                      dk    sJ d S rd   )r#   r+   r0   r.   test_cpu_countrv      s    ;;??????r0   c                  .    t                      dk    sJ d S rd   r%   r+   r0   r.   test_effective_n_jobsry      s    !!!!!!r0   contextzbackend_n_jobs, expected_n_jobs)rp   rp   rj   Nr   )zpositive-intznegative-intNone)idsc                      | 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 )Nr2   r|   r   rx   )rz   backend_n_jobsexpected_n_jobss      r.   test_effective_n_jobs_Noner      s     
^	4	4	4 @ @  t,,,?????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @
 4(((A------s   266r>   rj   )r   rF   r{   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     r.   r/   z(test_simple_parallel.<locals>.<listcomp>   s    (((!F1II(((r0      rj   r>   r   c              3   P   K   | ]!} t          t                    |          V  "d S r6   rl   r   s     r.   ro   z'test_simple_parallel.<locals>.<genexpr>   s2      ++Qogfooa++++++r0   rr   r"   )r>   rj   r   s      r.   test_simple_parallelr      sw     )(uQxx((( -Hw- - -++%((+++-, -, , , , , , ,r0   rF   c                    d}t          j        d          } G d dt                    } ||| d          } |d t          |          D                        t	                      }|j        D ]H}|                    |          x}r/|                                \  }	}
|                    |
|	z
             It          |          dk    sJ d S )	Nr   z(Done\s+\d+ out of \d+ \|)c                       e Zd Zg Zd ZdS )/test_parallel_pretty_print.<locals>.ParallelLogc                 :    | j                             |           d S r6   )messagesappend)rL   msgs     r.   _printz6test_parallel_pretty_print.<locals>.ParallelLog._print   s    M  %%%%%r0   N)rS   rT   rU   r   r   r+   r0   r.   ParallelLogr      s(        	& 	& 	& 	& 	&r0   r   i'  r   c                 H    g | ]} t          t                    |           S r+   r$   rb   rm   s     r.   r/   z.test_parallel_pretty_print.<locals>.<listcomp>   s&    444jgajjmm444r0   r   )
recompiler"   rr   setr   searchspanaddlen)r>   rj   n_taskspatternr   executorlensmessagesrM   rN   s              r.   test_parallel_pretty_printr      s     Gj677G& & & & &h & & & {&'5IIIHH44U7^^44455555D$  w'''1 	6688DAqHHQUOOOt99>>>>>>r0   c                    |                     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             }| dv st          | t                    rdf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 r6   rl   r   s     r.   ro   z6test_main_thread_renamed_no_warning.<locals>.<genexpr>   sC       6
 6
#$OGFOOA6
 6
 6
 6
 6
 6
r0   rp   )r   r      c                 r    g | ]4}d t          |j                  vt          |j        t                    2|5S )zworker timeout)strr   
isinstanceDeprecationWarningr,   ws     r.   r/   z7test_main_thread_renamed_no_warning.<locals>.<listcomp>   sJ       3qy>>1119&899 2 	
111r0   )Nr)   z3multi-threaded, use of fork() may lead to deadlocksc                 @    g | ]}t          |j                  v|S r+   )r   r   )r,   r   message_parts     r.   r/   z7test_main_thread_renamed_no_warning.<locals>.<listcomp>   s+    NNN!<s19~~+M+MA+M+M+Mr0   r   )
setattrr2   current_threadwarningscatch_warningsr"   rr   r   r   r   )r>   monkeypatchwarninforesultsr   s       @r.   #test_main_thread_renamed_no_warningr      sw    '))1     
	 	-	-	- $5(!W555 6
 6
(-a6
 6
 6
 
 
 )))#####	$ $ $ $ $ $ $ $ $ $ $ $ $ $ $   H +++z'0 0+ MNNNNxNNN
 x==As    <B		BBc                 j   t          j        d          5 }t          j        d           t          | |           d d d            n# 1 swxY w Y   d |D             }|rN|rJt	          d |D                       }t
          rt          |          dk    nt          |          dk    }|o|S dS |rJ dS )	NTr   always)r>   rs   c                     g | ]	}|j         
S r+   )r   r   s     r.   r/   z*_assert_warning_nested.<locals>.<listcomp>  s    ,,,a	,,,r0   c              3   4   K   | ]}d |j         d         v V  dS )zbacked parallel loops cannotr   N)args)r,   eachs     r.   ro   z)_assert_warning_nested.<locals>.<genexpr>
  s?       ' 'CG.$)A,>' ' ' ' ' 'r0   r   F)r   r   simplefilterrt   allr   r   )r>   rs   expectedr   warnings_are_correctwarnings_have_the_right_lengths         r.   _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  		K#& ' 'KS' ' ' $ $  '6MH""3x==A;M + (J,JJuts   &AAAz%parent_backend,child_backend,expected))r1   r)   T)r1   r1   F)r)   r)   T)r)   r1   T)r2   r)   T)r2   r1   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     r.   ro   z0test_nested_parallel_warnings.<locals>.<genexpr>(  sZ       / /  	(&''!E	
 	
 	
/ / / / / /r0   r   c              3   X   K   | ]$} t          t                    d           V  %dS )rF   r   Nr   )r,   r   r   r   s     r.   ro   z0test_nested_parallel_warnings.<locals>.<genexpr>0  sZ       5 5  	(&''!H	
 	
 	
5 5 5 5 5 5r0   r2   )r"   rr   anyr   )parent_backendr   r   ress    `` r.   test_nested_parallel_warningsr     s     /HA~... / / / / q	/ / /    5(!^
4
4
4 5 5 5 5 5 q	5 5 5  C $$3xx3xxr0   )r1   r)   r2   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   r|   c              3   P   K   | ]!} t          t                    d           V  "dS )皙?Nr$   r	   r,   r   s     r.   ro   zPtest_background_thread_parallelism.<locals>.background_thread.<locals>.<genexpr>F  s2      EEq~wu~~c22EEEEEEr0   r   r   )r   r   r"   rr   printr   )is_run_parallelr   s     r.   background_threadz=test_background_thread_parallelism.<locals>.background_threadD  s    $D111 	FXHAEEE!HHEEEEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fc(mm ]]a/s   1AAA)r   r   r   )r2   Threadstartjoin)r>   r   r   ts       r.   "test_background_thread_parallelismr   ?  sf     gO0 0 0 	 18JKKKAGGIIIFFHHH1r0   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     r.   ro   znested_loop.<locals>.<genexpr>Q  s2      'P'P!(=(='P'P'P'P'P'Pr0   rq   r=   s    r.   nested_loopr   P  s:    'HAw''''P'PuQxx'P'P'PPPPPPr0   r   r   c                 n     t          d|           fdt          d          D                        d S )NrF   ri   c              3   R   K   | ]!} t          t                              V  "d S r6   )r$   r   r   s     r.   ro   z#test_nested_loop.<locals>.<genexpr>W  sG       / /01]++/ / / / / /r0   rq   )r   r   s    `r.   test_nested_loopr   T  s\     /HA~... / / / /5:1XX/ / /     r0   c                     t           r6   )rY   r=   s    r.   raise_exceptionr   \  s    
r0   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   r1   ri   )r   rY   r"   r$   r   r   )r   s    r.   )test_nested_loop_with_exception_with_lokyr   `  s8   	
		 W WQ/// 	W8H*gk**6224LGO4L4LV4T4TUVVV	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	WW W W W W W W W W W W W W W W W W Ws5   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   r2   ri   c              3   R   K   | ]!} t          j                  d           V  "dS r   N)r$   put)r,   r   qs     r.   ro   z1test_mutate_input_with_threads.<locals>.<genexpr>j  s5      +P+P!NGAENN1,=,=+P+P+P+P+P+Pr0   N)r   r"   rr   full)r   s   @r.   test_mutate_input_with_threadsr   g  s`    aA+HA{++++P+P+P+PuQxx+P+P+PPPP6688OOOOOr0   )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     r.   r/   z(test_parallel_kwargs.<locals>.<listcomp>r  s"    ###!Aa1III###r0   r|   c              3   T   K   | ]#} t          t                    |d           V  $dS r   r  Nr   r   s     r.   ro   z'test_parallel_kwargs.<locals>.<genexpr>r  sH       ? ? 


1? ? ? ? ? ?r0   Nr   )rj   lsts     r.   test_parallel_kwargsr  n  st     ))C##s###'>xv'>'>'> ? ?$'? ? ? ( (      r0   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     r.   r/   z4test_parallel_as_context_manager.<locals>.<listcomp>z  s"    '''a!q			'''r0   r   ri   c              3   T   K   | ]#} t          t                    |d           V  $dS r  r   r   s     r.   ro   z3test_parallel_as_context_manager.<locals>.<genexpr>  7      ==AZWQZZQ///======r0   c              3   T   K   | ]#} t          t                    |d           V  $dS r  r   r   s     r.   ro   z3test_parallel_as_context_manager.<locals>.<genexpr>  r
  r0   c              3   T   K   | ]#} t          t                    |d           V  $dS r  r   r   s     r.   ro   z3test_parallel_as_context_manager.<locals>.<genexpr>  s7      99A+++999999r0   )rr   r"   _backendr   r?   )r>   r  r   pmanaged_backends        r.    test_parallel_as_context_managerr  w  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d           fdt	          d	          D                        d
d
d
           d
S # 1 swxY w Y   d
S )z`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    r.   
__reduce__z<test_parallel_pickling.<locals>.UnpicklableObject.__reduce__  s    u%%%r0   N)rS   rT   rU   r  r+   r0   r.   UnpicklableObjectr    s#        	& 	& 	& 	& 	&r0   r  zthe task to sendmatchrF   r1   ri   c              3   b   K   | ])} t          t                                           V  *d S r6   r$   id)r,   r   r  s     r.   ro   z)test_parallel_pickling.<locals>.<genexpr>  sN       +
 +
12KGBKK))++,,+
 +
 +
 +
 +
 +
r0   r   N)objectr   r   r"   rr   )r  s   @r.   test_parallel_picklingr     s    & & & & &F & & & 
%8	9	9	9 
 
*6*** +
 +
 +
 +
6;Bii+
 +
 +
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   4A,,A03A0	byteorder)<>=
max_nbytes1Mc                    d t          j        d                              d                              |  d          j        j        } t          dd|          fdt          d	          D                       }|D ]?\  }}||k    sJ ||j        j        k    sJ t           j        	                    |           @d S )
Nc                     | | j         j        fS r6   )dtyper!  rG   s    r.   inspect_byteorderz=test_parallel_byteorder_corruption.<locals>.inspect_byteorder  s    !'###r0      )rF   rp   i4rF   r1   )rj   r>   r%  c              3   H   K   | ]} t                              V  d S r6   r$   )r,   r   r*  rA   s     r.   ro   z5test_parallel_byteorder_corruption.<locals>.<genexpr>  sP       G G*+"!""1%%G G G G G Gr0   rp   )
r   arangereshapeviewr)  r!  r"   rr   testingassert_array_equal)r!  r%  initial_np_byteorderresult
x_returnedbyteorder_in_workerr*  rA   s         @@r.   "test_parallel_byteorder_corruptionr8    s   
$ $ $ 		!V$$))Y*:*:*:;;A7,FXQ:FFF G G G G G/4QxxG G G  F ,2 5 5'
'"&:::::"j&6&@@@@@

%%a44445 5r0   c                     t           t          d| d          d t          d          D                                 dk    sJ d S )NrF      rj   r>   timeoutc              3   P   K   | ]!} t          t                    d           V  "dS )gMbP?Nr   r   s     r.   ro   z0test_parallel_timeout_success.<locals>.<genexpr>  sC       < <*+u%%< < < < < <r0   r   )r   r"   rr   r=   s    r.   test_parallel_timeout_successr>    st     	;HAw;;; < </4Ryy< < <  	
 	

 	 	 	 	 	 	r0   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     r.   ro   z-test_parallel_timeout_fail.<locals>.<genexpr>  sC       :
 :
#$NGENN2:
 :
 :
 :
 :
 :
r0   r   )r   r   r"   rr   r=   s    r.   test_parallel_timeout_failrB    s     
		 
 
97D999 :
 :
(-b		:
 :
 :
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   3AAA
sequential	return_as	generatorgenerator_unorderedc           
      ^   t          t                    5  t           t          d| |d          d t	          d          D                                  d d d            n# 1 swxY w Y   t           t          d| |d          d t	          d          D                                  d S )NrF   r   )rj   r>   rE  r<  c              3   P   K   | ]!} t          t                    d           V  "dS rA  r   r   s     r.   ro   z<test_parallel_timeout_fail_with_generator.<locals>.<genexpr>  sK       R R'(r""R R R R R Rr0   r   c              3   P   K   | ]!} t          t                    d           V  "dS r   r   r   s     r.   ro   z<test_parallel_timeout_fail_with_generator.<locals>.<genexpr>  sK       M
 M
%&NGENN4  M
 M
 M
 M
 M
 M
r0   )r   r   listr"   rr   r>   rE  s     r.   )test_parallel_timeout_fail_with_generatorrM    s%    
		 
 
QHAw)SQQQ R R,1"IIR R R  	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 	L7iLLL M
 M
*/))M
 M
 M
 	
 	
    s   AA""A&)A&c           	         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 |j	        |j
        |j        |j        f            	 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            d S # 1 swxY w Y   d S )NrF   ri   c                 P    g | ]#\  }} t          t                    ||          $S r+   r$   rC   r,   rA   rB   s      r.   r/   z&test_error_capture.<locals>.<listcomp>  s1    IIITQ"""1a((IIIr0   )r   r   )r   r   c                 H    g | ]} t          t                    |           S r+   r$   r_   r   s     r.   r/   z&test_error_capture.<locals>.<listcomp>  s,    >>>!*)**1-->>>r0   c                 P    g | ]#\  }} t          t                    ||          $S r+   rP  rQ  s      r.   r/   z&test_error_capture.<locals>.<listcomp>  s1    RRRda+'(++Aq11RRRr0   c                 0    g | ]}t          |d           S r   r  r   s     r.   r/   z&test_error_capture.<locals>.<listcomp>  "    111!Aa1III111r0   r   c              3   T   K   | ]#} t          t                    |d           V  $dS r  r   r   s     r.   ro   z%test_error_capture.<locals>.<genexpr>  H       > >'(


1"""> > > > > >r0   c                 H    g | ]} t          t                    |           S r+   rS  r   s     r.   r/   z&test_error_capture.<locals>.<listcomp>  s,    GGG13'"233A66GGGr0   c                 0    g | ]}t          |d           S r   r  r   s     r.   r/   z&test_error_capture.<locals>.<listcomp>  rV  r0   c              3   T   K   | ]#} t          t                    |d           V  $dS r  r   r   s     r.   ro   z%test_error_capture.<locals>.<genexpr>  rX  r0   r|   c                 H    g | ]} t          t                    |           S r+   rS  r   s     r.   r/   z&test_error_capture.<locals>.<listcomp>"  s,    MMM 9(8 9 9! < <MMMr0   c                 P    g | ]#\  }} t          t                    ||          $S r+   rP  rQ  s      r.   r/   z&test_error_capture.<locals>.<listcomp>'  s1    TTT1-GH--a33TTTr0   r   )rj   r   c              3   T   K   | ]#} t          t                    |d           V  $dS )T)rZ   Nr$   r[   rm   s     r.   ro   z%test_error_capture.<locals>.<genexpr>+  s;      TTQ&W%&&q4@@@TTTTTTr0   r:  )r   r   ZeroDivisionErrorr"   zipr^   r?   r  rr   
_iteratingn_completed_tasksn_dispatched_tasks	_abortingrJ   )r>   r   original_workerss      r.   test_error_capturerg    s~   
 
~%&& 	 	/HAw///IIS5H5HIII  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 %&& 	 	/HAw///>>v>>>  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 Q000 #	Hx011===*8+<==)** T TRRc&&>Q>QRRRSSST T T T T T T T T T T T T T T
 x011=== x0119IIIII11uRyy111XX > >,1"II> > > 6 6      +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11uRyy111XX > >,1"II> > > 6 6    #*+"	   9#	 #	 #	 #	 #	 #	 #	 #	 #	 #	 #	 #	 #	 #	 #	N 8,--5555%&& 	O 	OHAMMfMMMNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O
 
!	"	" V VTTFF@S@STTTUUUV V V V V V V V V V V V V V V 
*	+	+ 
 
%1%%%TT%PR))TTT	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   3AA #A ;%B,,B03B0?J$D7+J7D;	;J>D;	?BJG9-J9G=	=J G=	BJJ"%J"$LLL#2M!!M%(M% 2N??OOc                 0   dd}t          d|           5 }t          t          d          5   |d  |d          D                        d d d            n# 1 swxY w Y   t          t          d          5   |d	  |d
          D                        d d d            n# 1 swxY w Y   t          t          d          5   |d  |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 )Nr   c              3   `   K   t          d          D ]}|| k    rt          d          |V  d S )N   Iterator Raising Error)rr   rY   )raise_atrn   s     r.   my_generatorz1test_error_in_task_iterator.<locals>.my_generator2  sH      r 	 	AH}} !9:::GGGG	 	r0   rF   ri   rk  r  c              3   P   K   | ]!} t          t                    |          V  "d S r6   rl   rm   s     r.   ro   z.test_error_in_task_iterator.<locals>.<genexpr>;  2      CCQogfooa  CCCCCCr0   )rl  c              3   P   K   | ]!} t          t                    |          V  "d S r6   rl   rm   s     r.   ro   z.test_error_in_task_iterator.<locals>.<genexpr>@  ro  r0   r   c              3   P   K   | ]!} t          t                    |          V  "d S r6   rl   rm   s     r.   ro   z.test_error_in_task_iterator.<locals>.<genexpr>D  s2      DDQogfooa  DDDDDDr0      r   )r"   r   rY   )r>   rm  r  s      r.   test_error_in_task_iteratorrt  /  s       
G	,	,	, EJ&>??? 	D 	DACC,,*B*B*BCCCCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D
 J&>??? 	D 	DACC,,*B*B*BCCCCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D J&>??? 	E 	EADD,,*C*C*CDDDDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	EE E E E E E E E E E E E E E E E E Es|   D ADA	D A	!D: B&D&B*	*D-B*	.D C3'D3C7	7D:C7	;DDDc                 6    |                      d|z             d S )NzConsumed %s)r   )queueitems     r.   consumerrx  G  s    	LL%&&&&&r0   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   )ry  r{  r}  r  rz  r|  r~  r  r  r  r  r  c                     t                      fd} t          d||           fd |            D                        |k    sJ t                    dk    sJ dS )z=Test that with only one job, Parallel does act as a iterator.c               3   h   K   t          d          D ]}                     d| z             | V  d S Nr+  zProduced %irr   r   rn   rv  s    r.   producerz'test_dispatch_one_job.<locals>.producerx  H      q 	 	ALL*+++GGGG	 	r0   r   rj   
batch_sizer>   c              3   T   K   | ]"} t          t                    |          V  #d S r6   r$   rx  )r,   rA   rv  s     r.   ro   z(test_dispatch_one_job.<locals>.<genexpr>}  sI       ? ?()%##? ? ? ? ? ?r0      N)rK  r"   r   )r>   r  expected_queuer  rv  s       @r.   test_dispatch_one_jobr  K  s    V FFE    
 ?HA*g>>> ? ? ? ?-5XZZ? ? ?    N""""u::r0   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 )zRCheck that using pre_dispatch Parallel does indeed dispatch items
    lazily.
    c               3   h   K   t          d          D ]}                     d| z             | V  d S r  r  r  s    r.   r  z/test_dispatch_multiprocessing.<locals>.producer  r  r0   rF   r   rp   )rj   r  pre_dispatchr>   c              3   T   K   | ]"} t          t                    d           V  #dS )r   Nr  )r,   r   rv  s     r.   ro   z0test_dispatch_multiprocessing.<locals>.<genexpr>  sQ       F F,-%''F F F F F Fr0   r   ry  Nr   zConsumed anyr{   r  r  )r   ManagerrK  r"   indexr   )r>   managerr  queue_contentsfirst_consumption_indexproduced_3_indexrv  s         @r.   test_dispatch_multiprocessingr    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::r0   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   autor2   r  c              3   P   K   | ]!} t          t                    |          V  "d S r6   r  rm   s     r.   ro   z/test_batching_auto_threading.<locals>.<genexpr>  0      	.	.Q+'"++a..	.	.	.	.	.	.r0     r   r"   rr   r  compute_batch_size)r  s    r.   test_batching_auto_threadingr    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   r  r  c              3   P   K   | ]!} t          t                    |          V  "d S r6   r  rm   s     r.   ro   z2test_batching_auto_subprocesses.<locals>.<genexpr>  r  r0   r  r   r  )r>   r  s     r.   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 3r  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   r  r   c              3   P   K   | ]!} t          t                    |          V  "d S r6   r_  rm   s     r.   ro   z*test_exception_dispatch.<locals>.<genexpr>  sG       7
 7
-.%G$%%a((7
 7
 7
 7
 7
 7
r0   r:  N)r   rY   r"   rr   r+   r0   r.   test_exception_dispatchr    s    	
		 
 
6A666 7
 7
27))7
 7
 7
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
rC  c                 f     t          d          d t          d          D                        d S )NrF   r|   c              3   P   K   | ]!} t          t                    |          V  "d S r6   r_  r,   js     r.   ro   z(nested_function_inner.<locals>.<genexpr>  s6      GG0w/0033GGGGGGr0   r:  rq   rn   s    r.   nested_function_innerr    s8    HAGGU2YYGGGGGGGGr0   c                 f     t          d          d t          d          D                        d S )NrF   r|   c              3   P   K   | ]!} t          t                    |          V  "d S r6   )r$   r  r  s     r.   ro   z(nested_function_outer.<locals>.<genexpr>  s6      LLQ5w455a88LLLLLLr0   r:  rq   r  s    r.   nested_function_outerr    s8    HALL%))LLLLLLLLr0   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 r6   )r$   r  rm   s     r.   ro   z1test_nested_exception_dispatch.<locals>.<genexpr>  sG       ,
 ,
23*G)**1--,
 ,
 ,
 ,
 ,
 ,
r0   r:  N r  r  r[   )	r   rY   r"   rr   r
   re   r   tbr   )r>   excinforeport_linesreports       r.   test_nested_exception_dispatchr    s%    

		 
w+7+++ ,
 ,
7<Ryy,
 ,
 ,
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 $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 r6   )r%   rj   r   )rL   rj   r   backend_argss       r.   	configurezFakeParallelBackend.configure  s#    ++F33 r0   c                 `    |dk     r't          t          j                    dz   |z   d          }|S )Nr   r   )maxr   r#   rL   rj   s     r.   r%   z$FakeParallelBackend.effective_n_jobs  s/    A::!+f4a88Fr0   r   )r   )rS   rT   rU   rV   r  r%   r+   r0   r.   r  r    sB        BB   
     r0   r  c                     t          t          d          5  t          d           d d d            n# 1 swxY w Y   t          t          d          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   t          t          d          5  t          d          5  	 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 )NzInvalid backend:r  zunit-testingr=   )r   rY   r"   r'   r+   r0   r.   test_invalid_backendr    s3   	
"4	5	5	5 ) )(((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) 

"4	5	5	5  ^444 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	               

"4	5	5	5  ^444 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 sx   488B&A4(B4A8	8B;A8	<BBB,C#=C?C#C	C#C	C##C'*C'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|                                            d d d            n# 1 swxY w Y   dt	          |j                  v sJ 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|                                            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      ?z2.3z$n_jobs could not be converted to intinvalid_str)r   rY   r"   _initialize_backendr   r   )r>   r  s     r.   test_invalid_njobsr    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	
		 DwW---AACCCD D D D D D D D D D D D D D D3s7=7I7IIIII	
		 Fww///CCEEEF F F F F F F F F F F F F F F1S5G5GGGGG	
		 Nww777KKMMMN N N N N N N N N N N N N N N1S5G5GGGGGGGsG   $AA	A	<$B,,B03B0#$DDD
$E::E>E>)2gffffff@rF   c                     t          ||           }|                                dk    sJ  |d t          d          D                       }t          d t	          |          D                       sJ d S )Nri   rF   c              3   P   K   | ]!} t          t                    |          V  "d S r6   rl   rm   s     r.   ro   z.test_njobs_converted_to_int.<locals>.<genexpr>  s2      221OGFOOA222222r0   r   c              3   B   K   | ]\  }}|t          |          k    V  d S r6   r   )r,   rn   rs      r.   ro   z.test_njobs_converted_to_int.<locals>.<genexpr>  s0      99$!QqF1II~999999r0   )r"   _effective_n_jobsrr   r   	enumerate)r>   rj   r  r   s       r.   test_njobs_converted_to_intr    s     	000A  A%%%%
!22b		222
2
2C99)C..9999999999r0   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(   r  r!   r+   r0   r.   test_register_parallel_backendr    se    %!.2EFFF))))'+>>>>>>^$$$H^$$$$$s   8A 
Ac                  J   t           j        } t                      t                      k    sJ 	 t	          dt
          d         d           t                      t          k    sJ 	 | t           _        n# | t           _        w xY wt                      t                      k    sJ d S )Nr2   T)make_default)r   r7   rg   r8   r(   r!   r    )default_backend_origs    r.   test_overwrite_default_backendr  %  s    #3!!%A%C%CCCCC8!+x/DSWXXXX#%%)999999 $8  #7 7777!!%A%C%CCCCCCCs   6A2 2B zOnly without multiprocessingc                  p   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  r1   r=   c              3   P   K   | ]!} t          t                    |          V  "d S r6   rl   rm   s     r.   ro   z2test_backend_no_multiprocessing.<locals>.<genexpr>4  s2       F F!3!3 F F F F F Fr0   rp   c              3   P   K   | ]!} t          t                    |          V  "d S r6   rl   rm   s     r.   ro   z2test_backend_no_multiprocessing.<locals>.<genexpr>8  s2      88!?76??1%%888888r0   )r   UserWarningr"   rr   r'   r+   r0   r.   test_backend_no_multiprocessingr  1  sL   	{"M	N	N	N 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/2B/c                     | |d          5  t          j                    \  }}|dk    sJ t          d          dk    sJ t                      }|j        dk    sJ |dk    r6t          |          t          u sJ t          |j                  t          u sJ n|dk    r6t          |          t          u sJ t          |j                  t          u sJ n|dk    r6t          |          t          u sJ t          |j                  t          u sJ nJ|
                    d          r5t          |          t          u sJ t          |j                  t          u sJ d d d            d S # 1 swxY w Y   d S )Nrp   r|   r)   r1   r2   test_)r   rf   r%   r"   rj   re   r   r  r   r    
startswithr  )rz   backend_nameactive_backendactive_n_jobsr  s        r.   check_backend_context_managerr  ;  s   	a	(	(	( ; ;(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((E,/E,c                     g | ]}d |z  S )ztest_backend_%dr+   rm   s     r.   r/   r/   Q  s    (Q(Q(Q1):Q)>(Q(Q(Qr0   rp   c                    |t           vr!|                     t           |t                     t                      t	                      k    sJ t          |           t                      t	                      k    sJ  t          dd          fdt          D                        t                      t	                      k    sJ d S )NrF   r2   ri   c              3   X   K   | ]$}| t          t                    |          V  %d S r6   )r$   r  )r,   rN   rz   s     r.   ro   z/test_backend_context_manager.<locals>.<genexpr>c  sR       , ,,.-..w::, , , , , ,r0   )r!   setitemr  rg   r8   r  r"    all_backends_for_context_manager)r   r>   rz   s     `r.   test_backend_context_managerr  T  s     hHg/BCCC!!%A%C%CCCCC!'7333  !!%A%C%CCCCC ,HA{+++ , , , ,1, , ,     !!%A%C%CCCCCCCr0   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     r.   rQ   z%ParameterizedParallelBackend.__init__p  s!    =7888


r0   r6   rR   r+   r0   r.   r  r  m  s.        CC     r0   r  c                 h   |                      t          dt                     t                      t	                      k    sJ  |ddd          5  t          j                    \  }}t          |          t          u 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 r6   r$   r   rm   s     r.   ro   z=test_parameterized_backend_context_manager.<locals>.<genexpr>  2      77MGDMM!$$777777r0   r   c                 ,    g | ]}t          |          S r+   r   rm   s     r.   r/   z>test_parameterized_backend_context_manager.<locals>.<listcomp>      1111tAww111r0   )r  r!   r  rg   r8   r   rf   re   r  r"   rj   r  rr   )r   rz   r  r  r  r   s         r.   *test_parameterized_backend_context_managerr  v  s   /3OPPP!!%A%C%CCCCC	1	5	5	5 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  !!%A%C%CCCCCCCs   BC((C,/C,c                 @   t                      t                      k    sJ  | t          d          d          5  t          j                    \  }}t          |          t          u 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   r|   c              3   P   K   | ]!} t          t                    |          V  "d S r6   r  rm   s     r.   ro   zFtest_directly_parameterized_backend_context_manager.<locals>.<genexpr>  r  r0   c                 ,    g | ]}t          |          S r+   r   rm   s     r.   r/   zGtest_directly_parameterized_backend_context_manager.<locals>.<listcomp>  r  r0   )rg   r8   r  r   rf   re   r  r"   rj   r  rr   )rz   r  r  r  r   s        r.   3test_directly_parameterized_backend_context_managerr    s   !!%A%C%CCCCC 
-B777	B	B	B 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  !!%A%C%CCCCCCCs   BCCCc                  F    t          d           t          j                    S )Nr   )r	   osgetpidr+   r0   r.   sleep_and_return_pidr    s    	#JJJ9;;r0   c                      t                      t          k    sJ t                                                      dk    sJ  t          d          d t	          d          D                       S )Nr   rF   r|   c              3   N   K   | ] } t          t                                V  !d S r6   )r$   r  r   s     r.   ro   z"get_nested_pids.<locals>.<genexpr>  s4      PP!;g&:;;==PPPPPPr0   )rg   r    r"   r  rr   r+   r0   r.   get_nested_pidsr	    so    !!%55555 ::''))Q.... 81PPuQxxPPPPPPr0   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    r.   r  zMyBackend.get_nested_backend  s&     Y%%88::1==r0   )rS   rT   rU   rV   r  __classcell__)r  s   @r.   r  r    s>        DD> > > > > > > > >r0   r  back_compat_backend)r2   r1   r)   r  c                      | |          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   r|   c              3   N   K   | ] } t          t                                V  !d S r6   )r$   r	  r   s     r.   ro   z6test_nested_backend_context_manager.<locals>.<genexpr>  s3      'V'Vq(@(@(@(B(B'V'V'V'V'V'Vr0   r   r   )r"   rr   r   r   )rz   r>   
pid_groups	pid_groups       r.   #test_nested_backend_context_managerr    s     
		 , ,'XQ''''V'VERTII'V'V'VVV
# 	, 	,Is9~~&&!+++++	,, , , , , , , , , , , , , , , , , ,s   AA22A69A6)rF   r{   Nc                 *    d  t          d          fdt          d          D                         |           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 r6   )rg   r!   r%   r"   r  )expected_backend_typeexpected_n_jobs     r.   check_nested_backendz?test_nested_backend_in_sequential.<locals>.check_nested_backend  sW     $%%2G)HHHHH *.99zz++--??????r0   r   r|   c              3   ^   K   | ]'} t                    t          j        d           V  (dS r   )r$   r   r7   )r,   r   r  s     r.   ro   z4test_nested_backend_in_sequential.<locals>.<genexpr>  sM        GH%$%%h&>BB     r0   r   c              3   J   K   | ]} t                              V  d S r6   r.  )r,   r   r>   r  rj   s     r.   ro   z4test_nested_backend_in_sequential.<locals>.<genexpr>  sJ       
 
?@)G())'6::
 
 
 
 
 
r0   rq   )r>   rj   rz   r  s   `` @r.   !test_nested_backend_in_sequentialr    s5   @ @ @ HA    LQRTII      
	(	(	( 
 
 
 
 
 
 
 
DI"II
 
 
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   5BBBc                      | |          5 }| t           u r|d         }| t          u r|d         }|j        |k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr>   r   )r'   r&   nesting_level)rz   inner_backendexpected_levelctxr>   s        r.   check_nesting_levelr$    s    			 73o%%)nG&&&!fG$666667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   0A

AAouter_backendr!  c                 B    t           |d            t          d|           fdt          d          D                          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   V   K   | ]#} t          t                    d           V  $dS r   r$   r$  r,   r   rz   r!  s     r.   ro   z-test_backend_nesting_level.<locals>.<genexpr>  sL       . .DE$#$$WmQ??. . . . . .r0   r   r|   c              3   V   K   | ]#} t          t                    d           V  $dS r   r(  r)  s     r.   ro   z-test_backend_nesting_level.<locals>.<genexpr>  sL       
 
HI(G'((-CC
 
 
 
 
 
r0   )r$  r"   rr   )rz   r%  r!  s   ` `r.   test_backend_nesting_levelr+    s/    222-HA}--- . . . . .INr. . .    
q	)	)	) 
 


 
 
 
 
 
MRSUYY
 
 
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   2BBBwith_retrieve_callbackTc                    dd l  G fddt                    }t          d|           d  | d          5 } t          d          fdt	          d	          D                        | t
          u r|d
         j        dk    sJ | t          u r|d         j        dk    sJ d d d            d S # 1 swxY w Y   d S )Nr   c                   8    e Zd ZdZ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}   r  r  s    r.   retrieval_contextz;test_retrieval_context.<locals>.MyBackend.retrieval_context	  s"      FFaKFFEEEEEr0   N)rS   rT   rU   rn   supports_retrieve_callbackcontextmanagerr1  )
contextlibr,  s   r.   r  r/    s=        %;"		"	 	 
#	"	 	 	r0   r  	retrievalc                 b     t          d          d t          |           D                       S )NrF   r|   c              3   P   K   | ]!} t          t                    |          V  "d S r6   r  rm   s     r.   ro   z>test_retrieval_context.<locals>.nested_call.<locals>.<genexpr>  s0      !C!CQ+'"++a..!C!C!C!C!C!Cr0   rq   )ns    r.   nested_callz+test_retrieval_context.<locals>.nested_call  s2    !xq!!!!C!C%((!C!C!CCCCr0   rF   r|   c              3   H   K   | ]} t                    |          V  d S r6   r.  )r,   rn   r9  s     r.   ro   z)test_retrieval_context.<locals>.<genexpr>  s6      EEq/7;//22EEEEEEr0   r   r>   r   )r4  r    r(   r"   rr   r'   rn   r&   )rz   r,  r  r#  r4  r9  s    `  @@r.   test_retrieval_contextr;    s\           $    k9555D D D 
		 !EEEEE!HHEEEEEEo%%y>#q((((&&&q68q====! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   A+B44B8;B8r  )r   r{   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    r.   test_invalid_batch_sizer>    s    	
		 ( (J''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   377z)n_tasks, n_jobs, pre_dispatch, batch_size))rF   rF   r   r  )rF   rF   rj   r  r   rF   rj   r  )i  rF   rj   r  r?  )r   r   rj   r  )   r  rj   r  )   r  
2 * n_jobsr   )   r  r   r   )rC  r  rB  rX   )r@  r  rB  r  c                     |||d}d t          |           D             } t          di |d t          |           D                       }||k    sJ d S )N)rj   r  r  c                 ,    g | ]}t          |          S r+   r   rm   s     r.   r/   z0test_dispatch_race_condition.<locals>.<listcomp>:  s    222aq		222r0   c              3   P   K   | ]!} t          t                    |          V  "d S r6   rl   rm   s     r.   ro   z/test_dispatch_race_condition.<locals>.<genexpr>;  s2       L L!3!3 L L L L L Lr0   r+   r   )r   rj   r  r  paramsr   r   s          r.   test_dispatch_race_conditionrH  %  su    ( JWWF225>>222H h     L LU7^^ L L LLLGhr0   c                      t          j                    } t          dd          }|j                            d          }|                                }|| k    sJ d S )NrF   r)   ri   rz   )r   get_start_methodr"   _backend_kwargsget)mp_start_methodr  rz   start_methods       r.   test_default_mp_contextrO  ?  sa    )++O#4555A##I..G++--L?******r0   c                 @   | dk    rt          j        d          } t          j                            d          }|                    dd          t          j        j                    t          d|           fdt          d          D                        d S )Nr)   r4   r  i  rF   ri   c              3   h   K   | ],} t          t          j                  j                  V  -d S r6   )r$   r   dotT)r,   rn   rM   s     r.   ro   zAtest_no_blas_crash_or_freeze_with_subprocesses.<locals>.<genexpr>^  s9      'R'RA13(?(?'R'R'R'R'R'Rr0   )
r   r3   r   randomRandomStaterandnrR  rS  r"   rr   )r>   rngrM   s     @r.   .test_no_blas_crash_or_freeze_with_subprocessesrX  H  s     ### .)) )


#
#C 			$AF1acNNN (HAw''''R'R'R'Rq'R'R'RRRRRRr0   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 )Nr)   forkzVRequire fork start method to use interactively defined functions with multiprocessing.z-cr   \[0, 1, 4, 9, 16\]r<  stdout_regex)	r   rJ  pytestskip,UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_NO_MAINformatr   sys
executable)r>   codes     r.   2test_parallel_with_interactively_defined_functionsre  q  s    
 ###(;(=(=(G(G.	
 	
 	
 8>>wGGD	t$b?T     r0   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)r)   r4   win32zNot picklable with pickle)rf  r>   rg  joblib_root_folderzunpicklable_func_script.pyr   r[  r\  )SQUARE_MAINrb  platformr^  r_  )UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_MAINra  r  pathdirnamejoblib__file__r   writer   rc  strpath)r>   rf  rg  tmpdirrd  	code_files         r.   0test_parallel_with_unpicklable_functions_in_argsrw    s     ...{""clg&=&=/0004;;+7??27??6?+K+KLL	 <  D 899IOOD	*+*     r0   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(backend="loky", n_jobs=2)(
    delayed(square2)(MyClass(i), ignored=[dict(a=MyClass(1))])
    for i in range(5)
))
)rk  c                     |                      d          }|                    t                     t          t          j        |j        gdd            d S )Nz(joblib_interactively_defined_function.pyr[  )r]  r<  )r   rs  5INTERACTIVE_DEFINED_FUNCTION_AND_CLASS_SCRIPT_CONTENTr   rb  rc  rt  ru  scripts     r.   7test_parallel_with_interactively_defined_functions_lokyr|    s\    
 [[CDDF
LLFGGG	(*     r0   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, 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(backend="loky", 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   rs  9INTERACTIVELY_DEFINED_SUBCLASS_WITH_METHOD_SCRIPT_CONTENTr   rb  rc  rt  rz  s     r.   :test_parallel_with_interactively_defined_bound_method_lokyr    s]    [[DEEF
LLJKKK	(,#	     r0   c                  b    t          g           }  t          d          |           g k    sJ d S )NrF   r|   )iterr"   )exhausted_iterators    r.   %test_parallel_with_exhausted_iteratorr  )  s;    b81011R777777r0   c                     t          | t          j                  st          dt	          |                     |                                 S )Nz#Expected np.memmap instance, got %r)r   r   memmap	TypeErrorre   copy)rM   s    r.   check_memmapr  .  s;    a## H=tAwwGGG6688Or0   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   r)  )rr   r   onesfloat32)r8  rn   s     r.   generate_arrayszBtest_auto_memmap_on_arrays_from_generator.<locals>.generate_arrays<  sJ      q 	4 	4A'"BJ///!33333	4 	4r0   rF   r   rj   r%  r>   c              3   P   K   | ]!} t          t                    |          V  "d S r6   r$   r  r,   rM   s     r.   ro   z<test_auto_memmap_on_arrays_from_generator.<locals>.<genexpr>B  N       @ @%&a  @ @ @ @ @ @r0   r   r   c              3   P   K   | ]!} t          t                    |          V  "d S r6   r  r  s     r.   ro   z<test_auto_memmap_on_arrays_from_generator.<locals>.<genexpr>K  r  r0   )r"   ra  r   r   r2  r3  )r>   r  r   r5  r   s        r.   )test_auto_memmap_on_arrays_from_generatorr  4  sM   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 8r0   c                     | S r6   r+   )args    r.   identityr  R  s    Jr0   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uint8r  r  )	mmap_moderF   r|   c              3   R   K   | ]!} t          t                              V  "d S r6   )r$   r  )r,   r   r  s     r.   ro   z.test_memmap_with_big_offset.<locals>.<genexpr>^  s6      "J"J#478#4#4V#<#<"J"J"J"J"J"Jr0   rs  r   )r   rt  mmapALLOCATIONGRANULARITYr   zerosr  r   r   r"   r   r  offsetr2  r3  )ru  fnamesizeobjr5  r  s        @r.   test_memmap_with_big_offsetr  V  s     KK$$,E%D8D((("'$g*F*F*F
GCe%3'''F"""""J"J"J"Jc"J"J"JJJIVfQi+++++!9d""""J!!#v.....r0   c                  h   t          j        d          5 }  t          d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   )rj   r<  c              3   P   K   | ]!} t          t                    |          V  "d S r6   rl   rm   s     r.   ro   zFtest_warning_about_timeout_not_supported_by_backend.<locals>.<genexpr>f  s2      %L%LQogfooa&8&8%L%L%L%L%L%Lr0   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     r.   3test_warning_about_timeout_not_supported_by_backendr  d  s   		 	-	-	- M%1%%%%L%L%))%L%L%LLLLM M M M M M M M M M M M M M Mx==AAai-----qy>>	     s   2AAAc                     || |<   |S r6   r+   )
input_listr  r   s      r.   set_list_valuer  q  s    JuLr0   )r   rF   r   c                     dgdz   t          | dd          fdt          d          D                       }t          |          }t          d t	          |          D                       sJ d S )Nr   r   rF  r2   rj   rE  r>   c              3   V   K   | ]#} t          t                    ||          V  $d S r6   )r$   r  )r,   rn   r  s     r.   ro   zPtest_parallel_return_order_with_return_as_generator_parameter.<locals>.<genexpr>|  sS       Q Q67
Aq11Q Q Q Q Q Qr0   c              3   (   K   | ]\  }}||k    V  d S r6   r+   r,   vr  s      r.   ro   zPtest_parallel_return_order_with_return_as_generator_parameter.<locals>.<genexpr>  s*      ::$!QqAv::::::r0   )r"   rr   rK  r   ra  )rj   r5  r  s     @r.   =test_parallel_return_order_with_return_as_generator_parameterr  v  s    
 qJPXV{KPPP Q Q Q Q;@88Q Q Q  F
 &\\F::#j&"9"9::::::::::r0   c                 B    |rt          d           t          |           S )Nr:  )r	   r   )edelays     r.   _sqrt_with_delayr    s      b			77Nr0   c                 R    t          |d|           d t          d          D                       t          fdt          d          D                       }dgt          t          dd                    z   }t	          d	 t          ||          D                       sJ d S )
NrG  r  c              3   `   K   | ])} t          t                    |d z  |dk              V  *dS )rF   r   N)r$   r  rm   s     r.   ro   zK_test_parallel_unordered_generator_returns_fastest_first.<locals>.<genexpr>  sY       W W67! !!!Q$a11W W W W W Wr0   r   c              3   6   K   | ]}t                    V  d S r6   )next)r,   r   r5  s     r.   ro   zK_test_parallel_unordered_generator_returns_fastest_first.<locals>.<genexpr>  s)      ==qd6ll======r0   	   r   rF   c              3   (   K   | ]\  }}||k    V  d S r6   r+   r  s      r.   ro   zK_test_parallel_unordered_generator_returns_fastest_first.<locals>.<genexpr>  s*      SS$!QqAvSSSSSSr0   )r"   rr   sortedrK  r   ra  )r>   rj   quickly_returnedexpected_quickly_returnedr5  s       @r.   8_test_parallel_unordered_generator_returns_fastest_firstr    s     WXV/DgVVV W W;@99W W W  F ====E!HH=====!"d5B<<&8&8 8SS#&?AQ"R"RSSSSSSSSr0   c                 &    t          | |           d S r6   )r  r>   rj   s     r.   7test_parallel_unordered_generator_returns_fastest_firstr    s     =WfMMMMMr0   )r   rF   r   r{   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 r6   r$   r]   r	   rm   s     r.   ro   z%test_abort_backend.<locals>.<genexpr>  s7      0X0XA1D1D1DQ1G1G0X0X0X0X0X0Xr0   rj  )r   r  r]   r"   )rj   r>   delayst_startdts        r.   test_abort_backendr    s     UbTCZF				 Y Y)++00000X0XQW0X0X0XXXXY Y Y Y Y Y Y Y Y Y Y Y Y Y Y 
w	B777777s   8A##A'*A'c                 `    t          j        t          d          t                    }d|d<   |S )Ng    Ar  Fr   )r   r  intbool)r  r5  s     r.   get_large_objectr    s*    WS\\...FF1IMr0   c                     t          || |          5 } |d t          d          D                       }t          |           t          |           ~d d d            d S # 1 swxY w Y   d S )N)rj   r>   rE  c              3   P   K   | ]!} t          t                    |          V  "d S r6   )r$   r  rm   s     r.   ro   z0_test_deadlock_with_generator.<locals>.<genexpr>  s6      JJ13'"233A66JJJJJJr0   r   )r"   rr   r  )r>   rE  rj   r   r5  s        r.   _test_deadlock_with_generatorr    s     
I	F	F	F (JJb		JJJJJVV	                 s   AA""A&)A&c                 (    t          | ||           d S r6   )r  )r>   rE  rj   s      r.   test_deadlock_with_generatorr    s    
 "'9f=====r0   c                 ~   t          t          d          5  t          || |          } |d t          d          D                       }t	          j                    } |d t          d          D                       }d d d            n# 1 swxY w Y   t	          j                    |z
  dk     s
J d	            ~d S )
N)This Parallel instance is already runningr  rL  c              3   P   K   | ]!} t          t                    d           V  "dS r   r   r   s     r.   ro   z/test_multiple_generator_call.<locals>.<genexpr>  s2      ::1^WU^^A&&::::::r0   r   c              3   P   K   | ]!} t          t                    |          V  "d S r6   r  rm   s     r.   ro   z/test_multiple_generator_call.<locals>.<genexpr>  s0      ;;1A;;;;;;r0   r   rF   [The error should be raised immediately when submitting a new task but it took more than 2s.)r   r  r"   rr   r]   )r>   rE  rj   r   gr  gen2s          r.   test_multiple_generator_callr    s    
$O	P	P	P < <FGyIIIH::b		:::::)++x;;c

;;;;;	< < < < < < < < < < < < < < < 9;; 1$$$	$ %$$
 	
s   A*BBBc                    t          || |          5 } |d t          d          D                       }t          j                    }t          t          d          5   |d t          d          D                       }d d d            n# 1 swxY w Y   t          j                    |z
  dk     s
J d	            	 d d d            n# 1 swxY w Y   ~d S )
NrL  c              3   P   K   | ]!} t          t                    d           V  "dS rA  r   r   s     r.   ro   z7test_multiple_generator_call_managed.<locals>.<genexpr>  s2      ;;A^WU^^B'';;;;;;r0   r   r  r  c              3   P   K   | ]!} t          t                    |          V  "d S r6   r  rm   s     r.   ro   z7test_multiple_generator_call_managed.<locals>.<genexpr>  s0      ==Q+'"++a..======r0   r   rF   r  )r"   rr   r]   r   r  )r>   rE  rj   r   r  r  g2s          r.   $test_multiple_generator_call_managedr    s^    
&'Y	?	?	? 

8H;;r;;;;;)++L(STTT 	> 	>==%**=====B	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> y{{W$q(((( )(((

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 	
s6   AC
#BC
B	C
B	'C

CCreturn_as_1return_as_2c           
          t          || |          d t          d          D                       } t          || |          d t          dd          D                       }|dk    rt          |          }|dk    rt          |          }t          d t	          |t          d                    D                       sJ t          d t	          |t          dd                    D                       sJ d S )	NrL  c              3   V   K   | ]$} t          t                    |d z            V  %dS rF   Nr  rm   s     r.   ro   z9test_multiple_generator_call_separated.<locals>.<genexpr>  sO       A A !adA A A A A Ar0   r   c              3   V   K   | ]$} t          t                    |d z            V  %dS r  r  rm   s     r.   ro   z9test_multiple_generator_call_separated.<locals>.<genexpr>  sO       B B !adB B B B B Br0   rj  rG  c              3   (   K   | ]\  }}||k    V  d S r6   r+   r,   r   rn   s      r.   ro   z9test_multiple_generator_call_separated.<locals>.<genexpr>  s*      88FCsax888888r0   c              3   (   K   | ]\  }}||k    V  d S r6   r+   r  s      r.   ro   z9test_multiple_generator_call_separated.<locals>.<genexpr>  s*      ==FCsax======r0   )r"   rr   r  r   ra  )r>   r  r  rj   r  r  s         r.   &test_multiple_generator_call_separatedr    s6    	AK@@@ A A%*2YYA A A 	 	A 
B&'[	A	A	A B B%*2r]]B B B 
 
B +++1II+++BZZ88c!U2YY&7&788888888==c"eBmm&<&<==========r0   zbackend, error))r1   T)r2   F)rD  Fc                    | dk    rt           t          j        d           t          d| |          } |d t	          d          D                       }t          j        |d           }|rt          t          d	          nt                      }|5  t          j
                    } t          d| |          d
 t	          dd          D                       }|dk    rt          |          }t          d t          |t	          dd                    D                       sJ 	 d d d            n# 1 swxY w Y   t          j
                    |z
  dk     sJ d}	|j        r,|	dk     r&|	dz  }	t          j        d           |j        r|	dk     &t          j
                    |z
  dk     sJ  |j                    dk    r	|j        sJ d S d S )Nr1   zRequires multiprocessingrF   rL  c              3   P   K   | ]!} t          t                    d           V  "dS rA  r   rm   s     r.   ro   z<test_multiple_generator_call_separated_gc.<locals>.<genexpr>&  s2      77##777777r0   r   c                       t          d          S )NzGenerator collected)r   r+   r0   r.   <lambda>z;test_multiple_generator_call_separated_gc.<locals>.<lambda>'  s    u-B'C'C r0   z The executor underlying Parallelr  c              3   V   K   | ]$} t          t                    |d z            V  %dS r  r  rm   s     r.   ro   z<test_multiple_generator_call_separated_gc.<locals>.<genexpr>3  sO       @
 @
$%MGDMM!Q$@
 @
 @
 @
 @
 @
r0   rj  rG  c              3   (   K   | ]\  }}||k    V  d S r6   r+   r  s      r.   ro   z<test_multiple_generator_call_separated_gc.<locals>.<genexpr>:  s*      @@Q3!8@@@@@@r0   r   r   rp   r   r  )r   r^  r_  r"   rr   weakreffinalizer   r  r   r]   r  r   ra  aliver	   r  re  )
r>   r  r  errorr   r  g_wrr#  r  retrys
             r.   )test_multiple_generator_call_separated_gcr    sh    	6
./// 7kBBBH77U2YY77777AACCDDD 	|#EFFFF]] 
 
 A A
 )++?HQ;??? @
 @
).r2@
 @
 @
 
 
 ///q		A@@#ar2*?*?@@@@@@@@@A A A A A A A A A A A A A A A 9;; 1$$$$ E
* 

3 *  9;; 1$$$$!x!##q(( !!!! )( 	"!s   BD44D8;D8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   r%  r>   temp_folderc              3   P   K   | ]!} t          t                    |          V  "d S r6   r  r  s     r.   ro   z(test_memmapping_leaks.<locals>.<genexpr>V  s5      	G	Gq
',


"
"	G	G	G	G	G	Gr0   r   r   r   r   z/temporary directory of Parallel was not removedr  c              3   P   K   | ]!} t          t                    |          V  "d S r6   r  r  s     r.   ro   z(test_memmapping_leaks.<locals>.<genexpr>f  s5      CC1glACCCCCCr0   )
rt  r"   r   rT  r   r  listdirrr   r	   AssertionError)r>   ru  r  r   s       r.   test_memmapping_leaksr  K  s    ^F 
q'v	N	N	N +RS		G	GRY-=-=b-A-A,BQ,F	G	G	GGGG 2:f%%&&*****	+ + + + + + + + + + + + + + + 3ZZ P Pz&!! 	Ec



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c



NOOOs   ABB
B
)Nr1   r2   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    r.   r  z2test_lambda_expression.<locals>.<genexpr>.<lambda>v  s
    !Q$ r0   Nr.  rm   s     r.   ro   z)test_lambda_expression.<locals>.<genexpr>u  sH       2 2'(""2 2 2 2 2 2r0   r   c                     g | ]}|d z  S rF   r+   rm   s     r.   r/   z*test_lambda_expression.<locals>.<listcomp>x  s    ///q!t///r0   rq   )r>   r   s     r.   test_lambda_expressionr  p  sr    
 2ha111 2 2,1"II2 2 2  G //U2YY/////////r0   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 r6   r  r,   rn   	task_times     r.   ro   z6test_backend_batch_statistics_reset.<locals>.<genexpr>  8      >>gdj)$$>>>>>>r0   c              3   \   K   | ]&} t          t          j                            V  'd S r6   r  r
  s     r.   ro   z6test_backend_batch_statistics_reset.<locals>.<genexpr>  r  r0   N)r"   rr   r  _effective_batch_size_DEFAULT_EFFECTIVE_BATCH_SIZE_smoothed_batch_duration _DEFAULT_SMOOTHED_BATCH_DURATION)r>   rj   n_inputsr  r  s       @r.   #test_backend_batch_statistics_resetr  {  s    FHhIFG<<<AA>>>>eHoo>>>>>>:+qz/WWWWW	
+:6	7 	7 	7 	7 A>>>>eHoo>>>>>>:+qz/WWWWW	
+:6	7 	7 	7 	7 	7 	7r0   c                    dD ]}t          t          |          j                  t                      u sJ t          |d          }t          |j                  t          u sJ t          |d          }t          |j                  t
          u sJ t          |d          }t          |j                  t          u sJ t          dd	d
          }t          |j                  t
          u sJ  | d	d          5  t          d          }t          |j                  t
          u sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y    | d	d          5  t          dd          }t          |j                  t
          u sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y    | d	d          5  t          d          }t          |j                  t          u sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y    | d	d          5  t          dd          }t          |j                  t          u sJ |j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )N)r   rF   r{   r|   threadsrj   prefer	processes	sharedmemrj   requirerF   r1   )rj   r>   r  r  rp   r  r   )re   r"   r  r8   r    r   rj   )rz   rj   r  s      r.   $test_backend_hinting_and_constraintsr    s     
4 
4HF+++4559U9W9WWWWW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
<F''F+.F+?;HHH<I))I-0I-r  )Nr  r  c                 h   d t          d          D             } t          | |          d t          d          D                       }||k    sJ t          ||           5   t                      d t          d          D                       }d d d            n# 1 swxY w Y   ||k    sJ d S )Nc                     g | ]}|d z  S r  r+   rm   s     r.   r/   z7test_backend_hinting_always_running.<locals>.<listcomp>  s    0001000r0   r   r  c              3   P   K   | ]!} t          t                    |          V  "d S r6   rl   rm   s     r.   ro   z6test_backend_hinting_always_running.<locals>.<genexpr>  sC       5 5 5 5 5 5 5 5r0   )r  rj   c              3   P   K   | ]!} t          t                    |          V  "d S r6   rl   rm   s     r.   ro   z6test_backend_hinting_always_running.<locals>.<genexpr>  s2      CCA_WV__Q//CCCCCCr0   )rr   r"   r'   )rj   r  expected_resultsr   s       r.   #test_backend_hinting_always_runningr$    s+   
 10eBii0004hfV444 5 5$)"II5 5 5  G &&&&&	v	6	6	6 D D(**CCrCCCCCD D D D D D D D D D D D D D D&&&&&&&s   $/BB#&B#c                     G d dt                     } | |                      5  t          dd          }t          |j                  |u sJ t          dd          }t          |j                  |u sJ 	 d d d            n# 1 swxY w Y    G d d	t                     } | |                      5  t          dd          }t          |j                  |u sJ |                                 \  }}|d
k    sJ |d
k    sJ t          ddd          }t          |j                  t
          u 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 r6   r+   r  s    r.   apply_asynczgtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomThreadingBackend.apply_async      Dr0   c                     |S r6   r+   r  s     r.   r%   zltest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomThreadingBackend.effective_n_jobs      Mr0   NrS   rT   rU   supports_sharedmemuse_threadsr)  r%   r+   r0   r.   MyCustomThreadingBackendr'    s=        !	 	 		 	 	 	 	r0   r0  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 r6   r+   r  s    r.   r)  zhtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomProcessingBackend.apply_async  r*  r0   c                     |S r6   r+   r  s     r.   r%   zmtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomProcessingBackend.effective_n_jobs  r,  r0   Nr-  r+   r0   r.   MyCustomProcessingBackendr2    s=        "	 	 		 	 	 	 	r0   r5  r  r   )rj   r  r   zUsing ThreadingBackend as joblib backend instead of MyCustomProcessingBackend as the latter does not provide shared memory semantics.r>   r  )	r   r"   re   r  
readouterrr    stripr   rY   )capsysrz   r0  r  r5  outerrr   s           r.   9test_backend_hinting_and_constraints_with_custom_backendsr<    s       #6    
))++	,	, < <Ak222AJ#;;;;;A{333AJ#;;;;;;< < < < < < < < < < < < < < <    $7    
**,,	-	-  Ak222AJ#<<<<<$$&&SbyyyybyyyyA{B???AJ#33333$$&&S8 	
 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8B;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  r1   r6  r)   )r   rY   r"   r   r+   r0   r.   ,test_invalid_backend_hinting_and_constraintsr?    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          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   r|   r   Nc              3   V   K   | ]#} t          t                    dd dz
  iV  $dS )limitr   Nr+   )r$   _recursive_backend_info)r,   rn   rh  rB  s     r.   ro   z*_recursive_backend_info.<locals>.<genexpr>'  sY       
 
 -G+,,GG519GGG
 
 
 
 
 
r0   r   )r"   re   r  rS   r   rr   )rB  rh  r  
this_levelr   s   ``   r.   rC  rC     s    
			 'qAJ''0!*2JKL
A::' ' ' ' ' ' ' ' ! 
 
 
 
 
1XX
 
 
 
 
 GAJ&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   .B
/B

BBc                      | |d          5  t                      }d d d            n# 1 swxY w Y   |                                dz   }|dfdddg}||k    sJ d S )NrF   r|   Backendr   )r    r   )r   rF   )rC  title)rz   r>   backend_types_and_levelstop_level_backend_typeexpected_types_and_levelss        r.   test_nested_parallelism_limitrK  .  s     
	#	#	# = =#:#<#< = = = = = = = = = = = = = = = %]]__y8	#  	! $'@@@@@@@s   )--c                 ^     t                      d t          d          D                       S )z6A horrible function that does recursive parallel callsc              3   N   K   | ] } t          t                                V  !d S r6   )r$   _recursive_parallelrm   s     r.   ro   z&_recursive_parallel.<locals>.<genexpr>A  s4      GG2g12244GGGGGGr0   rF   rq   )nesting_limits    r.   rN  rN  ?  s+    8::GGeAhhGGGGGGr0   c                 n    | |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    r1ddlm} t          ||t          f          rt          j	        d           t          |t                    sJ d S )NrF   r|   r1   r   )TerminatedWorkerErrorz1Loky worker crash when serializing RecursionError)r   BaseExceptionrN  r   &joblib.externals.loky.process_executorrQ  r   r   r^  xfailRecursionError)rz   r>   r  excrQ  s        r.   test_thread_bomb_mitigationrW  D  sK    
	#	#	# " "M"" 	"g!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"" " " " " " " " " " " " " " " -C& 	QPPPPPc1=ABB 	N LLMMMc>*******s1   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  environrL  r   )env_varsvars     r.   _run_parallel_sumrc  `  sF    H 	, 	, 
s++\#&&&&r0   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 r6   )r$   rc  r   s     r.   ro   z-test_parallel_thread_limit.<locals>.<genexpr>r  sE       2 2)*"!""$$2 2 2 2 2 2r0   r   _THREADSr_  1)r"   rr   r  r#   itemsendswithr   )r>   r   expected_num_threadsworker_env_varsomp_num_threadsr   r   s          r.   test_parallel_thread_limitrm  o  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|++++|||||	$$ $r0   zThis test requires daskc                 z    t          t          d          5   | d           d d d            d S # 1 swxY w Y   d S )NzPlease install daskr  dask)r   rY   )rz   s    r.   )test_dask_backend_when_dask_not_installedrp    s     

"7	8	8	8                   s   044c                 N    G d dt                     }d} |  |                      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   rh  s      r.   r  z=test_zero_worker_backend.<locals>.ZeroWorkerBackend.configure      1r0   Nc                      t          d          )NzNo worker availabler   )rL   funccallbacks      r.   r)  z?test_zero_worker_backend.<locals>.ZeroWorkerBackend.apply_async  s    4555r0   c                     dS rd   r+   r  s     r.   r%   zDtest_zero_worker_backend.<locals>.ZeroWorkerBackend.effective_n_jobs  ru  r0   r6   )rS   rT   rU   r  r)  r%   r+   r0   r.   ZeroWorkerBackendrs    sF        	 	 		6 	6 	6 	6	 	 	 	 	r0   rz  z&ZeroWorkerBackend has no active workerr  rF   r|   c              3   P   K   | ]!} t          t                    |          V  "d S r6   r  rm   s     r.   ro   z+test_zero_worker_backend.<locals>.<genexpr>  s0      @@!{wr{{1~~@@@@@@r0   )r    r^  r   r  r"   rr   )rz   rz  expected_msgs      r.   test_zero_worker_backendr}    sq       ,    <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6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 r6   )MY_GLOBAL_VARIABLEr+   r0   r.   check_globalsz@test_globals_update_at_each_parallel_call.<locals>.check_globals  s    !!r0   rF   r|   c              3   F   K   | ]} t                                V  d S r6   r.  r,   rn   r  s     r.   ro   z<test_globals_update_at_each_parallel_call.<locals>.<genexpr>  E       1 1%&  1 1 1 1 1 1r0   zchanged valuec              3   F   K   | ]} t                                V  d S r6   r.  r  s     r.   ro   z<test_globals_update_at_each_parallel_call.<locals>.<genexpr>  r  r0   )r  r"   rr   r   )workers_global_variabler  s    @r.   )test_globals_update_at_each_parallel_callr    s*    *" " " =??.....0ha000 1 1 1 1*/((1 1 1   &'',<+===== )=??o----0ha000 1 1 1 1*/((1 1 1   &''O+<<<<<<<r0   c                      dd l } | j                            dd          } | j        ||           t	          j        d          }|                                S )Nr   r   threadpoolctl)numpyrT  rV  rR  r^  importorskipthreadpool_info)r   rM   r  s      r.   _check_numpy_threadpool_limitsr    sX    
 		S!!A
BF1aLLL'88M((***r0   c                     |D ]}|d         | d         k    r
|d         c S t          d                    |                     )Nfilepathnum_threadsz,An unexpected module was loaded in child:
{})rY   ra  )child_moduleparent_infoparent_modules      r.   _parent_max_num_threads_forr    s`    $ 0 0$Z(@@@ //// A
7>>|LL  r0   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          r.   check_child_num_threadsr    sw     ". ; ;1 	; 	;L%@k& &" K)?@@+NH.(:::::	;; ;r0   )rF   r   r   r{   c                 |   t                      }t          |          dk    rt          j        d            t	          d|           d t          d          D                       }t          |           } | dk    r|d         d	         }nt          t                      | z  d          }t          |||           d S )
Nr   &Need a version of numpy linked to BLASr  r1   r  c              3   N   K   | ] } t          t                                V  !d S r6   r$   r  rm   s     r.   ro   z;test_threadpool_limitation_in_child_loky.<locals>.<genexpr>  sM       G G67/.//11G G G G G Gr0   rF   r   r  
r  r   r^  r_  r"   rr   r%   r  r#   r  )rj   r  workers_threadpool_infosexpected_child_num_threadss       r.   (test_threadpool_limitation_in_child_lokyr    s     122K
;1CDDDDFxvFFF G G;@88G G G     f%%F{{%0^M%B""%()>%B%B" +/I    r0   inner_max_num_threads)r   rF   r   Nc                    t                      }t          |          dk    rt          j        d            | d|          5   t	          |          d t          d          D                       }d d d            n# 1 swxY w Y   t          |          }|d	k    r|d         d
         }n$| t          t                      |z  d	          }n|}t          |||           d S )Nr   r  r  r1   r  r|   c              3   N   K   | ] } t          t                                V  !d S r6   r  rm   s     r.   ro   z>test_threadpool_limitation_in_child_context.<locals>.<genexpr>  sE       ;
 ;
:;3G23355;
 ;
 ;
 ;
 ;
 ;
r0   rF   r   r  r  )rz   rj   r  r  r  r  s         r.   +test_threadpool_limitation_in_child_contextr    sV    122K
;1CDDDD	/D	E	E	E 
 
#:86#:#:#: ;
 ;
?DQxx;
 ;
 ;
 $
 $
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 f%%F{{%0^M%B""		&%()>%B%B""%:" +/I    s   1BBBvar_name)rZ  r[  rY  c                    t          |          dk    rt          j        d           t          d                                           d t
          j                                      }	 dt
          j        <    t          |          fdt          d	          D                       }|ddgk    sJ  | 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)Nr   zSkip test when n_jobs == 1Treusec                 @    t           j                            |           S r6   )r  r`  rL  )r  s    r.   _get_envz>test_threadpool_limitation_in_child_override.<locals>._get_env,  s    z~~h'''r0   4r|   c              3   H   K   | ]} t                              V  d S r6   r.  r,   rn   r  r  s     r.   ro   z?test_threadpool_limitation_in_child_override.<locals>.<genexpr>3  s6      )X)X!*;'(*;*;H*E*E)X)X)X)X)X)Xr0   rF   r1   r  c              3   H   K   | ]} t                              V  d S r6   r.  r  s     r.   ro   z?test_threadpool_limitation_in_child_override.<locals>.<genexpr>7  sG       . .01!!!(++. . . . . .r0   rg  )
r%   r^  r_  r   shutdownr  r`  rL  r"   rr   )rz   rj   r  original_var_valuer   r  s     `  @r.   ,test_threadpool_limitation_in_child_overrider    s    1$$0111 %%%..000( ( ( 116"
8)(&))))X)X)X)X)XuUVxx)X)X)XXX3*$$$$WV1555 	 	-hf--- . . . . .5:1XX. . .  G	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 3*$$$$$ %
8$$$#5BJx    %
8$$#5BJx 5555s1   /AE  4D<E  DE  DE   !E!)rF   r   r{   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   r|   c              3   R   K   | ]!} t          t                              V  "d S r6   )r$   sum)r,   rn   rA   s     r.   ro   zAtest_loky_reuse_workers.<locals>.parallel_call.<locals>.<genexpr>K  s1      CCAQCCCCCCr0   r   )rj   rA   s    @r.   parallel_callz.test_loky_reuse_workers.<locals>.parallel_callI  sJ    "IICCCCrCCCCCCCCr0   Tr  r   )r   rr   )rj   r  first_executorr   r   s        r.   test_loky_reuse_workersr  C  s    D D D
 M&*666N 2YY * *f(t444>)))))* *r0   c                 2    d| t          j                    <   d S )Ninitialized)r  r  )statuss    r.   _set_initializedr  Y  s    'F29;;r0   c                 L   t          j                    }|                     |d           }|dv sJ d|             |sd S d| |<   t          j                    dz   }t	          d |                                 D                       }t          j                    |k     rb||k     r\t          j        d           t	          d |                                 D                       }t          j                    |k     r||k     \t          j                    |k    rt          d          |S )	N)r  startedz2worker should have been in initialized state, got r  r:  c                 $    g | ]\  }}|d k    |S r  r+   r,   pidr  s      r.   r/   z!_check_status.<locals>.<listcomp>i  s!    HHHVS!iSr0   r   c                 $    g | ]\  }}|d k    |S r  r+   r  s      r.   r/   z!_check_status.<locals>.<listcomp>l  s!    LLLaQ)^^^^^r0   z-Waited more than 30s to start all the workers)r  r  rL  r]   r   rh  r	   r   )r  rj   wait_workersr  statedeadline	n_starteds          r.   _check_statusr  ]  s!   
)++CJJsD!!E....DUDD /..  F3Ky{{RHHHv||~~HHHIII
)++
 
 Y%7%7
3LL6<<>>LLLMM	 )++
 
 Y%7%7 y{{hJKKKJr0   c                     t          j                    }|                                 || t          f          5   t	                       fdt          d          D                        d d d            d S # 1 swxY w Y   d S )Nr>   rj   initializerinitargsc              3   T   K   | ]"} t          t                              V  #d S r6   r$   r  r,   rn   rj   r  s     r.   ro   z+test_initializer_context.<locals>.<genexpr>  s8      NNa)7=))&&99NNNNNNr0   r   )r   r  dictr  r"   rr   )rj   r>   rz   r  r  s   `   @r.   test_initializer_contextr  t  s    
 jllG\\^^F 
$	
 
 
 O O 	

NNNNN5::NNNNNNO O O O O O O O O O O O O O O O O Os   2A>>BBc                      t          j                    }|                                 t          | t          f           fdt          d          D                        d S )Nr  c              3   T   K   | ]"} t          t                              V  #d S r6   r  r  s     r.   ro   z,test_initializer_parallel.<locals>.<genexpr>  s8      AAgmVV,,AAAAAAr0   r   )r   r  r  r"   r  rr   )rj   r>   r  r  s   `  @r.   test_initializer_parallelr    s     jllG\\^^FH$	  
 BAAAAeCjjAAAB B B B Br0   c                     d}t          j                    }|                                t                      }t	          |          D ]`} t          d t          f           fdt	                     D                       }|                    t          |                    }at          |           k    s
J d            d S )Nrp   r1   r  c              3   X   K   | ]$} t          t                    d           V  %dS T)r  Nr  r  s     r.   ro   z*test_initializer_reused.<locals>.<genexpr>  P       

 

 #GM""66EEE

 

 

 

 

 

r0   z=The workers should be reused when the initializer is the same)	r   r  r  r   rr   r"   r  unionr   rj   n_repetitionsr  pidsrn   r   r  s   `     @r.   test_initializer_reusedr    s    
 MjllG\\^^F55D=!! 
( 
(
((Y	
 
 



 

 

 

 

6]]

 

 


 
 zz#g,,''t99G r0   c                     d}t          j                    }t                      }t          |          D ]t}|                                 t          d t          f           fdt                     D                       }|                    t          |                    }ut          |          | z  k    s
J d            d S )Nrp   r1   r  c              3   X   K   | ]$} t          t                    d           V  %dS r  r  r  s     r.   ro   z.test_initializer_not_reused.<locals>.<genexpr>  r  r0   zFThe workers should not be reused when the initializer arguments change)	r   r  r   rr   r  r"   r  r  r   r  s   `     @r.   test_initializer_not_reusedr    s     MjllG55D=!! ( (
((Y	
 
 



 

 

 

 

6]]

 

 


 
 zz#g,,''t99....P /....r0   )F)r   r   )rp   r6   )rV   r  r  r   rb  r2   r]   r   r  r4  r   mathr   r)   r   pickler   r	   	tracebackr
   r^  rq  r   r   r   joblib._multiprocessing_helpersr   joblib.test.commonr   r   r   r   joblib.testingr   r   r   r   r   joblib.externals.lokyr   rv  r   posixImportError _openmp_test_helper.parallel_sumr   distributedjoblib._parallel_backendsr   r   r   r   r    joblib.parallelr!   r"   r#   r$   r%   r&   r'   r(   r  RETURN_GENERATOR_BACKENDSpopr  keysALL_VALID_BACKENDSPROCESS_BACKENDSPARALLEL_BACKENDShasattrr   r3   r8   r?   rC   rH   	ExceptionrJ   r[   r_   rb   rg   rt   rv   ry   markr   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r8  r>  rB  r   rM  rg  rt  rx  r  r  r  r  r  r  r  rT  r  r  r  r  r  r  r  r  r  r  extendrr   r  r  r  r  r  r	  _parallel_backendsr  r  r  r$  r+  r;  r>  rH  rO  rX  r`  re  rn  rl  SQUARE_LOCALSQUARE_LAMBDArw  ra  ro  rp  rr  ry  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r<  r?  rC  rK  rN  no_coverrW  rc  rm  rp  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+   r0   r.   <module>r     s[     				 				 



        " " " " " "       ( ( ( ( ( (                   & & & & & &   ' ' ' ' ' ' ' ' ' ' . . . . . .            U T T T T T T T T T T T T T>;;;;;;      LLLL   EEE>>>>>>>   LLL   KKK             
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 *HMOO    / 6 6 6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    " " " Y*:;<<%b"""---.	:000   
 . .   =<. Y*++X~~~&&Y%%, , &% '& ,+, Y*++X1v   ,+( Y*++' ' ,+'T  0 +  
 
 
 
 2 Y@@@AA  BA Q Q Q _h''x((  )( ('   W W W   Xyyy!!  "! Y)**/ / +*/: 
 
 
 [///**\At9%%5 5 &% +*  5$ Y)**	 	 +*	 Y)**
 
 +* 
 Y566,GHH[;(=>??  @? IH $ Y())C
 C
 *) C
L Y!!E E "! E,' ' ' Y!!    	
$   	
%$' 'P Q' ' "!R  Y)**  +* <4 4 4 Y())3 3 *) 3
 
 
H H HM M M Y)**CDD- - ED +* -,    +   
 
 
 Y*++H H ,+H$ Y)**X}}}%%: : &% +* :% % %	D 	D 	D $=>>>9 9 ?>9; ; ;* $5QQQ#7     ' '(Q(Qa(Q(Q(Q R R R Y899Y)?;<<D D =< :9 D,    #4    Y*:;<<D D =<D& Y*:;<<D D =<D(  
Q Q Q> > > > >)5 > > >  / ; ; ; YWWWXXY*:;<<, , =< YX , X}}}%%Y)**Y*:;<<
 
 =< +* &% 
07 7 7 _/00_/00Y*:;<<
 
 =< 10 10 
 Y*:;<<%e}55! ! 65 =< !: \===))( ( *)(
 /     !   + + + Y())S S *)  S,0 ,  Y())  *) - )@
 Y("*BB7)LMM][,FGG "?"?"?@@  A@ HG NM ,(9P Fbgoobgoofo.N.NOOFPPQ 6V 
 
 
=, Fbgoobgoofo.N.NOOFPP- :2   8 8 8
   Y())8 8 *)  86   	/ 	/  	/
 
 
  
 999--; ; .-;    " Aq6** Y566,GHHN N IH 	 +*N Y*++X~~~&&  '& ,+     Y122[;(=>??X~~~&&> > '& @? 32 > Y122[;(=>??X~~~&&
 
 '& @? 32
& Y122[;(=>??X~~~&&
 
 '& @? 32
& Y122][*?@AA][*?@AAX~~~&&> > '& BA BA 32>&     ][*?@AA][*?@AA)" )" BA BA )"X Y())P P *)  PD rz{##7R7R7R 0 0 0 Y())  *) , Y*:;<<+ + =< +\ X1vX55566' ' 76 ' Y*:;<<3K 3K =<3KlE E E*' ' ' ' Y-..Y*:;<<A A =< /. AH H H H
 Y*:;<<Y"*+6;:OQQ+ + RQ =< +2' ' ' Y2>$vGG%BCCC$ $ DC HG$ Y*:;<<4(ABBB  CB =<
 Y*:;<<A A =<A&= = =H	+ 	+ 	+  
; 
; 
; X~~~&&  '&  0 $ooo66X2wY*:;<<  =<   76  
6 X2wZWWWXXY*:;<< 6  6 =< YX    6F Xzzz""* * #" *(( ( (   . X1vY())Y*:;<<O O =< *)  O X1vY())B B *)  B Aq6**  +* 0 Aq6**  +*   s6   B BBB" "B,+B,0B5 5B?>B?