Ë
    æÿæi1 ã            	       óœ  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlZddlZdd	lmZmZmZ dd
lmZ ddlmZmZmZmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z% e�ddl&m'Z' ddl(m)Z) 	 ddl*Z*	 ddl,m-Z- 	 ddl.Z.ddl/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z:mZm;Z;m<Z<m=Z=  e6j|                  «       Z?e?j�                  dd«       dg eA e6j„                  «       «      z   ZCeCe6D � cg c]  }  e6|    «       ‘Œ c} z  ZCe€g ZDnddgZDeDdgz   ZE eFed«      r!eCj�                   ej�                  d«      «       d„ ZId„ ZJd„ ZKd„ ZL G d„ deM«      ZNdàd„ZOd „ ZPdád!„ZQd"„ ZRd#„ ZSd$„ ZTd%„ ZU e"d&e<e;g«      ej¬                  jE                  d'd(d) e:d)¬*«      fd+gg d,¢¬-«      ed.„ «       «       «       ZW e"d/eC«       e"d0g d1¢«       e"d2g d3¢«      d4„ «       «       «       ZX e"d/eC«       e"d0dd5g«      d6„ «       «       ZY e"d/eC«      d7„ «       ZZd8„ Z[e e"d9g d:¢«      d;„ «       «       Z\e e"d/g d<¢«      d=„ «       «       Z]d>„ Z^ e"d?e6«       e"d@e6«      dA„ «       «       Z_dB„ Z`edC„ «       ZadD„ Zb e"d0g dE¢«      dF„ «       Zc e"d/eE«      dG„ «       ZdedH„ «       Zeee e"dIg dJ¢«       e"dKddLg«      dM„ «       «       «       «       Zf e"d/eE«      dN„ «       Zge e"d/eE«      dO„ «       «       Zhe e"d/ eie?«      dPhz
  «       e"dQdRdSg«      dT„ «       «       «       Zje e"d/eD«      dU„ «       «       Zke e"d/e6«      dV„ «       «       ZldW„ Zm e"d/e6«       e"dXdg dY¢fdZg d[¢fg«      d\„ «       «       Zne e"d/eE«      d]„ «       «       Zod^„ Zpe e"d/eD«      d_„ «       «       Zqd`„ Zrda„ Zsdb„ Zte e"d/eE«      ej¬                  jë                  dc¬d«      de„ «       «       «       Zv G df„ dge3«      Zwdh„ Zx e"d/eC«      di„ «       Zye e"d/eE«       e"d0g dj¢«      dk„ «       «       «       Zzdl„ Z{dm„ Z| e$edudn¬d«      do„ «       Z}dp„ Z~eEdd Ze�j                   e�dq«      D �cg c]  }dr|z  ‘Œ	 c}«       e e"d/e«       e"d&e;e<g«      ds„ «       «       «       Z‚ G dt„ due3«      Zƒ e"d&e<e;g«      dv„ «       Z„ e"d&e<e;g«      dw„ «       Z…dx„ Z†dy„ Z‡ G dz„ d{e�j                  j`                  «      Z‰ e=d|e‰«       e e"d/g d}¢«       e"d&e<e;g«      d~„ «       «       «       ZŠe e"d0g d¢«       e"d/eE«       e"d&e<e;g«      d€„ «       «       «       «       Z‹d�„ ZŒe e"d‚eE«       e"dƒeE«       e"d&e<e;g«      d„„ «       «       «       «       Z�e e"d&e<e;g«       e"d…d†dg«      d‡„ «       «       «       ZŽ e"dˆg d‰¢«      dŠ„ «       Z� e"d‹g dŒ¢«      d�„ «       Z�edŽ„ «       Z‘ee e"d/eD«      d�„ «       «       «       Z’d�Z“e e"d/eD«      d‘„ «       «       Z”d’Z•d“Z–d”Z—d•Z˜e e"d/eDe€g ndgz   «       e"d–e–e—e˜g«       e"d—g d˜¢«      d™„ «       «       «       «       Z™dš�j5                  e�j6                  �j9                  e�j6                  �j9                  e�j:                  «      «      ¬›«      Zžedœ„ «       ZŸd��j5                  e�j6                  �j9                  e�j6                  �j9                  e�j:                  «      «      ¬›«      Z edž„ «       Z¡dŸ„ Z¢d „ Z£ee e"d/eD«      d¡„ «       «       «       Z¤d¢„ Z¥eed£„ «       «       Z¦d¤„ Z§d¥„ Z¨ej¬                  jE                  d0g d¦¢«      d§„ «       Z©d¨„ Zªd©„ Z«ej¬                  jE                  d0d5dZg«      e e"d/ eie?«      dPhz
  «      dª„ «       «       «       Z¬ e"d/eC«       e"d0g d«¢«      d¬„ «       «       Z­d­„ Z®d®„ Z¯e e"d/e?«       e"dQdRdSg«       e"d0g d«¢«      d¯„ «       «       «       «       Z° e"d/e?«       e"dQdRdSg«       e"d0g d«¢«      d°„ «       «       «       Z± e"d/e?«       e"dQdRdSg«       e"d0g d«¢«      d±„ «       «       «       Z² e"d/e?«       e"d²dRdSg«       e"d³dRdSg«       e"d0g d«¢«      d´„ «       «       «       «       Z³ e"dµg d¶¢«       e"d²dRdSg«       e"d³dRdSg«      d·„ «       «       «       Z´ee e"d/eD«      d¸„ «       «       «       Zµ e"d/e€ddgng d¹¢«      dº„ «       Z¶e e"d/eD«      d»„ «       «       Z·e e"d&e<e;g«      d¼„ «       «       Z¸ e"d0dd5g«       e"d½g d¾¢«      d¿„ «       «       Z¹ e"d&e<e;g«      dÀ„ «       ZºdÁ„ Z»dâdÂ„Z¼e e"d/ddg«       e"d&e<e;g«      dÃ„ «       «       «       Z½dãdÄ„Z¾ej¬                  �j~                   e"d&e<e;g«       e"d/e€dgnddg«      dÅ„ «       «       «       ZÀdÆ„ ZÁ e"d/e�ddgndg«       e$e-du dÇ¬d«      dÈ„ «       «       ZÂ e"d&e<e;g«       e$e.dudÉ¬d«      dÊ„ «       «       ZÃ e"d&e<e;g«      dË„ «       ZÄdÌ„ ZÅdÍ„ ZÆdÎ„ ZÇdÏ„ ZÈee e"d0g dÐ¢«      dÑ„ «       «       «       ZÉee e"dÒg dÓ¢«       e"d0d5d)g«       e"d&e<e;g«      dÔ„ «       «       «       «       «       ZÊe e"d0d5d)g«       e"dÕg dÖ¢«       e"d&e<e;g«      d×„ «       «       «       «       ZËe e"d0g dØ¢«      dÙ„ «       «       ZÌdÚ„ ZÍdàdÛ„ZÎe e"d0d5dZg«       e"d/eD«       e"d&e<e;g«      dÜ„ «       «       «       «       ZÏe e"d0d5dZg«       e"d/eD«      dÝ„ «       «       «       ZÐeej¬                  jE                  d0d5dZg«      dÞ„ «       «       ZÑeej¬                  jE                  d0d5dZg«      dß„ «       «       ZÒy# e+$ r dZ*Y �
Œ˜w xY w# e+$ r dZ-Y �
ŒŸw xY w# e+$ r dZ.Y �
Œ¨w xY wc c} w c c}w )äz
Test the parallel module.
é    N)Únullcontext)Úsqrt©ÚTimeoutError)ÚPicklingError)Úsleep)Úformat_exception)ÚdumpÚloadÚparallel)Úmp)ÚIS_GIL_DISABLEDÚnpÚwith_multiprocessingÚ
with_numpy)Úcheck_subprocess_callÚparametrizeÚraisesÚskipifÚwarns)Úget_reusable_executor)ÚQueueé   )Úparallel_sum)ÚLokyBackendÚMultiprocessingBackendÚParallelBackendBaseÚSequentialBackendÚThreadingBackend)	ÚBACKENDSÚParallelÚ	cpu_countÚdelayedÚeffective_n_jobsr   Úparallel_backendÚparallel_configÚregister_parallel_backendÚmultiprocessingÚlokyÚ	threadingÚget_contextÚspawnc                  ó0   — t         t        j                     S ©N)r    r   ÚDEFAULT_BACKEND© ó    ún/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/joblib/test/test_parallel.pyÚget_default_backend_instancer3   ^   s   € ô
 ”H×,Ñ,Ñ-Ð-r1   c           	      ó2   — t        | dt        | dd «      «      S )NÚ_poolÚ_workers)Úgetattr©Úbackends    r2   Úget_workersr:   f   s   € Ü�7˜G¤W¨W°jÀ$Ó%GÓHÐHr1   c                 ó   — | |z  S r.   r0   )ÚxÚys     r2   Údivisionr>   j   s   € Øˆq‰5€Lr1   c                 ó   — | dz  S ©Né   r0   ©r<   s    r2   ÚsquarerC   n   s   € Øˆa‰4€Kr1   c                   ó   — e Zd ZdZd„ Zy)ÚMyExceptionWithFinickyInitz,An exception class with non trivial __init__c                  ó   — y r.   r0   )ÚselfÚaÚbÚcÚds        r2   Ú__init__z#MyExceptionWithFinickyInit.__init__u   s   € Ør1   N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__rL   r0   r1   r2   rE   rE   r   s
   „ Ù6ór1   rE   Fc                 ó<   — | dk(  r|rt        dddd«      ‚t        ‚| S )Né   rH   rI   rJ   rK   )rE   Ú
ValueError)r<   Úcustom_exceptions     r2   Úexception_raiserrV   y   s4   € ØˆA‚vñ  ô ' s¨C°°cÓ:ð	
ô ð	
ð
 €Hr1   c                 ó8   — t        j                  d«       t        ‚)Ngš™™™™™©?)Útimer   ÚKeyboardInterruptrB   s    r2   Úinterrupt_raiserrZ   ƒ   s   € Ü‡J�JˆtÔÜ
Ðr1   c                 ó   — | dz  |z   |z   S )zNA module-level function so that it can be spawn with
    multiprocessing.
    rA   r0   )r<   r=   Úzs      r2   Úfr]   ˆ   s   € ð ˆa‰4�!‰8�a‰<Ðr1   c                  óB   — t        t        j                  «       d   «      S ©Nr   )Útyper   Úget_active_backendr0   r1   r2   Ú_active_backend_typerb   �   s   € Ü”×+Ñ+Ó-¨aÑ0Ó1Ð1r1   c                 óH   —  t        | |¬«      d„ t        d«      D «       «      S )N©Ún_jobsr9   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   ©r#   rC   ©Ú.0Úis     r2   Ú	<genexpr>z parallel_func.<locals>.<genexpr>”   s   è ø€ ð :Ù$,˜qˆŒ”‹˜×¡Hùó   ‚!é   ©r!   Úrange)Úinner_n_jobsr9   s     r2   Úparallel_funcrq   “   s)   € Ø9Œ8˜<°Ô9ñ :Ü$)¨!¤Hó:ó ð r1   c                  ó"   — t        «       dkD  sJ ‚y r_   )r"   r0   r1   r2   Útest_cpu_countrs   š   s   € Ü‹;˜Š?Ð‰?r1   c                  ó"   — t        «       dkD  sJ ‚y r_   ©r$   r0   r1   r2   Útest_effective_n_jobsrv   ž   s   € ÜÓ Ò!Ð!Ñ!r1   Úcontextzbackend_n_jobs, expected_n_jobs)rm   rm   éÿÿÿÿ©re   ©Nr   )zpositive-intznegative-intÚNone)Úidsc                 óˆ   —  | d|¬«      5  t        d ¬«      |k(  sJ ‚	 d d d «       t        d ¬«      dk(  sJ ‚y # 1 sw Y   ŒxY w)Nr*   ry   r   ru   )rw   Úbackend_n_jobsÚexpected_n_jobss      r2   Útest_effective_n_jobs_Noner€   ¢   sF   € ñ 
� ^Ö	4ô   tÔ,°Ò?Ð?Ñ?÷ 
5ô
  4Ô(¨AÒ-Ð-Ñ-÷ 
5Ð	4ús	   ‹8¸Ar9   re   )r   rA   rx   éþÿÿÿÚverbose)rA   é   éd   c                 ó    — t        d«      D �cg c]  }t        |«      ‘Œ c} t        || |¬«      d„ t        d«      D «       «      k(  sJ ‚y c c}w )Né   ©re   r9   r‚   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rg   ©ri   r<   s     r2   rk   z'test_simple_parallel.<locals>.<genexpr>¾   s   è ø€ Ð+¡(˜Q€o„gŒfƒo�a×¡(ùrl   ©ro   rC   r!   )r9   re   r‚   r<   s       r2   Útest_simple_parallelr‹   ¸   sT   € ô  % QœxÓ(™x˜!ŒF�1�I˜xÑ(ð -¬HØ˜w°ô-á+¤%¨¤(Ó+ó-,ò ,ð ,ñ ,ùÒ(s   ŽArA   c           	      ó   — d}t        j                  d«      } G d„ dt        «      } ||| d¬«      } |t        |«      D �cg c]  } t	        t
        «      |«      ‘Œ c}«       t        «       }|j                  D ]=  }|j                  |«      x}	sŒ|	j                  «       \  }
}|j                  ||
z
  «       Œ? t        |«      dk(  sJ ‚y c c}w )Nr„   z(Done\s+\d+ out of \d+ \|)c                   ó   — e Zd Zg Zd„ Zy)ú/test_parallel_pretty_print.<locals>.ParallelLogc                 ó:   — | j                   j                  |«       y r.   )ÚmessagesÚappend)rG   Úmsgs     r2   Ú_printz6test_parallel_pretty_print.<locals>.ParallelLog._printÊ   s   € Ø�M‰M× Ñ  Õ%r1   N)rN   rO   rP   r�   r“   r0   r1   r2   ÚParallelLogrŽ   Ç   s   „ Øˆó	&r1   r”   i'  r‡   r   )ÚreÚcompiler!   ro   r#   r]   Úsetr�   ÚsearchÚspanÚaddÚlen)r9   re   Ún_tasksÚpatternr”   Úexecutorrj   ÚlensÚmessageÚsrH   rI   s               r2   Útest_parallel_pretty_printr¢   Á   s¹   € ð €GÜ�j‰jÐ6Ó7€Gô&”hô &ñ  &°'À5ÔI€HÙ¤U¨7¤^Ó4¡^ ˆjŒg”a‹j˜�m ^Ñ4Ô5Ü‹5€DØ×$Ô$ˆØ—‘˜wÓ'Ð'ˆ1Ñ'Ø—6‘6“8‰DˆAˆqØ�H‰H�Q˜‘U�Oð %ô ˆt‹9˜Š>Ð‰>ùò 5s   ÁCc                 ó.  — |j                  t        j                  «       dd¬«       t        j                  d¬«      5 } t        d| ¬«      d„ t        d	«      D «       «      }|g d
¢k(  sJ ‚	 d d d «       D �cg c]5  }dt        |j                  «      vrt        |j                  t        «      s|‘Œ7 }}| dv st        | t        «      r)d}|D �cg c]  }|t        |j                  «      vsŒ|‘Œ }}t        |«      dk(  sJ ‚y # 1 sw Y   Œ—xY wc c}w c c}w )NÚnameÚ!some_new_name_for_the_main_thread)Útargetr¤   ÚvalueT©ÚrecordrA   rd   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rg   r‰   s     r2   rk   z6test_main_thread_renamed_no_warning.<locals>.<genexpr>ä   s   è ø€ ð 6
Ù(0 1ˆOŒG”F‹O˜A×©ùrl   rm   )r   r   é   zworker timeout)Nr(   z3multi-threaded, use of fork() may lead to deadlocksr   )Úsetattrr*   Úcurrent_threadÚwarningsÚcatch_warningsr!   ro   Ústrr    Ú
isinstanceÚDeprecationWarningr   r›   )r9   ÚmonkeypatchÚwarninfoÚresultsÚwÚmessage_parts         r2   Ú#test_main_thread_renamed_no_warningr¸   ×   s  € ð ×ÑÜ×'Ñ'Ó)ØØ1ð ô ô 
×	 Ñ	 ¨Õ	-°Ø5”( !¨WÔ5ñ 6
Ü(-¨a¬ó6
ó 
ˆð š)Ò#Ð#Ñ#÷	 
.ñ óáˆAØ¤3 q§y¡y£>Ñ1Ü˜1Ÿ9™9Ô&8Ô9ò 	
Øð ð ð Ð+Ñ+¬zØÔ'ô0ð MˆÙ'ÓN™x˜!¨<¼sÀ1Ç9Á9»~Ò+M’A˜xˆÐNô
 ˆx‹=˜AÒÐÑ÷9 
.Ð	-üòùò Os   ½-DÁ7:DÃDÃ*DÄD
c                 ó`  — t        j                  d¬«      5 }t        j                  d«       t        | |¬«       d d d «       D �cg c]  }|j                  ‘Œ }}|r=|r:t        d„ |D «       «      }t        rt        |«      dk\  nt        |«      dk(  }|xr |S y|rJ ‚y# 1 sw Y   ŒfxY wc c}w )NTr¨   Úalways)r9   rp   c              3   ó>   K  — | ]  }d |j                   d   v –— Œ y­w)zbacked parallel loops cannotr   N)Úargs)ri   Úeachs     r2   rk   z)_assert_warning_nested.<locals>.<genexpr>
  s"   è ø€ ð 'ÙKSÀ4Ð.°$·)±)¸A±,Ô>É8ùó   ‚r   F)r®   r¯   Úsimplefilterrq   r    Úallr   r›   )r9   rp   Úexpectedr´   r¶   Úwarnings_are_correctÚwarnings_have_the_right_lengths          r2   Ú_assert_warning_nestedrÄ     s°   € Ü	×	 Ñ	 ¨Õ	-°Ü×Ñ˜hÔ'Ü˜g°LÕA÷ 
.ñ $,Ó,¡8˜a�—	“	 8€HÐ,ÙÙÜ#&ñ 'ÙKSó'ó $Ð õ '6”�H“ Ò"¼3¸x»=ÈAÑ;Mð +ð (ÒJÐ,JÐJàáÐˆ|Ø÷) 
.Ð	-üò -s   —#BÁB+ÂB(z%parent_backend,child_backend,expected))r)   r(   T)r)   r)   F)r(   r(   T)r(   r)   T)r*   r(   T)r*   r)   Tc                 óÞ   ‡‡—  t        d| ¬«      ˆfd„t        d«      D «       «        t        d| ¬«      ˆˆfd„t        d«      D «       «      }| dk(  rt        |«      sJ ‚y t        |«      sJ ‚y )NrA   rd   c              3   óN   •K  — | ]  } t        t        «      ‰d d¬«      –— Œ y­w)r   F©r9   rp   rÁ   N©r#   rÄ   ©ri   Ú_Úchild_backends     €r2   rk   z0test_nested_parallel_warnings.<locals>.<genexpr>(  s6   øè ø€ ð /ñ ˆAð 	(ŒÔ&Ó'Ø!°¸E÷	
ð 	
ñ ùó   ƒ"%r†   c              3   óN   •K  — | ]  } t        t        «      ‰d ‰¬«      –— Œ y­w)rA   rÇ   NrÈ   )ri   rÊ   rË   rÁ   s     €€r2   rk   z0test_nested_parallel_warnings.<locals>.<genexpr>0  s6   øè ø€ ð 5ñ ˆAð 	(ŒÔ&Ó'Ø!°¸H÷	
ð 	
ñ ùrÌ   r*   )r!   ro   ÚanyrÀ   )Úparent_backendrË   rÁ   Úress    `` r2   Útest_nested_parallel_warningsrÑ     sq   ù€ ð /„H�A˜~Ô.ó /ô �q”ó	/ô ð 5Œ(˜! ^Ô
4ô 5ô �q”ó	5ó €Cð ˜Ò$Ü�3Œxˆ‰xä�3Œxˆ‰xr1   )r)   r(   r*   c                 óŽ   — dg}d„ }t        j                  ||f¬«      }|j                  «        |j                  «        |d   sJ ‚y )NFc                 óè   — t        j                  d¬«      5 } t        d¬«      d„ t        d«      D «       «       d d d «       t	        t        «      «       t        |«      dk(  | d<   y # 1 sw Y   Œ/xY w)NTr¨   rA   ry   c              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­w)çš™™™™™¹?N©r#   r   ©ri   rÊ   s     r2   rk   zPtest_background_thread_parallelism.<locals>.background_thread.<locals>.<genexpr>F  s   è ø€ ÐE¹H°q˜~œw¤u›~¨c×2¹Hùrl   r«   r   )r®   r¯   r!   ro   Úprintr›   )Úis_run_parallelr´   s     r2   Úbackground_threadz=test_background_thread_parallelism.<locals>.background_threadD  sX   € Ü×$Ñ$¨DÕ1°XØŒH˜AÔÑE¼EÀ!¼HÓEÔE÷ 2äŒc�(‹mÔÜ  ›]¨aÑ/ˆ˜Ò÷ 2Ð1ús   —#A(Á(A1)r¦   r¼   r   )r*   ÚThreadÚstartÚjoin)r9   rÙ   rÚ   Úts       r2   Ú"test_background_thread_parallelismrß   ?  sH   € ð �g€Oò0ô 	×ÑÐ 1¸Ð8JÔK€AØ‡G�G„IØ‡F�F„HØ˜1ÒÐÑr1   c                 óJ   —  t        d| ¬«      d„ t        d«      D «       «       y )NrA   rd   c              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­w©ç{®Gáz„?Nrg   r×   s     r2   rk   znested_loop.<locals>.<genexpr>Q  s   è ø€ Ð'PÁxÀ!¨¬´«¸×(=Áxùrl   rn   r8   s    r2   Únested_looprä   P  s   € Ø'„H�A˜wÔ'Ñ'PÄuÈQÄxÓ'PÕPr1   rË   rÏ   c                 óP   ‡—  t        d| ¬«      ˆfd„t        d«      D «       «       y )NrA   rd   c              3   óH   •K  — | ]  } t        t        «      ‰«      –— Œ y ­wr.   )r#   rä   rÉ   s     €r2   rk   z#test_nested_loop.<locals>.<genexpr>W  s"   øè ø€ ð /Ù5=°ÐŒ”Ó˜]×+±Xùó   ƒ"rn   )rÏ   rË   s    `r2   Útest_nested_looprè   T  s'   ø€ ð /„H�A˜~Ô.ó /Ü5:¸1´Xó/õ r1   c                 ó   — t         ‚r.   )rT   r8   s    r2   Úraise_exceptionrê   \  s   € Ü
Ðr1   c            	      óð   — t        t        «      5  t        dd¬«      5 }  |  t        t        «      d«       t        t
        «      d«      g«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)NrA   r)   rd   )r   rT   r!   r#   rä   rê   )r   s    r2   Ú)test_nested_loop_with_exception_with_lokyrì   `  sZ   € ä	”
Õ	Ü˜Q¨Õ/°8ÙÐ*”gœkÓ*¨6Ó2Ð4L´G¼OÓ4LÈVÓ4TÐUÔV÷ 0÷ 
Ð	ß/Ð/ú÷ 
Ð	ús"   �A,ž1A ÁA,Á A)	Á%A,Á,A5c                  óŒ   ‡ — t        d¬«      Š  t        dd¬«      ˆ fd„t        d«      D «       «       ‰ j                  «       sJ ‚y)z1Input is mutable when using the threading backendr†   )ÚmaxsizerA   r*   rd   c              3   óT   •K  — | ]  } t        ‰j                  «      d «      –— Œ! y­w©r   N)r#   Úput)ri   rÊ   Úqs     €r2   rk   z1test_mutate_input_with_threads.<locals>.<genexpr>j  s!   øè ø€ Ð+PÁxÀ!¨N¬G°A·E±E«N¸1×,=Áxùs   ƒ%(N)r   r!   ro   Úfull)rò   s   @r2   Útest_mutate_input_with_threadsrô   g  s5   ø€ ä�aÔ€AØ+„H�A˜{Ô+Ó+PÄuÈQÄxÓ+PÔPØ�6‰6Œ8€O‰8r1   )r   rA   rm   c                 ó’   — t        d«      }|D �cg c]  }t        |d¬«      ‘Œ c} t        | ¬«      d„ |D «       «      k(  sJ ‚yc c}w )z.Check the keyword argument processing of pmap.é
   r   ©r=   ry   c              3   óJ   K  — | ]  } t        t        «      |d ¬«      –— Œ y­w©r   r÷   N©r#   r]   r‰   s     r2   rk   z'test_parallel_kwargs.<locals>.<genexpr>r  s$   è ø€ ð ?Ù$'˜qˆ
Œ”‹
�1˜×Ð¡Cùó   ‚!#N)ro   r]   r!   )re   Úlstr<   s      r2   Útest_parallel_kwargsrý   n  sS   € ô �‹)€CÙ"Ó#™s˜!ŒAˆa�1ŽI˜sÑ#Ð'>¤x°vÔ'>ñ ?Ù$'ó?ó (ò ð ñ ùÒ#s   �Ac                 óò  — t        d«      }|D �cg c]  }t        |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 «       t        �t        j                  «      �J ‚| d„ |D «       «      k(  sJ ‚t        �t        |j                  «      �J ‚y y c c}w # 1 sw Y   Œ^xY w)	Nrö   r   r÷   r«   rd   c              3   óJ   K  — | ]  } t        t        «      |d ¬«      –— Œ y­wrù   rú   r‰   s     r2   rk   z3test_parallel_as_context_manager.<locals>.<genexpr>ƒ  ó!   è ø€ Ð=¹°A˜ZœW¤Q›Z¨¨Q×/Ð/¹ùrû   c              3   óJ   K  — | ]  } t        t        «      |d ¬«      –— Œ y­wrù   rú   r‰   s     r2   rk   z3test_parallel_as_context_manager.<locals>.<genexpr>„  r   rû   c              3   óJ   K  — | ]  } t        t        «      |d ¬«      –— Œ y­wrù   rú   r‰   s     r2   rk   z3test_parallel_as_context_manager.<locals>.<genexpr>�  s!   è ø€ Ð9±S°˜œ¤› A¨×+Ð+±Sùrû   )ro   r]   r!   Ú_backendr   r:   )r9   rü   r<   rÁ   ÚpÚmanaged_backends         r2   Ú test_parallel_as_context_managerr  w  sú   € ä
�‹)€CÙ#&Ó'¡3˜a”�!�q–	 3€HÐ'ä	˜ GÕ	,°ð Ÿ*™*ˆð ™1Ñ=¹Ó=Ó=Ò=Ð=Ð=Ø™1Ñ=¹Ó=Ó=Ò=Ð=Ð=ô ˆ>Ü˜Ó/´;¸q¿z¹zÓ3JÑJÐJÐJ÷ 
-ô  
€~Ü˜1Ÿ:™:Ó&Ð.Ð.Ð.ð ‘qÑ9±SÓ9Ó9Ò9Ð9Ð9Ü	€~Ü˜1Ÿ:™:Ó&Ð.Ð.Ñ.ð ùò/ (ç	,Ð	,ús   �C(³AC-Ã-C6c                  óº   ‡ —  G d„ dt         «      Š t        t        d¬«      5   t        dd¬«      ˆ fd„t	        d	«      D «       «       d
d
d
«       y
# 1 sw Y   y
xY w)z`Check that pmap captures the errors when it is passed an object
    that cannot be pickled.
    c                   ó   — e Zd Zd„ Zy)ú1test_parallel_pickling.<locals>.UnpicklableObjectc                 ó   — t        d«      ‚)NÚ123)ÚRuntimeError©rG   s    r2   Ú
__reduce__z<test_parallel_pickling.<locals>.UnpicklableObject.__reduce__œ  s   € Ü˜uÓ%Ð%r1   N)rN   rO   rP   r  r0   r1   r2   ÚUnpicklableObjectr	  ›  s   „ ó	&r1   r  zthe task to send©ÚmatchrA   r)   rd   c              3   óR   •K  — | ]  } t        t        «       ‰«       «      –— Œ  y ­wr.   ©r#   Úid)ri   rÊ   r  s     €r2   rk   z)test_parallel_pickling.<locals>.<genexpr>   s$   øè ø€ ð +
Ù6?°ˆKŒG”B‹KÑ)Ó+×,±iùó   ƒ$'rö   N)Úobjectr   r   r!   ro   )r  s   @r2   Útest_parallel_picklingr  •  sJ   ø€ ô&œFô &ô 
”Ð%8Ö	9Ø*Œ˜ 6Ô*ó +
Ü6;¸B´ió+
ô 	
÷ 
:×	9Ñ	9ús   ¢&AÁAÚ	byteorder)Ú<Ú>Ú=Ú
max_nbytesÚ1Mc                 óŒ  ‡‡— d„ Št        j                  d«      j                  d«      j                  | › d�«      Š‰j                  j
                  } t        dd|¬«      ˆˆfd„t        d	«      D «       «      }|D ]G  \  }}||k(  sJ ‚||j                  j
                  k(  sJ ‚t         j                  j                  ‰|«       ŒI y )
Nc                 ó2   — | | j                   j                  fS r.   )Údtyper  rB   s    r2   Úinspect_byteorderz=test_parallel_byteorder_corruption.<locals>.inspect_byteorderª  s   € Ø�!—'‘'×#Ñ#Ð#Ð#r1   é   )rA   rm   Úi4rA   r)   )re   r9   r  c              3   ó@   •K  — | ]  } t        ‰«      ‰«      –— Œ y ­wr.   ©r#   )ri   rÊ   r!  r<   s     €€r2   rk   z5test_parallel_byteorder_corruption.<locals>.<genexpr>±  s$   øè ø€ ð GÙ/7¨!Ð"ŒÐ!Ó" 1×%©xùó   ƒrm   )
r   ÚarangeÚreshapeÚviewr   r  r!   ro   ÚtestingÚassert_array_equal)r  r  Úinitial_np_byteorderÚresultÚ
x_returnedÚbyteorder_in_workerr!  r<   s         @@r2   Ú"test_parallel_byteorder_corruptionr0  ¥  s»   ù€ ò
$ô 	�	‰	�!‹×Ñ˜VÓ$×)Ñ)¨Y¨K°rÐ*:Ó;€AàŸ7™7×,Ñ,ÐàFŒX˜Q¨¸:ÔFô GÜ/4°Q¬xóGó €Fó ,2Ñ'ˆ
Ð'Ø"Ð&:Ò:Ð:Ð:Ø" j×&6Ñ&6×&@Ñ&@Ò@Ð@Ð@Ü
�
‰
×%Ñ% a¨Õ4ñ ,2r1   c                 óh   — t         t        d| d¬«      d„ t        d«      D «       «      «      dk(  sJ ‚y )NrA   é   ©re   r9   Útimeoutc              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­w)gü©ñÒMbP?NrÖ   r‰   s     r2   rk   z0test_parallel_timeout_success.<locals>.<genexpr>À  s   è ø€ ð <Ù/8¨!�”œ“˜u×%©yùrl   rö   )r›   r!   ro   r8   s    r2   Útest_parallel_timeout_successr6  »  sD   € ô 	Ø;ŒH˜A w¸Ô;ñ <Ü/4°R¬yó<ó ó	
ð
 ò	ðñ	r1   c                 ó”   — t        t        «      5   t        d| d¬«      d„ t        d«      D «       «       d d d «       y # 1 sw Y   y xY w)NrA   rã   r3  c              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­w©rö   NrÖ   r‰   s     r2   rk   z-test_parallel_timeout_fail.<locals>.<genexpr>Í  s   è ø€ ð :
Ù(1 1ˆNŒG”E‹N˜2×©	ùrl   rö   )r   r   r!   ro   r8   s    r2   Útest_parallel_timeout_failr:  È  s<   € ô 
”Õ	Ø9Œ˜ 7°DÔ9ñ :
Ü(-¨b¬	ó:
ô 	
÷ 
×	Ñ	úó	   �%>¾AÚ
sequentialÚ	return_asÚ	generatorÚgenerator_unorderedc           
      ó  — t        t        «      5  t         t        d| |d¬«      d„ t	        d«      D «       «      «       d d d «       t         t        d| |d¬«      d„ t	        d«      D «       «      «       y # 1 sw Y   Œ8xY w)NrA   rÕ   )re   r9   r=  r4  c              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­wr9  rÖ   r‰   s     r2   rk   z<test_parallel_timeout_fail_with_generator.<locals>.<genexpr>Ú  s    è ø€ ð RÙ,5 q�”œ“˜r×"©Iùrl   rö   c              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­wrâ   rÖ   r‰   s     r2   rk   z<test_parallel_timeout_fail_with_generator.<locals>.<genexpr>á  s    è ø€ ð M
Ù*3 QˆNŒG”E‹N˜4× ©)ùrl   )r   r   Úlistr!   ro   ©r9   r=  s     r2   Ú)test_parallel_timeout_fail_with_generatorrE  Ò  s|   € ô 
”Õ	ÜØQŒH˜A w¸)ÈSÔQñ RÜ,1°"¬IóRó ô	
÷ 
ô 	ØLŒ˜ 7°iÈÔLñ M
Ü*/°¬)óM
ó 	
õ÷ 
Ð	ús   �/A6Á6A?c                 óf  — t         ��¸t        t        «      5   t        d| ¬«      t	        dd«      D ��cg c]  \  }} t        t        «      ||«      ‘Œ c}}«       d d d «       t        t        «      5   t        d| ¬«      dD �cg c]  } t        t        «      |«      ‘Œ c}«       d d d «       t        d| ¬«      5 }t        |j                  «      €J ‚t        |j                  «      }t        t        «      5   |t	        dd«      D ��cg c]  \  }} t        t        «      ||«      ‘Œ c}}«       d d d «       t        |j                  «      €J ‚t        |j                  «      |usJ ‚t        d«      D �cg c]  }t        |d¬«      ‘Œ c} |d„ t        d«      D «       «      k(  sJ ‚t        |j                  «      }t        t        «      5   |dD �cg c]  } t        t        «      |«      ‘Œ c}«       d d d «       t        |j                  «      €J ‚t        |j                  «      |usJ ‚t        d«      D �cg c]  }t        |d¬«      ‘Œ c} |d	„ t        d«      D «       «      k(  s3J |j                  |j                  |j                  |j                   f«       ‚	 d d d «       t        j                  «      �MJ ‚t        t        «      5   t        d¬
«      dD �cg c]  } t        t        «      |«      ‘Œ c}«       d d d «       t        t        «      5   t        d¬
«      t	        dd«      D ��cg c]  \  }} t        t        «      ||«      ‘Œ c}}«       d d d «       t        t"        «      5   t        dd¬«      d„ t        d«      D «       «       d d d «       y c c}}w # 1 sw Y   �ŒNxY wc c}w # 1 sw Y   �ŒxY wc c}}w # 1 sw Y   �ŒœxY wc c}w c c}w # 1 sw Y   �ŒîxY wc c}w # 1 sw Y   �ŒWxY wc c}w # 1 sw Y   �ŒxY wc c}}w # 1 sw Y   Œ¾xY w# 1 sw Y   y xY w)NrA   rd   )r   r   )r   r   rö   r   r÷   c              3   óJ   K  — | ]  } t        t        «      |d ¬«      –— Œ y­wrù   rú   r‰   s     r2   rk   z%test_error_capture.<locals>.<genexpr>  ó$   è ø€ ð >Ù,5 q�
”œ“
˜1 ×"Ð"©Iùrû   c              3   óJ   K  — | ]  } t        t        «      |d ¬«      –— Œ y­wrù   rú   r‰   s     r2   rk   z%test_error_capture.<locals>.<genexpr>  rH  rû   ry   r   )re   r‚   c              3   óJ   K  — | ]  } t        t        «      |d ¬«      –— Œ y­w)T)rU   N©r#   rV   rh   s     r2   rk   z%test_error_capture.<locals>.<genexpr>+  s$   è ø€ ÐTÉ)ÀQÐ&ŒWÔ%Ó& q¸4×@Ð@É)ùrû   r2  )r   r   ÚZeroDivisionErrorr!   Úzipr#   r>   rY   rZ   r:   r  ro   r]   Ú
_iteratingÚn_completed_tasksÚn_dispatched_tasksÚ	_abortingrE   )r9   r<   r=   r   Úoriginal_workerss        r2   Útest_error_capturerS  ç  s¹  € ô
 
�~ÜÔ%Õ&Ø/ŒH˜A wÔ/Ü58¸ÀÔ5HÔIÑ5H©T¨Q°Ð"”œÓ" 1 aÕ(Ð5HÒIô÷ 'ô
 Ô%Õ&Ø/ŒH˜A wÔ/Ù7=Ó>±v°!Ð*”Ô)Ó*¨1Õ-°vÑ>ô÷ 'ô ˜Q¨Õ0°HÜ˜x×0Ñ0Ó1Ð=Ð=Ð=Ü*¨8×+<Ñ+<Ó=ÐäÔ)Õ*Ù¼cÀ&È&Ô>QÔRÑ>Q±d°a¸Ð+œ'¤(Ó+¨A¨qÕ1Ð>QÒRÔS÷ +ô
 ˜x×0Ñ0Ó1Ð=Ð=Ð=ô ˜x×0Ñ0Ó1Ð9IÑIÐIÐIä',¨R¤yÓ1¡y !”A�a˜1–I yÑ1±Xñ >Ü,1°"¬Ió>ó 6ò ð ð ô  +¨8×+<Ñ+<Ó=ÐÜÔ)Õ*ÙÁÓGÁ¸1Ð3œ'Ô"2Ó3°AÕ6ÀÑGÔH÷ +ô ˜x×0Ñ0Ó1Ð=Ð=Ð=ô ˜x×0Ñ0Ó1Ð9IÑIÐIÐIä',¨R¤yÓ1¡y !”A�a˜1–I yÑ1±Xñ >Ü,1°"¬Ió>ó 6ò ð ð ×#Ñ#Ø×*Ñ*Ø×+Ñ+Ø×"Ñ"ð	óñ ÷9 1ôN ˜8×,Ñ,Ó-Ð5Ð5Ð5äÔ%Õ&ØŒH˜AÔÁfÓMÁfÀÐ 9¤Ô(8Ó 9¸!Õ <ÀfÑMÔN÷ 'ô
 
Ô!Õ	"ØŒ˜ÔÄÀFÈFÔ@SÔTÑ@S¹¸¸1Ð-œG¤HÓ-¨a°Õ3Ð@SÒTÔU÷ 
#ô 
Ô*Õ	+Ø%Œ˜ 1Ô%ÙTÌ%ÐPRÌ)ÓTô	
÷ 
,Ð	+ùóu J÷ 'Ñ&üò ?÷ 'Ñ&üó S÷ +Ñ*üò 2ùò H÷ +Ñ*üò 2÷9 1Ñ0üòT  N÷ 'Ñ&üó U÷ 
#Ð	"ú÷ 
,Ð	+úsþ   —N(´ N"ÁN(Á3N:ÂN5
Â!N:Â=<O6Ã9OÄ OÄ+OÄ3AO6Å8OÆAO6ÇO$ÇOÇ1O$Ç8AO6È=O1ÉAO6ËPË P
Ë<PÌPÌ6 PÍPÍ5$P'Î"N(Î(N2Î5N:Î:OÏOÏO	ÏO6ÏO$Ï$O.	Ï)O6Ï6P ÐPÐPÐPÐP$Ð'P0c                 ó¸  — dd„}t        d| ¬«      5 }t        t        d¬«      5   |d„  |d¬«      D «       «       d d d «       t        t        d¬«      5   |d	„  |d
¬«      D «       «       d d d «       t        t        d¬«      5   |d„  |d¬«      D «       «       d d d «       d d d «       y # 1 sw Y   ŒrxY w# 1 sw Y   ŒNxY w# 1 sw Y   Œ*xY w# 1 sw Y   y xY w)Nr   c              3   óT   K  — t        d«      D ]  }|| k(  rt        d«      ‚|–— Œ y ­w)Né   úIterator Raising Error)ro   rT   )Úraise_atrj   s     r2   Úmy_generatorz1test_error_in_task_iterator.<locals>.my_generator2  s,   è ø€ Ü�r–ˆAØ�HŠ}Ü Ð!9Ó:Ð:Ø‹Gñ ùó   ‚&(rA   rd   rW  r  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rg   rh   s     r2   rk   z.test_error_in_task_iterator.<locals>.<genexpr>;  ó   è ø€ ÐCÑ*B QˆoŒg”f‹o˜a× Ñ*Bùrl   )rX  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rg   rh   s     r2   rk   z.test_error_in_task_iterator.<locals>.<genexpr>@  r\  rl   r†   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rg   rh   s     r2   rk   z.test_error_in_task_iterator.<locals>.<genexpr>D  s   è ø€ ÐDÑ*C QˆoŒg”f‹o˜a× Ñ*Cùrl   é   ©r   )r!   r   rT   )r9   rY  r  s      r2   Útest_error_in_task_iteratorra  /  s±   € óô 
˜ GÕ	,°ä”JÐ&>Ö?ÙÑC©,ÀÕ*BÓCÔC÷ @ô
 ”JÐ&>Ö?ÙÑC©,ÀÕ*BÓCÔC÷ @ô ”JÐ&>Ö?ÙÑD©,ÀÕ*CÓDÔD÷ @÷ 
-Ð	,ç?Ð?ú÷
 @Ð?ú÷ @Ð?ú÷ 
-Ð	,úsQ   ’C¤B,»CÁB8Á+CÂCÂCÂ,B5	Â1CÂ8C	Â=CÃC	Ã	CÃCc                 ó,   — | j                  d|z  «       y )NzConsumed %s)r‘   )ÚqueueÚitems     r2   Úconsumerre  G  s   € Ø	‡L�L� Ñ%Õ&r1   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«   )rf  rh  rj  rl  rg  ri  rk  rm  rn  rp  ro  rq  c                 ó–   ‡— t        «       Šˆfd„} t        d|| ¬«      ˆfd„ |«       D «       «       ‰|k(  sJ ‚t        ‰«      dk(  sJ ‚y)z=Test that with only one job, Parallel does act as a iterator.c               3   ó^   •K  — t        d«      D ]  } ‰j                  d| z  «       | –— Œ y ­w©Nr"  zProduced %i©ro   r‘   ©rj   rc  s    €r2   Úproducerz'test_dispatch_one_job.<locals>.producerx  ó+   øè ø€ Ü�q–ˆAØ�L‰L˜¨Ñ*Ô+Ø‹Gñ ùó   ƒ*-r   ©re   Ú
batch_sizer9   c              3   óJ   •K  — | ]  } t        t        «      ‰|«      –— Œ y ­wr.   ©r#   re  )ri   r<   rc  s     €r2   rk   z(test_dispatch_one_job.<locals>.<genexpr>}  s$   øè ø€ ð ?Ù-7¨ÐŒ”Ó˜% ×#©Zùó   ƒ #é   N)rC  r!   r›   )r9   r{  Úexpected_queuerw  rc  s       @r2   Útest_dispatch_one_jobr�  K  sX   ø€ ôV ‹F€Eôð
 ?„H�A *°gÔ>ó ?Ù-5¬Zó?ô ð �NÒ"Ð"Ð"Üˆu‹:˜ÒÐÑr1   c                 óN  ‡— t        j                  «       }|j                  «       Šˆfd„} t        ddd| ¬«      ˆfd„ |«       D «       «       t        ‰«      }|d   dk(  sJ ‚|d	d
 j	                  d«      }|dkD  sJ ‚|j	                  d«      }||kD  sJ ‚t        ‰«      dk(  sJ ‚y	)zRCheck that using pre_dispatch Parallel does indeed dispatch items
    lazily.
    c               3   ó^   •K  — t        d«      D ]  } ‰j                  d| z  «       | –— Œ y ­wrt  ru  rv  s    €r2   rw  z/test_dispatch_multiprocessing.<locals>.producer�  rx  ry  rA   r   rm   )re   r{  Úpre_dispatchr9   c              3   óJ   •K  — | ]  } t        t        «      ‰d «      –— Œ y­w)rÎ   Nr}  )ri   rÊ   rc  s     €r2   rk   z0test_dispatch_multiprocessing.<locals>.<genexpr>’  s%   øè ø€ ð FÙ1;¨AÐŒ”Ó˜% ×'±ùr~  r   rf  Nr«   zConsumed anyrx   rl  r  )r   ÚManagerrC  r!   Úindexr›   )r9   Úmanagerrw  Úqueue_contentsÚfirst_consumption_indexÚproduced_3_indexrc  s         @r2   Útest_dispatch_multiprocessingrŒ  „  sÁ   ø€ ô �j‰j‹l€GØ�L‰L‹N€Eôð
 F„H�A !°!¸WÔEó FÙ19´óFô ô ˜%“[€NØ˜!Ñ Ò,Ð,Ð,ð -¨R¨aÐ0×6Ñ6°~ÓFÐØ" RÒ'Ð'Ð'à%×+Ñ+¨LÓ9ÐØÐ5Ò5Ð5Ð5äˆu‹:˜ÒÐÑr1   c                  óº   — t        ddd¬«      5 }  | d„ t        d«      D «       «       | j                  j                  «       dk(  sJ ‚	 d d d «       y # 1 sw Y   y xY w)NrA   Úautor*   rz  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   r  rh   s     r2   rk   z/test_batching_auto_threading.<locals>.<genexpr>ª  ó   è ø€ Ð	.¡+˜Qˆ+Œ'”"‹+�a�.¡+ùrl   éˆ  r   ©r!   ro   r  Úcompute_batch_size)r  s    r2   Útest_batching_auto_threadingr”  ¤  sL   € ô
 
˜ v°{Õ	CÀqÙ	Ñ	.¤%¨¤+Ó	.Ô.Ø�z‰z×,Ñ,Ó.°!Ò3Ð3Ñ3÷ 
D×	CÑ	Cúó   �8AÁAc                 óº   — t        dd| ¬«      5 } |d„ t        d«      D «       «       |j                  j                  «       dkD  sJ ‚	 d d d «       y # 1 sw Y   y xY w)NrA   rŽ  rz  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   r  rh   s     r2   rk   z2test_batching_auto_subprocesses.<locals>.<genexpr>²  r�  rl   r‘  r   r’  )r9   r  s     r2   Útest_batching_auto_subprocessesr˜  ®  sN   € ô 
˜ v°wÕ	?À1Ù	Ñ	.¤%¨¤+Ó	.Ô.ð
 �z‰z×,Ñ,Ó.°Ò2Ð2Ñ2÷ 
@×	?Ñ	?úr•  c                  ó”   — t        t        «      5   t        ddd¬«      d„ t        d«      D «       «       ddd«       y# 1 sw Y   yxY w)zCMake sure that exception raised during dispatch are indeed capturedrA   é   r   )re   r„  r‚   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rK  rh   s     r2   rk   z*test_exception_dispatch.<locals>.<genexpr>½  s"   è ø€ ð 7
Ù2;¨QÐ%ŒGÔ$Ó% a×(±)ùrl   r2  N)r   rT   r!   ro   r0   r1   r2   Útest_exception_dispatchrœ  º  s:   € ä	”
Õ	Ø6Œ˜¨°AÔ6ñ 7
Ü27¸´)ó7
ô 	
÷ 
×	Ñ	úr;  c                 óH   —  t        d¬«      d„ t        d«      D «       «       y )NrA   ry   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rK  ©ri   Újs     r2   rk   z(nested_function_inner.<locals>.<genexpr>Ã  s   è ø€ ÐG¹Y¸Ð0”wÔ/Ó0°×3¹Yùrl   r2  rn   ©rj   s    r2   Únested_function_innerr¢  Â  s   € Ø„H�AÔÑG¼UÀ2¼YÓGÕGr1   c                 óH   —  t        d¬«      d„ t        d«      D «       «       y )NrA   ry   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   )r#   r¢  rŸ  s     r2   rk   z(nested_function_outer.<locals>.<genexpr>Ç  s   è ø€ ÐLÁ)¸QÐ5”wÔ4Ó5°a×8Á)ùrl   r2  rn   r¡  s    r2   Únested_function_outerr¥  Æ  s   € Ø„H�AÔÑLÄ%ÈÄ)ÓLÕLr1   z'https://github.com/joblib/loky/pull/255©Úreasonc                 óh  — t        t        «      5 } t        d| ¬«      d„ t        d«      D «       «       ddd«       t	        j
                  |j                  |j                  «      }dj                  |«      }d|v sJ ‚d|v sJ ‚d	|v sJ ‚t        |j                  «      t        u sJ ‚y# 1 sw Y   ŒuxY w)
z¯Ensure 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.
    rA   rd   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   )r#   r¥  rh   s     r2   rk   z1test_nested_exception_dispatch.<locals>.<genexpr>Ô  s"   è ø€ ð ,
Ù7@°!Ð*ŒGÔ)Ó*¨1×-±yùrl   r2  NÚ r¥  r¢  rV   )	r   rT   r!   ro   r	   r`   r§   ÚtbrÝ   )r9   ÚexcinfoÚreport_linesÚreports       r2   Útest_nested_exception_dispatchr¯  Ê  s©   € ô 
”
Ô	˜wØ+Œ˜ 7Ô+ñ ,
Ü7<¸R´yó,
ô 	
÷ 
ô $ G§L¡L°'·-±-ÀÇÁÓL€LØ�W‰W�\Ó"€FØ" fÑ,Ð,Ð,Ø" fÑ,Ð,Ð,Ø Ñ'Ð'Ð'ä�—‘Ó¤*Ñ,Ð,Ñ,÷ 
Ð	ús   �$B(Â(B1c                   ó    — e Zd ZdZdd„Zdd„Zy)ÚFakeParallelBackendz8Pretends to run concurrently while running sequentially.Nc                 ó@   — | j                  |«      | _        || _        |S r.   )r$   re   r   )rG   re   r   Úbackend_argss       r2   Ú	configurezFakeParallelBackend.configureæ  s    € Ø×+Ñ+¨FÓ3ˆŒØ ˆŒØˆr1   c                 óX   — |dk  r$t        t        j                  «       dz   |z   d«      }|S )Nr   r   )Úmaxr   r"   ©rG   re   s     r2   r$   z$FakeParallelBackend.effective_n_jobsë  s*   € Ø�AŠ:ÜœŸ™›¨!Ñ+¨fÑ4°aÓ8ˆFØˆr1   rð   )r   )rN   rO   rP   rQ   r´  r$   r0   r1   r2   r±  r±  ã  s   „ ÙBóô
r1   r±  c                  óˆ  — t        t        d¬«      5  t        d¬«       d d d «       t        t        d¬«      5  t        d¬«      5  	 d d d «       d d d «       t        t        d¬«      5  t        d¬«      5  	 d d d «       d d d «       y # 1 sw Y   ŒjxY w# 1 sw Y   ŒNxY w# 1 sw Y   ŒRxY w# 1 sw Y   Œ6xY w# 1 sw Y   y xY w)NzInvalid backend:r  zunit-testingr8   )r   rT   r!   r&   r0   r1   r2   Útest_invalid_backendr¹  ñ  sŽ   € Ü	”
Ð"4Ö	5Ü˜Õ(÷ 
6ô 
”
Ð"4Ö	5Ü ^Ö4Ø÷ 5÷ 
6ô 
”
Ð"4Ö	5Ü ^Ö4Ø÷ 5÷ 
6Ð	5÷ 
6Ð	5ú÷ 5Ð4ú÷ 
6Ð	5ú÷
 5Ð4ú÷ 
6Ð	5úsR   ’B¸B ÁBÁB Á(B8Á5B,Á7B8ÂBÂB	ÂB Â B)Â,B5	Â1B8Â8Cc                 óÆ  — t        t        «      5 }t        d| ¬«      j                  «        d d d «       dt	        j
                  «      v sJ ‚t        t        «      5 }t        d| ¬«      j                  «        d d d «       dt	        |j
                  «      v sJ ‚t        t        «      5 }t        d| ¬«      j                  «        d d d «       dt	        |j
                  «      v sJ ‚t        t        «      5 }t        d| ¬«      j                  «        d d d «       dt	        |j
                  «      v sJ ‚y # 1 sw Y   �ŒxY w# 1 sw Y   ŒÈxY w# 1 sw Y   ŒˆxY w# 1 sw Y   ŒHxY w)Nr   rd   z&n_jobs == 0 in Parallel has no meaningç      à?z2.3z$n_jobs could not be converted to intÚinvalid_str)r   rT   r!   Ú_initialize_backendr°   r§   )r9   r¬  s     r2   Útest_invalid_njobsr¾  þ  s
  € ä	”
Ô	˜wÜ˜ 7Ô+×?Ñ?ÔA÷ 
à3´s¸7¿=¹=Ó7IÑIÐIÐIä	”
Ô	˜wÜ˜ WÔ-×AÑAÔC÷ 
à3´s¸7¿=¹=Ó7IÑIÐIÐIä	”
Ô	˜wÜ˜ wÔ/×CÑCÔE÷ 
à1´S¸¿¹Ó5GÑGÐGÐGä	”
Ô	˜wÜ˜¨wÔ7×KÑKÔM÷ 
à1´S¸¿¹Ó5GÑGÐGÑG÷ 
Ñ	ú÷ 
Ð	ú÷ 
Ð	ú÷ 
Ð	ús/   �D2ÁD?Â(EÃ4EÄ2D<Ä?EÅEÅE )Ú2gffffff@rA   c                 ó²   — t        || ¬«      }|j                  «       dk(  sJ ‚ |d„ t        d«      D «       «      }t        d„ t	        |«      D «       «      sJ ‚y )Nrd   rA   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rg   rh   s     r2   rk   z.test_njobs_converted_to_int.<locals>.<genexpr>  s   è ø€ Ð2©	 1ˆOŒG”F‹O˜A×©	ùrl   rö   c              3   ó>   K  — | ]  \  }}|t        |«      k(  –— Œ y ­wr.   )rC   )ri   rj   Úrs      r2   rk   z.test_njobs_converted_to_int.<locals>.<genexpr>  s   è ø€ Ð9©.¡$ ! Qˆq”F˜1“I�~©.ùr¾   )r!   Ú_effective_n_jobsro   rÀ   Ú	enumerate)r9   re   r  rÐ   s       r2   Útest_njobs_converted_to_intrÆ    sS   € ô 	˜¨Ô0€AØ×ÑÓ  AÒ%Ð%Ð%á
Ñ2¬¨b¬	Ó2Ó
2€CÜÑ9¬)°C¬.Ó9Ô9Ð9Ñ9r1   c                  ó†   — 	 t        dt        «       dt        v sJ ‚t        d   t        k(  sJ ‚	 t        d= y # t        d= w xY w)NÚtest_backend)r'   r±  r    r0   r1   r2   Útest_register_parallel_backendrÉ    sE   € ð%Ü! .Ô2EÔFØ¤Ñ)Ð)Ð)Ü˜Ñ'Ô+>Ò>Ð>Ñ>ä�^Ñ$øŒH�^Ñ$ús	   ‚,7 ·	A c                  ó
  — t         j                  } t        «       t        «       k(  sJ ‚	 t	        dt
        d   d¬«       t        «       t        k(  sJ ‚	 | t         _        t        «       t        «       k(  sJ ‚y # | t         _        w xY w)Nr*   T)Úmake_default)r   r/   rb   r3   r'   r    r   )Údefault_backend_origs    r2   Útest_overwrite_default_backendrÍ  %  sw   € Ü#×3Ñ3ÐÜÓ!Ô%AÓ%CÒCÐCÐCð8Ü! +¬x¸Ñ/DÐSWÕXÜ#Ó%Ô)9Ò9Ð9Ñ9ð $8ŒÔ ÜÓ!Ô%AÓ%CÒCÐCÑCøð $8ŒÕ ús   ©(A5 Á5BzOnly without multiprocessingc                  ó  — t        t        d¬«      5   t        d¬«      d„ t        d«      D «       «       d d d «       t	        d¬«      5   t        «       d„ t        d«      D «       «       d d d «       y # 1 sw Y   Œ?xY w# 1 sw Y   y xY w)Nz)joblib backend '.*' is not available on.*r  r)   r8   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rg   rh   s     r2   rk   z2test_backend_no_multiprocessing.<locals>.<genexpr>4  s   è ø€ Ð F¹X¸ ¤¬£°×!3¹Xùrl   rm   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rg   rh   s     r2   rk   z2test_backend_no_multiprocessing.<locals>.<genexpr>8  s   è ø€ Ð8©x¨!�?”7œ6“? 1×%©xùrl   )r   ÚUserWarningr!   ro   r&   r0   r1   r2   Útest_backend_no_multiprocessingrÒ  1  sg   € ä	Œ{Ð"MÖ	NØ Œ˜Ô Ñ F¼UÀ1¼XÓ FÔF÷ 
Oô 
 Ö	(ØŒ‹
Ñ8¬u°Q¬xÓ8Ô8÷ 
)Ð	(÷	 
OÐ	Nú÷ 
)Ð	(ús   ’#A3Á	!A?Á3A<Á?Bc                 ó”  —  | |d¬«      5  t        j                  «       \  }}|dk(  sJ ‚t        d«      dk(  sJ ‚t        «       }|j                  dk(  sJ ‚|dk(  r0t        |«      t        u sJ ‚t        |j                  «      t        u s­J ‚|dk(  r0t        |«      t        u sJ ‚t        |j                  «      t        u sxJ ‚|dk(  r0t        |«      t        u sJ ‚t        |j                  «      t        u sCJ ‚|j                  d«      r0t        |«      t        u sJ ‚t        |j                  «      t        u sJ ‚d d d «       y # 1 sw Y   y xY w)Nrm   ry   r(   r)   r*   Útest_)r   ra   r$   r!   re   r`   r   r  r   r   Ú
startswithr±  )rw   Úbackend_nameÚactive_backendÚactive_n_jobsr  s        r2   Úcheck_backend_context_managerrÙ  ;  s8  € Ù	� aÖ	(Ü(0×(CÑ(CÓ(EÑ%ˆ˜Ø Ò!Ð!Ð!Ü Ó" aÒ'Ð'Ð'Ü‹JˆØ�x‰x˜1Š}Ðˆ}ØÐ,Ò,Ü˜Ó'Ô+AÑAÐAÐAÜ˜Ÿ
™
Ó#Ô'=Ñ=Ð=Ð=Ø˜VÒ#Ü˜Ó'¬;Ñ6Ð6Ð6Ü˜Ÿ
™
Ó#¤{Ñ2Ð2Ð2Ø˜[Ò(Ü˜Ó'Ô+;Ñ;Ð;Ð;Ü˜Ÿ
™
Ó#Ô'7Ñ7Ð7Ð7Ø×$Ñ$ WÔ-Ü˜Ó'Ô+>Ñ>Ð>Ð>Ü˜Ÿ
™
Ó#Ô':Ñ:Ð:Ð:÷# 
)×	(Ñ	(ús   ‹D*D>Ä>Erm   ztest_backend_%dc                 ó.  ‡— |t         vr| j                  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 ‚y )NrA   r*   rd   c              3   óN   •K  — | ]  }|s t        t        «      ‰|«      –— Œ y ­wr.   )r#   rÙ  )ri   rI   rw   s     €r2   rk   z/test_backend_context_manager.<locals>.<genexpr>c  s+   øè ø€ ð ,á1ˆAÙð 	/ŒÔ-Ó.¨w¸×:Ù1ùrÌ   )r    Úsetitemr±  rb   r3   rÙ  r!   Ú all_backends_for_context_manager)r³   r9   rw   s     `r2   Útest_backend_context_managerrÞ  T  s�   ø€ ð ”hÑØ×ÑœH gÔ/BÔCäÓ!Ô%AÓ%CÒCÐCÐCä! '¨7Ô3ô  Ó!Ô%AÓ%CÒCÐCÐCð ,„H�A˜{Ô+ó ,å1ó,ô ô  Ó!Ô%AÓ%CÒCÐCÑCr1   c                   ó   — e Zd ZdZdd„Zy)ÚParameterizedParallelBackendz9Pretends to run conncurrently while running sequentially.Nc                 ó,   — |€t        d«      ‚|| _        y )Nzparam should not be None)rT   Úparam)rG   râ  s     r2   rL   z%ParameterizedParallelBackend.__init__p  s   € Øˆ=ÜÐ7Ó8Ð8Øˆ�
r1   r.   rM   r0   r1   r2   rà  rà  m  s
   „ ÙCôr1   rà  c                 ó8  — | j                  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 «       t        d«      D �cg c]  }t        |«      ‘Œ c}k(  sJ ‚t        «       t	        «       k(  sJ ‚y # 1 sw Y   ŒHxY wc c}w )NÚparam_backendé*   rm   )râ  re   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   ©r#   r   rh   s     r2   rk   z=test_parameterized_backend_context_manager.<locals>.<genexpr>ƒ  ó   è ø€ Ð7©h¨�M”GœD“M !×$©hùrl   r†   )rÜ  r    rà  rb   r3   r   ra   r`   râ  r!   re   r  ro   r   )r³   rw   r×  rØ  r  rµ   rj   s          r2   Ú*test_parameterized_backend_context_managerré  v  s  € à×Ñœ /Ô3OÔPÜÓ!Ô%AÓ%CÒCÐCÐCá	�¨°1Ö	5Ü(0×(CÑ(CÓ(EÑ%ˆ˜Ü�NÓ#Ô'CÑCÐCÐCØ×#Ñ# rÒ)Ð)Ð)Ø Ò!Ð!Ð!Ü‹JˆØ�x‰x˜1Š}Ðˆ}Ø�z‰z˜^Ñ+Ð+Ð+ÙÑ7¬e°A¬hÓ7Ó7ˆ÷ 
6ð ¬¨a¬Ó1© 1”t˜A•w¨Ñ1Ò1Ð1Ð1ô  Ó!Ô%AÓ%CÒCÐCÑC÷ 
6Ð	5üò 2s   ¾BDÃDÄD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 «       t        d«      D �cg c]  }t        |«      ‘Œ c}k(  sJ ‚t        «       t        «       k(  sJ ‚y # 1 sw Y   ŒHxY wc c}w )Né+   )râ  r†   ry   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rç  rh   s     r2   rk   zFtest_directly_parameterized_backend_context_manager.<locals>.<genexpr>˜  rè  rl   )rb   r3   rà  r   ra   r`   râ  r!   re   r  ro   r   )rw   r×  rØ  r  rµ   rj   s         r2   Ú3test_directly_parameterized_backend_context_managerrí  Š  s  € äÓ!Ô%AÓ%CÒCÐCÐCñ 
Ô-°BÔ7ÀÖ	BÜ(0×(CÑ(CÓ(EÑ%ˆ˜Ü�NÓ#Ô'CÑCÐCÐCØ×#Ñ# rÒ)Ð)Ð)Ø Ò!Ð!Ð!Ü‹JˆØ�x‰x˜1Š}Ðˆ}Ø�z‰z˜^Ñ+Ð+Ð+ÙÑ7¬e°A¬hÓ7Ó7ˆ÷ 
Cð ¬¨a¬Ó1© 1”t˜A•w¨Ñ1Ò1Ð1Ð1ô  Ó!Ô%AÓ%CÒCÐCÑC÷ 
CÐ	Büò 2s   ¬BC9ÃDÃ9Dc                  ó@   — t        d«       t        j                  «       S )NrÕ   )r   ÚosÚgetpidr0   r1   r2   Úsleep_and_return_pidrñ  Ÿ  s   € Ü	ˆ#„JÜ�9‰9‹;Ðr1   c                  ó¦   — t        «       t        k(  sJ ‚t        «       j                  «       dk(  sJ ‚ t        d¬«      d„ t	        d«      D «       «      S )Nr   rA   ry   c              3   óD   K  — | ]  } t        t        «      «       –— Œ y ­wr.   )r#   rñ  r×   s     r2   rk   z"get_nested_pids.<locals>.<genexpr>«  s   è ø€ ÐPÁxÀ!Ð;œgÔ&:Ó;×=Áxùó   ‚ )rb   r   r!   rÄ  ro   r0   r1   r2   Úget_nested_pidsrõ  ¤  sM   € ÜÓ!Ô%5Ò5Ð5Ð5ô ‹:×'Ñ'Ó)¨QÒ.Ð.Ð.ð Œ8˜1ÔÑPÄuÈQÄxÓPÓPÐPr1   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 r_   )Úsuperr÷  Úget_nested_backend)rG   Ú	__class__s    €r2   rú  zMyBackend.get_nested_backend±  s   ø€ ô ”Y Ñ8Ó:¸1Ñ=Ð=r1   )rN   rO   rP   rQ   rú  Ú__classcell__)rû  s   @r2   r÷  r÷  ®  s   ø„ ÙD÷>ð >r1   r÷  Úback_compat_backend)r*   r)   r(   rý  c                 óÄ   —  | |«      5   t        d¬«      d„ t        d«      D «       «      }|D ]  }t        t        |«      «      dk(  rŒJ ‚ 	 d d d «       y # 1 sw Y   y xY w)NrA   ry   c              3   óD   K  — | ]  } t        t        «      «       –— Œ y ­wr.   )r#   rõ  r×   s     r2   rk   z6test_nested_backend_context_manager.<locals>.<genexpr>Ã  s   è ø€ Ð'VÉIÀqÐ(@¬´Ó(@×(BÉIùrô  rö   r   )r!   ro   r›   r—   )rw   r9   Ú
pid_groupsÚ	pid_groups       r2   Ú#test_nested_backend_context_managerr  »  sU   € ñ 
�Õ	Ø'”X QÔ'Ñ'VÌEÐRTÌIÓ'VÓVˆ
Û#ˆIÜ”s˜9“~Ó&¨!Ó+Ð+Ð+ñ $÷ 
×	Ñ	ús   ‰?AÁ	AÁA)rA   rx   Nc                 óâ   ‡ ‡‡— d„ Š t        d¬«      ˆfd„t        d«      D «       «        |‰ ‰¬«      5   t        d¬«      ˆ ˆˆfd„t        d«      D «       «       d d d «       y # 1 sw Y   y xY w)Nc                 ó€   — t        «       t        |    k(  sJ ‚t        |«      }t        «       j	                  «       |k(  sJ ‚y r.   )rb   r    r$   r!   rÄ  )Úexpected_backend_typeÚexpected_n_jobs     r2   Úcheck_nested_backendz?test_nested_backend_in_sequential.<locals>.check_nested_backendÐ  s@   € ô $Ó%¬Ð2GÑ)HÒHÐHÐHô *¨.Ó9ˆÜ‹z×+Ñ+Ó-°Ò?Ð?Ñ?r1   r   ry   c              3   ó^   •K  — | ]$  } t        ‰«      t        j                  d «      –— Œ& y­wrð   )r#   r   r/   )ri   rÊ   r  s     €r2   rk   z4test_nested_backend_in_sequential.<locals>.<genexpr>Ú  s+   øè ø€ ð ÙLUÀqÐ%ŒÐ$Ó%¤h×&>Ñ&>À×BÉIùry  rö   c              3   óB   •K  — | ]  } t        ‰«      ‰‰«      –— Œ y ­wr.   r%  )ri   rÊ   r9   r  re   s     €€€r2   rk   z4test_nested_backend_in_sequential.<locals>.<genexpr>ß  s%   øè ø€ ð 
ÙDM¸qÐ)ŒGÐ(Ó)¨'°6×:ÁIùs   ƒrn   )r9   re   rw   r  s   `` @r2   Ú!test_nested_backend_in_sequentialr
  È  sd   ú€ ò@ð „H�AÔó ÜLQÐRTÌIóô ñ 
� Ö	(ØŒ˜Ôõ 
ÜDIÈ"ÄIó
ô 	
÷ 
)×	(Ñ	(ús   µ'A%Á%A.c                 ó–   —  | |«      5 }| t         u r|d   }| t        u r|d   }j                  |k(  sJ ‚	 d d d «       y # 1 sw Y   y xY w)Nr9   r   )r&   r%   Únesting_level)rw   Úinner_backendÚexpected_levelÚctxr9   s        r2   Úcheck_nesting_levelr  ä  sO   € Ù	�Ô	 3Ø”oÑ%Ø˜)‘nˆGØÔ&Ñ&Ø˜!‘fˆGØ×$Ñ$¨Ò6Ð6Ñ6÷ 
 ×	Ñ	ús	   ‰,?¿AÚouter_backendr  c                 óò   ‡ ‡— t        ‰ |d«        t        d|¬«      ˆ ˆfd„t        d«      D «       «        ‰ ‰d¬«      5   t        «       ˆ ˆfd„t        d«      D «       «       d d d «       y # 1 sw Y   y xY w)Nr   rA   rd   c              3   óL   •K  — | ]  } t        t        «      ‰‰d «      –— Œ y­wrð   ©r#   r  ©ri   rÊ   rw   r  s     €€r2   rk   z-test_backend_nesting_level.<locals>.<genexpr>õ  s'   øè ø€ ð .ÙIRÀAÐ$ŒÔ#Ó$ W¨m¸Q×?Éùó   ƒ!$rö   ry   c              3   óL   •K  — | ]  } t        t        «      ‰‰d «      –— Œ y­wrð   r  r  s     €€r2   rk   z-test_backend_nesting_level.<locals>.<genexpr>ú  s'   øè ø€ ð 
ÙMVÈÐ(ŒGÔ'Ó(¨°-À×CÉYùr  )r  r!   ro   )rw   r  r  s   ` `r2   Útest_backend_nesting_levelr  í  si   ù€ ô ˜ °Ô2à-„H�A˜}Ô-ô .ÜINÈrÌó.ô ñ 
� qÖ	)ØŒ‹
ô 
ÜMRÐSUÌYó
ô 	
÷ 
*×	)Ñ	)ús   Á $A-Á-A6Úwith_retrieve_callbackTc                 óF  ‡‡‡— 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 «       y # 1 sw Y   y xY w)Nr   c                   ó>   •— e Zd ZdZW °ZW ° j
                  d„ «       Zy)ú)test_retrieval_context.<locals>.MyBackendr   c              3   ó>   K  — | xj                   dz  c_         d –— y ­wrz   r¡  r  s    r2   Úretrieval_contextz;test_retrieval_context.<locals>.MyBackend.retrieval_context	  s   è ø€ à�FŠF�a‰K�FÜùr¾   N)rN   rO   rP   rj   Úsupports_retrieve_callbackÚcontextmanagerr  )Ú
contextlibr  s   €€r2   r÷  r    s&   ø„ ØˆÙ%;Ð"á	×	"Ñ	"ñ	ó 
#ñ	r1   r÷  Ú	retrievalc                 óF   —  t        d¬«      d„ t        | «      D «       «      S )NrA   ry   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   r  rh   s     r2   rk   z>test_retrieval_context.<locals>.nested_call.<locals>.<genexpr>  s   è ø€ Ð!C¹(°Q +¤'¬"£+¨a§.¹(ùrl   rn   )Úns    r2   Únested_callz+test_retrieval_context.<locals>.nested_call  s   € Ø!Œx˜qÔ!Ñ!C¼%À¼(Ó!CÓCÐCr1   rA   ry   c              3   ó@   •K  — | ]  } t        ‰«      |«      –— Œ y ­wr.   r%  )ri   rj   r&  s     €r2   rk   z)test_retrieval_context.<locals>.<genexpr>  s   øè ø€ ÐE¹H°qÐ/œ7 ;Ó/°×2¹Hùr&  r†   r9   r   )r!  r   r'   r!   ro   r&   rj   r%   )rw   r  r÷  r  r!  r&  s    `  @@r2   Útest_retrieval_contextr(  ÿ  s•   ú€ ó ÷Ô$ô ô ˜k¨9Ô5òDñ 
�Ô	 ØŒ˜ÔÓE¼EÀ!¼HÓEÔEØ”oÑ%Ø�y‘>×#Ñ# qÒ(Ð(Ð(ØÔ&Ñ&Ø�q‘6—8‘8˜q’=Ð �=÷ 
×	Ñ	ús   ±ABÂB r{  )r   rx   g¸…ëQ¸ö?c                 ód   — t        t        «      5  t        | ¬«       d d d «       y # 1 sw Y   y xY w)N©r{  )r   rT   r!   r*  s    r2   Útest_invalid_batch_sizer+    s   € ä	”
Õ	Ü˜JÕ'÷ 
×	Ñ	ús   �&¦/z)n_tasks, n_jobs, pre_dispatch, batch_size))rA   rA   rÀ   rŽ  )rA   rA   re   rŽ  ©rö   rA   re   rŽ  )i  rA   re   rŽ  r,  )rö   r«   re   rŽ  )éÈ   r  re   rŽ  )é   r  ú
2 * n_jobsr   )éú   r  rÀ   r   )r0  r  r/  rS   )r-  r  r/  rŽ  c                 ó¬   — |||dœ}t        | «      D �cg c]  }t        |«      ‘Œ }} t        di |¤Žd„ t        | «      D «       «      }||k(  sJ ‚y c c}w )N)re   r„  r{  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rg   rh   s     r2   rk   z/test_dispatch_race_condition.<locals>.<genexpr>;  s   è ø€ Ð L¹^¸ ¤¬£°×!3¹^ùrl   r0   rŠ   )rœ   re   r„  r{  Úparamsrj   rÁ   rµ   s           r2   Útest_dispatch_race_conditionr4  %  s]   € ð( °ÈJÑW€FÜ#(¨¤>Ó2¡>˜a”�q•	 >€HÐ2Ø ŒhÑ ˜Ñ Ñ L¼UÀ7¼^Ó LÓL€GØ�hÒÐÑùò 3s   ”Ac                  óª   — t        j                  «       } t        dd¬«      }|j                  j	                  d«      }|j                  «       }|| k(  sJ ‚y )NrA   r(   rd   rw   )r   Úget_start_methodr!   Ú_backend_kwargsÚget)Úmp_start_methodr  rw   Ústart_methods       r2   Útest_default_mp_contextr;  ?  sO   € ä×)Ñ)Ó+€OÜ˜Ð#4Ô5€AØ×Ñ×#Ñ# IÓ.€GØ×+Ñ+Ó-€LØ˜?Ò*Ð*Ñ*r1   c                 ó&  ‡— | dk(  rt        j                  d«      } t        j                  j	                  d«      }|j                  dd«      Št        j                  ‰‰j                  «        t        d| ¬«      ˆfd„t        d«      D «       «       y )Nr(   r,   rå  iè  rA   rd   c              3   ór   •K  — | ].  } t        t        j                  «      ‰‰j                  «      –— Œ0 y ­wr.   )r#   r   ÚdotÚT)ri   rj   rH   s     €r2   rk   zAtest_no_blas_crash_or_freeze_with_subprocesses.<locals>.<genexpr>^  s'   øè ø€ Ð'RÉÀA¨¬´·±«¸¸1¿3¹3×(?Éùs   ƒ47)
r   r+   r   ÚrandomÚRandomStateÚrandnr>  r?  r!   ro   )r9   ÚrngrH   s     @r2   Ú.test_no_blas_crash_or_freeze_with_subprocessesrD  H  st   ø€ ð Ð#Ò#ô —.‘. Ó)ˆô �)‰)×
Ñ
 Ó
#€Cð 	�	‰	�$˜Ó€AÜ‡F�Fˆ1ˆa�c‰c„Nð („H�A˜wÔ'Ó'RÌÈqÌÓ'RÕRr1   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k7  rt        j                  d«       t        j                  | «      }t        t        j                  d|gdd¬«       y )Nr(   ÚforkzVRequire fork start method to use interactively defined functions with multiprocessing.z-crö   ú\[0, 1, 4, 9, 16\]©r4  Ústdout_regex)	r   r6  ÚpytestÚskipÚ,UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_NO_MAINÚformatr   ÚsysÚ
executable)r9   Úcodes     r2   Ú2test_parallel_with_interactively_defined_functionsrQ  q  s[   € ð
 Ð#Ò#¬×(;Ñ(;Ó(=ÀÒ(GÜ�‰ð.ô	
ô 8×>Ñ>¸wÓG€DÜÜ	�‰˜˜tÐ$¨bÐ?Tör1   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 r1|t         k7  st        j                  dk(  rt        j                  d«       t
        j                  || |t        j                  j                  t        j                  j                  t        j                  «      «      ¬«      }|j                  d«      }|j                  |«       t        t        j                  |j                   gdd¬«       y )	N)r(   r,   Úwin32zNot picklable with pickle)rR  r9   rS  Újoblib_root_folderzunpicklable_func_script.pyrö   rG  rH  )ÚSQUARE_MAINrN  ÚplatformrJ  rK  Ú)UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_MAINrM  rï  ÚpathÚdirnameÚjoblibÚ__file__rÝ   Úwriter   rO  Ústrpath)r9   rR  rS  ÚtmpdirrP  Ú	code_files         r2   Ú0test_parallel_with_unpicklable_functions_in_argsrc  ±  s©   € ð Ð.Ñ.Ø”{Ò"¤c§l¡l°gÒ&=ä�‰Ð/Ô0Ü4×;Ñ;ØØØ+ÜŸ7™7Ÿ?™?¬2¯7©7¯?©?¼6¿?¹?Ó+KÓLð	 <ó €Dð —‘Ð8Ó9€IØ‡O�O�DÔÜÜ	�‰˜×*Ñ*Ð+ØØ*ör1   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)
))
)rW  c                 ó    — | j                  d«      }|j                  t        «       t        t        j
                  |j                  gdd ¬«       y )Nz(joblib_interactively_defined_function.pyrG  )rI  r4  )rÝ   r_  Ú5INTERACTIVE_DEFINED_FUNCTION_AND_CLASS_SCRIPT_CONTENTr   rN  rO  r`  ©ra  Úscripts     r2   Ú7test_parallel_with_interactively_defined_functions_lokyrh  ö  s>   € ð
 �[‰[ÐCÓD€FØ
‡L�LÔFÔGÜÜ	�‰˜Ÿ™Ð(Ø*Øör1   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                 ó¢   — | j                  d«      }|j                  t        «       t        t        j
                  |j                  gddd¬«       y )Nz)joblib_interactive_bound_method_script.pyz\[None, None, None\]ÚLokyProcessé   )rI  Ústderr_regexr4  )rÝ   r_  Ú9INTERACTIVELY_DEFINED_SUBCLASS_WITH_METHOD_SCRIPT_CONTENTr   rN  rO  r`  rf  s     r2   Ú:test_parallel_with_interactively_defined_bound_method_lokyrn    s?   € à�[‰[ÐDÓE€FØ
‡L�LÔJÔKÜÜ	�‰˜Ÿ™Ð(Ø,Ø#Øö	r1   c                  óH   — t        g «      }  t        d¬«      | «      g k(  sJ ‚y )NrA   ry   )Úiterr!   )Úexhausted_iterators    r2   Ú%test_parallel_with_exhausted_iteratorrr  )  s'   € Ü˜b›ÐØŒ8˜1ÔÐ0Ó1°RÒ7Ð7Ñ7r1   c                 ó€   — t        | t        j                  «      st        dt	        | «      «      ‚| j                  «       S )Nz#Expected np.memmap instance, got %r)r±   r   ÚmemmapÚ	TypeErrorr`   Úcopy)rH   s    r2   Úcheck_memmaprw  .  s-   € Ü�aœŸ™Ô#ÜÐ=¼tÀA»wÓGÐGØ�6‰6‹8€Or1   c                 óš  — d„ } t        dd| ¬«      d„  |d«      D «       «      }t        | |t        |«      «      «      D ]%  \  }}t        j                  j                  ||«       Œ'  t        dd| ¬«      d„  |d«      D «       «      }t        | |t        |«      «      «      D ]%  \  }}t        j                  j                  ||«       Œ' y )	Nc              3   ó€   K  — t        | «      D ],  }t        j                  dt        j                  ¬«      |z  –— Œ. y ­w)Nrö   ©r   )ro   r   ÚonesÚfloat32)r%  rj   s     r2   Úgenerate_arrayszBtest_auto_memmap_on_arrays_from_generator.<locals>.generate_arrays<  s.   è ø€ Ü�q–ˆAÜ—'‘'˜"¤B§J¡JÔ/°!Ñ3Ó3ñ ùs   ‚<>rA   r   ©re   r  r9   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   ©r#   rw  ©ri   rH   s     r2   rk   z<test_auto_memmap_on_arrays_from_generator.<locals>.<genexpr>B  ó#   è ø€ ð @Ù*> QÐŒ”Ó˜a× Ñ*>ùrl   r„   r«   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   r€  r�  s     r2   rk   z<test_auto_memmap_on_arrays_from_generator.<locals>.<genexpr>K  r‚  rl   )r!   rM  r›   r   r*  r+  )r9   r}  rµ   r-  rÁ   s        r2   Ú)test_auto_memmap_on_arrays_from_generatorr„  4  sË   € ò4ð @Œh˜a¨A°wÔ?ñ @Ù*9¸#Ô*>ó@ó €Gô   ©¼¸W»Ó)FÖGÑˆ�Ü
�
‰
×%Ñ% h°Õ7ð Hð @Œh˜a¨A°wÔ?ñ @Ù*9¸#Ô*>ó@ó €Gô   ©¼¸W»Ó)FÖGÑˆ�Ü
�
‰
×%Ñ% h°Õ7ñ Hr1   c                 ó   — | S r.   r0   )Úargs    r2   Úidentityr‡  R  s   € Ø€Jr1   c                 óÊ  ‡— | j                  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                  |kD  sJ ‚t        j                  j                  ||«       y )Nz	test.mmapÚuint8rz  rÃ  )Ú	mmap_moderA   ry   c              3   óH   •K  — | ]  } t        t        «      ‰«      –— Œ y ­wr.   )r#   r‡  )ri   rÊ   rt  s     €r2   rk   z.test_memmap_with_big_offset.<locals>.<genexpr>^  s   øè ø€ Ð"JÁcÀÐ#4¤7¬8Ó#4°V×#<Ácùrç   r`  r   )rÝ   r`  ÚmmapÚALLOCATIONGRANULARITYr   Úzerosr{  r
   r   r!   r±   rt  Úoffsetr*  r+  )ra  ÚfnameÚsizeÚobjr-  rt  s        @r2   Útest_memmap_with_big_offsetr“  V  s·   ø€ ð �K‰K˜Ó$×,Ñ,€EÜ×%Ñ%€DÜ�8‰8�D Ô(¬"¯'©'°$¸gÔ*FÐ
G€CÜˆˆeÔÜ�% 3Ô'€FØ"” Ô"Ó"JÁcÓ"JÓJ�I€VÜ�f˜Q‘i¤§¡Ô+Ð+Ð+Ø�!‰9×Ñ˜dÒ"Ð"Ð"Ü‡J�J×!Ñ! # vÕ.r1   c                  ó6  — t        j                  d¬«      5 }  t        dd¬«      d„ t        d«      D «       «       d d d «       t	         «      dk(  sJ ‚| d   }t        |j                  t        «      sJ ‚t        |j                  «      dk(  sJ ‚y # 1 sw Y   ŒUxY w)	NTr¨   r   )re   r4  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rg   rh   s     r2   rk   zFtest_warning_about_timeout_not_supported_by_backend.<locals>.<genexpr>f  s   è ø€ Ð%LÁ)¸Q o¤g¬f£o°a×&8Á)ùrl   é2   r   z’The 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!   ro   r›   r±   r    rÑ  r°   )r´   r¶   s     r2   Ú3test_warning_about_timeout_not_supported_by_backendr—  d  s‰   € Ü	×	 Ñ	 ¨Õ	-°Ø%Œ˜ 1Ô%Ñ%LÄ%ÈÄ)Ó%LÔL÷ 
.äˆx‹=˜AÒÐÐØ�‰€AÜ�a—i‘i¤Ô-Ð-Ð-Üˆq�y‰y‹>ð	òð ñ ÷ 
.Ð	-ús   —$BÂBc                 ó   — || |<   |S r.   r0   )Ú
input_listr‡  r§   s      r2   Úset_list_valuerš  q  s   € Ø€JˆuÑØ€Lr1   )r   rA   r«   c                 ó°   ‡— dgdz  Š t        | dd¬«      ˆfd„t        d«      D «       «      }t        |«      }t        d„ t	        ‰|«      D «       «      sJ ‚y )Nr   r†   r>  r*   ©re   r=  r9   c              3   óL   •K  — | ]  } t        t        «      ‰||«      –— Œ y ­wr.   )r#   rš  )ri   rj   r™  s     €r2   rk   zPtest_parallel_return_order_with_return_as_generator_parameter.<locals>.<genexpr>|  s'   øè ø€ ð QÙ;C°aÐŒ”Ó 
¨A¨q×1¹8ùr  c              3   ó,   K  — | ]  \  }}||k(  –— Œ y ­wr.   r0   ©ri   ÚvrÃ  s      r2   rk   zPtest_parallel_return_order_with_return_as_generator_parameter.<locals>.<genexpr>ƒ  s   è ø€ Ð:Ñ"9™$˜!˜Qˆq�A�vÑ"9ùó   ‚)r!   ro   rC  rÀ   rM  )re   r-  r™  s     @r2   Ú=test_parallel_return_order_with_return_as_generator_parameterr¢  v  s^   ø€ ð
 ��q‘€JØPŒX˜V¨{ÀKÔPó QÜ;@À¼8óQó €Fô
 �&‹\€FäÑ:¤# j°&Ô"9Ó:Ô:Ð:Ñ:r1   c                 ó2   — |rt        d«       t        | «      S )Nr2  )r   r   )ÚeÚdelays     r2   Ú_sqrt_with_delayr¦  †  s   € ÙÜˆbŒ	Ü�‹7€Nr1   c                 óø   ‡—  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 ‚‹y )
Nr?  rœ  c              3   óT   K  — | ]   } t        t        «      |d z  |dk(  «      –— Œ" y­w)rA   r   N)r#   r¦  rh   s     r2   rk   zK_test_parallel_unordered_generator_returns_fastest_first.<locals>.<genexpr>”  s-   è ø€ ð WÙ;D°aÐ!ŒÔ Ó! ! Q¡$¨¨a©×1¹9ùrZ  rö   c              3   ó4   •K  — | ]  }t        ‰«      –— Œ y ­wr.   )Únext)ri   rÊ   r-  s     €r2   rk   zK_test_parallel_unordered_generator_returns_fastest_first.<locals>.<genexpr>˜  s   øè ø€ Ð=±H¨qœd 6Ÿl±Hùs   ƒé	   r   rA   c              3   ó,   K  — | ]  \  }}||k(  –— Œ y ­wr.   r0   rŸ  s      r2   rk   zK_test_parallel_unordered_generator_returns_fastest_first.<locals>.<genexpr>œ  s   è ø€ ÐSÑ"R™$˜!˜Qˆq�A�vÑ"Rùr¡  )r!   ro   ÚsortedrC  rÀ   rM  )r9   re   Úquickly_returnedÚexpected_quickly_returnedr-  s       @r2   Ú8_test_parallel_unordered_generator_returns_fastest_firstr°  �  s~   ø€ ð WŒX˜VÐ/DÈgÔVñ WÜ;@À¼9óWó €Fô Ó=´E¸!´HÓ=Ó=Ðà!" ¤d¬5°°B«<Ó&8Ñ 8ÐäÑS¤#Ð&?ÐAQÔ"RÓSÔSÐSÐSár1   c                 ó   — t        | |«       y r.   )r°  ©r9   re   s     r2   Ú7test_parallel_unordered_generator_returns_fastest_firstr³  ¡  s   € ô =¸WÀfÕMr1   )r   rA   r�   rx   c                 óø   — dgdgdz  z   }t        t        «      5  t        j                  «       } t        | |¬«      d„ |D «       «       d d d «       t        j                  «       z
  }|dk  sJ ‚y # 1 sw Y   Œ(xY w)NrH   rö   r„   rd   c              3   óZ   K  — | ]#  } t        t        j                  «      |«      –— Œ% y ­wr.   ©r#   rX   r   rh   s     r2   rk   z%test_abort_backend.<locals>.<genexpr>±  s$   è ø€ Ð0XÑQWÈAÐ1D´¼¿¹Ó1DÀQ×1GÑQWùs   ‚)+rV  )r   ru  rX   r!   )re   r9   ÚdelaysÚt_startÚdts        r2   Útest_abort_backendrº  «  sl   € ð ˆU�b�T˜C‘ZÑ€FÜ	”	Õ	Ü—)‘)“+ˆØ0Œ˜¨Ô0Ñ0XÑQWÓ0XÔX÷ 
ô 
�‰‹�wÑ	€BØ�Š7€N‰7÷	 
Ð	ús   š/A0Á0A9c                 óX   — t        j                  t        d«      t        ¬«      }d|d<   |S )Ng    €„Arz  Fr   )r   r{  ÚintÚbool)r†  r-  s     r2   Úget_large_objectr¾  ¶  s$   € Ü�W‰W”S˜“\¬Ô.€FØ€Fˆ1�IØ€Mr1   c                 ó¨   — t        || |¬«      5 } |d„ t        d«      D «       «      }t        |«       t        |«       ~d d d «       y # 1 sw Y   y xY w)N)re   r9   r=  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   )r#   r¾  rh   s     r2   rk   z0_test_deadlock_with_generator.<locals>.<genexpr>Ä  s   è ø€ ÐJÁ	¸1Ð3œ'Ô"2Ó3°A×6Á	ùrl   rö   )r!   ro   rª  )r9   r=  re   r   r-  s        r2   Ú_test_deadlock_with_generatorrÁ  À  sD   € ô 
˜¨¸IÕ	FÈ(ÙÑJÄÀbÄ	ÓJÓJˆÜˆVŒÜˆVŒØ÷	 
G×	FÑ	Fús   �0AÁAc                 ó   — t        | ||«       y r.   )rÁ  )r9   r=  re   s      r2   Útest_deadlock_with_generatorrÃ  Ê  s   € ô
 " '¨9°fÕ=r1   c                 ó8  — t        t        d¬«      5  t        || |¬«      } |d„ t        d«      D «       «      }t	        j                  «       } |d„ t        d«      D «       «      }d d d «       t	        j                  «       z
  dk  sJ d	«       ‚~y # 1 sw Y   Œ,xY w)
Nú)This Parallel instance is already runningr  rD  c              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­wrð   rÖ   r×   s     r2   rk   z/test_multiple_generator_call.<locals>.<genexpr>Û  s   è ø€ Ð:±	¨1�^”WœU“^ A×&±	ùrl   rö   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   r  rh   s     r2   rk   z/test_multiple_generator_call.<locals>.<genexpr>Ý  s   è ø€ Ð;±
¨1˜œ¤› AŸ±
ùrl   r„   rA   ú[The error should be raised immediately when submitting a new task but it took more than 2s.)r   r  r!   ro   rX   )r9   r=  re   r   Úgr¸  Úgen2s          r2   Útest_multiple_generator_callrË  Ò  sŒ   € ô 
”Ð$OÖ	PÜ˜F¨G¸yÔIˆÙÑ:´°b´	Ó:Ó:ˆÜ—)‘)“+ˆÙÑ;´°c´
Ó;Ó;ˆ÷	 
Qô �9‰9‹;˜Ñ  1Ò$ð ð	$óÐ$ñ
 	
÷ 
QÐ	Pús   ’ABÂBc                 óf  — t        || |¬«      5 } |d„ t        d«      D «       «      }t        j                  «       }t        t        d¬«      5   |d„ t        d«      D «       «      }d d d «       t        j                  «       |z
  dk  sJ d	«       ‚	 d d d «       ~y # 1 sw Y   Œ5xY w# 1 sw Y   ~y xY w)
NrD  c              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­wr9  rÖ   r×   s     r2   rk   z7test_multiple_generator_call_managed.<locals>.<genexpr>ð  s   è ø€ Ð;±¨A�^”WœU“^ B×'±ùrl   rö   rÅ  r  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   r  rh   s     r2   rk   z7test_multiple_generator_call_managed.<locals>.<genexpr>ó  s   è ø€ Ð=±*¨Q˜+œ'¤"›+ aŸ.±*ùrl   r„   rA   rÈ  )r!   ro   rX   r   r  )r9   r=  re   r   rÉ  r¸  Úg2s          r2   Ú$test_multiple_generator_call_managedrÐ  è  sž   € ô 
�& '°YÕ	?À8ÙÑ;´°r´Ó;Ó;ˆÜ—)‘)“+ˆÜ”LÐ(SÖTÙÑ=´%¸´*Ó=Ó=ˆB÷ Uô �y‰y‹{˜WÑ$ qÒ(ð 	
ð(ó	
Ñ(÷ 
@ñ 	
÷ UÐTú÷ 
@ñ 	
ús#   �>B&ÁBÁ&)B&ÂB#	ÂB&Â&B0Úreturn_as_1Úreturn_as_2c           
      ót  —  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 ‚y )	NrD  c              3   óL   K  — | ]  } t        t        «      |d z  «      –— Œ y­w©rA   Nrç  rh   s     r2   rk   z9test_multiple_generator_call_separated.<locals>.<genexpr>  s$   è ø€ ð AÙ%. ˆŒ”‹�a˜‘d×¡Yùó   ‚"$rö   c              3   óL   K  — | ]  } t        t        «      |d z  «      –— Œ y­wrÕ  rç  rh   s     r2   rk   z9test_multiple_generator_call_separated.<locals>.<genexpr>  s$   è ø€ ð BÙ%2 ˆŒ”‹�a˜‘d×¡]ùrÖ  rV  r?  c              3   ó,   K  — | ]  \  }}||k(  –— Œ y ­wr.   r0   ©ri   rÐ   rj   s      r2   rk   z9test_multiple_generator_call_separated.<locals>.<genexpr>  s   è ø€ Ð8Ñ&7™F˜C ˆs�a�xÑ&7ùr¡  c              3   ó,   K  — | ]  \  }}||k(  –— Œ y ­wr.   r0   rÙ  s      r2   rk   z9test_multiple_generator_call_separated.<locals>.<genexpr>  s   è ø€ Ð=Ñ&<™F˜C ˆs�a�xÑ&<ùr¡  )r!   ro   r­  rÀ   rM  )r9   rÑ  rÒ  re   rÉ  rÏ  s         r2   Ú&test_multiple_generator_call_separatedrÛ  þ  sÀ   € ð 	AŒ� °KÔ@ñ AÜ%*¨2¤YóAó 	€Að 
BŒ�& '°[Ô	Añ BÜ%*¨2¨r¤]óBó 
€Bð Ð+Ò+Ü�1‹IˆàÐ+Ò+Ü�B‹ZˆäÑ8¤c¨!¬U°2«YÔ&7Ó8Ô8Ð8Ð8ÜÑ=¤c¨"¬e°B¸«mÔ&<Ó=Ô=Ð=Ñ=r1   zbackend, error))r)   T)r*   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 «       «      }|dk(  rt        |«      }t        d„ t        |t	        dd«      «      D «       «      sJ ‚	 d d d «       t        j                  «       z
  dk  sJ ‚d}	|j                  r1|	dk  r,|	dz  }	t        j                  d«       |j                  r|	dk  rŒ,t        j                  «       |z
  dk  sJ ‚ |j                   «       dk7  r|j"                  sJ ‚y y # 1 sw Y   Œ¤xY w)Nr)   zRequires multiprocessingrA   rD  c              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­wr9  rÖ   rh   s     r2   rk   z<test_multiple_generator_call_separated_gc.<locals>.<genexpr>&  s   è ø€ Ð7©Y¨�”œ“ ×#©Yùrl   rö   c                  ó   — t        d«      S )NzGenerator collected)rØ   r0   r1   r2   Ú<lambda>z;test_multiple_generator_call_separated_gc.<locals>.<lambda>'  s
   € ¤uÐ-BÔ'Cr1   z The executor underlying Parallelr  c              3   óL   K  — | ]  } t        t        «      |d z  «      –— Œ y­wrÕ  rç  rh   s     r2   rk   z<test_multiple_generator_call_separated_gc.<locals>.<genexpr>3  s$   è ø€ ð @
Ù)6 AˆMŒG”D‹M˜!˜Q™$×©ùrÖ  rV  r?  c              3   ó,   K  — | ]  \  }}||k(  –— Œ y ­wr.   r0   rÙ  s      r2   rk   z<test_multiple_generator_call_separated_gc.<locals>.<genexpr>:  s   è ø€ Ð@Ñ*?¡  Q�3˜!•8Ñ*?ùr¡  r†   r   rm   r   r»  )r   rJ  rK  r!   ro   ÚweakrefÚfinalizer   r  r   rX   r­  rÀ   rM  Úaliver   rÄ  rQ  )
r9   rÑ  rÒ  Úerrorr   rÉ  Úg_wrr  r¸  Úretrys
             r2   Ú)test_multiple_generator_call_separated_gcrè    s„  € ð 	�6Ò¤ 
Ü�‰Ð.Ô/ô ˜ 7°kÔB€HÙÑ7¬U°2¬YÓ7Ó7€AÜ×Ñ˜AÑCÓD€Dñ ô 	Œ|Ð#EÕFä‹]ð ò
 
ô
 —)‘)“+ˆØ?ŒH�Q °;Ô?ñ @
Ü).¨r°2¬ó@
ó 
ˆð Ð/Ò/Ü�q“	ˆAäÑ@¬#¨a´°r¸2³Ô*?Ó@Ô@Ð@Ñ@÷ 
ô �9‰9‹;˜Ñ  1Ò$Ð$Ð$ð €EØ
�*Š*˜ šØ�‰
ˆÜ�
‰
�3Œð �*Š*˜ ›ô �9‰9‹;˜Ñ  1Ò$Ð$Ð$à!€x×!Ñ!Ó# qÒ(ð ×!Ò!Ð!Ñ!ð )÷1 
ˆús   Á=A2FÆFc                 óz  — |j                   }t        dd| |¬«      5 } |d„ t        j                  j                  d«      gdz  D «       «       t	        t        j                  |«      «      dkD  sJ ‚	 d d d «       t        d«      D ]$  }t        j                  |«      s nt        d«       Œ& t        d	«      ‚t        dd| ¬
«      } |d„ t        j                  j                  d«      gdz  D «       «       t        d«      D ]$  }t        j                  |«      s y t        d«       Œ& t        d	«      ‚# 1 sw Y   ŒÁxY w)NrA   r   )re   r  r9   Útemp_folderc              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   r€  r�  s     r2   rk   z(test_memmapping_leaks.<locals>.<genexpr>V  s    è ø€ Ð	GÑ,F qÐ
Œ'”,Ó
 ×
"Ñ,Fùrl   rö   r   r„   rÕ   z/temporary directory of Parallel was not removedr~  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   r€  r�  s     r2   rk   z(test_memmapping_leaks.<locals>.<genexpr>f  s    è ø€ ÐCÑ(B 1Ð„gŒlÓ˜A×Ñ(Bùrl   )
r`  r!   r   r@  r›   rï  Úlistdirro   r   ÚAssertionError)r9   ra  r  rÊ   s       r2   Útest_memmapping_leaksrï  K  s  € ð �^‰^€Fô 
˜ q°'ÀvÕ	NÐRSÙ	Ñ	G¬R¯Y©Y×-=Ñ-=¸bÓ-AÐ,BÀQÒ,FÓ	GÔGô ”2—:‘:˜fÓ%Ó&¨Ò*Ð*Ñ*÷	 
Oô �3ŽZˆÜ�z‰z˜&Ô!ÙÜˆc�
ð ô
 ÐNÓOÐOô 	˜ a°Ô9€AÙÑC¬¯©×)9Ñ)9¸"Ó)=Ð(>ÀÒ(BÓCÔCä�3ŽZˆÜ�z‰z˜&Ô!ÙÜˆc�
ð ô
 ÐNÓOÐO÷1 
OÐ	Nús   œAD1Ä1D:)Nr)   r*   c                 ó–   —  t        d| ¬«      d„ t        d«      D «       «      }|t        d«      D �cg c]  }|dz  ‘Œ	 c}k(  sJ ‚y c c}w )NrA   rd   c              3   ó@   K  — | ]  } t        d „ «      |«      –— Œ y­w)c                 ó   — | dz  S r@   r0   rB   s    r2   rß  z2test_lambda_expression.<locals>.<genexpr>.<lambda>v  s   € ˜!˜Qš$r1   Nr%  rh   s     r2   rk   z)test_lambda_expression.<locals>.<genexpr>u  s!   è ø€ ð 2Ù,5 qÐŒ‘Ó ×"©Iùs   ‚rö   rn   )r9   rµ   rj   s      r2   Útest_lambda_expressionró  p  sR   € ð
 2Œh˜a¨Ô1ñ 2Ü,1°"¬Ió2ó €Gð ¤U¨2¤YÓ/¡Y �q˜!“t YÑ/Ò/Ð/Ñ/ùÒ/s   ²A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 ‚y)	zCTest that a parallel backend correctly resets its batch statistics.rA   iô  g       @rö   )r‚   re   r9   c              3   ó\   •K  — | ]#  } t        t        j                  «      ‰«      –— Œ% y ­wr.   r¶  ©ri   rj   Ú	task_times     €r2   rk   z6test_backend_batch_statistics_reset.<locals>.<genexpr>„  ó#   øè ø€ Ð>©o¨Ð„gŒd�j‰jÓ˜)×$©oùó   ƒ),c              3   ó\   •K  — | ]#  } t        t        j                  «      ‰«      –— Œ% y ­wr.   r¶  rö  s     €r2   rk   z6test_backend_batch_statistics_reset.<locals>.<genexpr>‹  rø  rù  N)r!   ro   r  Ú_effective_batch_sizeÚ_DEFAULT_EFFECTIVE_BATCH_SIZEÚ_smoothed_batch_durationÚ _DEFAULT_SMOOTHED_BATCH_DURATION)r9   re   Ún_inputsr  r÷  s       @r2   Ú#test_backend_batch_statistics_resetr   {  sâ   ø€ ð €FØ€HØ�h‘€Iä˜ F°GÔ<€AÙÓ>¬e°H¬oÓ>Ô>Ø�:‰:×+Ñ+¨q¯z©z×/WÑ/WÒWÐWÐWà	�
‰
×+Ñ+Ø�:‰:×6Ñ6ò	7ðð	7ñ Ó>¬e°H¬oÓ>Ô>Ø�:‰:×+Ñ+¨q¯z©z×/WÑ/WÒWÐWÐWà	�
‰
×+Ñ+Ø�:‰:×6Ñ6ò	7ðñ	7r1   c                 óŽ  — dD ]«  }t        t        |¬«      j                  «      t        «       u sJ ‚t        |d¬«      }t        |j                  «      t        u sJ ‚t        |d¬«      }t        |j                  «      t
        u sJ ‚t        |d¬«      }t        |j                  «      t        u rŒ«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 «        | d	d¬«      5  t        dd¬«      }t        |j                  «      t
        u sJ ‚|j                  dk(  sJ ‚	 d d d «        | d	d¬«      5  t        d¬«      }t        |j                  «      t        u sJ ‚|j                  dk(  sJ ‚	 d d d «        | d	d¬«      5  t        dd¬«      }t        |j                  «      t        u sJ ‚|j                  dk(  sJ ‚	 d d d «       y # 1 sw Y   ŒöxY w# 1 sw Y   Œ³xY w# 1 sw Y   ŒqxY w# 1 sw Y   y xY w)N)r   rA   rx   ry   Úthreads©re   ÚpreferÚ	processesÚ	sharedmem©re   ÚrequirerA   r)   )re   r9   r  ©r  rm   ©r  r   )r`   r!   r  r3   r   r   re   )rw   re   r  s      r2   Ú$test_backend_hinting_and_constraintsr  “  sù  € ó ˆÜ”H FÔ+×4Ñ4Ó5Ô9UÓ9WÑWÐWÐWä˜F¨9Ô5ˆÜ�A—J‘JÓÔ#3Ñ3Ð3Ð3ä˜F¨;Ô7ˆÜ�A—J‘JÓ¤;Ñ.Ð.Ð.ä˜F¨KÔ8ˆÜ�A—J‘JÓÔ#3Ò3Ð3Ð3ð ô 	˜ 6°)Ô<€AÜ�—
‘
Óœ{Ñ*Ð*Ð*á	� Ö	"ô ˜IÔ&ˆÜ�A—J‘JÓ¤;Ñ.Ð.Ð.Ø�x‰x˜1Š}Ð‰}÷ 
#ñ 
� Ö	"ä˜A iÔ0ˆÜ�A—J‘JÓ¤;Ñ.Ð.Ð.Ø�x‰x˜1Š}Ð‰}÷	 
#ñ 
� Ö	"ô
 ˜[Ô)ˆÜ�A—J‘JÓÔ#3Ñ3Ð3Ð3Ø�x‰x˜1Š}Ð‰}÷ 
#ñ 
� Ö	"Ü˜A {Ô3ˆÜ�A—J‘JÓÔ#3Ñ3Ð3Ð3Ø�x‰x˜1Š}Ð‰}÷ 
#Ð	"÷- 
#Ð	"ú÷ 
#Ð	"ú÷ 
#Ð	"ú÷ 
#Ð	"ús0   Ã&;HÄ4<H#Æ;H/Ç<H;ÈH È#H,È/H8È;Ir  )Nr  r  c                 ó*  — t        d«      D �cg c]  }|dz  ‘Œ	 }} t        | |¬«      d„ t        d«      D «       «      }||k(  sJ ‚t        || ¬«      5   t        «       d„ t        d«      D «       «      }d d d «       ||k(  sJ ‚y c c}w # 1 sw Y   ŒxY w)Nrö   rA   r  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rg   rh   s     r2   rk   z6test_backend_hinting_always_running.<locals>.<genexpr>Ê  s   è ø€ ð 5Ù$-˜qˆŒ”‹˜×¡Iùrl   )r  re   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   rg   rh   s     r2   rk   z6test_backend_hinting_always_running.<locals>.<genexpr>Ð  s   è ø€ ÐC¹°A˜_œW¤V›_¨Q×/¹ùrl   )ro   r!   r&   )re   r  rj   Úexpected_resultsrµ   s        r2   Ú#test_backend_hinting_always_runningr  Ã  sš   € ô
 ',¨B¤iÓ0¡i ˜˜1› iÐÐ0à4Œh˜f¨VÔ4ñ 5Ü$)¨"¤Ió5ó €Gð Ð&Ò&Ð&Ð&ä	 ¨vÖ	6Ø”(“*ÑC¼¸r¼ÓCÓCˆ÷ 
7àÐ&Ò&Ð&Ñ&ùò 1÷ 
7Ð	6ús   ŽBÁ!B	Â	Bc                 ó  —  G d„ dt         «      } | |«       «      5  t        dd¬«      }t        |j                  «      |u sJ ‚t        dd¬«      }t        |j                  «      |u sJ ‚	 d d d «        G d„ d	t         «      } | |«       «      5  t        dd¬«      }t        |j                  «      |u sJ ‚| j	                  «       \  }}|d
k(  sJ ‚|d
k(  sJ ‚t        ddd¬«      }t        |j                  «      t
        u sJ ‚| j	                  «       \  }}d}|j                  «       |k(  sJ ‚|d
k(  sJ ‚	 d d d «       t        t        «      5  t         |«       d¬«       d d d «       y # 1 sw Y   ŒýxY w# 1 sw Y   Œ@xY w# 1 sw Y   y xY w)Nc                   ó    — e Zd ZdZdZd„ Zd„ Zy)ú[test_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomThreadingBackendTc                  ó   — y r.   r0   r  s    r2   Úapply_asynczgtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomThreadingBackend.apply_asyncÜ  ó   € Ør1   c                 ó   — |S r.   r0   r·  s     r2   r$   zltest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomThreadingBackend.effective_n_jobsß  ó   € ØˆMr1   N©rN   rO   rP   Úsupports_sharedmemÚuse_threadsr  r$   r0   r1   r2   ÚMyCustomThreadingBackendr  Ø  s   „ Ø!ÐØˆò	ó	r1   r  rA   r  r  r  r  c                   ó    — e Zd ZdZdZd„ Zd„ Zy)ú\test_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomProcessingBackendFc                  ó   — y r.   r0   r  s    r2   r  zhtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomProcessingBackend.apply_asyncí  r  r1   c                 ó   — |S r.   r0   r·  s     r2   r$   zmtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomProcessingBackend.effective_n_jobsð  r  r1   Nr  r0   r1   r2   ÚMyCustomProcessingBackendr  é  s   „ Ø"ÐØˆò	ó	r1   r!  rª  rö   )re   r  r‚   z…Using ThreadingBackend as joblib backend instead of MyCustomProcessingBackend as the latter does not provide shared memory semantics.©r9   r  )	r   r!   r`   r  Ú
readouterrr   Ústripr   rT   )Úcapsysrw   r  r  r!  ÚoutÚerrrÁ   s           r2   Ú9test_backend_hinting_and_constraints_with_custom_backendsr(  Ô  sx  € ôÔ#6ô ñ 
Ñ)Ó+Õ	,Ü˜A kÔ2ˆÜ�A—J‘JÓÐ#;Ñ;Ð;Ð;ä˜A {Ô3ˆÜ�A—J‘JÓÐ#;Ñ;Ð;Ñ;÷ 
-ôÔ$7ô ñ 
Ñ*Ó,Õ	-Ü˜A kÔ2ˆÜ�A—J‘JÓÐ#<Ñ<Ð<Ð<à×$Ñ$Ó&‰ˆˆSØ�bŠyÐˆyØ�bŠyÐˆyä˜A {¸BÔ?ˆÜ�A—J‘JÓÔ#3Ñ3Ð3Ð3à×$Ñ$Ó&‰ˆˆSð8ð 	ð
 �y‰y‹{˜hÒ&Ð&Ð&Ø�bŠyÐ‰y÷% 
.ô( 
”
Õ	ÜÑ2Ó4¸kÕJ÷ 
Ð	÷K 
-Ð	,ú÷" 
.Ð	-ú÷( 
Ð	ús%   �AE'ÂB$E3ÅE?Å'E0Å3E<Å?Fc                  óø  — t        t        «      5  t        d¬«       d d d «       t        t        «      5  t        d¬«       d d d «       t        t        «      5  t        dd¬«       d d d «       t        �Kt        t        «      5  t        dd¬«       d d d «       t        t        «      5  t        d	d¬«       d d d «       y y # 1 sw Y   Œ¤xY w# 1 sw Y   ŒŒxY w# 1 sw Y   ŒsxY w# 1 sw Y   ŒTxY w# 1 sw Y   y xY w)
NÚinvalidr	  r
  r  r  )r  r  r)   r"  r(   )r   rT   r!   r   r0   r1   r2   Ú,test_invalid_backend_hinting_and_constraintsr+    s´   € Ü	”
Õ	Ü˜	Õ"÷ 
ô 
”
Õ	Ü˜Õ#÷ 
ô 
”
Õ	ô 	˜¨[Õ9÷ 
ô
 
€~ô ”JÕÜ˜V¨[Õ9÷  ä”JÕÜÐ.¸ÕD÷  Ðð ÷ 
Ð	ú÷ 
Ð	ú÷ 
Ð	ú÷  ÐúçÐús:   �C ´CÁCÂC$Â(C0Ã C	ÃCÃC!Ã$C-Ã0C9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 Y   yxY w)zCPerform nested parallel calls and introspect the backend on the wayrA   ry   r   Nc              3   óR   •K  — | ]  } t        t        «      dd ‰dz
  i‰¤Ž–— Œ  y­w)Úlimitr   Nr0   )r#   Ú_recursive_backend_info)ri   rj   rT  r.  s     €€r2   rk   z*_recursive_backend_info.<locals>.<genexpr>'  s2   øè ø€ ð 
á�ð -ŒGÔ+Ó,ÑG°5¸1±9ÐGÀÕGÙùr  r   )r!   r`   r  rN   r  ro   )r.  rT  r  Ú
this_levelrµ   s   ``   r2   r/  r/     s~   ù€ ô 
˜Õ	˜qÜ˜AŸJ™JÓ'×0Ñ0°!·*±*×2JÑ2JÐKÐLˆ
Ø�AŠ:Ø÷ 
Ñ	ñ ô 
ä˜1”Xó
ó 
ˆð ˜G A™JÑ&÷ 
×	Ò	ús   �=BÁ"BÂBc                 óš   —  | |d¬«      5  t        «       }d d d «       |j                  «       dz   }|dfdddg}|k(  sJ ‚y # 1 sw Y   Œ,xY w)NrA   ry   ÚBackendr   )r   r   )r   rA   )r/  Útitle)rw   r9   Úbackend_types_and_levelsÚtop_level_backend_typeÚexpected_types_and_levelss        r2   Útest_nested_parallelism_limitr7  .  sb   € ñ 
� Ö	#Ü#:Ó#<Ð ÷ 
$ð %Ÿ]™]›_¨yÑ8Ðà	 Ð#ØØ Ø ð	!Ðð $Ð'@Ò@Ð@Ñ@÷ 
$Ð	#ús   ‹AÁA
c                 óB   —  t        «       d„ t        d«      D «       «      S )z6A horrible function that does recursive parallel callsc              3   óD   K  — | ]  } t        t        «      «       –— Œ y ­wr.   )r#   Ú_recursive_parallelrh   s     r2   rk   z&_recursive_parallel.<locals>.<genexpr>A  s   è ø€ ÐG¹h¸Ð2”gÔ1Ó2×4¹hùrô  rA   rn   )Únesting_limits    r2   r:  r:  ?  s   € àŒ8‹:ÑG¼eÀA¼hÓGÓGÐGr1   c                 ó>  —  | |d¬«      5  t        t        «      5 }t        «        d d d «       d d d «       j                  }|dk(  r-ddlm} t        ||t        f«      rt        j                  d«       t        |t        «      sJ ‚y # 1 sw Y   ŒbxY w# 1 sw Y   ŒfxY w)NrA   ry   r)   r   )ÚTerminatedWorkerErrorz1Loky worker crash when serializing RecursionError)r   ÚBaseExceptionr:  r§   Ú&joblib.externals.loky.process_executorr=  r±   r   rJ  ÚxfailÚRecursionError)rw   r9   r¬  Úexcr=  s        r2   Útest_thread_bomb_mitigationrC  D  s‚   € ñ 
� Ö	#Ü”MÔ" gÜÔ!÷ #÷ 
$ð �-‰-€CØ�&Òõ 	Qä�cÐ1´=ÐAÔBô �L‰LÐLÔMä�cœ>Ô*Ð*Ñ*÷# #Ð"ú÷ 
$Ð	#ús!   ‹B›B¦BÂB	ÂBÂBc                  ór   — i } dD ]$  }t         j                  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ï  Úenvironr8  r   )Úenv_varsÚvars     r2   Ú_run_parallel_sumrO  `  s=   € Ø€Hóˆô Ÿ
™
Ÿ™ sÓ+ˆ�Šðð ”\ #Ó&Ð&Ð&r1   zNeed OpenMP helper compiledc                 ó*  —  t        d| ¬«      d„ t        d«      D «       «      }t        t        «       dz  d«      }|D ]T  \  }}||k(  sJ ‚|j	                  «       D ]5  \  }}|j                  d«      r|t        |«      k(  rŒ&J ‚|dk(  sJ ‚|dk(  rŒ5J ‚ ŒV y )NrA   rd   c              3   óD   K  — | ]  } t        t        «      «       –— Œ y ­wr.   )r#   rO  r×   s     r2   rk   z-test_parallel_thread_limit.<locals>.<genexpr>r  s    è ø€ ð 2Ù.6¨Ð"ŒÔ!Ó"×$©hùrô  r   Ú_THREADSrK  Ú1)r!   ro   r¶  r"   ÚitemsÚendswithr°   )r9   rµ   Úexpected_num_threadsÚworker_env_varsÚomp_num_threadsr¤   r§   s          r2   Útest_parallel_thread_limitrY  o  s­   € ð 2Œh˜a¨Ô1ñ 2Ü.3°A¬hó2ó €Gô œy›{¨aÑ/°Ó3ÐÛ,3Ñ(ˆ˜ØÐ"6Ò6Ð6Ð6Ø*×0Ñ0Ö2‰KˆD�%Ø�}‰}˜ZÔ(Ø¤Ð$8Ó 9Ó9Ð9Ð9à˜|Ò+Ð+Ð+Ø “|Ð#�|ñ 3ñ -4r1   zThis test requires daskc                 ó`   — t        t        d¬«      5   | d«       d d d «       y # 1 sw Y   y xY w)NzPlease install daskr  Údask)r   rT   )rw   s    r2   Ú)test_dask_backend_when_dask_not_installedr\  €  s"   € ô 
”
Ð"7Ö	8Ù�Œ÷ 
9×	8Ñ	8ús   ’	$¤-c                 ó  —  G d„ dt         «      }d} |  |«       «      5  t        j                  t        |¬«      5   t	        d¬«      d„ t        d«      D «       «       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nc                   ó    — e Zd Zd„ Zdd„Zd„ Zy)ú3test_zero_worker_backend.<locals>.ZeroWorkerBackendc                  ó   — yr_   r0   )rG   r¼   rT  s      r2   r´  z=test_zero_worker_backend.<locals>.ZeroWorkerBackend.configureŒ  ó   € Ør1   Nc                 ó   — t        d«      ‚)NzNo worker availabler   )rG   ÚfuncÚcallbacks      r2   r  z?test_zero_worker_backend.<locals>.ZeroWorkerBackend.apply_async�  s   € ÜÐ4Ó5Ð5r1   c                  ó   — yr_   r0   r·  s     r2   r$   zDtest_zero_worker_backend.<locals>.ZeroWorkerBackend.effective_n_jobs’  ra  r1   r.   )rN   rO   rP   r´  r  r$   r0   r1   r2   ÚZeroWorkerBackendr_  ‹  s   „ ò	ó	6ó	r1   rf  z&ZeroWorkerBackend has no active workerr  rA   ry   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr.   r  rh   s     r2   rk   z+test_zero_worker_backend.<locals>.<genexpr>˜  s   è ø€ Ð@±x°!˜{œw¤r›{¨1Ÿ~±xùrl   )r   rJ  r   r  r!   ro   )rw   rf  Úexpected_msgs      r2   Útest_zero_worker_backendri  ‡  sf   € ôÔ,ô ð <€LÙ	Ñ"Ó$Õ	%Ü�]‰]œ<¨|Ö<ØŒH˜AÔÑ@´u¸Q´xÓ@Ô@÷ =÷ 
&Ð	%ß<Ð<ú÷ 
&Ð	%ús"   ŸA;»#A/ÁA;Á/A8	Á4A;Á;Bc                  ó  ‡— 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 ‚y )Nzoriginal valuec                  ó   — t         S r.   )ÚMY_GLOBAL_VARIABLEr0   r1   r2   Úcheck_globalsz@test_globals_update_at_each_parallel_call.<locals>.check_globals£  s   € ä!Ð!r1   rA   ry   c              3   ó>   •K  — | ]  } t        ‰«      «       –— Œ y ­wr.   r%  ©ri   rj   rm  s     €r2   rk   z<test_globals_update_at_each_parallel_call.<locals>.<genexpr>©  ó    øè ø€ ð 1Ù*2 QÐŒ�Ó× ©(ùó   ƒzchanged valuec              3   ó>   •K  — | ]  } t        ‰«      «       –— Œ y ­wr.   r%  ro  s     €r2   rk   z<test_globals_update_at_each_parallel_call.<locals>.<genexpr>³  rp  rq  )rl  r!   ro   r—   )Úworkers_global_variablerm  s    @r2   Ú)test_globals_update_at_each_parallel_callrt  ›  s´   ø€ ð *Ðò"ñ ‹?Ð.Ò.Ð.Ð.à0œh¨aÔ0ó 1Ü*/°¬(ó1ó Ðô Ð&Ó'Ð,<Ð+=Ò=Ð=Ð=ð )ÐÙ‹?˜oÒ-Ð-Ð-à0œh¨aÔ0ó 1Ü*/°¬(ó1ó Ðô Ð&Ó'¨OÐ+<Ò<Ð<Ñ<r1   c                  ó²   — dd l } | j                  j                  dd«      } | j                  ||«       t	        j
                  d«      }|j                  «       S )Nr   r„   Úthreadpoolctl)Únumpyr@  rB  r>  rJ  ÚimportorskipÚthreadpool_info)r   rH   rv  s      r2   Ú_check_numpy_threadpool_limitsrz  ¿  sI   € Ûð
 	�	‰	�‰˜˜SÓ!€AØ
€B‡F�Fˆ1ˆa„LÜ×'Ñ'¨Ó8€MØ×(Ñ(Ó*Ð*r1   c                 óh   — |D ]  }|d   | d   k(  sŒ|d   c S  t        dj                  | «      «      ‚)NÚfilepathÚnum_threadsz,An unexpected module was loaded in child:
{})rT   rM  )Úchild_moduleÚparent_infoÚparent_modules      r2   Ú_parent_max_num_threads_forr�  Ë  sF   € Û$ˆØ˜Ñ$¨°ZÑ(@Ó@Ø  Ñ/Ò/ð %ô Ø7×>Ñ>¸|ÓLóð r1   c                 óf   — | D ],  }|D ]%  }t        ||«      }t        ||«      |h}|d   |v rŒ%J ‚ Œ. y )Nr}  )r�  Úmin)Úworkers_infor  r}  Úchild_threadpool_infor~  Úparent_max_num_threadsrÁ   s          r2   Úcheck_child_num_threadsr‡  Ô  sP   € ó ".ÐÛ1ˆLÜ%@Ø˜kó&Ð"ô ˜KÐ)?Ó@À+ÐNˆHØ Ñ.°(Ò:Ð:Ð:ñ 2ñ ".r1   )rA   r«   r�   rx   c                 ó   — t        «       }t        |«      dk(  rt        j                  d¬«        t	        d| ¬«      d„ t        d«      D «       «      }t        | «      } | dk(  r	|d   d	   }nt        t        «       | z  d«      }t        |||«       y )
Nr   ú&Need a version of numpy linked to BLASr¦  r)   r²  c              3   óD   K  — | ]  } t        t        «      «       –— Œ y ­wr.   ©r#   rz  rh   s     r2   rk   z;test_threadpool_limitation_in_child_loky.<locals>.<genexpr>í  s!   è ø€ ð GÙ;C°aÐ/ŒÔ.Ó/×1¹8ùrô  rA   r   r}  ©
rz  r›   rJ  rK  r!   ro   r$   r¶  r"   r‡  )re   r  Úworkers_threadpool_infosÚexpected_child_num_threadss       r2   Ú(test_threadpool_limitation_in_child_lokyr�  á  s“   € ô 1Ó2€KÜ
ˆ;Ó˜1ÒÜ�‰ÐCÕDàFœx°¸vÔFñ GÜ;@À¼8óGó  Ðô ˜fÓ%€FØ�‚{Ø%0°¡^°MÑ%BÑ"ä%(¬«¸Ñ)>ÀÓ%BÐ"äØ  +Ð/Iõr1   Úinner_max_num_threads)r   rA   r«   Nc                 óf  — t        «       }t        |«      dk(  rt        j                  d¬«        | d|¬«      5   t	        |¬«      d„ t        d«      D «       «      }d d d «       t        |«      }|d	k(  r	|d   d
   }n|€t        t        «       |z  d	«      }n|}t        ||«       y # 1 sw Y   ŒLxY w)Nr   r‰  r¦  r)   ©r�  ry   c              3   óD   K  — | ]  } t        t        «      «       –— Œ y ­wr.   r‹  rh   s     r2   rk   z>test_threadpool_limitation_in_child_context.<locals>.<genexpr>  s    è ø€ ð ;
Ù?G¸!Ð3ŒGÔ2Ó3×5¹xùrô  rA   r   r}  rŒ  )rw   re   r�  r  r�  rŽ  s         r2   Ú+test_threadpool_limitation_in_child_contextr”  ü  s¶   € ô 1Ó2€KÜ
ˆ;Ó˜1ÒÜ�‰ÐCÕDá	�Ð/DÖ	EØ#:¤8°6Ô#:ñ ;
Ü?DÀQ¼xó;
ó $
Ð ÷ 
Fô
 ˜fÓ%€FØ�‚{Ø%0°¡^°MÑ%BÑ"Ø	Ð	&Ü%(¬«¸Ñ)>ÀÓ%BÑ"à%:Ð"äØ  +Ð/Iõ÷ 
FÐ	Eús   ¹#B'Â'B0Úvar_name)rF  rG  rE  c                 óŒ  ‡‡— t        |«      dk(  rt        j                  d«       t        d¬«      j	                  «        d„ Št
        j                  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 «       |ddgk(  sJ ‚	 |€t
        j                  ‰= y |t
        j                  ‰<   y # 1 sw Y   Œ;xY w# |€t
        j                  ‰= w |t
        j                  ‰<   w xY w)Nr   zSkip test when n_jobs == 1T©Úreusec                 ó@   — t         j                  j                  | «      S r.   )rï  rL  r8  )r•  s    r2   Ú_get_envz>test_threadpool_limitation_in_child_override.<locals>._get_env,  s   € Ü�z‰z�~‰~˜hÓ'Ð'r1   Ú4ry   c              3   ó@   •K  — | ]  } t        ‰«      ‰«      –— Œ y ­wr.   r%  ©ri   rj   rš  r•  s     €€r2   rk   z?test_threadpool_limitation_in_child_override.<locals>.<genexpr>3  s   øè ø€ Ð)XÉxÈ!Ð*;¬'°(Ó*;¸H×*EÉxùr&  rA   r)   r’  c              3   ó@   •K  — | ]  } t        ‰«      ‰«      –— Œ y ­wr.   r%  r�  s     €€r2   rk   z?test_threadpool_limitation_in_child_override.<locals>.<genexpr>7  s"   øè ø€ ð .Ù5=°Ð!”˜Ó! (×+±Xùr&  rS  )
r$   rJ  rK  r   Úshutdownrï  rL  r8  r!   ro   )rw   re   r•  Úoriginal_var_valuerµ   rš  s     `  @r2   Ú,test_threadpool_limitation_in_child_overrider¡    s   ù€ ô ˜Ó 1Ò$Ü�‰Ð0Ô1ô  Ô%×.Ñ.Ô0ò(ô Ÿ™Ÿ™¨Ó1Ðð6Ø"Œ�
‰
�8Ñà)”( &Ô)Ô)XÌuÐUVÌxÓ)XÓXˆØ˜3 ˜*Ò$Ð$Ð$á�V°1Ö5Ø-”h fÔ-ô .Ü5:¸1´Xó.ó ˆG÷ 6ð ˜3 ˜*Ò$Ð$Ñ$ð Ð%Ü—
‘
˜8Ñ$à#5ŒB�J‰J�xÒ ÷ 6Ð5ûð Ð%Ü—
‘
˜8Ñ$à#5ŒB�J‰J�xÒ ús%   Á#AD Â.&DÃD ÄDÄD Ä)E)rA   r«   rx   c                 óˆ   — d„ } || «       t        d¬«      }t        d«      D ]  } || «       t        d¬«      }||k(  rŒJ ‚ y )Nc                 ód   ‡— t        d«      Š t        | ¬«      ˆfd„t        d«      D «       «       y )Nrö   ry   c              3   óH   •K  — | ]  } t        t        «      ‰«      –— Œ y ­wr.   )r#   Úsum)ri   rj   r<   s     €r2   rk   zAtest_loky_reuse_workers.<locals>.parallel_call.<locals>.<genexpr>K  s   øè ø€ ÐC¹°A ¤¬£¨Q§¹ùrç   )ro   r!   )re   r<   s    @r2   Úparallel_callz.test_loky_reuse_workers.<locals>.parallel_callI  s%   ø€ Ü�"‹IˆØŒ˜ÔÓC¼¸r¼ÓCÕCr1   Tr—  rö   )r   ro   )re   r¦  Úfirst_executorrÊ   rž   s        r2   Útest_loky_reuse_workersr¨  C  sL   € òDñ
 �&ÔÜ*°Ô6€Nô �2ŽYˆÙ�fÔÜ(¨tÔ4ˆØ˜>Ó)Ð)Ð)ñ r1   c                 ó2   — d| t        j                  «       <   y )NÚinitialized)rï  rð  )Ústatuss    r2   Ú_set_initializedr¬  Y  s   € Ø'€FŒ2�9‰9‹;Òr1   c                 ól  — t        j                  «       }| j                  |d «      }|dv s
J d|› �«       ‚|sy d| |<   t        j                  «       dz   }t	        | j                  «       D ��cg c]  \  }}|dk(  sŒ|‘Œ c}}«      }t        j                  «       |k  ri||k  rdt        j                  d«       t	        | j                  «       D ��cg c]  \  }}|dk(  sŒ|‘Œ c}}«      }t        j                  «       |k  r||k  rŒdt        j                  «       |k\  rt        d«      ‚S c c}}w c c}}w )N)rª  Ústartedz2worker should have been in initialized state, got r®  r2  rÕ   z-Waited more than 30s to start all the workers)rï  rð  r8  rX   r›   rT  r   r   )r«  re   Úwait_workersÚpidÚstateÚdeadliner   Ú	n_starteds           r2   Ú_check_statusr´  ]  s  € Ü
�)‰)‹+€CØ�J‰J�s˜DÓ!€EØÐ.Ñ.ð Ø
<¸U¸GÐDóÐ.ñ Øà€Fˆ3�Kä�y‰y‹{˜RÑ€HÜ v§|¡|¤~ÔH¡~™V˜S !¸¸i»’S ~ÒHÓI€IÜ
�)‰)‹+˜Ò
  Y°Ò%7Ü�
‰
�3ŒÜ¨6¯<©<¬>ÔL©>¡  a¸QÀ)»^š¨>ÒLÓMˆ	ô �)‰)‹+˜Ò
  Y°Ó%7ô ‡y�yƒ{�hÒÜÐJÓKÐKà€Jùó Iùó Ms   Á,D*
Á:D*
ÃD0
ÃD0
c                 óâ   ‡ ‡— t        j                  «       }|j                  «       Š ||‰ t        ‰f¬«      5   t	        «       ˆ ˆfd„t        d«      D «       «       d d d «       y # 1 sw Y   y xY w)N©r9   re   ÚinitializerÚinitargsc              3   óJ   •K  — | ]  } t        t        «      ‰‰«      –— Œ y ­wr.   ©r#   r´  ©ri   rj   re   r«  s     €€r2   rk   z+test_initializer_context.<locals>.<genexpr>„  s!   øè ø€ ÐNÁ:¸aÐ)”7œ=Ó)¨&°&×9Á:ùr~  r„   )r   r†  Údictr¬  r!   ro   )re   r9   rw   rˆ  r«  s   `   @r2   Útest_initializer_contextr½  t  s[   ù€ ô
 �j‰j‹l€GØ�\‰\‹^€Fñ 
ØØÜ$Ø�ö	
ð 	Œ‹
ÔNÄ5ÈÄ:ÓNÔN÷
÷ 
ñ 
ús   ¸$A%Á%A.c                 óª   ‡ ‡— t        j                  «       }|j                  «       Š t        |‰ t        ‰f¬«      ˆ ˆfd„t        d«      D «       «       y )Nr¶  c              3   óJ   •K  — | ]  } t        t        «      ‰‰«      –— Œ y ­wr.   rº  r»  s     €€r2   rk   z,test_initializer_parallel.<locals>.<genexpr>•  s!   øè ø€ ÐA±j°Ð„gŒmÓ˜V V×,±jùr~  r„   )r   r†  r¼  r!   r¬  ro   )re   r9   rˆ  r«  s   `  @r2   Útest_initializer_parallelrÀ  ‡  sJ   ù€ ô �j‰j‹l€GØ�\‰\‹^€Fð„HØØÜ$Ø�ô	ô
 B´e¸C´jÓAõBr1   c                 ó@  ‡ ‡— d}t        j                  «       }|j                  «       Št        «       }t	        |«      D ]I  } t        d‰ t        ‰f¬«      ˆ ˆfd„t	        ‰ «      D «       «      }|j                  t        |«      «      }ŒK t        |«      ‰ k(  sJ d«       ‚y )Nrm   r)   r¶  c              3   óN   •K  — | ]  } t        t        «      ‰‰d ¬«      –— Œ y­w©T)r¯  Nrº  r»  s     €€r2   rk   z*test_initializer_reused.<locals>.<genexpr>¨  ó,   øè ø€ ð 

á"�ð #ŒG”MÓ" 6¨6À×EÐEÙ"ùrÌ   z=The workers should be reused when the initializer is the same)	r   r†  r¼  r—   ro   r!   r¬  Úunionr›   ©re   Ún_repetitionsrˆ  Úpidsrj   rµ   r«  s   `     @r2   Útest_initializer_reusedrÉ  ˜  sš   ù€ ð
 €MÜ�j‰j‹l€GØ�\‰\‹^€Fä‹5€DÜ�=Ö!ˆð
”(ØØÜ(Ø�Yô	
ô


ä˜6”]ó

ó
ˆð �z‰zœ#˜g›,Ó'‰ð "ô ˆt‹9˜Òð ØGóÑr1   c                 óF  ‡ ‡— d}t        j                  «       }t        «       }t        |«      D ]Y  }|j	                  «       Š t        d‰ t        ‰f¬«      ˆ ˆfd„t        ‰ «      D «       «      }|j                  t        |«      «      }Œ[ t        |«      |‰ z  k(  sJ d«       ‚y )Nrm   r)   r¶  c              3   óN   •K  — | ]  } t        t        «      ‰‰d ¬«      –— Œ y­wrÃ  rº  r»  s     €€r2   rk   z.test_initializer_not_reused.<locals>.<genexpr>Ã  rÄ  rÌ   zFThe workers should not be reused when the initializer arguments change)	r   r†  r—   ro   r¼  r!   r¬  rÅ  r›   rÆ  s   `     @r2   Útest_initializer_not_reusedrÌ  ²  sŸ   ù€ ð €MÜ�j‰j‹l€Gä‹5€DÜ�=Ö!ˆØ—‘“ˆð
”(ØØÜ(Ø�Yô	
ô


ä˜6”]ó

ó
ˆð �z‰zœ#˜g›,Ó'‰ð "ô ˆt‹9˜¨Ñ.Ò.ð ØPóÑ.r1   )F)r   r   )rm   r.   )ÓrQ   rŒ  rï  r•   rN  r*   rX   r®   râ  r!  r   Úmathr   r(   r   Úpickler   r   Ú	tracebackr	   rJ  r]  r
   r   r   Újoblib._multiprocessing_helpersr   Újoblib.test.commonr   r   r   r   Újoblib.testingr   r   r   r   r   Újoblib.externals.lokyr   rc  r   ÚposixÚImportErrorÚ _openmp_test_helper.parallel_sumr   ÚdistributedÚjoblib._parallel_backendsr   r   r   r   r   Újoblib.parallelr    r!   r"   r#   r$   r%   r&   r'   rv  ÚRETURN_GENERATOR_BACKENDSÚpopr­  ÚkeysÚALL_VALID_BACKENDSÚPROCESS_BACKENDSÚPARALLEL_BACKENDSÚhasattrr‘   r+   r3   r:   r>   rC   Ú	ExceptionrE   rV   rZ   r]   rb   rq   rs   rv   Úmarkr€   r‹   r¢   r¸   rÄ   rÑ   rß   rä   rè   rê   rì   rô   rý   r  r  r0  r6  r:  r—   rE  rS  ra  re  r�  rŒ  r”  r˜  rœ  r¢  r¥  r@  r¯  r±  r¹  r¾  rÆ  rÉ  rÍ  rÒ  rÙ  rÝ  Úextendro   rÞ  rà  ré  rí  rñ  rõ  Ú_parallel_backendsr÷  r  r
  r  r  r(  r+  r4  r;  rD  rL  rQ  rZ  rX  ÚSQUARE_LOCALÚSQUARE_LAMBDArc  rM  r[  r\  r^  re  rh  rm  rn  rr  rw  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/  r7  r:  Úno_coverrC  rO  rY  r\  ri  rt  rz  r�  r‡  r�  r”  r¡  r¨  r¬  r´  r½  rÀ  rÉ  rÌ  )Úbackend_strrj   s   00r2   Ú<module>ré     s¬  ðñó Û 	Û 	Û 
Û Û Û Û Ý "Ý Ý (Ý  Ý Ý &ã ã ß 'Ñ 'Ý .÷ó ÷ UÕ Tà€>å;å ðÛðÝ>ðÛ÷õ ÷
÷ 
õ 
ð *˜HŸM™M›OÐ Ø × Ñ Ð/°Ô 6à�V™f ] X§]¡]£_Ó5Ñ5Ð à Á(ÓKÁ(°;Ð,�x Ñ,Õ.À(ÑKÑ KÐ Ø€:ØÑà)¨6Ð2ÐØ$¨ }Ñ4Ð á
ˆ2ˆ}Ôà×Ñ˜n˜bŸn™n¨WÓ5Ô6ò.òIòòô ô óòó
ò2òòò"ñ ˆY˜Ð*:Ð;Ó<Ø‡�×ÑØ%ØˆbÑ"¨"Ô-Ð.°	Ð:Ú0ð ó ð
 ñ.ó óó =ð.ñ ˆYÐ*Ó+ÙˆX’~Ó&ÙˆYšÓ%ñ,ó &ó 'ó ,ð,ñ ˆYÐ*Ó+ÙˆX˜˜1�vÓñó ó ,ðñ( ˆYÐ*Ó+ñ'ó ,ð'òTð0 ÙØ+òó
ñó
ó ðð2 ÙˆYÒ@ÓAñó Bó ðòQñ ˆ_˜hÓ'ÙÐ˜xÓ(ñó )ó (ðòð ñWó ðWòñ ˆX’yÓ!ñó "ðñ ˆYÐ)Ó*ñ/ó +ð/ð: ñ
ó ð
ð ØÙˆ[š/Ó*Ùˆ\˜A˜t˜9Ó%ñ5ó &ó +ó ó ð5ñ$ ˆYÐ)Ó*ñ	ó +ð	ð ÙˆYÐ)Ó*ñ
ó +ó ð
ð ÙˆY™Ð5Ó6¸,¸ÑGÓHÙˆ[˜;Ð(=Ð>Ó?ñó @ó Ió ðð$ ÙˆYÐ(Ó)ñC
ó *ó ðC
ðL ÙˆY˜Ó!ñEó "ó ðEò,'ñ ˆY˜Ó!ÙØ ð òð	
ð$ òð	
ð%$ó'ñPóQ'ó "ðRð  ÙˆYÐ)Ó*ñó +ó ðò<4ð ÙˆYÐ(Ó)ñ3ó *ó ð3ò
òHòMð ÙˆYÐ)Ó*Ø‡�×ÑÐCÐÓDñ-ó Eó +ó ð-ô,Ð+ô ò
ñ ˆYÐ*Ó+ñHó ,ðHð$ ÙˆYÐ)Ó*ÙˆX’}Ó%ñ:ó &ó +ó ð:ò%ò	Dñ ˆ�$ˆÐ=Ô>ñ9ó ?ð9ò;ð* $5±QÐ#7Ð  Ø  × 'Ò 'ÉÈaÌÓ(QÉÀ1Ð):¸QÓ)>ÈÑ(QÔ Rð ÙˆYÐ8Ó9ÙˆYÐ)¨?Ð;Ó<ñDó =ó :ó ðDô,Ð#4ô ñ ˆY˜Ð*:Ð;Ó<ñDó =ðDñ& ˆY˜Ð*:Ð;Ó<ñDó =ðDò(ò
Qô>�×)Ò)×5Ñ5ô >ñ Ð/°Ô ;ð ÙˆYÒWÓXÙˆY˜Ð*:Ð;Ó<ñ,ó =ó Yó ð,ð ÙˆX’}Ó%ÙˆYÐ)Ó*ÙˆY˜Ð*:Ð;Ó<ñ
ó =ó +ó &ó ð
ò07ð Ùˆ_Ð/Ó0Ùˆ_Ð/Ó0ÙˆY˜Ð*:Ð;Ó<ñ
ó =ó 1ó 1ó ð
ð ÙˆY˜Ð*:Ð;Ó<ÙÐ%¨¨e }Ó5ñ!ó 6ó =ó ð!ñ: ˆ\š=Ó)ñ(ó *ð(ñ
 Ø/òóñ ó!ð ð ñ+ó ð+ð ØÙˆYÐ(Ó)ñSó *ó ó ðSð,0Ð ,ð  ÙˆYÐ(Ó)ñó *ó ðð-Ð )ð@€ð€ð€ð
 ÙˆYÐ(°"°*©BÀ7À)ÑLÓMÙˆ]˜[¨,¸ÐFÓGÙÐ Ò"?Ó@ñó Aó Hó Nó ðð,(9÷P ‚F˜bŸgšgŸošo¨b¯gªg¯oªo¸f¿oºoÓ.NÓO€FÓPðQ 6ðV ñ
ó ð
ð=÷, ‚F˜bŸgšgŸošo¨b¯gªg¯oªo¸f¿oºoÓ.NÓO€FÓPð- :ð2 ñó ðò8ò
ð ØÙˆYÐ(Ó)ñ8ó *ó ó ð8ò6ð Øñ	/ó ó ð	/ò
òð
 ‡�×Ñ˜¢9Ó-ñ;ó .ð;òòð" ‡�×Ñ˜ A q 6Ó*ð ÙˆY™Ð5Ó6¸,¸ÑGÓHñNó Ió ó	 +ðNñ ˆYÐ*Ó+ÙˆX’~Ó&ñó 'ó ,ðòòð ÙˆYÐ1Ó2Ùˆ[˜;Ð(=Ð>Ó?ÙˆX’~Ó&ñ>ó 'ó @ó 3ó ð>ñ ˆYÐ1Ó2Ùˆ[˜;Ð(=Ð>Ó?ÙˆX’~Ó&ñ
ó 'ó @ó 3ð
ñ& ˆYÐ1Ó2Ùˆ[˜;Ð(=Ð>Ó?ÙˆX’~Ó&ñ
ó 'ó @ó 3ð
ñ& ˆYÐ1Ó2Ùˆ]˜[Ð*?Ð@ÓAÙˆ]˜[Ð*?Ð@ÓAÙˆX’~Ó&ñ>ó 'ó Bó Bó 3ð>ñ& Øòóñ ˆ]˜[Ð*?Ð@ÓAÙˆ]˜[Ð*?Ð@ÓAñ)"ó Bó Bóð)"ðX ØÙˆYÐ(Ó)ñPó *ó ó ðPñD Ø r z��{Ñ#Ò7Róñ0óð0ð ÙˆYÐ(Ó)ñó *ó ðð, ÙˆY˜Ð*:Ð;Ó<ñ+ó =ó ð+ñ\ ˆX˜˜1�vÓÙˆXÒ5Ó6ñ'ó 7ó ð'ñ ˆY˜Ð*:Ð;Ó<ñ3Kó =ð3KòlEó*'ð ÙˆY˜ Ð-Ó.ÙˆY˜Ð*:Ð;Ó<ñAó =ó /ó ðAóHð
 ‡�×ÒÙˆY˜Ð*:Ð;Ó<ÙˆY¨"¨*˜+™¸6À;Ð:OÓQñ+ó Ró =ó ð+ò2'ñ ˆY¨2¨>˜$ ™À¸vÓGÙˆ˜ÐÐ%BÔCñ$ó Dó Hð$ñ ˆY˜Ð*:Ð;Ó<Ùˆ˜4ÐÐ(AÔBñó Có =ðñ
 ˆY˜Ð*:Ð;Ó<ñAó =ðAò&=òH	+òò
;ð ØÙˆX’~Ó&ñó 'ó ó ðð0 ØÙÐ$¢oÓ6ÙˆX˜˜2�wÓÙˆY˜Ð*:Ð;Ó<ñó =ó  ó 7ó ó ð
ð6 ÙˆX˜˜2�wÓÙˆZÒWÓXÙˆY˜Ð*:Ð;Ó<ñ 6ó =ó Yó  ó ð 6ðF ÙˆX’zÓ"ñ*ó #ó ð*ò((óð. ÙˆX˜˜1�vÓÙˆYÐ(Ó)ÙˆY˜Ð*:Ð;Ó<ñOó =ó *ó ó ðOð ÙˆX˜˜1�vÓÙˆYÐ(Ó)ñBó *ó ó ðBð Ø‡�×Ñ˜ A q 6Ó*ñó +ó ðð0 Ø‡�×Ñ˜ A q 6Ó*ñó +ó ñøðOD ò ØƒEðûð
 ò ØƒLðûð
 ò ØƒKðüò6 Lùò~ )RsB   Âl Âl( Âl6 Ã?mÐ?m	ìl%ì$l%ì(l3ì2l3ì6mí m