Ë
    ÷Q(h�. ã            	       ó^  — d Z ddlZddlZddlZddlZddlZddlZddl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"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 �
Œyw 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© ó    úW/var/www/skyplay_api_hub/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    è ø€ ò :Ø ˆŒ”‹˜×ñ:ùó   ‚!é   ©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€   ¢   sQ   € ñ 
� ^Ô	4ñ @ô   tÔ,°Ò?Ð?Ñ?÷@ô
  4Ô(¨AÒ-Ð-Ñ-÷@ð @ú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‹   ¸   sP   € ô  % Q›xÖ(˜!ŒF�1�IÒ(ð -¬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
Ø#$ˆOŒG”F‹O˜A×ñ6
ù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
ó 
ˆð š)Ò#Ð#Ñ#÷	$ð öàØ¤3 q§y¡y£>Ñ1Ü˜1Ÿ9™9Ô&8Ô9ò 	
ð€Hð ð Ð+Ñ+¬zØÔ'ô0ð MˆØ'ÖN˜!¨<¼sÀ1Ç9Á9»~Ò+M’AÐNˆÐ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#   è ø€ ò 'ØCGÐ.°$·)±)¸A±,Ô>ñ'ùó   ‚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º   € Ü	×	 Ñ	 ¨Ô	-ð B°Ü×Ñ˜hÔ'Ü˜g°LÕA÷Bð $,Ö,˜a�—	“	Ð,€HÐ,ÙÙÜ#&ñ 'ØKSô'ó $Ð õ '6”�H“ Ò"¼3¸x»=ÈAÑ;Mð +ð (ÒJÐ,JÐJàáÐˆ|Ø÷)Bð Büò -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>(  s4   øè ø€ ò /ð ð 	(ŒÔ&Ó'Ø!°¸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  s4   øè ø€ ò 5ð ð 	(ŒÔ&Ó'Ø!°¸H÷	
ð 	
ñ5ù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°q˜~œw¤u›~¨c×2ÑEùrl   r«   r   )r®   r¯   r!   ro   Úprintr›   )Úis_run_parallelr´   s     r2   Úbackground_threadz=test_background_thread_parallelism.<locals>.background_threadD  sc   € Ü×$Ñ$¨DÔ1ð 	F°XØŒH˜AÔÑE¼EÀ!»HÔEÔE÷	FäŒc�(‹mÔÜ  ›]¨aÑ/ˆ˜Ò÷	Fð 	Fú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À!¨¬´«¸×(=Ñ'Pù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#   øè ø€ ò /Ø01ÐŒ”Ó˜]×+ñ/ùó   ƒ"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ì   `  su   € ä	”
Ó	ñ WÜ˜Q¨Ô/ð 	W°8ÙÐ*”gœkÓ*¨6Ó2Ð4L´G¼OÓ4LÈVÓ4TÐUÔV÷	W÷Wð W÷	Wð 	Wú÷Wð Wú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À!¨N¬G°A·E±E«N¸1×,=Ñ+Pù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%   è ø€ ò ?Ø ˆ
Œ”‹
�1˜×Ðñ?ùó   ‚!#N)ro   r]   r!   )re   Úlstr<   s      r2   Útest_parallel_kwargsrý   n  sO   € ô �‹)€CØ"Ö#˜!ŒAˆa�1ŽIÒ#Ð'>¤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°˜œ¤› A¨×+Ð+Ñ9ùrû   )ro   r]   r!   Ú_backendr   r:   )r9   rü   r<   rÁ   ÚpÚmanaged_backends         r2   Ú test_parallel_as_context_managerr  w  s  € ä
�‹)€CØ#&Ö'˜a”�!�q–	Ð'€HÐ'ä	˜ GÔ	,ð K°ð Ÿ*™*ˆð ™1Ñ=¸Ô=Ó=Ò=Ð=Ð=Ø™1Ñ=¸Ô=Ó=Ò=Ð=Ð=ô ˆ>Ü˜Ó/´;¸q¿z¹zÓ3JÑJÐJÐJ÷Kô  
€~Ü˜1Ÿ:™:Ó&Ð.Ð.Ð.ð ‘qÑ9°SÔ9Ó9Ò9Ð9Ð9Ü	€~Ü˜1Ÿ:™:Ó&Ð.Ð.Ñ.ð ùò/ (÷Kð Kú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%   øè ø€ ò +
Ø12ˆKŒG”B‹KÑ)Ó+×,ñ+
ùó   ƒ$'rö   N)Úobjectr   r   r!   ro   )r  s   @r2   Útest_parallel_picklingr  •  sS   ø€ ô&œFô &ô 
”Ð%8Ô	9ñ 
Ø*Œ˜ 6Ô*ó +
Ü6;¸B³iô+
ô 	
÷
÷ 
ñ 
ú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Ø*+Ð"ŒÐ!Ó" 1×%ñGùó   ƒ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ò 5Ñ'ˆ
Ð'Ø"Ð&:Ò:Ð:Ð:Ø" j×&6Ñ&6×&@Ñ&@Ò@Ð@Ð@Ü
�
‰
×%Ñ% a¨Õ4ñ5r1   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    è ø€ ò <Ø*+�”œ“˜u×%ñ<ù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    è ø€ ò :
Ø#$ˆNŒG”E‹N˜2×ñ:
ùrl   rö   )r   r   r!   ro   r8   s    r2   Útest_parallel_timeout_failr:  È  sE   € ô 
”Ó	ñ 
Ø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Ø'(�”œ“˜r×"ñRù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
Ø%&ˆNŒG”E‹N˜4× ñM
ù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>  ó%   è ø€ ò >Ø'(�
”œ“
˜1 ×"Ð"ñ>ù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×@Ð@ÑTù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©T¨Q°Ð"”œÓ" 1 aÕ(ÓIô÷	ô
 Ô%Ó&ñ 	Ø/ŒH˜A wÔ/Ø7=Ö>°!Ð*”Ô)Ó*¨1Õ-Ò>ô÷	ô ˜Q¨Ô0ð #	°HÜ˜x×0Ñ0Ó1Ð=Ð=Ð=Ü*¨8×+<Ñ+<Ó=ÐäÔ)Ó*ñ TÙ¼cÀ&È&Ó>Q×R±d°a¸Ð+œ'¤(Ó+¨A¨qÕ1ÓRÔS÷Tô
 ˜x×0Ñ0Ó1Ð=Ð=Ð=ô ˜x×0Ñ0Ó1Ð9IÑIÐIÐIä',¨R£yÖ1 !”A�a˜1–IÒ1±Xñ >Ü,1°"«Iô>ó 6ò ð ð ô  +¨8×+<Ñ+<Ó=ÐÜÔ)Ó*ñ IÙÀÖG¸1Ð3œ'Ô"2Ó3°AÕ6ÒGÔH÷Iô ˜x×0Ñ0Ó1Ð=Ð=Ð=ô ˜x×0Ñ0Ó1Ð9IÑIÐIÐIä',¨R£yÖ1 !”A�a˜1–IÒ1±Xñ >Ü,1°"«Iô>ó 6ò ð ð ×#Ñ#Ø×*Ñ*Ø×+Ñ+Ø×"Ñ"ð	óñ ÷9#	ôN ˜8×,Ñ,Ó-Ð5Ð5Ð5äÔ%Ó&ñ 	OØŒH˜AÔÀfÖMÀÐ 9¤Ô(8Ó 9¸!Õ <ÒMÔN÷	Oô
 
Ô!Ó	"ñ VØŒ˜ÔÄÀFÈFÓ@S×T¹¸¸1Ð-œG¤HÓ-¨a°Õ3ÓTÔU÷Vô 
Ô*Ó	+ñ 
Ø%Œ˜ 1Ô%ÙTÌ%ÐPRË)ÔTô	
÷
ð 
ùóu J÷	ñ 	üò ?÷	ñ 	üó S÷Tñ Tüò 2ùò H÷Iñ Iüò 2÷9#	ñ #	üòT  N÷	Oñ 	Oüó U÷Vð Vú÷
ð 
ú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  s1   è ø€ Ü�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 QˆoŒg”f‹o˜a× ÑCù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 QˆoŒg”f‹o˜a× ÑDùrl   é   ©r   )r!   r   rT   )r9   rY  r  s      r2   Útest_error_in_task_iteratorra  /  sÝ   € óô 
˜ GÔ	,ð E°ä”JÐ&>Ô?ñ 	DÙÑC©,ÀÔ*BÔCÔC÷	Dô
 ”JÐ&>Ô?ñ 	DÙÑC©,ÀÔ*BÔCÔC÷	Dô ”JÐ&>Ô?ñ 	EÙÑD©,ÀÔ*CÔDÔD÷	E÷Eð E÷	Dð 	Dú÷
	Dð 	Dú÷	Eð 	Eú÷Eð Eú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  ó0   øè ø€ Ü�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%   øè ø€ ò ?Ø()ÐŒ”Ó˜% ×#ñ?ùó   ƒ #é   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Ø,-ÐŒ”Ó˜% ×'ñFù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”  ¤  sT   € ô
 
˜ v°{Ô	Cð 4ÀqÙ	Ñ	.¤%¨£+Ô	.Ô.Ø�z‰z×,Ñ,Ó.°!Ò3Ð3Ñ3÷4÷ 4ñ 4úó   �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˜  ®  sV   € ô 
˜ v°wÔ	?ð 3À1Ù	Ñ	.¤%¨£+Ô	.Ô.ð
 �z‰z×,Ñ,Ó.°Ò2Ð2Ñ2÷3÷ 3ñ 3ú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
Ø-.Ð%ŒGÔ$Ó% a×(ñ7
ùrl   r2  N)r   rT   r!   ro   r0   r1   r2   Útest_exception_dispatchrœ  º  sC   € ä	”
Ó	ñ 
Ø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¸Ð0”wÔ/Ó0°×3ÑGù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ÑLù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#   è ø€ ò ,
Ø23Ð*ŒGÔ)Ó*¨1×-ñ,
ù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ñ )Ü˜Õ(÷)ô 
”
Ð"4Ô	5ñ Ü ^Ô4ñ 	Ø÷	÷ô 
”
Ð"4Ô	5ñ Ü ^Ô4ñ 	Ø÷	÷ð ÷)ð )ú÷	ð 	ú÷ð ú÷
	ð 	ú÷ð ú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¾  þ  s6  € ä	”
Ó	ð B˜wÜ˜ 7Ô+×?Ñ?ÔA÷Bà3´s¸7¿=¹=Ó7IÑIÐIÐIä	”
Ó	ð D˜wÜ˜ WÔ-×AÑAÔC÷Dà3´s¸7¿=¹=Ó7IÑIÐIÐIä	”
Ó	ð F˜wÜ˜ wÔ/×CÑCÔE÷Fà1´S¸¿¹Ó5GÑGÐGÐGä	”
Ó	ð N˜wÜ˜¨wÔ7×KÑKÔM÷Nà1´S¸¿¹Ó5GÑGÐGÑG÷Bñ Bú÷Dð Dú÷Fð Fú÷Nð Nú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×Ñ2ù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�~Ñ9ù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¸ ¤¬£°×!3Ñ Fù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¨!�?”7œ6“? 1×%Ñ8ùrl   )r   ÚUserWarningr!   ro   r&   r0   r1   r2   Útest_backend_no_multiprocessingrÒ  1  sy   € ä	Œ{Ð"MÔ	Nñ GØ Œ˜Ô Ñ F¼UÀ1»XÔ FÔF÷Gô 
 Ô	(ñ 9ØŒ‹
Ñ8¬u°Q«xÔ8Ô8÷9ð 9÷	Gð Gú÷9ð 9ú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Ù  ;  sA  € Ù	� 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+   øè ø€ ò ,àÙð 	/ŒÔ-Ó.¨w¸×:ñ,ù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¨�M”GœD“M !×$Ñ7ù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ñ 8Ü(0×(CÑ(CÓ(EÑ%ˆ˜Ü�NÓ#Ô'CÑCÐCÐCØ×#Ñ# rÒ)Ð)Ð)Ø Ò!Ð!Ð!Ü‹JˆØ�x‰x˜1Š}Ðˆ}Ø�z‰z˜^Ñ+Ð+Ð+ÙÑ7¬e°A«hÔ7Ó7ˆ÷8ð ¬¨a«Ö1 1”t˜A•wÒ1Ò1Ð1Ð1ô  Ó!Ô%AÓ%CÒCÐCÑC÷8ð 8üò 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ñ 8Ü(0×(CÑ(CÓ(EÑ%ˆ˜Ü�NÓ#Ô'CÑCÐCÐCØ×#Ñ# rÒ)Ð)Ð)Ø Ò!Ð!Ð!Ü‹JˆØ�x‰x˜1Š}Ðˆ}Ø�z‰z˜^Ñ+Ð+Ð+ÙÑ7¬e°A«hÔ7Ó7ˆ÷8ð ¬¨a«Ö1 1”t˜A•wÒ1Ò1Ð1Ð1ô  Ó!Ô%AÓ%CÒCÐCÑC÷8ð 8üò 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À!Ð;œgÔ&:Ó;×=ÑPùó   ‚ )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ÀqÐ(@¬´Ó(@×(BÑ'Vùrô  rö   r   )r!   ro   r›   r—   )rw   r9   Ú
pid_groupsÚ	pid_groups       r2   Ú#test_nested_backend_context_managerr  »  sc   € ñ 
�Ó	ñ ,Ø'”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,   øè ø€ ò ØGHÐ%ŒÐ$Ó%¤h×&>Ñ&>À×Bñù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&   øè ø€ ò 
Ø?@Ð)ŒGÐ(Ó)¨'°6×:ñ
ùs   ƒrn   )r9   re   rw   r  s   `` @r2   Ú!test_nested_backend_in_sequentialr
  È  sm   ú€ ò@ð „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  ä  sX   € Ù	�Ó	ð 7 3Ø”oÑ%Ø˜)‘nˆGØÔ&Ñ&Ø˜!‘fˆGØ×$Ñ$¨Ò6Ð6Ñ6÷7÷ 7ñ 7ú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(   øè ø€ ò .ØDEÐ$ŒÔ#Ó$ 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(   øè ø€ ò 
ØHIÐ(ŒGÔ'Ó(¨°-À×Cñ
ùr  )r  r!   ro   )rw   r  r  s   ` `r2   Útest_backend_nesting_levelr  í  sr   ù€ ô ˜ °Ô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§.Ñ!Cù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°qÐ/œ7 ;Ó/°×2ÑEù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Ñ Lùrl   r0   rŠ   )rœ   re   r„  r{  Úparamsrj   rÁ   rµ   s           r2   Útest_dispatch_race_conditionr4  %  s\   € ð( °ÈJÑW€FÜ#(¨£>Ö2˜a”�q•	Ð2€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×(?Ñ'Rù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<  s3   è ø€ Ü�q“ò 	4ˆAÜ—'‘'˜"¤B§J¡JÔ/°!Ñ3Ó3ñ	4ù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  ó$   è ø€ ò @Ø%&ÐŒ”Ó˜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ò 8Ñˆ�Ü
�
‰
×%Ñ% h°Õ7ð8ð @Œh˜a¨A°wÔ?ñ @Ù*9¸#Ó*>ô@ó €Gô   ©¼¸W»Ó)FÓGò 8Ñˆ�Ü
�
‰
×%Ñ% h°Õ7ñ8r1   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ÀÐ#4¤7¬8Ó#4°V×#<Ñ"Jù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Ñ%Lù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”   € Ü	×	 Ñ	 ¨Ô	-ð M°Ø%Œ˜ 1Ô%Ñ%LÄ%ÈÃ)Ô%LÔL÷Mäˆx‹=˜AÒÐÐØ�‰€AÜ�a—i‘i¤Ô-Ð-Ð-Üˆq�y‰y‹>ð	òð ñ ÷Mð Mú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Ø67ÐŒ”Ó 
¨A¨q×1ñQù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   è ø€ Ò:™$˜!˜Qˆq�A�vÑ:ùó   ‚)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Ø67Ð!ŒÔ Ó! ! Q¡$¨¨a©×1ñWù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   øè ø€ Ò=¨qœd 6ŸlÑ=ù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™$˜!˜Qˆq�A�vÑSù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ÈAÐ1D´¼¿¹Ó1DÀQ×1GÑ0Xùs   ‚)+rV  )r   ru  rX   r!   )re   r9   ÚdelaysÚt_startÚdts        r2   Útest_abort_backendrº  «  sw   € ð ˆU�b�T˜C‘ZÑ€FÜ	”	Ó	ñ YÜ—)‘)“+ˆØ0Œ˜¨Ô0Ñ0XÐQWÔ0XÔX÷Yô 
�‰‹�wÑ	€BØ�Š7€N‰7÷	Yð Yú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ÑJùrl   rö   )r!   ro   rª  )r9   r=  re   r   r-  s        r2   Ú_test_deadlock_with_generatorrÁ  À  sL   € ô 
˜¨¸IÔ	Fð È(ÙÑJÄÀbÃ	ÔJÓJˆÜˆVŒÜˆVŒØ÷	÷ ñ ú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³
Ô;Ó;ˆ÷	<ô �9‰9‹;˜Ñ  1Ò$ð ð	$óÐ$ñ
 	
÷<ð <ú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÷	>ô �y‰y‹{˜WÑ$ qÒ(ð 	
ð(ó	
Ñ(÷

ñ 	
÷	>ð 	>ú÷

ñ 	
ú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×ñAùó   ‚"$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Ø !ˆŒ”‹�a˜‘d×ñBù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™F˜C ˆs�a�xÑ8ù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¨�”œ“ ×#Ñ7ù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Ó'C€ r1   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&   è ø€ ò @
Ø$%ˆ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ä‹]ð ð
 
ñ Aô
 —)‘)“+ˆØ?ŒH�Q °;Ô?ñ @
Ü).¨r°2«ô@
ó 
ˆð Ð/Ò/Ü�q“	ˆAäÑ@¬#¨a´°r¸2³Ó*?Ô@Ô@Ð@Ñ@÷Aô �9‰9‹;˜Ñ  1Ò$Ð$Ð$ð €EØ
�*Š*˜ šØ�‰
ˆÜ�
‰
�3Œð �*Š*˜ ›ô �9‰9‹;˜Ñ  1Ò$Ð$Ð$à!€x×!Ñ!Ó# qÒ(ð ×!Ò!Ð!Ñ!ð )÷1Að Aú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 qÐ
Œ'”,Ó
 ×
"Ñ	Gù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 1Ð„gŒlÓ˜A×ÑCù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Ó%Ó&¨Ò*Ð*Ñ*÷	+ô �3‹Zò PˆÜ�z‰z˜&Ô!ÙÜˆc�
ðPô
 ÐNÓOÐOô 	˜ a°Ô9€AÙÑC¬¯©×)9Ñ)9¸"Ó)=Ð(>ÀÑ(BÔCÔCä�3‹Zò PˆÜ�z‰z˜&Ô!ÙÜˆc�
ðPô
 ÐNÓOÐO÷1+ð +ú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Ø'(ÐŒ‘Ó ×"ñ2ùs   ‚rö   rn   )r9   rµ   rj   s      r2   Útest_lambda_expressionró  p  sN   € ð
 2Œh˜a¨Ô1ñ 2Ü,1°"«Iô2ó €Gð ¤U¨2£YÖ/ �q˜!“tÒ/Ò/Ð/Ñ/ùÒ/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>„  ó"   øè ø€ Ò>¨Ð„gŒd�j‰jÓ˜)×$Ñ>ùó   ƒ),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  € ð ò 
4ˆÜ”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ð
4ô 	˜ 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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#  Ã  s”  € ôÔ#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÷%ô( 
”
Ó	ñ KÜÑ2Ó4¸kÕJ÷Kð K÷K<ð <ú÷"ð ú÷(Kð 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Óñ 	EÜÐ.¸ÕD÷	Eð 	Eð ÷#ð #ú÷$ð $ú÷:ð :ú÷	:ð 	:ú÷	Eð 	Eú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_limitr2    si   € ñ 
� Ô	#ñ =Ü#:Ó#<Ð ÷=ð %Ÿ]™]›_¨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>0  s   è ø€ ÒG¸Ð2”gÔ1Ó2×4ÑGùrô  rA   rn   )Únesting_limits    r2   r5  r5  .  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   ÚBaseExceptionr5  r§   Ú&joblib.externals.loky.process_executorr8  r±   r   rJ  ÚxfailÚRecursionError)rw   r9   r¬  Úexcr8  s        r2   Útest_thread_bomb_mitigationr>  3  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_sumrJ  O  sB   € Ø€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#   rJ  r×   s     r2   rk   z-test_parallel_thread_limit.<locals>.<genexpr>a  s!   è ø€ ò 2Ø)*Ð"ŒÔ!Ó"×$ñ2ùrô  r   Ú_THREADSrF  Ú1)r!   ro   r¶  r"   ÚitemsÚendswithr°   )r9   rµ   Úexpected_num_threadsÚworker_env_varsÚomp_num_threadsr¤   r§   s          r2   Útest_parallel_thread_limitrT  ^  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à˜|Ò+Ð+Ð+Ø “|Ð#�|ñ	$ñ$r1   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_installedrW  o  s+   € ô 
”
Ð"7Ô	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�  r\  r1   r.   )rN   rO   rP   r´  r  r$   r0   r1   r2   ÚZeroWorkerBackendrZ  z  s   „ ò	ó	6ó	r1   ra  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   è ø€ Ò@°!˜{œw¤r›{¨1Ÿ~Ñ@ùrl   )r   rJ  r   r  r!   ro   )rw   ra  Úexpected_msgs      r2   Útest_zero_worker_backendrd  v  s�   € ôÔ,ô ð <€LÙ	Ñ"Ó$Ó	%ñ AÜ�]‰]œ<¨|Ô<ñ 	AØŒH˜AÔÑ@´u¸Q³xÔ@Ô@÷	A÷Að A÷	Að 	Aú÷Að Aú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   rh  s     €r2   rk   z<test_globals_update_at_each_parallel_call.<locals>.<genexpr>˜  ó!   øè ø€ ò 1Ø%&ÐŒ�Ó× ñ1ùó   ƒzchanged valuec              3   ó>   •K  — | ]  } t        ‰«      «       –— Œ y ­wr.   r%  rj  s     €r2   rk   z<test_globals_update_at_each_parallel_call.<locals>.<genexpr>¢  rk  rl  )rg  r!   ro   r—   )Úworkers_global_variablerh  s    @r2   Ú)test_globals_update_at_each_parallel_callro  Š  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   rq  s      r2   Ú_check_numpy_threadpool_limitsru  ®  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|  º  sK   € Ø$ò 0ˆØ˜Ñ$¨°ZÑ(@Ó@Ø  Ñ/Ò/ð0ô Ø7×>Ñ>¸|ÓLóð r1   c                 óf   — | D ],  }|D ]%  }t        ||«      }t        ||«      |h}|d   |v rŒ%J ‚ Œ. y )Nrx  )r|  Úmin)Úworkers_inforz  rx  Úchild_threadpool_infory  Úparent_max_num_threadsrÁ   s          r2   Úcheck_child_num_threadsr‚  Ã  sZ   € ð ".ò ;ÐØ1ò 	;ˆLÜ%@Ø˜kó&Ð"ô ˜KÐ)?Ó@À+ÐNˆHØ Ñ.°(Ò:Ð:Ð:ñ	;ñ;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#   ru  rh   s     r2   rk   z;test_threadpool_limitation_in_child_loky.<locals>.<genexpr>Ü  s#   è ø€ ò GØ67Ð/ŒÔ.Ó/×1ñGùrô  rA   r   rx  ©
ru  r›   rJ  rK  r!   ro   r$   r¶  r"   r‚  )re   rz  Ú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!   è ø€ ò ;
Ø:;Ð3ŒGÔ2Ó3×5ñ;
ùrô  rA   r   rx  r‡  )rw   re   r‹  rz  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Ø�‚{Ø%0°¡^°MÑ%BÑ"Ø	Ð	&Ü%(¬«¸Ñ)>ÀÓ%BÑ"à%:Ð"äØ  +Ð/Iõ÷
ð 
ús   ¹#B'Â'B0Úvar_name)rA  rB  r@  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ï  rG  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>"  s   øè ø€ Ò)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>&  s#   øè ø€ ò .Ø01Ð!”˜Ó! (×+ñ.ùr&  rN  )
r$   rJ  rK  r   Úshutdownrï  rG  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÷	ð ˜3 ˜*Ò$Ð$Ñ$ð Ð%Ü—
‘
˜8Ñ$à#5ŒB�J‰J�xÒ ÷	ð 	ûð Ð%Ü—
‘
˜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>:  s   øè ø€ ÒC°A ¤¬£¨Q§ÑCùrç   )ro   r!   )re   r<   s    @r2   Úparallel_callz.test_loky_reuse_workers.<locals>.parallel_call8  s%   ø€ Ü�"‹IˆØŒ˜ÔÓC¼¸r»ÔCÕCr1   Tr’  rö   )r   ro   )re   r¡  Úfirst_executorrÊ   rž   s        r2   Útest_loky_reuse_workersr£  2  sQ   € òDñ
 �&ÔÜ*°Ô6€Nô �2‹Yò *ˆÙ�fÔÜ(¨tÔ4ˆØ˜>Ó)Ð)Ð)ñ*r1   c                 ó2   — d| t        j                  «       <   y )NÚinitialized)rï  rð  )Ústatuss    r2   Ú_set_initializedr§  H  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›   rO  r   r   )r¦  re   Úwait_workersÚpidÚstateÚdeadliner   Ú	n_starteds           r2   Ú_check_statusr¯  L  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  s    øè ø€ ÒN¸aÐ)”7œ=Ó)¨&°&×9ÑNùr~  r„   )r   r†  Údictr§  r!   ro   )re   r9   rw   rˆ  r¦  s   `   @r2   Útest_initializer_contextr¸  c  sd   ù€ ô
 �j‰j‹l€GØ�\‰\‹^€Fñ 
ØØÜ$Ø�ô	
ñ Oð 	Œ‹
ÔNÄ5ÈÃ:ÔNÔN÷O÷ Oñ Oú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°Ð„gŒmÓ˜V V×,ÑAùr~  r„   )r   r†  r·  r!   r§  ro   )re   r9   rˆ  r¦  s   `  @r2   Útest_initializer_parallelr»  v  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*  r2  r5  Úno_coverr>  rJ  rT  rW  rd  ro  ru  r|  r‚  rŠ  r�  rœ  r£  r§  r¯  r¸  r»  rÄ  rÇ  )Úbackend_strrj   s   00r2   ú<module>rä     su  ðñó Û 	Û 	Û 
Û Û Û Û Ý "Ý Ý (Ý  Ý Ý &ã ã ß 'Ñ 'Ý .÷ó ÷ 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˜Ð*:Ð;Ó<ñ+ó =ó ð+ñ\ ˆ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Ó*ñó +ó ñøðmC ò ØƒEðûð
 ò ØƒLðûð
 ò ØƒKðüò6 Lùò~ )RsB   Âk; Âl	 Âl Ã?l%Ð?l*ë;lìlì	lìlìl"ì!l"