
    Ug!             	          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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 dd
lmZmZ ddlmZ ddlmZmZ ddlmZ ddlmZmZ 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/m0Z0 ddl/m1Z1 ddl/m2Z2 ddl/m3Z3 ddl/m4Z4 ddl5m6Z6m7Z7 ddl5m8Z8 ddl5m9Z9 ddl5m:Z: ddl5m;Z;m<Z< ddl5mZm=Z=m>Z>  e=j?                    Z@e@A                    dd           dg eB e=jC                              z   ZDeDd  e=D             z  ZDeg ZEndd!gZEeEd"gz   ZF eGed#          r#eDH                     ejI        d$                     e=e>         ZJd% ZKd& ZLd' ZM G d( d)eN          ZOdd+ZPd, ZQdd-ZRd. ZSd/ ZTd0 ZUd1 ZV e!d2e8e9g          ejW        !                    d3d4d5 e;d56          fd7gg d89          ed:                                     ZX e!d;eD           e!d<g d=           e!d>g d?          d@                                     ZY e!d;eD          dA             ZZdB Z[e e!dCg dD          dE                         Z\e e!d;g dF          dG                         Z]dH Z^ e!dIe=           e!dJe=          dK                         Z_dL Z`edM             ZadN Zb e!d<g dO          dP             Zc e!d;eF          dQ             ZdedR             Zeee e!dSg dT          dU                                     Zf e!d;eF          dV             Zge e!d;eF          dW                         Zhe e!d;eE          dX                         Zie e!d;e=          dY                         ZjdZ Zk e!d;e=           e!d[dg d\fd]g d^fg          d_                         Zle e!d;eF          d`                         Zmda Zne e!d;eE          db                         Zodc Zpdd Zqde Zre e!d;eF          ejW        s                    dfg          dh                                     Zt G di dje0          Zudk Zv e!d;eD          dl             Zwe e!d;eF           e!d<g dm          dn                                     Zxdo Zydp Zz e$edudqg          dr             Z{ds Z|eFdd         Z}e}~                    dt  edu          D                        e e!d;e}           e!d2e9e8g          dv                                     Z G dw dxe0          Z e!d2e8e9g          dy             Z e!d2e8e9g          dz             Zd{ Zd| Z G d} d~ej        j4                  Z e:de           e e!d;g d           e!d2e8e9g          d                                     Ze e!d<g d           e!d;eF           e!d2e8e9g          d                                                 Zd Ze e!deF           e!deF           e!d2e8e9g          d                                                 Ze e!d2e8e9g           e!ddd*g          d                                     Z e!dg d          d             Z e!dg d          d             Zed             Zee e!d;eE          d                                     ZdZe e!d;eE          d                         ZdZdZdZdZe e!d;eEe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 Zd Zee e!d;eE          d                                     Zd Zeed                         Zd Zd ZejW        !                    d<g d          d             Zd Zd ZejW        !                    d<dd]g          e e!d; ee@          dhz
            d                                     ZejW        !                    d<dd5g           e!d2e8e9g           e$e.du dg          d                                     Z e!d;eD           e!d<g d          d                         Zd Zd Ze e!d;e@           e!dddg           e!d<g d          d                                                 ZeejW        !                    d<dd5g           e!dddg           e!d2e8e9g           e$e.du dg          d                                                             Z e!d;e@           e!dddg           e!d<g d          d                                     Z e!d;e@           e!dddg           e!d<g d          d                                     Z e!d;e@           e!dddg           e!dddg           e!d<g d          d                                                 Z e!dg d¢           e!dddg           e!dddg          dÄ                                     Zee e!d;eE          dĄ                                     Z e!d;edd"gng dŢ          dƄ             Ze e!d;eE          dǄ                         Ze e!d2e8e9g          dȄ                         Z e!d2e8e9g          dɄ             Zdʄ Zdd˄Ze e!d;d!d"g           e!d2e8e9g          d̄                                     Ze e!d2e8e9g           e$e.du dg          d̈́                                     Zdd΄ZejW        j         e!d2e8e9g           e!d;ed"gnd!d"g          dτ                                     ZdЄ Z e!d;edd!gndg           e$e-du dѬg          d҄                         Z e!d2e8e9g           e$e.dudg          dӄ                         Z e!d2e8e9g          dԄ             ZdՄ Zdք Zdׄ Zd؄ Zee e!d<g d٢          dڄ                                     Zee e!dg dܢ           e!d<dd5g           e!d2e8e9g          d݄                                                             Ze e!d<dd5g           e!dg dߢ           e!d2e8e9g          d                                                 Ze e!d<g d          d                         ZdS )z
Test the parallel module.
    N)format_exceptionsqrt)sleep)PicklingError)nullcontextTimeoutErrorparallel)dumpload)mp)np
with_numpy)with_multiprocessing)IS_PYPYforce_gc_pypy)parametrizeraisescheck_subprocess_callskipifwarns)get_reusable_executor)Queue   )parallel_sum)SequentialBackend)ThreadingBackend)MultiprocessingBackend)ParallelBackendBase)LokyBackend)Paralleldelayed)parallel_config)parallel_backend)register_parallel_backend)effective_n_jobs	cpu_count)r   BACKENDSDEFAULT_BACKENDmultiprocessingc                 6    g | ]}t          |                     S  )r*   ).0backend_strs     X/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/joblib/test/test_parallel.py
<listcomp>r2   M   s#    KKK;x,..KKK    loky	threadingget_contextspawnc           	      B    t          | dt          | dd                     S )N_pool_workers)getattrbackends    r1   get_workersr>   [   s     7GWWj$%G%GHHHr3   c                     | |z  S Nr.   )xys     r1   divisionrC   _   s    q5Lr3   c                     | dz  S N   r.   rA   s    r1   squarerH   c   s    6Mr3   c                       e Zd ZdZd ZdS )MyExceptionWithFinickyInitz1An exception class with non trivial __init__
    c                     d S r@   r.   )selfabcds        r1   __init__z#MyExceptionWithFinickyInit.__init__j   s    r3   N__name__
__module____qualname____doc__rQ   r.   r3   r1   rJ   rJ   g   s-             r3   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     r1   exception_raiserr[   n   s4    Avv"3)#sC===(2	4Hr3   c                 8    t          j        d           t          )Ng?)timer   KeyboardInterruptrG   s    r1   interrupt_raiserr_   u   s    JsOOO
r3   c                     | dz  |z   |z   S )zO A module-level function so that it can be spawn with
    multiprocessing.
    rF   r.   )rA   rB   zs      r1   frb   z   s     6A:>r3   c                  N    t          t          j                    d                   S Nr   )typer   get_active_backendr.   r3   r1   _active_backend_typerg      s    +--a0111r3   c                 d     t          | |          d t          d          D                       S )Nn_jobsr=   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r$   rH   r/   is     r1   	<genexpr>z parallel_func.<locals>.<genexpr>   sC       :. :. :. :. :. :. :. :.r3      r#   range)inner_n_jobsr=   s     r1   parallel_funcrt      sE    98<999 :. :.$)!HH:. :. :. . . .r3   c                  .    t                      dk    sJ d S rd   )r)   r.   r3   r1   test_cpu_countrv      s    ;;??????r3   c                  .    t                      dk    sJ d S rd   r(   r.   r3   r1   test_effective_n_jobsry      s    !!!!!!r3   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 )Nr5   r|   r   rx   )rz   backend_n_jobsexpected_n_jobss      r1   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     r1   r2   z(test_simple_parallel.<locals>.<listcomp>   s    )))1VAYY)))r3      )rj   r=   r   c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   r   s     r1   ro   z'test_simple_parallel.<locals>.<genexpr>   sC       &6 &6'(""&6 &6 &6 &6 &6 &6r3   rr   r#   )r=   rj   r   s      r1   test_simple_parallelr      s     *)a)))&HFG$& & &&6 &6,1!HH&6 &6 &66 66 6 6 6 6 6r3   c                 l   |                     t          j                    dd           t          j        d          5 } t          d|           d t          d	          D                       }|g d
k    sJ 	 d d d            n# 1 swxY w Y   d |D             }t          |          dk    sJ d S )Nname!some_new_name_for_the_main_thread)targetr   valueTrecordrF   ri   c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   r   s     r1   ro   z6test_main_thread_renamed_no_warning.<locals>.<genexpr>   sC       62 62#$OGFOOA62 62 62 62 62 62r3   rp   )r   r      c                 >    g | ]}d t          |j                  v|S )zworker timeout)strmessager/   ws     r1   r2   z7test_main_thread_renamed_no_warning.<locals>.<listcomp>   s+    NNNa'7s19~~'M'M'M'M'Mr3   r   )setattrr5   current_threadwarningscatch_warningsr#   rr   len)r=   monkeypatchwarninforesultss       r1   #test_main_thread_renamed_no_warningr      s)    y799A  C C C 
	 	-	-	- $5(!W555 62 62(-a62 62 62 2 2)))#####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ON8NNNH
 x==As   <BBBc                    t          j        d          5 }t          j        d           t          | |           d d d            n# 1 swxY w Y   d |D             }|rb|r^t	          d |D                       }t          t          j        dd          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     r1   r2   z*_assert_warning_nested.<locals>.<listcomp>   s    ,,,a	,,,r3   c              3   4   K   | ]}d |j         d         v V  dS )zbacked parallel loops cannotr   N)args)r/   eachs     r1   ro   z)_assert_warning_nested.<locals>.<genexpr>   sA       ' ' /$)A,>' ' ' ' ' 'r3   nogilFr   )	r   r   simplefilterrt   allr;   sysflagsr   )r=   rs   expectedr   warnings_are_correctwarnings_have_the_right_lengths         r1   _assert_warning_nestedr      sM   		 	-	-	- 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#& ' '$' ' ' $ $  '.ci%&H&H (H""]]a' + (J,JJuts   &AAAz%parent_backend,child_backend,expected))r4   r,   T)r4   r4   F)r,   r,   T)r,   r4   T)r5   r,   T)r5   r4   Tc                     t          d|           fdt          d          D                         t          d|           fdt          d          D                       }| dk    r>t          r$t          |          st	          j        d           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     r1   ro   z0test_nested_parallel_warnings.<locals>.<genexpr>   s[       / /  	(&''!	 	 	/ / / / / /r3   r   c              3   X   K   | ]$} t          t                    d           V  %dS )rF   r   Nr   )r/   r   r   r   s     r1   ro   z0test_nested_parallel_warnings.<locals>.<genexpr>   s[       5 5  	(&''!	 	 	5 5 5 5 5 5r3   r5   zThis test often fails in PyPy.reason)r#   rr   r   anypytestxfailr   )parent_backendr   r   ress    `` r1   test_nested_parallel_warningsr      s    /HA~... / / / / q	/ / /    5(!^
4
4
4 5 5 5 5 5 q	5 5 5  C $$ 	B3s88 	BL @AAAA3xx3xxr3   )r4   r,   r5   c                     dg}d }t          j        ||f          }|                                 |                                 |d         sJ d S )NFc                 $   t          j        d          5 } t          d          d t          d          D                        d d d            n# 1 swxY w Y   t	          t          |                     t          |          dk    | d<   d S )NTr   rF   r|   c              3   P   K   | ]!} t          t                    d           V  "dS )皙?Nr$   r   r/   r   s     r1   ro   zPtest_background_thread_parallelism.<locals>.background_thread.<locals>.<genexpr>  sC       6 6'(r""6 6 6 6 6 6r3   r   r   )r   r   r#   rr   printr   )is_run_parallelr   s     r1   background_threadz=test_background_thread_parallelism.<locals>.background_thread  s    $D111 	6XHA 6 6,1!HH6 6 6 6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	c(mm ]]a/s   1AAA)r   r   r   )r5   Threadstartjoin)r=   r   r   ts       r1   "test_background_thread_parallelismr     sf     gO0 0 0 	 18JKKKAGGIIIFFHHH1r3   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     r1   ro   znested_loop.<locals>.<genexpr>  sC       (0 (0!"(0 (0 (0 (0 (0 (0r3   rq   r<   s    r1   nested_loopr     sO    'HAw''' (0 (0&+Ahh(0 (0 (0 0 0 0 0 0r3   r   r   c                 n     t          d|           fdt          d          D                        d S )NrF   ri   c              3   R   K   | ]!} t          t                              V  "d S r@   )r$   r   r   s     r1   ro   z#test_nested_loop.<locals>.<genexpr>!  sG       /? /?01]++/? /? /? /? /? /?r3   rq   )r   r   s    `r1   test_nested_loopr     s\     /HA~... /? /? /? /?5:1XX/? /? /? ? ? ? ? ?r3   c                     t           r@   )rY   r<   s    r1   raise_exceptionr   %  s    
r3   c            	      8   t          t                    5  t          dd          5 }  |  t          t                    d           t          t
                    d          g           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrF   r4   ri   )r   rY   r#   r$   r   r   r   s    r1   )test_nested_loop_with_exception_with_lokyr   )  s   	
		 9 9Q/// 	98H*gk**622.go..v668 9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	99 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s5   BAA7+B7A;	;B>A;	?BBBc                       t          d            t          dd           fdt          d          D                                                         sJ dS )z1Input is mutable when using the threading backendr   )maxsizerF   r5   ri   c              3   R   K   | ]!} t          j                  d           V  "dS r   N)r$   put)r/   r   qs     r1   ro   z1test_mutate_input_with_threads.<locals>.<genexpr>4  sF       ,- ,-q,- ,- ,- ,- ,- ,-r3   N)r   r#   rr   full)r   s   @r1   test_mutate_input_with_threadsr   1  su    aA+HA{+++ ,- ,- ,- ,-#(88,- ,- ,- - - -6688OOOOOr3   )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     r1   r2   z(test_parallel_kwargs.<locals>.<listcomp>=  s"    $$$1QqAYYY$$$r3   r|   c              3   T   K   | ]#} t          t                    |d           V  $dS r   r   Nr$   rb   r   s     r1   ro   z'test_parallel_kwargs.<locals>.<genexpr>>  s7      #D#D1JGAJJqA$6$6$6#D#D#D#D#D#Dr3   Nr   )rj   lsts     r1   test_parallel_kwargsr   9  sk     ))C$$$$$#HF####D#D#D#D#DDDE E E E E Er3   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     r1   r2   z4test_parallel_as_context_manager.<locals>.<listcomp>D  s"    '''a!q			'''r3   r   ri   c              3   T   K   | ]#} t          t                    |d           V  $dS r   r   r   s     r1   ro   z3test_parallel_as_context_manager.<locals>.<genexpr>M  7      ==AZWQZZQ///======r3   c              3   T   K   | ]#} t          t                    |d           V  $dS r   r   r   s     r1   ro   z3test_parallel_as_context_manager.<locals>.<genexpr>N  r   r3   c              3   T   K   | ]#} t          t                    |d           V  $dS r   r   r   s     r1   ro   z3test_parallel_as_context_manager.<locals>.<genexpr>Z  s7      99A+++999999r3   )rr   r#   _backendr   r>   )r=   r   r   pmanaged_backends        r1    test_parallel_as_context_managerr   A  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 )ze Check that pmap captures the errors when it is passed an object
        that cannot be pickled.
    c                       e Zd Zd ZdS )1test_parallel_pickling.<locals>.UnpicklableObjectc                      t          d          )N123)RuntimeErrorrL   s    r1   
__reduce__z<test_parallel_pickling.<locals>.UnpicklableObject.__reduce__e  s    u%%%r3   N)rS   rT   rU   r  r.   r3   r1   UnpicklableObjectr   d  s#        	& 	& 	& 	& 	&r3   r  zthe task to sendmatchrF   r4   ri   c              3   b   K   | ])} t          t                                           V  *d S r@   r$   id)r/   r   r  s     r1   ro   z)test_parallel_pickling.<locals>.<genexpr>i  sU       +5 +5%& ,772;;,! ,! +5 +5 +5 +5 +5 +5r3   r   N)objectr   r   r#   rr   )r  s   @r1   test_parallel_picklingr  _  s    
& & & & &F & & & 
%8	9	9	9 5 5*6*** +5 +5 +5 +5*/))+5 +5 +5 	5 	5 	55 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   4A,,A03A0	byteorder)<>=c                    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 r@   )dtyper  rG   s    r1   inspect_byteorderz=test_parallel_byteorder_corruption.<locals>.inspect_byteorderr  s    !'###r3      )rF   rp   i4rF   r4   ri   c              3   H   K   | ]} t                              V  d S r@   r$   )r/   r   r  rA   s     r1   ro   z5test_parallel_byteorder_corruption.<locals>.<genexpr>y  sH       0 0*+"!""1%%0 0 0 0 0 0r3   rp   )
r   arangereshapeviewr  r  r#   rr   testingassert_array_equal)r  initial_np_byteorderresult
x_returnedbyteorder_in_workerr  rA   s        @@r1   "test_parallel_byteorder_corruptionr!  m  s   
$ $ $ 		!V$$))Y*:*:*:;;A7,/XQ/// 0 0 0 0 0/4Qxx0 0 0  F ,2 5 5'
'"&:::::"j&6&@@@@@

%%a44445 5r3   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     r1   ro   z0test_parallel_timeout_success.<locals>.<genexpr>  sC       ?2 ?2"#u?2 ?2 ?2 ?2 ?2 ?2r3   r   )r   r#   rr   r<   s    r1   test_parallel_timeout_successr'    sr     >xq'2>>> ?2 ?2',Ryy?2 ?2 ?2 2 2 3 3689 9 9 9 9 9r3   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     r1   ro   z-test_parallel_timeout_fail.<locals>.<genexpr>  sC       :3 :3#$NGENN2:3 :3 :3 :3 :3 :3r3   r   )r   r
   r#   rr   r<   s    r1   test_parallel_timeout_failr+    s     
		 3 397D999 :3 :3(-b		:3 :3 :3 	3 	3 	33 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3   3AAAc           	         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      r1   r2   z&test_error_capture.<locals>.<listcomp>  s@     5 5 51 #""1a(( 5 5 5r3   )r   r   )r   r   c                 H    g | ]} t          t                    |           S r.   r$   r_   r   s     r1   r2   z&test_error_capture.<locals>.<listcomp>  ,    >>>!*)**1-->>>r3   c                 P    g | ]#\  }} t          t                    ||          $S r.   r/  r0  s      r1   r2   z&test_error_capture.<locals>.<listcomp>  s@     ; ; ;"a ,'(++Aq11 ; ; ;r3   c                 0    g | ]}t          |d           S r   r   r   s     r1   r2   z&test_error_capture.<locals>.<listcomp>  "    2221QqAYYY222r3   r   c              3   T   K   | ]#} t          t                    |d           V  $dS r   r   r   s     r1   ro   z%test_error_capture.<locals>.<genexpr>  7      CCAZWQZZQ///CCCCCCr3   c                 H    g | ]} t          t                    |           S r.   r2  r   s     r1   r2   z&test_error_capture.<locals>.<listcomp>  s,    GGG13'"233A66GGGr3   c                 0    g | ]}t          |d           S r   r   r   s     r1   r2   z&test_error_capture.<locals>.<listcomp>  r6  r3   c              3   T   K   | ]#} t          t                    |d           V  $dS r   r   r   s     r1   ro   z%test_error_capture.<locals>.<genexpr>  r8  r3   r|   c                 H    g | ]} t          t                    |           S r.   r2  r   s     r1   r2   z&test_error_capture.<locals>.<listcomp>  r3  r3   c                 P    g | ]#\  }} t          t                    ||          $S r.   r/  r0  s      r1   r2   z&test_error_capture.<locals>.<listcomp>  s1    EEEAWXq!$$EEEr3   r   )rj   r   c              3   T   K   | ]#} t          t                    |d           V  $dS )T)rZ   Nr$   r[   rm   s     r1   ro   z%test_error_capture.<locals>.<genexpr>  sN       ! ! 'W%&&q4@@@ ! ! ! ! ! !r3   r#  )r   r   ZeroDivisionErrorr#   zipr^   r>   r   rr   
_iteratingn_completed_tasksn_dispatched_tasks	_abortingrJ   )r=   r   original_workerss      r1   test_error_capturerG    s   
 
~%&& 	6 	6/HAw///5 5 #FF 3 35 5 56 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6
 %&& 	@ 	@/HAw///>>v>>>@ @ @	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@
 Q000  	Hx011===*8+<==)** < < ; ;&)&&&9&9; ; ; < < << < < < < < < < < < < < < < < x011=== x0119IIIII22b		222HCCrCCCCCD D D D  +8+<==)** I IGGGGGHHHI I I I I I I I I I I I I I I x011=== x0119IIIII22b		222HCCrCCCCCD D D#X%?+X-?GD D D D9 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	H 8,--5555%&& 	@ 	@HA>>v>>>@ @ @	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 
!	"	" G GEEVV1D1DEEE	G 	G 	GG G G G G G G G G G G G G G G 
*	+	+ " "%1%%%! !Bii! ! !	" 	" 	"" " " " " " " " " " " " " " " " " "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     r1   my_generatorz1test_error_in_task_iterator.<locals>.my_generator  sH      r 	 	AH}} !9:::GGGG	 	r3   rF   ri   rK  r  c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   rm   s     r1   ro   z.test_error_in_task_iterator.<locals>.<genexpr>  2      CCQogfooa  CCCCCCr3   )rL  c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   rm   s     r1   ro   z.test_error_in_task_iterator.<locals>.<genexpr>  rO  r3   r   c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   rm   s     r1   ro   z.test_error_in_task_iterator.<locals>.<genexpr>  s2      DDQogfooa  DDDDDDr3      r   )r#   r   rY   )r=   rM  r   s      r1   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)append)queueitems     r1   consumerrY    s    	LL%&&&&&r3   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   )rZ  r\  r^  r`  r[  r]  r_  ra  rb  rd  rc  re  c                     t                      fd} t          d||           fd |            D                        |k    sJ t                    dk    sJ dS )zC Test that with only one job, Parallel does act as a iterator.
    c               3   h   K   t          d          D ]}                     d| z             | V  d S Nr  zProduced %irr   rV  rn   rW  s    r1   producerz'test_dispatch_one_job.<locals>.producer  H      q 	 	ALL*+++GGGG	 	r3   r   rj   
batch_sizer=   c              3   T   K   | ]"} t          t                    |          V  #d S r@   r$   rY  )r/   rA   rW  s     r1   ro   z(test_dispatch_one_job.<locals>.<genexpr>  sI       ?9 ?9()%##?9 ?9 ?9 ?9 ?9 ?9r3      N)listr#   r   )r=   rn  expected_queuerk  rW  s       @r1   test_dispatch_one_jobrt    s      FFE    
 ?HA*g>>> ?9 ?9 ?9 ?9-5XZZ?9 ?9 ?9 9 9 9N""""u::r3   c                    t          j                    }|                                fd} t          ddd|           fd |            D                        t                    }|d         dk    sJ |d	d
                             d          }|dk    sJ |                    d          }||k    sJ t                    dk    sJ d	S )zW Check that using pre_dispatch Parallel does indeed dispatch items
        lazily.
    c               3   h   K   t          d          D ]}                     d| z             | V  d S rh  ri  rj  s    r1   rk  z/test_dispatch_multiprocessing.<locals>.producer  rl  r3   rF   r   rp   )rj   rn  pre_dispatchr=   c              3   T   K   | ]"} t          t                    d           V  #dS )r   Nrp  )r/   r   rW  s     r1   ro   z0test_dispatch_multiprocessing.<locals>.<genexpr>!  sQ       F= F=,-%''F= F= F= F= F= F=r3   r   rZ  Nr   zConsumed anyr{   r`  rq  )r   Managerrr  r#   indexr   )r=   managerrk  queue_contentsfirst_consumption_indexproduced_3_indexrW  s         @r1   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::r3   c                      t          ddd          5 }  | d t          d          D                        | j                                        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )NrF   autor5   rm  c              3   P   K   | ]!} t          t                    |          V  "d S r@   r  rm   s     r1   ro   z/test_batching_auto_threading.<locals>.<genexpr>8  0      	.	.Q+'"++a..	.	.	.	.	.	.r3     r   r#   rr   r   compute_batch_size)r   s    r1   test_batching_auto_threadingr  2  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  rm  c              3   P   K   | ]!} t          t                    |          V  "d S r@   r  rm   s     r1   ro   z2test_batching_auto_subprocesses.<locals>.<genexpr>@  r  r3   r  r   r  )r=   r   s     r1   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   rw  r   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r?  rm   s     r1   ro   z*test_exception_dispatch.<locals>.<genexpr>K  sG       7= 7=-.%G$%%a((7= 7= 7= 7= 7= 7=r3   r#  N)r   rY   r#   rr   r.   r3   r1   test_exception_dispatchr  H  s    	
		 = =6A666 7= 7=27))7= 7= 7= 	= 	= 	== = = = = = = = = = = = = = = = = =r,  c                 f     t          d          d t          d          D                        d S )NrF   r|   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r?  r/   js     r1   ro   z(nested_function_inner.<locals>.<genexpr>P  sG       9 9)*! !!!$$9 9 9 9 9 9r3   r#  rq   rn   s    r1   nested_function_innerr  O  sM    HA 9 9.3Bii9 9 9 9 9 9 9 9r3   c                 f     t          d          d t          d          D                        d S )NrF   r|   c              3   P   K   | ]!} t          t                    |          V  "d S r@   )r$   r  r  s     r1   ro   z(nested_function_outer.<locals>.<genexpr>U  sG       > >./&%&&q))> > > > > >r3   r#  rq   r  s    r1   nested_function_outerr  T  sM    HA > >3899> > > > > > > >r3   z'https://github.com/joblib/loky/pull/255r   c                    t          t                    5 } t          d|           d t          d          D                        ddd           n# 1 swxY w Y   t	          |j        |j        |j                  }d                    |          }d|v sJ d|v sJ d	|v sJ t          |j                  t          u sJ dS )
zEnsure errors for nested joblib cases gets propagated

    We rely on the Python 3 built-in __cause__ system that already
    report this kind of information to the user.
    rF   ri   c              3   P   K   | ]!} t          t                    |          V  "d S r@   )r$   r  rm   s     r1   ro   z1test_nested_exception_dispatch.<locals>.<genexpr>c  sO       ,B ,B23*G)**1--,B ,B ,B ,B ,B ,Br3   r#  N r  r  r[   )	r   rY   r#   rr   r   re   r   tbr   )r=   excinforeport_linesreports       r1   test_nested_exception_dispatchr  Y  s=    

		 Bw+7+++ ,B ,B7<Ryy,B ,B ,B 	B 	B 	BB B B B B B B B B B B B B B B $GL'-LLLWW\""F"f,,,,"f,,,,''''*,,,,,,s   2AAAc                   "    e Zd ZdZddZddZdS )FakeParallelBackendz8Pretends to run concurrently while running sequentially.r   Nc                 H    |                      |          | _        || _        |S r@   )r(   rj   r   )rL   rj   r   backend_argss       r1   	configurezFakeParallelBackend.configuret  s#    ++F33 r3   c                 `    |dk     r't          t          j                    dz   |z   d          }|S )Nr   r   )maxr   r)   rL   rj   s     r1   r(   z$FakeParallelBackend.effective_n_jobsy  s/    A::!+f4a88Fr3   r   )r   )rS   rT   rU   rV   r  r(   r.   r3   r1   r  r  q  sB        BB   
     r3   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.   r3   r1   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     r1   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 r@   rl   rm   s     r1   ro   z.test_njobs_converted_to_int.<locals>.<genexpr>  s2      221OGFOOA222222r3   r   c              3   B   K   | ]\  }}|t          |          k    V  d S r@   r   )r/   rn   rs      r1   ro   z.test_njobs_converted_to_int.<locals>.<genexpr>  s0      99$!QqF1II~999999r3   )r#   _effective_n_jobsrr   r   	enumerate)r=   rj   r   r   s       r1   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9r3   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.   r3   r1   test_register_parallel_backendr    se    %!.2EFFF))))'+>>>>>>^$$$H^$$$$$s   8A 
Ac                  *   t                      t          k    sJ 	 t          dt          d         d           t                      t          k    sJ 	 t
          t          _        n# t
          t          _        w xY wt                      t          k    sJ d S )Nr5   T)make_default)rg   DefaultBackendr'   r*   r   r+   r   r.   r3   r1   test_overwrite_default_backendr    s    !!^33333!+x/D/3	5 	5 	5 	5#%%)999999 $3  ? 2222!!^333333s   6A$ $A7zOnly without multiprocessingc                  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  r4   r<   c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   rm   s     r1   ro   z2test_backend_no_multiprocessing.<locals>.<genexpr>  s2       F F!3!3 F F F F F Fr3   rp   c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   rm   s     r1   ro   z2test_backend_no_multiprocessing.<locals>.<genexpr>  s2      88!?76??1%%888888r3   )r   UserWarningr#   rr   r%   r.   r3   r1   test_backend_no_multiprocessingr    sU   	{@
B 
B 
B G G     F FU1XX F F FFFFG G G G G G G G G G G G G G G
 
	(	(	( 9 9

88uQxx8888889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s#   1AAA//B++B/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,   r4   r5   test_)r   rf   r(   r#   rj   re   r    r   r"   r   
startswithr  )rz   backend_nameactive_backendactive_n_jobsr   s        r1   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     r1   r2   r2     s    ---q---r3   rp   c                 h   |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   r5   ri   c              3   X   K   | ]$}| t          t                    |          V  %d S r@   )r$   r  )r/   rN   rz   s     r1   ro   z/test_backend_context_manager.<locals>.<genexpr>  sQ       ,< ,<,<.-..w::,< ,< ,< ,< ,< ,<r3   )r*   setitemr  rg   r  r  r#    all_backends_for_context_manager)r   r=   rz   s     `r1   test_backend_context_managerr    s     hHg/BCCC!!^3333!'7333  !!^3333 ,HA{+++ ,< ,< ,< ,<1,< ,< ,< < < <
  !!^333333r3   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     r1   rQ   z%ParameterizedParallelBackend.__init__  s!    =7888


r3   r@   rR   r.   r3   r1   r  r    s.        CC     r3   r  c                 L   |                      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 r@   r$   r   rm   s     r1   ro   z=test_parameterized_backend_context_manager.<locals>.<genexpr>  2      77MGDMM!$$777777r3   r   c                 ,    g | ]}t          |          S r.   r   rm   s     r1   r2   z>test_parameterized_backend_context_manager.<locals>.<listcomp>      1111tAww111r3   )r  r*   r  rg   r  r   rf   re   r  r#   rj   r   rr   )r   rz   r  r  r   r   s         r1   *test_parameterized_backend_context_managerr    s   /46 6 6!!^3333	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  !!^333333s   	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 r@   r  rm   s     r1   ro   zFtest_directly_parameterized_backend_context_manager.<locals>.<genexpr>(  r  r3   c                 ,    g | ]}t          |          S r.   r   rm   s     r1   r2   zGtest_directly_parameterized_backend_context_manager.<locals>.<listcomp>)  r  r3   )rg   r  r  r   rf   re   r  r#   rj   r   rr   )rz   r  r  r   r   s        r1   3test_directly_parameterized_backend_context_managerr    sy   !!^3333 
-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  !!^333333s   BCCCc                  F    t          d           t          j                    S )Nr   )r   osgetpidr.   r3   r1   sleep_and_return_pidr  /  s    	"III9;;r3   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 r@   )r$   r  r   s     r1   ro   z"get_nested_pids.<locals>.<genexpr>;  sG       1 1"# <g&:;;== 1 1 1 1 1 1r3   )rg   r   r#   r  rr   r.   r3   r1   get_nested_pidsr  4  s    !!%55555 ::''))Q.... 81 1 1',Qxx1 1 1 1 1 1r3   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    r1   r  zMyBackend.get_nested_backendA  s$    Y%%88::1==r3   )rS   rT   rU   rV   r  __classcell__)r  s   @r1   r  r  ?  s>        DD> > > > > > > > >r3   r  back_compat_backend)r5   r4   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 r@   )r$   r  r   s     r1   ro   z6test_nested_backend_context_manager.<locals>.<genexpr>R  sF       (
 (
 %GO$$&&(
 (
 (
 (
 (
 (
r3   r   r   )r#   rr   r   set)rz   r=   
pid_groups	pid_groups       r1   #test_nested_backend_context_managerr  I  s     
		 , ,'XQ''' (
 (
2YY(
 (
 (
 
 

 $ 	, 	,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 r@   )rg   r*   r(   r#   r  )expected_backend_typeexpected_n_jobs     r1   check_nested_backendz?test_nested_backend_in_sequential.<locals>.check_nested_backendb  sW     $%%2G)HHHHH *.99zz++--??????r3   r   r|   c              3   T   K   | ]"} t                    t          d           V  #dS r   )r$   r+   )r/   r   r  s     r1   ro   z4test_nested_backend_in_sequential.<locals>.<genexpr>l  sL         	&$%%oq99     r3   r   c              3   J   K   | ]} t                              V  d S r@   r  )r/   r   r=   r  rj   s     r1   ro   z4test_nested_backend_in_sequential.<locals>.<genexpr>r  sL       
 
 *G())'6::
 
 
 
 
 
r3   rq   )r=   rj   rz   r  s   `` @r1   !test_nested_backend_in_sequentialr  Z  s4   @ @ @ HA    r     
 
	(	(	( 
 
 
 
 
 
 
 
2YY
 
 
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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        r1   check_nesting_levelr  x  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     r1   ro   z-test_backend_nesting_level.<locals>.<genexpr>  sN       . . 	%#$$WmQ??. . . . . .r3   r   r|   c              3   V   K   | ]#} t          t                    d           V  $dS r   r	  r
  s     r1   ro   z-test_backend_nesting_level.<locals>.<genexpr>  sN       ' ' 07.//JJ ' ' ' ' ' 'r3   )r  r#   rr   )rz   r  r  s   ` `r1   test_backend_nesting_levelr    s.    222-HA}--- . . . . .r. . .   
 
q	)	)	) ' '

 ' ' ' ' '!"II' ' ' 	' 	' 	'' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '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    r1   retrieval_contextz;test_retrieval_context.<locals>.MyBackend.retrieval_context  s"      FFaKFFEEEEEr3   N)rS   rT   rU   rn   supports_retrieve_callbackcontextmanagerr  )
contextlibr  s   r1   r  r    s=        %;"		"	 	 
#	"	 	 	r3   r  	retrievalc                 b     t          d          d t          |           D                       S )NrF   r|   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r  rm   s     r1   ro   z>test_retrieval_context.<locals>.nested_call.<locals>.<genexpr>  s0      !C!CQ+'"++a..!C!C!C!C!C!Cr3   rq   )ns    r1   nested_callz+test_retrieval_context.<locals>.nested_call  s2    !xq!!!!C!C%((!C!C!CCCCr3   rF   r|   c              3   H   K   | ]} t                    |          V  d S r@   r  )r/   rn   r  s     r1   ro   z)test_retrieval_context.<locals>.<genexpr>  sI       
 
 !GK  ##
 
 
 
 
 
r3   r   r=   r   )r  r   r'   r#   rr   r%   rn   r&   )rz   r  r  r  r  r  s    `  @@r1   test_retrieval_contextr    ss           $    k9555D D D 
		 ! 
 
 
 
1XX
 
 
 	
 	
 	
 o%%y>#q((((&&&q68q====! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   A+B44B8;B8rn  )r   r{   gQ?c                     t          t                    5  t          |            d d d            d S # 1 swxY w Y   d S )Nrn  )r   rY   r#   r  s    r1   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  )   rq  rj   r  )   rq  
2 * n_jobsr   )   rq  r   r   )r$  rq  r#  rX   )r!  rq  r#  r  c                     |||d}d t          |           D             } t          di |d t          |           D                       }||k    sJ d S )N)rj   rw  rn  c                 ,    g | ]}t          |          S r.   r   rm   s     r1   r2   z0test_dispatch_race_condition.<locals>.<listcomp>  s    222aq		222r3   c              3   P   K   | ]!} t          t                    |          V  "d S r@   rl   rm   s     r1   ro   z/test_dispatch_race_condition.<locals>.<genexpr>  s2       L L!3!3 L L L L L Lr3   r.   r   )n_tasksrj   rw  rn  paramsr   r   s          r1   test_dispatch_race_conditionr*    sz      &( (F225>>222H h     L LU7^^ L L LLLGhr3   c                      t          j                    } t          dd          }|j                            d          }|                                }|| k    sJ d S )NrF   r,   ri   rz   )r   get_start_methodr#   _backend_argsget)mp_start_methodr   rz   start_methods       r1   test_default_mp_contextr1    s`    )++O#4555Ao!!),,G++--L?******r3   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,   r7   r  i  rF   ri   c              3   h   K   | ],} t          t          j                  j                  V  -d S r@   )r$   r   dotT)r/   rn   rM   s     r1   ro   zAtest_no_blas_crash_or_freeze_with_subprocesses.<locals>.<genexpr>  sJ       (3 (3$%13(3 (3 (3 (3 (3 (3r3   )
r   r6   r   randomRandomStaterandnr4  r5  r#   rr   )r=   rngrM   s     @r1   .test_no_blas_crash_or_freeze_with_subprocessesr:    s     ### .)) )


#
#C 			$AF1acNNN (HAw''' (3 (3 (3 (3).q(3 (3 (3 3 3 3 3 3r3   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   r,  r   skip,UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_NO_MAINformatr   r   
executable)r=   codes     r1   2test_parallel_with_interactively_defined_functionsrE    s    
 ###(;(=(=(G(G 6 	7 	7 	77>>wGGD	t$b*, , , , , ,r3   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,   r7   win32zNot picklable with pickle)rF  r=   rG  joblib_root_folderzunpicklable_func_script.pyr   r=  r>  )SQUARE_MAINr   platformr   r@  )UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_MAINrB  r  pathdirnamejoblib__file__r   writer   rC  strpath)r=   rF  rG  tmpdirrD  	code_files         r1   0test_parallel_with_unpicklable_functions_in_argsrW  C  s     ...;&&#,'*A*A/0004;;+7??27??6?+K+KLL < N ND 899IOOD	*+R*, , , , , ,r3   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   r   rC  rT  rU  scripts     r1   7test_parallel_with_interactively_defined_functions_lokyr\    s\    
 [[CDDF
LLFGGG	(*     r3   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   r   rC  rT  rZ  s     r1   :test_parallel_with_interactively_defined_bound_method_lokyrb    s\    [[DEEF
LLJKKK3>6>:'>'5"$& & & & & &r3   c                  b    t          g           }  t          d          |           g k    sJ d S )NrF   r|   )iterr#   )exhausted_iterators    r1   %test_parallel_with_exhausted_iteratorrf    s;    b81011R777777r3   c                  J    t                       t          j        d           dS )z+Helper function to force gc in each worker.r   N)r   r]   r   r.   r3   r1   _cleanup_workerrh    s    OOOJrNNNNNr3   c                     t          | t          j                  st          dt	          |                     |                                 S )Nz#Expected np.memmap instance, got %r)
isinstancer   memmap	TypeErrorre   copy)rM   s    r1   check_memmaprn    sA    a## !=Q! ! 	!6688Or3   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)r  rn   s     r1   generate_arrayszBtest_auto_memmap_on_arrays_from_generator.<locals>.generate_arrays  sJ      q 	4 	4A'"BJ///!33333	4 	4r3   rF   r   rj   
max_nbytesr=   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r$   rn  r/   rM   s     r1   ro   z<test_auto_memmap_on_arrays_from_generator.<locals>.<genexpr>  V       @@ @@%&a  @@ @@ @@ @@ @@ @@r3   r   r   c              3   P   K   | ]!} t          t                    |          V  "d S r@   rx  ry  s     r1   ro   z<test_auto_memmap_on_arrays_from_generator.<locals>.<genexpr>  rz  r3   )r#   rA  r   r   r  r  )r=   rt  r   r  r   s        r1   )test_auto_memmap_on_arrays_from_generatorr|    sW   4 4 4
 @haAw??? @@ @@*9/#*>*>@@ @@ @@ @ @GW)F)FGG 8 8

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

%%h77778 8r3   c                     | S r@   r.   )args    r1   identityr    s    Jr3   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uint8rq  r  )	mmap_moderF   r|   c              3   R   K   | ]!} t          t                              V  "d S r@   )r$   r  )r/   r   rk  s     r1   ro   z.test_memmap_with_big_offset.<locals>.<genexpr>  s6       H Hq!2!2!26!:!: H H H H H Hr3   rS  r   )r   rT  mmapALLOCATIONGRANULARITYr   zerosrr  r   r   r#   rj  rk  offsetr  r  )rU  fnamesizeobjr  rk  s        @r1   test_memmap_with_big_offsetr    s     KK$$,E%D8D((("'$g*F*F*F
GCe%3'''F ha    H H H HC H H HHHGFfQi+++++!9d""""J!!#v.....r3   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 r@   rl   rm   s     r1   ro   zFtest_warning_about_timeout_not_supported_by_backend.<locals>.<genexpr>  s2      %L%LQogfooa&8&8%L%L%L%L%L%Lr3   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   rj  r   r  r   )r   r   s     r1   3test_warning_about_timeout_not_supported_by_backendr    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 r@   r.   )
input_listrz  r   s      r1   set_list_valuer     s    JuLr3   )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   	generatorr5   rj   	return_asr=   c              3   V   K   | ]#} t          t                    ||          V  $d S r@   )r$   r  )r/   rn   r  s     r1   ro   zPtest_parallel_return_order_with_return_as_generator_parameter.<locals>.<genexpr>  sS       +E +E67
Aq11+E +E +E +E +E +Er3   c              3   (   K   | ]\  }}||k    V  d S r@   r.   r/   vr  s      r1   ro   zPtest_parallel_return_order_with_return_as_generator_parameter.<locals>.<genexpr>  s*      ::$!QqAv::::::r3   )r#   rr   rr  r   rA  )rj   r  r  s     @r1   =test_parallel_return_order_with_return_as_generator_parameterr    s    
 qJ+XV{)+ + ++E +E +E +E;@88+E +E +EE EF
 &\\F::#j&"9"9::::::::::r3   c                 B    |rt          d           t          |           S )Nr#  )r   r   )edelays     r1   _sqrt_with_delayr    s      b			77Nr3   c                 n    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 t                       d S )
Ngenerator_unorderedr  c              3   `   K   | ])} t          t                    |d z  |dk              V  *dS )rF   r   N)r$   r  rm   s     r1   ro   zK_test_parallel_unordered_generator_returns_fastest_first.<locals>.<genexpr>   sY       'F 'F67! !!!Q$a11'F 'F 'F 'F 'F 'Fr3   r   c              3   6   K   | ]}t                    V  d S r@   )next)r/   r   r  s     r1   ro   zK_test_parallel_unordered_generator_returns_fastest_first.<locals>.<genexpr>#  s)      ==qd6ll======r3   	   r   rF   c              3   (   K   | ]\  }}||k    V  d S r@   r.   r  s      r1   ro   zK_test_parallel_unordered_generator_returns_fastest_first.<locals>.<genexpr>'  s;        1aQ     r3   )r#   rr   sortedrr  r   rA  r   )r=   rj   quickly_returnedexpected_quickly_returnedr  s       @r1   8_test_parallel_unordered_generator_returns_fastest_firstr    s    'XV/D%' ' ''F 'F;@99'F 'F 'FF FF ====E!HH=====!"d5B<<&8&8 8  8:JKK        	OOOOOr3   rF   
sequentialc                 &    t          | |           d S r@   )r  r=   rj   s     r1   7test_parallel_unordered_generator_returns_fastest_firstr  /  s     =WfMMMMMr3   zThis test requires daskc                     t          j        dd          5   |d          5  t          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 NrF   	n_workersthreads_per_workerdask)distributedClientr  )rj   rz   s     r1   Atest_parallel_unordered_generator_returns_fastest_first_with_daskr  9  s     
	A
 
 
 O OwvO O 	AvNNNO O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O Os3   AA A A	AA	AAA)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 r@   r$   r]   r   rm   s     r1   ro   z%test_abort_backend.<locals>.<genexpr>K  sH       14 14'(GDJ""14 14 14 14 14 14r3   rJ  )r   rl  r]   r#   )rj   r=   delayst_startdts        r1   test_abort_backendr  E  s     UbTCZF				 4 4)++0000 14 14,214 14 14 	4 	4 	44 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
w	B777777s   8A##A'*A'c                 `    t          j        t          d          t                    }d|d<   |S )Ng    Arq  Fr   )r   rr  intbool)r~  r  s     r1   get_large_objectr  Q  s*    WS\\...FF1IMr3   c                     t          || |          5 } |d t          d          D                       }t          |           t          |           ~t                       d d d            d S # 1 swxY w Y   d S )N)rj   r=   r  c              3   P   K   | ]!} t          t                    |          V  "d S r@   )r$   r  rm   s     r1   ro   z0_test_deadlock_with_generator.<locals>.<genexpr>\  s6      JJ13'"233A66JJJJJJr3   r   )r#   rr   r  r   )r=   r  rj   r   r  s        r1   _test_deadlock_with_generatorr  W  s     
%
' 
' 
' *2JJb		JJJJJVV 	                 s   AA00A47A4r  r  r  c                 (    t          | ||           d S r@   )r  )r=   r  rj   s      r1   test_deadlock_with_generatorr  e  s    
 "'9f=====r3   c                     t          j        dd          5   | d          5  t          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 r  )r  r  r  )rz   r  rj   s      r1   %test_deadlock_with_generator_and_daskr  m  s     
	A
 
 
 ? ?wv? ? 	&dIv>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s3   AAAA	AA		AA A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	            ~t                       d S )
N)This Parallel instance is already runningr  r=   r  c              3   P   K   | ]!} t          t                    d           V  "dS r   r   r   s     r1   ro   z/test_multiple_generator_call.<locals>.<genexpr>  s2      ::1^WU^^A&&::::::r3   r   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r  rm   s     r1   ro   z/test_multiple_generator_call.<locals>.<genexpr>  s0      ;;1A;;;;;;r3   r   rF   ZThe error should be raised immediatly when submitting a new task but it took more than 2s.)r   r  r#   rr   r]   r   )r=   r  rj   r   gr  gen2s          r1   test_multiple_generator_callr  y  s    
A
C 
C 
C < <FGyIIIH::b		:::::)++x;;c

;;;;;< < < < < < < < < < < < < < < 9;; 1$$$	$ %$$
 	
 OOOOOs   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   ~t                       d S )
Nr  c              3   P   K   | ]!} t          t                    d           V  "dS r*  r   r   s     r1   ro   z7test_multiple_generator_call_managed.<locals>.<genexpr>  s2      ;;A^WU^^B'';;;;;;r3   r   r  r  c              3   P   K   | ]!} t          t                    |          V  "d S r@   r  rm   s     r1   ro   z7test_multiple_generator_call_managed.<locals>.<genexpr>  s0      ==Q+'"++a..======r3   r   rF   r  )r#   rr   r]   r   r  r   )r=   r  rj   r   r  r  g2s          r1   $test_multiple_generator_call_managedr    sx    
&'%
' 
' 
' 
*2H;;r;;;;;)++LEG G G 	> 	>==%**=====B	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>
 y{{W$q(((( )(((
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  	
OOOOOs6   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 )	Nr  c              3   V   K   | ]$} t          t                    |d z            V  %dS rF   Nr  rm   s     r1   ro   z9test_multiple_generator_call_separated.<locals>.<genexpr>  sO       A A"#a1fA A A A A Ar3   r   c              3   V   K   | ]$} t          t                    |d z            V  %dS r  r  rm   s     r1   ro   z9test_multiple_generator_call_separated.<locals>.<genexpr>  sO       B B"#a1fB B B B B Br3   rJ  r  c              3   (   K   | ]\  }}||k    V  d S r@   r.   r/   r   rn   s      r1   ro   z9test_multiple_generator_call_separated.<locals>.<genexpr>  s*      88FCsax888888r3   c              3   (   K   | ]\  }}||k    V  d S r@   r.   r  s      r1   ro   z9test_multiple_generator_call_separated.<locals>.<genexpr>  s*      ==FCsax======r3   )r#   rr   r  r   rA  )r=   r  r  rj   r  r  s         r1   &test_multiple_generator_call_separatedr    s6    	AK@@@ A A',RyyA A A 	 	A 
B&'[	A	A	A B B',R}}B B B 
 
B +++1II+++BZZ88c!U2YY&7&788888888==c"eBmm&<&<==========r3   zbackend, error))r4   T)r5   F)r  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                       }t                       |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 )Nr4   zRequires multiprocessingrF   r  c              3   P   K   | ]!} t          t                    d           V  "dS r*  r   rm   s     r1   ro   z<test_multiple_generator_call_separated_gc.<locals>.<genexpr>  s2      77##777777r3   r   c                       t          d          S )NzGenerator collected)r   r.   r3   r1   <lambda>z;test_multiple_generator_call_separated_gc.<locals>.<lambda>  s    u-B'C'C r3   z The executor underlying Parallelr  c              3   V   K   | ]$} t          t                    |d z            V  %dS r  r  rm   s     r1   ro   z<test_multiple_generator_call_separated_gc.<locals>.<genexpr>  sO       @
 @
&'MGDMM!q&!!@
 @
 @
 @
 @
 @
r3   rJ  r  c              3   (   K   | ]\  }}||k    V  d S r@   r.   r  s      r1   ro   z<test_multiple_generator_call_separated_gc.<locals>.<genexpr>  s*      @@Q3!8@@@@@@r3   r   r   rp   r   r  )r   r   r@  r#   rr   weakreffinalizer   r  r   r]   r   r  r   rA  aliver   r  rE  )
r=   r  r  errorr   r  g_wrr  r  retrys
             r1   )test_multiple_generator_call_separated_gcr    sq    	6
./// 7kBBBH77U2YY77777AACCDDD 	$|#EFFFF!mm  
 A A
 )++?HQ;??? @
 @
+0R==@
 @
 @
 
 
 	///q		A@@#ar2*?*?@@@@@@@@@#A A A A A A A A A A A A A A A& 9;; 1$$$$ E
* 

2 *  9;; 1$$$$!x!##q(( !!!! )( 	"!s   B!EE	Ec                 R   |j         }t          dd| |          5 } |d t          j                            d          gdz  D                        t	          t          j        |                    dk    sJ  |d t          d          D                        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                         |d t          d          D                        t          d          D ](}t          j        |          s d S t          d	           )t          d
          )NrF   r   )rj   rv  r=   temp_folderc              3   P   K   | ]!} t          t                    |          V  "d S r@   rx  ry  s     r1   ro   z(test_memmapping_leaks.<locals>.<genexpr>  s5      	G	Gq
',


"
"	G	G	G	G	G	Gr3   r   r   c              3   N   K   | ] } t          t                                V  !d S r@   r$   rh  r   s     r1   ro   z(test_memmapping_leaks.<locals>.<genexpr>  s3      	7	7
"'/
"
"
$
$	7	7	7	7	7	7r3   r   r   z/temporary directory of Parallel was not removedru  c              3   P   K   | ]!} t          t                    |          V  "d S r@   rx  ry  s     r1   ro   z(test_memmapping_leaks.<locals>.<genexpr>#  s5      CC1glACCCCCCr3   c              3   N   K   | ] } t          t                                V  !d S r@   r  r   s     r1   ro   z(test_memmapping_leaks.<locals>.<genexpr>$  s3      33Qgo  333333r3   )
rT  r#   r   r6  r   r  listdirrr   r   AssertionError)r=   rU  r   r   s       r1   test_memmapping_leaksr     s    ^F 
q'$
& 
& 
& 8)*		G	GRY-=-=b-A-A,BQ,F	G	G	GGGG 2:f%%&&**** 	
	7	7eAhh	7	7	77778 8 8 8 8 8 8 8 8 8 8 8 8 8 8  3ZZ P Pz&!! 	Eb				NOOO 	a999AACC)9)9")=)=(>(BCCCCCCA33%((3333333ZZ P Pz&!! 	EEb				NOOOs   B B''B+.B+)Nr4   r5   c                      t          d|           d t          d          D                       }|d t          d          D             k    sJ d S )NrF   ri   c              3   H   K   | ]} t          d            |          V  dS )c                     | dz  S rE   r.   rG   s    r1   r  z2test_lambda_expression.<locals>.<genexpr>.<lambda>5  s
    !q& r3   Nr  rm   s     r1   ro   z)test_lambda_expression.<locals>.<genexpr>4  sJ       29 29)*!  !!!$$29 29 29 29 29 29r3   r   c                     g | ]}|d z  S )rF   r.   rm   s     r1   r2   z*test_lambda_expression.<locals>.<listcomp>6  s    111!qAv111r3   rq   )r=   r   s     r1   test_lambda_expressionr  .  sp     2ha111 29 29.3Bii29 29 29 9 9G11uRyy111111111r3   c                    d}d}d|z  t          d||           } |fdt          |          D                        |j        j        |j        j        k    sJ |j        j        |j        j        k    sJ  |fdt          |          D                        |j        j        |j        j        k    sJ |j        j        |j        j        k    sJ dS )	zCTest that a parallel backend correctly resets its batch statistics.rF   i  g       @r   )r   rj   r=   c              3   \   K   | ]&} t          t          j                            V  'd S r@   r  r/   rn   	task_times     r1   ro   z6test_backend_batch_statistics_reset.<locals>.<genexpr>B  8      >>gdj)$$>>>>>>r3   c              3   \   K   | ]&} t          t          j                            V  'd S r@   r  r   s     r1   ro   z6test_backend_batch_statistics_reset.<locals>.<genexpr>H  r  r3   N)r#   rr   r   _effective_batch_size_DEFAULT_EFFECTIVE_BATCH_SIZE_smoothed_batch_duration _DEFAULT_SMOOTHED_BATCH_DURATION)r=   rj   n_inputsr   r  s       @r1   #test_backend_batch_statistics_resetr	  9  s    FHXIFG<<<AA>>>>eHoo>>>>>>J,J45 5 5 5J/J78 8 8 8 A>>>>eHoo>>>>>>J,J45 5 5 5J/J78 8 8 8 8 8r3   c                    dD ]}t          t          |          j                  t          k    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   r4   )rj   r=   r  r  rp   r  r   )re   r#   r   r  r   r"   rj   )rz   rj   r   s      r1   $test_backend_hinting_and_constraintsr  O  s     
4 
4HF+++455GGGGF9555AJ#33333F;777AJ>1111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   9;EEE<F""F&)F&:;HH	H<I$$I(+I(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 r@   r.   r  s    r1   apply_asynczgtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomThreadingBackend.apply_async      Dr3   c                     |S r@   r.   r  s     r1   r(   zltest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomThreadingBackend.effective_n_jobs      Mr3   NrS   rT   rU   supports_sharedmemuse_threadsr  r(   r.   r3   r1   MyCustomThreadingBackendr    s=        !	 	 		 	 	 	 	r3   r   rF   r  r  r  r  c                   "    e Zd ZdZdZd Zd ZdS )\test_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomProcessingBackendFc                     d S r@   r.   r  s    r1   r  zhtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomProcessingBackend.apply_async  r  r3   c                     |S r@   r.   r  s     r1   r(   zmtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomProcessingBackend.effective_n_jobs  r  r3   Nr  r.   r3   r1   MyCustomProcessingBackendr"    s=        "	 	 		 	 	 	 	r3   r%  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   r   r   r%  outerrr   s           r1   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@ 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  r4   r&  r,   )r   rY   r#   r   r.   r3   r1   ,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  r2  s     r1   ro   z*_recursive_backend_info.<locals>.<genexpr>  sY       ' ' 5G344OO519OOO ' ' ' ' ' 'r3   r   )r#   re   r   rS   r  rr   )r2  rH  r   
this_levelr   s   ``   r1   r3  r3    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   t                      dk    rd}d}nd}d}|                                dz   }|df|dfd|fd|fg}||k    sJ d S )NrF   r|   r   r   r   Backendr   )r3  r)   title)rz   r=   backend_types_and_levelssecond_level_backend_type	max_leveltop_level_backend_typeexpected_types_and_levelss          r1   test_nested_parallelism_limitr=    s     
	#	#	# = =#:#<#< = = = = = = = = = = = = = = = {{a$7!		$6!	$]]__y8	#	"A&	i(	i(	! $'@@@@@@@s   )--c                 l   t          j        dd          5  t          j        t	          d          t          j                  }t          d          D ]e} | d          5  t          |          }d d d            n# 1 swxY w Y   t          |          dk    sJ t          d |D                       sJ f | d          5  t                      }d d d            n# 1 swxY w Y   t          |          dk    sJ t          d	 |D                       sJ 	 d d d            d S # 1 swxY w Y   d S )
NrF   r  g    cArq  r  )datar   c              3   (   K   | ]\  }}|d k    V  dS DaskDistributedBackendNr.   r/   r   r   s      r1   ro   z4test_nested_parallelism_with_dask.<locals>.<genexpr>  sH       @ @"4 77 @ @ @ @ @ @r3   c              3   (   K   | ]\  }}|d k    V  dS rA  r.   rC  s      r1   ro   z4test_nested_parallelism_with_dask.<locals>.<genexpr>  s@       < <tQ 33 < < < < < <r3   )
r  r  r   rr  r  r  rr   r3  r   r   )rz   r?  rn   r8  s       r1   !test_nested_parallelism_with_daskrE    sq    
	aA	>	>	> < <ws3xxrx000q 	@ 	@A N N+B+M+M+M(N N N N N N N N N N N N N N N/00A5555 @ @&>@ @ @ @ @ @ @ @ @ WV__ 	A 	A'>'@'@$	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A+,,1111 < <":< < < < < 	< 	< 	< 	<< < < < < < < < < < < < < < < < < <sZ   A
D)!A>2D)>BD)B?D)C D) C$	$D)'C$	(3D))D-0D-c                 ^     t                      d t          d          D                       S )z6A horrible function that does recursive parallel callsc              3   N   K   | ] } t          t                                V  !d S r@   )r$   _recursive_parallelrm   s     r1   ro   z&_recursive_parallel.<locals>.<genexpr>  s4      GG2g12244GGGGGGr3   rF   rq   )nesting_limits    r1   rH  rH    s+    8::GGeAhhGGGGGGr3   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|   r4   r   )TerminatedWorkerErrorz1Loky worker crash when serializing RecursionError)r   BaseExceptionrH  r   &joblib.externals.loky.process_executorrK  rj  r   r   r   RecursionError)rz   r=   r  excrK  s        r1   test_thread_bomb_mitigationrP  
  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  environr.  r   )env_varsvars     r1   _run_parallel_sumr\  '  sF    H3 , , 
s++\#&&&&r3   zNeed OpenMP helper compiledc                 p    t          d|           d t          d          D                       }t          t                      dz  d          }|D ]b\  }}||k    sJ |                                D ]@\  }}|                    d          r|t          |          k    sJ 0|dk    sJ |dk    sJ Acd S )NrF   ri   c              3   N   K   | ] } t          t                                V  !d S r@   )r$   r\  r   s     r1   ro   z-test_parallel_thread_limit.<locals>.<genexpr>3  sE       2 2)*"!""$$2 2 2 2 2 2r3   r   _THREADSrX  1)r#   rr   r  r)   itemsendswithr   )r=   r   expected_num_threadsworker_env_varsomp_num_threadsr   r   s          r1   test_parallel_thread_limitrf  0  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|++++|||||	$$ $r3   c                 z    t          t          d          5   | d           d d d            d S # 1 swxY w Y   d S )NzPlease install daskr  r  )r   rY   )rz   s    r1   )test_dask_backend_when_dask_not_installedrh  A  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      r1   r  z=test_zero_worker_backend.<locals>.ZeroWorkerBackend.configureM      1r3   Nc                      t          d          )NzNo worker availabler	   )rL   funccallbacks      r1   r  z?test_zero_worker_backend.<locals>.ZeroWorkerBackend.apply_asyncP  s    4555r3   c                     dS rd   r.   r  s     r1   r(   zDtest_zero_worker_backend.<locals>.ZeroWorkerBackend.effective_n_jobsS  rm  r3   r@   )rS   rT   rU   r  r  r(   r.   r3   r1   ZeroWorkerBackendrk  L  sF        	 	 		6 	6 	6 	6	 	 	 	 	r3   rr  z&ZeroWorkerBackend has no active workerr  rF   r|   c              3   P   K   | ]!} t          t                    |          V  "d S r@   r  rm   s     r1   ro   z+test_zero_worker_backend.<locals>.<genexpr>Y  s0      @@!{wr{{1~~@@@@@@r3   )r   r   r   r  r#   rr   )rz   rr  expected_msgs      r1   test_zero_worker_backendru  H  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 r@   )MY_GLOBAL_VARIABLEr.   r3   r1   check_globalsz@test_globals_update_at_each_parallel_call.<locals>.check_globalsd  s    !!r3   rF   r|   c              3   F   K   | ]} t                                V  d S r@   r  r/   rn   ry  s     r1   ro   z<test_globals_update_at_each_parallel_call.<locals>.<genexpr>j  E       14 14%&  14 14 14 14 14 14r3   zchanged valuec              3   F   K   | ]} t                                V  d S r@   r  r{  s     r1   ro   z<test_globals_update_at_each_parallel_call.<locals>.<genexpr>s  r|  r3   )rx  r#   rr   r  )workers_global_variablery  s    @r1   )test_globals_update_at_each_parallel_callr  \  s&    *" " " =??.....0ha000 14 14 14 14*/((14 14 14 4 4&'',<+===== )=??o----0ha000 14 14 14 14*/((14 14 14 4 4&''O+<<<<<<<r3   c                      dd l } | j                            dd          } | j        ||           ddlm}  |            S )Nr   r   )threadpool_info)numpyr6  r8  r4  threadpoolctlr  )r   rM   r  s      r1   _check_numpy_threadpool_limitsr  }  sV     		S!!A
BF1aLLL------?r3   c                     |D ]}|d         | d         k    r
|d         c S t          d                    |                     )Nfilepathnum_threadsz,An unexpected module was loaded in child:
{})rY   rB  )child_moduleparent_infoparent_modules      r1   _parent_max_num_threads_forr    s_    $ 0 0$Z(@@@ //// A
Df\**, , ,r3   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          r1   check_child_num_threadsr    su     ". ; ;1 	; 	;L%@k&+ &+"K)?@@+NH.(:::::		;; ;r3   )rF   r   r   r{   c                 R   t                      }t          |          dk    rt          j        d            t	          d|           d t          d          D                       }t          |           } t          t                      | z  d          }t          |||           d S )	Nr   &Need a version of numpy linked to BLASr   r4   r  c              3   N   K   | ] } t          t                                V  !d S r@   r$   r  rm   s     r1   ro   z;test_threadpool_limitation_in_child_loky.<locals>.<genexpr>  sU       GE GE67/.//11GE GE GE GE GE GEr3   rF   r   
r  r   r   r@  r#   rr   r(   r  r)   r  )rj   r  workers_threadpool_infosexpected_child_num_threadss       r1   (test_threadpool_limitation_in_child_lokyr    s     122K
;1CDDDDFxvFFF GE GE;@88GE GE GE  E  E f%%F!$Y[[F%:A!>!>4k68 8 8 8 8r3   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          |          }| t          t                      |z  d	          }n|}t          |||           d S )
Nr   r  r   r4   r  r|   c              3   N   K   | ] } t          t                                V  !d S r@   r  rm   s     r1   ro   z>test_threadpool_limitation_in_child_context.<locals>.<genexpr>  sM       ;I ;I:;3G23355;I ;I ;I ;I ;I ;Ir3   rF   r   r  )rz   rj   r  r  r  r  s         r1   +test_threadpool_limitation_in_child_contextr    sS    122K
;1CDDDD	/D	E	E	E I I#:86#:#:#: ;I ;I?DQxx;I ;I ;I $I $I I I I I I I I I I I I I I I I f%%F$%()>%B%B""%:"4k68 8 8 8 8s   1BBBvar_name)rS  rT  rR  c                 z   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)NTreusec                 @    t           j                            |           S r@   )r  rY  r.  )r  s    r1   _get_envz>test_threadpool_limitation_in_child_override.<locals>._get_env  s    z~~h'''r3   4r|   c              3   H   K   | ]} t                              V  d S r@   r  r/   rn   r  r  s     r1   ro   z?test_threadpool_limitation_in_child_override.<locals>.<genexpr>  sG       *; *;,-GHh''*; *; *; *; *; *;r3   rF   r4   r   r  c              3   H   K   | ]} t                              V  d S r@   r  r  s     r1   ro   z?test_threadpool_limitation_in_child_override.<locals>.<genexpr>  sG       .? .?01!!!(++.? .? .? .? .? .?r3   r`  )r   shutdownr  rY  r.  r#   rr   )rz   rj   r  original_var_valuer   r  s     `  @r1   ,test_threadpool_limitation_in_child_overrider    s    %%%..000( ( ( 116"
8)(&))) *; *; *; *; *;16q*; *; *; ; ;3*$$$$WV1555 	? 	?-hf--- .? .? .? .? .?5:1XX.? .? .? ? ?G	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 3*$$$$$ %
8$$$#5BJx    %
8$$#5BJx 5555s1   AD !4C!D !C%%D (C%)D !D:)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 r@   )r$   sum)r/   rn   rA   s     r1   ro   zAtest_loky_reuse_workers.<locals>.parallel_call.<locals>.<genexpr>  s1      CCAQCCCCCCr3   r   )rj   rA   s    @r1   parallel_callz.test_loky_reuse_workers.<locals>.parallel_call  sJ    "IICCCCrCCCCCCCCr3   Tr  r   )r   rr   )rj   r  first_executorr   executors        r1   test_loky_reuse_workersr    s    D D D
 M&*666N 2YY * *f(t444>)))))* *r3   )F)r   r   )rp   r@   )rV   r  r   r]   r  r  r   r5   	tracebackr   mathr   r   pickler   r  r   r,   r
   r   rQ  r   r   r   joblib._multiprocessing_helpersr   joblib.test.commonr   r   r   r   r   joblib.testingr   r   r   r   r   joblib.externals.lokyr   rW  r   posixImportError _openmp_test_helper.parallel_sumr   r  joblib._parallel_backendsr   r   r    r!   r"   joblib.parallelr#   r$   r%   r&   r'   r(   r)   r*   r+   rm  RETURN_GENERATOR_BACKENDSpopr  keysALL_VALID_BACKENDSPROCESS_BACKENDSPARALLEL_BACKENDShasattrrV  r6   r  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!  r'  r+  rG  rT  rY  rt  r  r  r  r  r  r  r   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  r*  r1  r:  rA  rE  rN  rL  SQUARE_LOCALSQUARE_LAMBDArW  rB  rO  rP  rR  rY  r\  ra  rb  rf  rh  rn  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/  r3  r=  rE  rH  no_coverrP  r\  rf  rh  ru  r  r  r  r  r  r  r  r  r.   r3   r1   <module>r     s    
			 



         & & & & & &                         " " " " " " ( ( ( ( ( (                 . . . . . . - - - - - - - - 3 3 3 3 3 3 5 5 5 5 5 5 5 5+ + + + + + + + + + + + + + >;;;;;;      LLLL   EEE>>>>>>>   LLL   KKK 8 7 7 7 7 7 6 6 6 6 6 6 < < < < < < 9 9 9 9 9 9 1 1 1 1 1 1 - - - - - - - - + + + + + + , , , , , , 5 5 5 5 5 5 7 7 7 7 7 7 7 7 9 9 9 9 9 9 9 9 9 9 *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%%7 7 &% '& ,+7 Y*++  ,+.  2 4 7 7 7     6 Y@@@AA  BA  0 0 0
 _h''x((? ? )( ('?
   9 9 9   Xyyy!!F F "!F Y)**/ / +*/: 
5 
5 
5 [///**5 5 +*  5& Y)**9 9 +*9 Y)**3 3 +* 3 Y())A" A" *) A"H Y!!E E "! E.' ' ' Y!!) / / / 0  J J J K
LM M M M "!  Y)**  +* :4 4 4 Y())3 3 *) 3= = =9 9 9
> > >
 Y)**CDD- - ED +* -*    +   
 
 
 Y*++H H ,+H$ Y)**X}}}%%: : &% +* :% % %	4 	4 	4 $=>>>9 9 ?>9; ; ;* $5QQQ#7     ' '--EE!HH---  
 Y899Y)?;<<4 4 =< :9 4(    #4    Y*:;<<4 4 =<4( Y*:;<<4 4 =<4(  
1 1 1> > > > >)5 > > >  / ; ; ; Y 0 0 0 1 1Y*:;<<
, 
, =<1 1 
, X}}}%%Y)**Y*:;<<
 
 =< +* &% 
47 7 7 _/00_/00Y*:;<<' ' =< 10 10 ' Y*:;<<%e}55! ! 65 =< !> \===))( ( *)(
 8
/ 
/ 
/0 0 0 0 + + + Y())3 3 *)  3.0 ,  Y())	, 	, *) 	,- )@
 Y("*BB7)LMM][,FGG "?"?"?@@, , A@ HG NM , (9P FbgooGOOFO$$& &F ' 'Q 6X 
 
 
=, FbgooGOOFO$$& &F ' '- :4 & & &8 8 8
     Y())8 8 *)  80   	/ 	/  	/	 	 	  
 999--; ; .-;    ( Aq6** Y566,GHHN N IH 	 +*N Ar7++Y*:;<<t$=>>>O O ?> =< ,+O Y*++X~~~&&  '& ,+     Y122[;(=>??X~~~&&> > '& @? 32 > Ar7++[;(=>??Y*:;<<t$=>>>? ? ?> =< @? ,+ 
? Y122[;(=>??X~~~&&  '& @? 32. Y122[;(=>??X~~~&&  '& @? 320 Y122][*?@AA][*?@AAX~~~&&> > '& BA BA 32>*         
 ][*?@AA][*?@AA/" /" BA BA /"d Y())(P (P *)  (PV Y%'Zt[!!... 2 2	 2 Y())9 9 *) 9( Y*:;<<+ + =< +\ Y*:;<<3K 3K =<3KlE E E*	' 	' 	' 	' Y-..Y*:;<<A A =< /. A* Y*:;<<t$=>>>< < ?> =< <&H H H H
 Y*:;<<&+1F + +  =< 
+0' ' ' Y2>$vGG%BCCC$ $ DC HG$ Y*:;<<4(ABBB  CB =<
 Y*:;<<A A =<A&= = =B  , , ,	; 	; 	; X~~~&&8 8 '&  8& $ooo66X2wY*:;<<8 8 =<   76  
82 X2wZ - - - . . Y*:;<<6 6 =<. .   6> Xzzz""* * #" * * *s6   B B! B!%B, ,B65B6:B? ?C	C	