Ë
    Ï�Dj¸! ã            	       ó6  — d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlZddlZdd	lmZ dd
lmZmZ ddlmZ ddlmZmZ ddlmZ ddlmZmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z% e�ddl&m'Z' ddl(m)Z) 	 ddl*Z*	 ddl,m-Z- 	 ddl.Z.ddl/m0Z0 ddl/m1Z1 ddl/m2Z2 ddl/m3Z3 ddl/m4Z4 ddl5m6Z6m7Z7 ddl5m8Z8 ddl5m9Z9 ddl5m:Z: ddl5m;Z;m<Z< ddl5mZm=Z=m>Z>  e=j~                  «       Z@e@jƒ                  dd«       dg eB e=j†                  «       «      z   ZDeDe=D � cg c]  }  e=|    «       ‘Œ c} z  ZDe€g ZEndd gZEeEd!gz   ZF eGed"«      r!eDj‘                   ej’                  d#«      «       e=e>   ZJd$„ ZKd%„ ZLd&„ ZM G d'„ d(eN«      ZOdâd*„ZPd+„ ZQdãd,„ZRd-„ ZSd.„ ZTd/„ ZUd0„ ZV e!d1e8e9g«      ej®                  jC                  d2d3d4 e;d4¬5«      fd6gg d7¢¬8«      ed9„ «       «       «       ZX e!d:eD«       e!d;g d<¢«       e!d=g d>¢«      d?„ «       «       «       ZY e!d:eD«      d@„ «       ZZdA„ Z[e e!dBg dC¢«      dD„ «       «       Z\e e!d:g dE¢«      dF„ «       «       Z]dG„ Z^ e!dHe=«       e!dIe=«      dJ„ «       «       Z_dK„ Z`edL„ «       ZadM„ Zb e!d;g dN¢«      dO„ «       Zc e!d:eF«      dP„ «       ZdedQ„ «       Zeee e!dRg dS¢«      dT„ «       «       «       Zf e!d:eF«      dU„ «       Zge e!d:eF«      dV„ «       «       Zhe e!d:eE«      dW„ «       «       Zie e!d:e=«      dX„ «       «       ZjdY„ Zk e!d:e=«       e!dZdg d[¢fd\g d]¢fg«      d^„ «       «       Zle e!d:eF«      d_„ «       «       Zmd`„ Zne e!d:eE«      da„ «       «       Zodb„ Zpdc„ Zqdd„ Zre e!d:eF«      ej®                  jç                  de¬f«      dg„ «       «       «       Zt G dh„ die0«      Zudj„ Zv e!d:eD«      dk„ «       Zwe e!d:eF«       e!d;g dl¢«      dm„ «       «       «       Zxdn„ Zydo„ Zz e$edudp¬f«      dq„ «       Z{dr„ Z|eFdd Z}e}jý                   eds«      D �cg c]  }dt|z  ‘Œ	 c}«       e e!d:e}«       e!d1e9e8g«      du„ «       «       «       Z€ G dv„ dwe0«      Z� e!d1e8e9g«      dx„ «       Z‚ e!d1e8e9g«      dy„ «       Zƒdz„ Z„d{„ Z… G d|„ d}e�j                  jh                  «      Z‡ e:d~e‡«       e e!d:g d¢«       e!d1e8e9g«      d€„ «       «       «       Zˆe e!d;g d�¢«       e!d:eF«       e!d1e8e9g«      d‚„ «       «       «       «       Z‰dƒ„ ZŠe e!d„eF«       e!d…eF«       e!d1e8e9g«      d†„ «       «       «       «       Z‹e e!d1e8e9g«       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:eE«      d‘„ «       «       «       Z�d’Z‘e e!d:eE«      d“„ «       «       Z’d”Z“d•Z”d–Z•d—Z–e e!d:eEe€g nd#gz   «       e!d˜e”e•e–g«       e!d™g dš¢«      d›„ «       «       «       «       Z—dœ�j1                  e�j2                  �j5                  e�j2                  �j5                  e�j6                  «      «      ¬�«      Zœedž„ «       Z�dŸ�j1                  e�j2                  �j5                  e�j2                  �j5                  e�j6                  «      «      ¬�«      Zžed „ «       ZŸd¡„ Z d¢„ Z¡d£„ Z¢ee e!d:eE«      d¤„ «       «       «       Z£d¥„ Z¤eed¦„ «       «       Z¥d§„ Z¦d¨„ Z§ej®                  jC                  d;g d©¢«      dª„ «       Z¨d«„ Z©d¬„ Zªej®                  jC                  d;d­d\g«      e e!d: e«e@«      d®hz
  «      d¯„ «       «       «       Z¬ej®                  jC                  d;d­d4g«       e!d1e8e9g«       e$e.du d°¬f«      d±„ «       «       «       Z­ e!d:eD«       e!d;g d²¢«      d³„ «       «       Z®d´„ Z¯dµ„ Z°e e!d:e@«       e!d¶d·d¸g«       e!d;g d²¢«      d¹„ «       «       «       «       Z±eej®                  jC                  d;d­d4g«       e!d¶d·d¸g«       e!d1e8e9g«       e$e.du d°¬f«      dº„ «       «       «       «       «       Z² e!d:e@«       e!d¶d·d¸g«       e!d;g d²¢«      d»„ «       «       «       Z³ e!d:e@«       e!d¶d·d¸g«       e!d;g d²¢«      d¼„ «       «       «       Z´ e!d:e@«       e!d½d·d¸g«       e!d¾d·d¸g«       e!d;g d²¢«      d¿„ «       «       «       «       Zµ e!dÀg dÁ¢«       e!d½d·d¸g«       e!d¾d·d¸g«      dÂ„ «       «       «       Z¶ee e!d:eE«      dÃ„ «       «       «       Z· e!d:e€dd!gng dÄ¢«      dÅ„ «       Z¸e e!d:eE«      dÆ„ «       «       Z¹e e!d1e8e9g«      dÇ„ «       «       Zº e!d1e8e9g«      dÈ„ «       Z»dÉ„ Z¼dädÊ„Z½e e!d:d d!g«       e!d1e8e9g«      dË„ «       «       «       Z¾e e!d1e8e9g«       e$e.du d°¬f«      dÌ„ «       «       «       Z¿dådÍ„ZÀej®                  �j‚                   e!d1e8e9g«       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Ð¬f«      dÑ„ «       «       ZÄ e!d1e8e9g«       e$e.dud°¬f«      dÒ„ «       «       ZÅ e!d1e8e9g«      dÓ„ «       ZÆdÔ„ ZÇdÕ„ ZÈdÖ„ ZÉd×„ ZÊee e!d;g dØ¢«      dÙ„ «       «       «       ZËee e!dÚg dÛ¢«       e!d;d­d4g«       e!d1e8e9g«      dÜ„ «       «       «       «       «       ZÌe e!d;d­d4g«       e!dÝg dÞ¢«       e!d1e8e9g«      dß„ «       «       «       «       ZÍe e!d;g dà¢«      dá„ «       «       ZÎy# e+$ r dZ*Y �
Œ[w xY w# e+$ r dZ-Y �
Œbw xY w# e+$ r dZ.Y �
Œkw xY wc c} w c c}w )æz
Test the parallel module.
é    N)Úformat_exception)Úsqrt)Úsleep)ÚPicklingError)Únullcontext©ÚTimeoutError©Úparallel)ÚdumpÚload)Úmp)ÚnpÚ
with_numpy)Úwith_multiprocessing)ÚIS_PYPYÚforce_gc_pypy)ÚparametrizeÚraisesÚcheck_subprocess_callÚskipifÚwarns)Úget_reusable_executor)ÚQueueé   )Úparallel_sum)ÚSequentialBackend)ÚThreadingBackend)ÚMultiprocessingBackend)ÚParallelBackendBase)ÚLokyBackend)ÚParallelÚdelayed)Úparallel_config)Úparallel_backend)Úregister_parallel_backend)Úeffective_n_jobsÚ	cpu_count)r   ÚBACKENDSÚDEFAULT_BACKENDÚmultiprocessingÚlokyÚ	threadingÚget_contextÚspawnc           	      ó2   — t        | dt        | dd «      «      S )NÚ_poolÚ_workers)Úgetattr©Úbackends    ú]C:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\joblib/test/test_parallel.pyÚget_workersr7   [   s   € Ü�7˜G¤W¨W°jÀ$Ó%GÓHÐHó    c                 ó   — | |z  S ©N© )ÚxÚys     r6   Údivisionr>   _   s   € Øˆq‰5€Lr8   c                 ó   — | dz  S ©Né   r;   ©r<   s    r6   ÚsquarerC   c   s   € Ø�‰6€Mr8   c                   ó   — e Zd ZdZd„ Zy)ÚMyExceptionWithFinickyInitz1An exception class with non trivial __init__
    c                  ó   — y r:   r;   )ÚselfÚaÚbÚcÚds        r6   Ú__init__z#MyExceptionWithFinickyInit.__init__j   s   € Ør8   N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__rL   r;   r8   r6   rE   rE   g   s   „ ñór8   rE   Fc                 ó<   — | dk(  r|rt        dddd«      ‚t        ‚| S )Né   rH   rI   rJ   rK   )rE   Ú
ValueError)r<   Úcustom_exceptions     r6   Úexception_raiserrV   n   s.   € ØˆA‚vá"ô *¨#¨s°C¸Ó=ð 	4Ü(2ð	4à€Hr8   c                 ó8   — t        j                  d«       t        ‚)Ngš™™™™™©?)Útimer   ÚKeyboardInterruptrB   s    r6   Úinterrupt_raiserrZ   u   s   € Ü‡J�Jˆs„OÜ
Ðr8   c                 ó   — | dz  |z   |z   S )zO A module-level function so that it can be spawn with
    multiprocessing.
    rA   r;   )r<   r=   Úzs      r6   Úfr]   z   s   € ð �‰6�A‰:˜‰>Ðr8   c                  óB   — t        t        j                  «       d   «      S ©Nr   )Útyper   Úget_active_backendr;   r8   r6   Ú_active_backend_typerb   �   s   € Ü”×+Ñ+Ó-¨aÑ0Ó1Ð1r8   c                 óH   —  t        | |¬«      d„ t        d«      D «       «      S )N©Ún_jobsr5   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   ©r#   rC   ©Ú.0Úis     r6   ú	<genexpr>z parallel_func.<locals>.<genexpr>†   s    è ø€ ò :.Ø ˆŒ”‹˜×ñ:.ùó   ‚!é   ©r"   Úrange)Úinner_n_jobsr5   s     r6   Úparallel_funcrq   …   s)   € Ø9Œ8˜<°Ô9ñ :.Ü$)¨!£Hô:.ó .ð .r8   c                  ó"   — t        «       dkD  sJ ‚y r_   )r(   r;   r8   r6   Útest_cpu_countrs   ‹   s   € Ü‹;˜Š?Ñˆ?r8   c                  ó"   — t        «       dkD  sJ ‚y r_   ©r'   r;   r8   r6   Útest_effective_n_jobsrv   �   s   € ÜÓ Ò!Ñ!Ð!r8   Ú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      r6   Útest_effective_n_jobs_Noner€   “   sQ   € ñ 
� ^Ô	4ñ @ô   tÔ,°Ò?Ñ?Ð?÷@ô
  4Ô(¨AÒ-Ñ-Ð-÷@ð @ús	   ‹8¸Ar5   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   r5   r‚   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   rg   ©ri   r<   s     r6   rk   z'test_simple_parallel.<locals>.<genexpr>®   s    è ø€ ò &6Ø'(�”œ“ ×"ñ&6ùrl   ©ro   rC   r"   )r5   re   r‚   r<   s       r6   Útest_simple_parallelrŠ   ¨   sU   € ô !& a£Ö)˜1ŒV�A�YÒ)ð&ŒH˜F¨GØ$ô&ñ&6Ü,1°!«Hô&6ó6ò6ñ 7ð 6ùÒ)s   ŽAc                 óx  — |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]  }dt        |j                  «      vsŒ|‘Œ }}t        |«      dk(  sJ ‚y # 1 sw Y   ŒAxY 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     r6   rk   z6test_main_thread_renamed_no_warning.<locals>.<genexpr>¼   s    è ø€ ò 62Ø#$ˆOŒG”F‹O˜A×ñ62ùrl   rm   )r   r   é   zworker timeoutr   )
Úsetattrr-   Úcurrent_threadÚwarningsÚcatch_warningsr"   ro   ÚstrÚmessageÚlen)r5   ÚmonkeypatchÚwarninfoÚresultsÚws        r6   Ú#test_main_thread_renamed_no_warningrŸ   ²   s¿   € ð ×Ñœy×7Ñ7Ó9ÀØAð ô Cô 
×	 Ñ	 ¨Ô	-ð $°Ø5”( !¨WÔ5ñ 62Ü(-¨a«ô62ó 2ˆàš)Ò#Ñ#Ð#÷$ð $ÖN�aÐ'7¼sÀ1Ç9Á9»~Ò'M’ÐN€HÐNô
 ˆx‹=˜AÒÑÐ÷$ð $üò Os   ½-B+Á7B7ÂB7Â+B4c                 óŠ  — t        j                  d¬«      5 }t        j                  d«       t        | |¬«       d d d «       D �cg c]  }|j                  ‘Œ }}|rR|rOt        d„ |D «       «      }t        t        j                  dd«      rt        |«      dk\  nt        |«      dk(  }|xr |S y|rJ ‚y# 1 sw Y   Œ{xY wc c}w )	NTr�   Úalways)r5   rp   c              3   ó>   K  — | ]  }d |j                   d   v –— Œ y­w)zbacked parallel loops cannotr   N)Úargs)ri   Úeachs     r6   rk   z)_assert_warning_nested.<locals>.<genexpr>Ò   s%   è ø€ ò 'àð /°$·)±)¸A±,Ô>ñ'ùó   ‚ÚnogilFr   )
r–   r—   Úsimplefilterrq   r™   Úallr3   ÚsysÚflagsrš   )r5   rp   Úexpectedrœ   rž   Úwarnings_are_correctÚwarnings_have_the_right_lengths          r6   Ú_assert_warning_nestedr®   Ê   sÆ   € Ü	×	 Ñ	 ¨Ô	-ð B°Ü×Ñ˜hÔ'Ü˜g°LÕA÷Bð $,Ö,˜a�—	“	Ð,€HÐ,ÙÙÜ#&ñ 'à$ô'ó $Ð ô '.¬c¯i©i¸À%Ô&H”�H“ Ò"Ü˜“] aÑ'ð +ð (ÒJÐ,JÐJàáÑØ÷+Bð Büò -s   —#B4ÁC Â4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(  r5t        r!t        |«      st	        j
                  d¬«       t        |«      sJ ‚y t        |«      sJ ‚y )	NrA   rd   c              3   óN   •K  — | ]  } t        t        «      ‰d d¬«      –— Œ y­w)r   F©r5   rp   r«   N©r#   r®   ©ri   Ú_Úchild_backends     €r6   rk   z0test_nested_parallel_warnings.<locals>.<genexpr>ï   s5   øè ø€ ò /ð ð 	(ŒÔ&Ó'Ø!°Ø÷	ð 	ñ/ùó   ƒ"%r†   c              3   óN   •K  — | ]  } t        t        «      ‰d ‰¬«      –— Œ y­w)rA   r±   Nr²   )ri   r´   rµ   r«   s     €€r6   rk   z0test_nested_parallel_warnings.<locals>.<genexpr>ö   s5   øè ø€ ò 5ð ð 	(ŒÔ&Ó'Ø!°Ø÷	ð 	ñ5ùr¶   r-   zThis test often fails in PyPy.©Úreason)r"   ro   r   ÚanyÚpytestÚxfailr¨   )Úparent_backendrµ   r«   Úress    `` r6   Útest_nested_parallel_warningsr¿   ã   s‡   ù€ ð /„H�A˜~Ô.ó /ô �q“ô	/ô ð 5Œ(˜! ^Ô
4ô 5ô �q“ô	5ó €Cð ˜Ò$Ýœ3˜sœ8ä�L‰LÐ @ÕAÜ�3Œx‰ˆxä�3Œx‰ˆxr8   )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     r6   rk   zPtest_background_thread_parallelism.<locals>.background_thread.<locals>.<genexpr>  s    è ø€ ò 6Ø'(�”œ“˜r×"ñ6ùrl   r“   r   )r–   r—   r"   ro   Úprintrš   )Úis_run_parallelrœ   s     r6   Úbackground_threadz=test_background_thread_parallelism.<locals>.background_thread  sh   € Ü×$Ñ$¨DÔ1ð 	6°XØŒH˜AÔñ 6Ü,1°!«Hô6ô 6÷	6ô 	Œc�(‹mÔÜ  ›]¨aÑ/ˆ˜Ò÷		6ð 	6ús   —#A(Á(A1)rŽ   r£   r   )r-   ÚThreadÚstartÚjoin)r5   rÇ   rÈ   Úts       r6   Ú"test_background_thread_parallelismrÍ     sH   € ð �g€Oò0ô 	×ÑÐ 1¸Ð8JÔK€AØ‡G�G„IØ‡F�F„HØ˜1ÒÑÐr8   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     r6   rk   znested_loop.<locals>.<genexpr>  s    è ø€ ò (0Ø!"ˆŒ”‹˜×ñ(0ùrl   rn   r4   s    r6   Únested_looprÑ     s$   € Ø'„H�A˜wÔ'ñ (0Ü&+¨A£hô(0õ 0r8   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     €r6   rk   z#test_nested_loop.<locals>.<genexpr>!  s#   øè ø€ ò /?Ø01ÐŒ”Ó˜]×+ñ/?ùó   ƒ"rn   )r½   rµ   s    `r6   Útest_nested_looprÕ     s'   ø€ ð /„H�A˜~Ô.ó /?Ü5:¸1³Xô/?õ ?r8   c                 ó   — t         ‚r:   )rT   r4   s    r6   Úraise_exceptionr×   %  s   € Ü
Ðr8   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    r6   Ú)test_nested_loop_with_exception_with_lokyrÙ   )  sp   € ä	”
Ó	ñ 9Ü˜Q¨Ô/ð 	9°8ÙÐ*”gœkÓ*¨6Ó2Ø.”gœoÓ.¨vÓ6ð8ô 9÷	9÷9ð 9÷	9ð 	9ú÷9ð 9ú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     €r6   rk   z1test_mutate_input_with_threads.<locals>.<genexpr>4  s%   øè ø€ ò ,-ØˆŒ�—‘‹�q×ñ,-ùs   ƒ%(N)r   r"   ro   Úfull)rß   s   @r6   Útest_mutate_input_with_threadsrá   1  s<   ø€ ä�aÔ€AØ+„H�A˜{Ô+ó ,-Ü#(¨£8ô,-ô -à�6‰6Œ8�Oˆ8r8   )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     r6   rk   z'test_parallel_kwargs.<locals>.<genexpr>>  s    è ø€ Ò#D¸1 J¤G¬A£J¨q°A×$6Ð$6Ñ#Dùó   ‚!#N)ro   r]   r"   )re   Úlstr<   s      r6   Útest_parallel_kwargsrê   9  sK   € ô �‹)€CØ #Ö$˜1ŒQˆq�AŽYÒ$Ø#ŒH˜FÔ#Ñ#DÀÔ#DÓDòEñ Fð EùÒ$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     r6   rk   z3test_parallel_as_context_manager.<locals>.<genexpr>M  ó    è ø€ Ò=°A˜ZœW¤Q›Z¨¨Q×/Ð/Ñ=ùrè   c              3   óJ   K  — | ]  } t        t        «      |d ¬«      –— Œ y­wræ   rç   rˆ   s     r6   rk   z3test_parallel_as_context_manager.<locals>.<genexpr>N  rí   rè   c              3   óJ   K  — | ]  } t        t        «      |d ¬«      –— Œ y­wræ   rç   rˆ   s     r6   rk   z3test_parallel_as_context_manager.<locals>.<genexpr>Z  s    è ø€ Ò9°˜œ¤› A¨×+Ð+Ñ9ùrè   )ro   r]   r"   Ú_backendr   r7   )r5   ré   r<   r«   ÚpÚmanaged_backends         r6   Ú test_parallel_as_context_managerró   A  s÷   € ä
�‹)€CØ#&Ö'˜a”�!�q–	Ð'€HÐ'ä	˜ GÔ	,ð K°ð Ÿ*™*ˆð ™1Ñ=¸Ô=Ó=Ò=Ñ=Ø™1Ñ=¸Ô=Ó=Ò=Ñ=ô ˆ>Ü˜Ó/´;¸q¿z¹zÓ3JÑJÑJ÷Kô  
€~Ü˜1Ÿ:™:Ó&Ð.Ñ.ð ‘qÑ9°SÔ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)ze 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    r6   Ú
__reduce__z<test_parallel_pickling.<locals>.UnpicklableObject.__reduce__e  s   € Ü˜uÓ%Ð%r8   N)rN   rO   rP   rû   r;   r8   r6   ÚUnpicklableObjectrö   d  s   „ ó	&r8   rü   zthe task to send©ÚmatchrA   r,   rd   c              3   óR   •K  — | ]  } t        t        «       ‰«       «      –— Œ  y ­wr:   ©r#   Úid)ri   r´   rü   s     €r6   rk   z)test_parallel_pickling.<locals>.<genexpr>i  s*   øè ø€ ò +5Ø%&ð ,7¬7´2«;ÙÓ÷,!ñ +5ùó   ƒ$'rã   N)Úobjectr   r   r"   ro   )rü   s   @r6   Útest_parallel_picklingr  _  sS   ø€ ô
&œFô &ô 
”Ð%8Ô	9ñ 5Ø*Œ˜ 6Ô*ó +5Ü*/°«)ô+5ô 	5÷5÷ 5ñ 5ús   ¢&AÁAÚ	byteorder)ú<ú>ú=c                 óŠ  ‡‡— 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    r6   Úinspect_byteorderz=test_parallel_byteorder_corruption.<locals>.inspect_byteorderr  s   € Ø�!—'‘'×#Ñ#Ð#Ð#r8   é   )rA   rm   Úi4rA   r,   rd   c              3   ó@   •K  — | ]  } t        ‰«      ‰«      –— Œ y ­wr:   ©r#   )ri   r´   r  r<   s     €€r6   rk   z5test_parallel_byteorder_corruption.<locals>.<genexpr>y  s$   øè ø€ ò 0Ø*+Ð"ŒÐ!Ó" 1×%ñ0ùó   ƒrm   )
r   ÚarangeÚreshapeÚviewr  r  r"   ro   ÚtestingÚassert_array_equal)r  Úinitial_np_byteorderÚresultÚ
x_returnedÚbyteorder_in_workerr  r<   s        @@r6   Ú"test_parallel_byteorder_corruptionr  m  s¶   ù€ ò
$ô 	�	‰	�!‹×Ñ˜VÓ$×)Ñ)¨Y¨K°rÐ*:Ó;€AàŸ7™7×,Ñ,Ðà/ŒX˜Q¨Ô/ô 0Ü/4°Q«xô0ó €Fð ,2ò 5Ñ'ˆ
Ð'Ø"Ð&:Ò:Ñ:Ø" j×&6Ñ&6×&@Ñ&@Ò@Ñ@Ü
�
‰
×%Ñ% a¨Õ4ñ5r8   c                 óh   — t         t        d| d¬«      d„ t        d«      D «       «      «      dk(  sJ ‚y )NrA   é   ©re   r5   Útimeoutc              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­w)gü©ñÒMbP?NrÄ   rˆ   s     r6   rk   z0test_parallel_timeout_success.<locals>.<genexpr>†  s    è ø€ ò ?2Ø"#ˆŒ”‹�u×ñ?2ùrl   rã   )rš   r"   ro   r4   s    r6   Útest_parallel_timeout_successr!  ƒ  sB   € ô Ð>Œx˜q¨'¸2Ô>ñ ?2Ü',¨R£yô?2ó 2ó 3Ø68ò9ñ 9ð 9r8   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Ð   r  c              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­w©rã   NrÄ   rˆ   s     r6   rk   z-test_parallel_timeout_fail.<locals>.<genexpr>�  s    è ø€ ò :3Ø#$ˆNŒG”E‹N˜2×ñ:3ùrl   rã   )r   r	   r"   ro   r4   s    r6   Útest_parallel_timeout_failr%  Š  sE   € ô 
”Ó	ñ 3Ø9Œ˜ 7°DÔ9ñ :3Ü(-¨b«	ô:3ô 	3÷3÷ 3ñ 3úó	   �%>¾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     r6   rk   z%test_error_capture.<locals>.<genexpr>³  ó    è ø€ ÒC°A˜ZœW¤Q›Z¨¨Q×/Ð/ÑCùrè   c              3   óJ   K  — | ]  } t        t        «      |d ¬«      –— Œ y­wræ   rç   rˆ   s     r6   rk   z%test_error_capture.<locals>.<genexpr>À  r)  rè   ry   r   )re   r‚   c              3   óJ   K  — | ]  } t        t        «      |d ¬«      –— Œ y­w)T)rU   N©r#   rV   rh   s     r6   rk   z%test_error_capture.<locals>.<genexpr>Õ  s*   è ø€ ò !Øð 'ŒWÔ%Ó& q¸4×@Ð@ñ !ùrè   r  )r   r   ÚZeroDivisionErrorr"   Úzipr#   r>   rY   rZ   r7   rð   ro   r]   Ú
_iteratingÚn_completed_tasksÚn_dispatched_tasksÚ	_abortingrE   )r5   r<   r=   r   Úoriginal_workerss        r6   Útest_error_capturer4  “  sÖ  € ô
 
�~ÜÔ%Ó&ñ 	6Ø/ŒH˜A wÔ/ä # F¨FÓ 3÷5Ù˜˜1ð #”œÓ" 1 aÕ(ó 5ô6÷	6ô
 Ô%Ó&ñ 	@Ø/ŒH˜A wÔ/Ø7=Ö>°!Ð*”Ô)Ó*¨1Õ-Ò>ô@÷	@ô
 ˜Q¨Ô0ð  	°HÜ˜x×0Ñ0Ó1Ð=Ñ=Ü*¨8×+<Ñ+<Ó=ÐäÔ)Ó*ñ <ÙÜ&)¨&°&Ó&9÷;Ù"˜a ð ,œ'¤(Ó+¨A¨qÕ1ó ;ô <÷<ô ˜x×0Ñ0Ó1Ð=Ñ=ô ˜x×0Ñ0Ó1Ð9IÑIÑIä(-¨b«	Ö2 1”Q�q˜A–YÒ2ÙÑC¼¸r»ÔCÓCòDñ Eô  +¨8×+<Ñ+<Ó=ÐÜÔ)Ó*ñ IÙÀÖG¸1Ð3œ'Ô"2Ó3°AÕ6ÒGÔH÷Iô ˜x×0Ñ0Ó1Ð=Ñ=ô ˜x×0Ñ0Ó1Ð9IÑIÑIä(-¨b«	Ö2 1”Q�q˜A–YÒ2ÙÑC¼¸r»ÔCÓCòDð à×#Ñ# X×%?Ñ%?Ø×+Ñ+¨X×-?Ñ-?ðGôð D÷9 	ôH ˜8×,Ñ,Ó-Ð5Ñ5äÔ%Ó&ñ 	@ØŒH˜AÔØ7=Ö>°!Ð*”Ô)Ó*¨1Õ-Ò>ô@÷	@ô 
Ô!Ó	"ñ GØŒ˜ÔÜ14°V¸VÓ1D×E©¨¨AÐŒW”XÓ˜q !Õ$ÓEô	G÷Gô 
Ô*Ó	+ñ "Ø%Œ˜ 1Ô%ñ!Ü˜B“iô!ô	"÷"ð "ùóq5÷	6ñ 	6üò ?÷	@ñ 	@üó;÷<ñ <üò 3ùò
 H÷Iñ Iüò 3÷9 	ñ  	üòP ?÷	@ñ 	@üó F÷Gð Gú÷"ð "ú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     r6   Úmy_generatorz1test_error_in_task_iterator.<locals>.my_generatorÝ  s1   è ø€ Ü�r“ò 	ˆAØ�HŠ}Ü Ð!9Ó:Ð:Ø‹Gñ	ùó   ‚&(rA   rd   r8  rý   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   rg   rh   s     r6   rk   z.test_error_in_task_iterator.<locals>.<genexpr>æ  ó   è ø€ ÒC QˆoŒg”f‹o˜a× ÑCùrl   )r9  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   rg   rh   s     r6   rk   z.test_error_in_task_iterator.<locals>.<genexpr>ë  r=  rl   r†   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   rg   rh   s     r6   rk   z.test_error_in_task_iterator.<locals>.<genexpr>ï  s   è ø€ ÒD QˆoŒg”f‹o˜a× ÑDùrl   é   ©r   )r"   r   rT   )r5   r:  rñ   s      r6   Útest_error_in_task_iteratorrB  Ù  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)Úappend)ÚqueueÚitems     r6   ÚconsumerrG  ò  s   € Ø	‡L�L� Ñ%Õ&r8   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“   )rH  rJ  rL  rN  rI  rK  rM  rO  rP  rR  rQ  rS  c                 ó–   ‡— t        «       Šˆfd„} t        d|| ¬«      ˆfd„ |«       D «       «       ‰|k(  sJ ‚t        ‰«      dk(  sJ ‚y)zC 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   rD  ©rj   rE  s    €r6   Úproducerz'test_dispatch_one_job.<locals>.producer  ó0   øè ø€ Ü�q“ò 	ˆAØ�L‰L˜¨Ñ*Ô+Ø‹Gñ	ùó   ƒ*-r   ©re   Ú
batch_sizer5   c              3   óJ   •K  — | ]  } t        t        «      ‰|«      –— Œ y ­wr:   ©r#   rG  )ri   r<   rE  s     €r6   rk   z(test_dispatch_one_job.<locals>.<genexpr>  s%   øè ø€ ò ?9Ø()ÐŒ”Ó˜% ×#ñ?9ùó   ƒ #é   N)Úlistr"   rš   )r5   r]  Úexpected_queuerY  rE  s       @r6   Útest_dispatch_one_jobrd  ö  sR   ø€ ô  ‹F€Eôð
 ?„H�A *°gÔ>ó ?9Ù-5«Zô?9ô 9à�NÒ"Ñ"Üˆu‹:˜ÒÑÐr8   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	)zW Check that using pre_dispatch Parallel does indeed dispatch items
        lazily.
    c               3   ó^   •K  — t        d«      D ]  } ‰j                  d| z  «       | –— Œ y ­wrV  rW  rX  s    €r6   rY  z/test_dispatch_multiprocessing.<locals>.producer  rZ  r[  rA   r   rm   )re   r]  Úpre_dispatchr5   c              3   óJ   •K  — | ]  } t        t        «      ‰d «      –— Œ y­w)rº   Nr_  )ri   r´   rE  s     €r6   rk   z0test_dispatch_multiprocessing.<locals>.<genexpr>!  s'   øè ø€ ò F=Ø,-ÐŒ”Ó˜% ×'ñF=ùr`  r   rH  Nr“   zConsumed anyrx   rN  ra  )r   ÚManagerrb  r"   Úindexrš   )r5   ÚmanagerrY  Úqueue_contentsÚfirst_consumption_indexÚproduced_3_indexrE  s         @r6   Útest_dispatch_multiprocessingro    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äˆu‹:˜ÒÑÐr8   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-   r\  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   r   rh   s     r6   rk   z/test_batching_auto_threading.<locals>.<genexpr>8  ó   è ø€ Ò	.˜Qˆ+Œ'”"‹+�a�.Ñ	.ùrl   éˆ  r   ©r"   ro   rð   Úcompute_batch_size)rñ   s    r6   Útest_batching_auto_threadingrw  2  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   rq  r\  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   r   rh   s     r6   rk   z2test_batching_auto_subprocesses.<locals>.<genexpr>@  rs  rl   rt  r   ru  )r5   rñ   s     r6   Útest_batching_auto_subprocessesr{  <  sV   € ô 
˜ v°wÔ	?ð 3À1Ù	Ñ	.¤%¨£+Ô	.Ô.ð
 �z‰z×,Ñ,Ó.°Ò2Ñ2Ð2÷3÷ 3ñ 3úrx  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   rg  r‚   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   r,  rh   s     r6   rk   z*test_exception_dispatch.<locals>.<genexpr>K  s#   è ø€ ò 7=Ø-.Ð%ŒGÔ$Ó% a×(ñ7=ùrl   r  N)r   rT   r"   ro   r;   r8   r6   Útest_exception_dispatchr  H  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:   r,  ©ri   Újs     r6   rk   z(nested_function_inner.<locals>.<genexpr>P  s#   è ø€ ò 9Ø)*Ð!ŒÔ Ó! !×$ñ9ùrl   r  rn   ©rj   s    r6   Únested_function_innerr…  O  s"   € Ø„H�AÔñ 9Ü.3°B«iô9õ 9r8   c                 óH   —  t        d¬«      d„ t        d«      D «       «       y )NrA   ry   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   )r#   r…  r‚  s     r6   rk   z(nested_function_outer.<locals>.<genexpr>U  s#   è ø€ ò >Ø./Ð&ŒÔ%Ó& q×)ñ>ùrl   r  rn   r„  s    r6   Únested_function_outerrˆ  T  s"   € Ø„H�AÔñ >Ü38¸³9ô>õ >r8   z'https://github.com/joblib/loky/pull/255r¸   c                 ó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     r6   rk   z1test_nested_exception_dispatch.<locals>.<genexpr>c  s%   è ø€ ò ,BØ23Ð*ŒGÔ)Ó*¨1×-ñ,Bùrl   r  NÚ rˆ  r…  rV   )	r   rT   r"   ro   r   r`   r�   ÚtbrË   )r5   ÚexcinfoÚreport_linesÚreports       r6   Útest_nested_exception_dispatchr�  Y  s®   € ô 
”
Ó	ð B˜wØ+Œ˜ 7Ô+ñ ,BÜ7<¸R³yô,Bô 	B÷Bô $ G§L¡L°'·-±-ÀÇÁÓL€LØ�W‰W�\Ó"€FØ" fÑ,Ñ,Ø" fÑ,Ñ,Ø Ñ'Ñ'ä�—‘Ó¤*Ñ,Ñ,Ð,÷Bð Bú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       r6   Ú	configurezFakeParallelBackend.configuret  s    € Ø×+Ñ+¨FÓ3ˆŒØ ˆŒØˆr8   c                 óX   — |dk  r$t        t        j                  «       dz   |z   d«      }|S )Nr   r   )Úmaxr   r(   ©rG   re   s     r6   r'   z$FakeParallelBackend.effective_n_jobsy  s*   € Ø�AŠ:ÜœŸ™›¨!Ñ+¨fÑ4°aÓ8ˆFØˆr8   rÝ   )r   )rN   rO   rP   rQ   r•  r'   r;   r8   r6   r’  r’  q  s   „ ÙBóô
r8   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-testingr4   )r   rT   r"   r$   r;   r8   r6   Ú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�   )r5   r�  s     r6   Útest_invalid_njobsrŸ  Œ  s-  € ä	”
Ó	ð B˜wÜ˜ 7Ô+×?Ñ?ÔA÷Bà3´s¸7¿=¹=Ó7IÑIÑIä	”
Ó	ð D˜wÜ˜ WÔ-×AÑAÔC÷Dà3´s¸7¿=¹=Ó7IÑIÑIä	”
Ó	ð F˜wÜ˜ wÔ/×CÑCÔE÷Fà1´S¸¿¹Ó5GÑ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     r6   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      r6   rk   z.test_njobs_converted_to_int.<locals>.<genexpr>§  s   è ø€ Ò9¡$ ! Qˆq”F˜1“I�~Ñ9ùr¥   )r"   Ú_effective_n_jobsro   r¨   Ú	enumerate)r5   re   rñ   r¾   s       r6   Útest_njobs_converted_to_intr§  Ÿ  sP   € ô 	˜¨Ô0€AØ×ÑÓ  AÒ%Ñ%á
Ñ2¬¨b«	Ô2Ó
2€CÜÑ9¬)°C«.Ô9Ô9Ñ9Ð9r8   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)   r;   r8   r6   Útest_register_parallel_backendrª  ª  sB   € ð%Ü! .Ô2EÔFØ¤Ñ)Ñ)Ü˜Ñ'Ô+>Ò>Ñ>Ð>ä�^Ñ$øŒH�^Ñ$ús	   ‚,7 ·	A c                  óê   — t        «       t        k(  sJ ‚	 t        dt        d   d¬«       t        «       t        k(  sJ ‚	 t
        t        _        t        «       t        k(  sJ ‚y # t
        t        _        w xY w)Nr-   T)Úmake_default)rb   ÚDefaultBackendr&   r)   r   r*   r   r;   r8   r6   Útest_overwrite_default_backendr®  ³  sb   € ÜÓ!¤^Ò3Ñ3ð3Ü! +¬x¸Ñ/DØ/3õ	5ä#Ó%Ô)9Ò9Ñ9Ð9ô $3ŒÔ ÜÓ!¤^Ò3Ñ3Ð3øô $3ŒÕ ús   •(A! Á!A2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,   r4   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   rg   rh   s     r6   rk   z2test_backend_no_multiprocessing.<locals>.<genexpr>Ã  s   è ø€ Ò F¸ ¤¬£°×!3Ñ Fùrl   rm   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   rg   rh   s     r6   rk   z2test_backend_no_multiprocessing.<locals>.<genexpr>Ç  s   è ø€ Ò8¨!�?”7œ6“? 1×%Ñ8ùrl   )r   ÚUserWarningr"   ro   r$   r;   r8   r6   Útest_backend_no_multiprocessingr³  ¿  s|   € ä	Œ{Ø@ô
Bñ 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        r6   Úcheck_backend_context_managerrº  Ê  s!  € Ù	� aÔ	(ñ ;Ü(0×(CÑ(CÓ(EÑ%ˆ˜Ø Ò!Ñ!Ü Ó" aÒ'Ñ'Ü‹JˆØ�x‰x˜1Š}ÑØÐ,Ò,Ü˜Ó'Ô+AÑAÑAÜ˜Ÿ
™
Ó#Ô'=Ñ=Ñ=Ø˜VÒ#Ü˜Ó'¬;Ñ6Ñ6Ü˜Ÿ
™
Ó#¤{Ñ2Ñ2Ø˜[Ò(Ü˜Ó'Ô+;Ñ;Ñ;Ü˜Ÿ
™
Ó#Ô'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     €r6   rk   z/test_backend_context_manager.<locals>.<genexpr>ô  s*   øè ø€ ò ,<à¹ð 	/ŒÔ-Ó.¨w¸×:ñ,<ùr¶   )r)   Úsetitemr’  rb   r­  rº  r"   Ú all_backends_for_context_manager)r›   r5   rw   s     `r6   Útest_backend_context_managerr¿  å  s{   ø€ ð ”hÑØ×ÑœH gÔ/BÔCäÓ!¤^Ò3Ñ3ä! '¨7Ô3ô  Ó!¤^Ò3Ñ3ð ,„H�A˜{Ô+ó ,<ä1ô,<ô <ô
  Ó!¤^Ò3Ñ3Ð3r8   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     r6   rL   z%ParameterizedParallelBackend.__init__ÿ  s   € Øˆ=ÜÐ7Ó8Ð8Øˆ�
r8   r:   rM   r;   r8   r6   rÁ  rÁ  ü  s
   „ ÙCôr8   rÁ  c                 ó(  — | 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   ŒDxY wc c}w )NÚparam_backendé*   rm   )rÃ  re   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   ©r#   r   rh   s     r6   rk   z=test_parameterized_backend_context_manager.<locals>.<genexpr>  ó   è ø€ Ò7¨�M”GœD“M !×$Ñ7ùrl   r†   )r½  r)   rÁ  rb   r­  r   ra   r`   rÃ  r"   re   rð   ro   r   )r›   rw   r¸  r¹  rñ   r�   rj   s          r6   Ú*test_parameterized_backend_context_managerrÊ    sõ   € à×Ñœ /Ü4ô6äÓ!¤^Ò3Ñ3á	�¨°1Ô	5ñ 8Ü(0×(CÑ(CÓ(EÑ%ˆ˜Ü�NÓ#Ô'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ô  Ó!¤^Ò3Ñ3Ð3÷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   ŒDxY wc c}w )Né+   )rÃ  r†   ry   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   rÈ  rh   s     r6   rk   zFtest_directly_parameterized_backend_context_manager.<locals>.<genexpr>(  rÉ  rl   )rb   r­  rÁ  r   ra   r`   rÃ  r"   re   rð   ro   r   )rw   r¸  r¹  rñ   r�   rj   s         r6   Ú3test_directly_parameterized_backend_context_managerrÎ    sæ   € äÓ!¤^Ò3Ñ3ñ 
Ô-°BÔ7ÀÔ	Bñ 8Ü(0×(CÑ(CÓ(EÑ%ˆ˜Ü�NÓ#Ô'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ô  Ó!¤^Ò3Ñ3Ð3÷8ð 8üò 2s   ¨BC1ÃC=Ã1C:c                  ó@   — t        d«       t        j                  «       S )NrÃ   )r   ÚosÚgetpidr;   r8   r6   Úsleep_and_return_pidrÒ  /  s   € Ü	ˆ"„IÜ�9‰9‹;Ðr8   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     r6   rk   z"get_nested_pids.<locals>.<genexpr>;  s#   è ø€ ò 1Ø"#ð <œgÔ&:Ó;×=ñ 1ùó   ‚ )rb   r   r"   r¥  ro   r;   r8   r6   Úget_nested_pidsrÖ  4  sP   € ÜÓ!Ô%5Ò5Ñ5ô ‹:×'Ñ'Ó)¨QÒ.Ñ.ð Œ8˜1Ôñ 1Ü',¨Q£xô1ó 1ð 1r8   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    €r6   rÛ  zMyBackend.get_nested_backendA  s   ø€ ä”Y Ñ8Ó:¸1Ñ=Ð=r8   )rN   rO   rP   rQ   rÛ  Ú__classcell__)rÜ  s   @r6   rØ  rØ  ?  s   ø„ ÙD÷>ð >r8   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     r6   rk   z6test_nested_backend_context_manager.<locals>.<genexpr>R  s"   è ø€ ò (
àð %ŒG”OÓ$×&ñ(
ùrÕ  rã   r   )r"   ro   rš   Úset)rw   r5   Ú
pid_groupsÚ	pid_groups       r6   Ú#test_nested_backend_context_managerrä  I  sh   € ñ 
�Ó	ñ ,Ø'”X QÔ'ñ (
ä˜2“Yô(
ó 
ˆ
ð $ò 	,ˆ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     r6   Úcheck_nested_backendz?test_nested_backend_in_sequential.<locals>.check_nested_backendb  s=   € ô $Ó%¬Ð2GÑ)HÒHÑHô *¨.Ó9ˆÜ‹z×+Ñ+Ó-°Ò?Ñ?Ð?r8   r   ry   c              3   óJ   •K  — | ]  } t        ‰«      t        d «      –— Œ y­wrÝ   )r#   r*   )ri   r´   ré  s     €r6   rk   z4test_nested_backend_in_sequential.<locals>.<genexpr>l  s(   øè ø€ ò àð 	&ŒÐ$Ó%¤o°q×9ñùr`  rã   c              3   óB   •K  — | ]  } t        ‰«      ‰‰«      –— Œ y ­wr:   r  )ri   r´   r5   ré  re   s     €€€r6   rk   z4test_nested_backend_in_sequential.<locals>.<genexpr>r  s(   øè ø€ ò 
àð *ŒGÐ(Ó)¨'°6×:ñ
ùs   ƒrn   )r5   re   rw   ré  s   `` @r6   Ú!test_nested_backend_in_sequentialrì  Z  sl   ú€ ò@ð „H�AÔó ä�r“ôô ñ
 
� Ô	(ñ 
ØŒ˜Ôõ 
ä˜2“Yô
ô 	
÷
÷ 
ñ 
ú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)Nr5   r   )r$   r%   Únesting_level)rw   Úinner_backendÚexpected_levelÚctxr5   s        r6   Úcheck_nesting_levelrò  x  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     €€r6   rk   z-test_backend_nesting_level.<locals>.<genexpr>‰  s*   øè ø€ ò .àð 	%ŒÔ#Ó$ W¨m¸Q×?ñ.ùó   ƒ!$rã   ry   c              3   óL   •K  — | ]  } t        t        «      ‰‰d «      –— Œ y­wrÝ   rö  r÷  s     €€r6   rk   z-test_backend_nesting_level.<locals>.<genexpr>�  s*   øè ø€ ò 'Øð 0”7Ô.Ó/°¸È×Jñ 'ùrø  )rò  r"   ro   )rw   ró  rï  s   ` `r6   Útest_backend_nesting_levelrú  �  sq   ù€ ô ˜ °Ô2à-„H�A˜}Ô-ô .ä�r“ô.ô ñ
 
� qÔ	)ñ 'ØŒ‹
ô 'Ü! "›Iô'ô 	'÷'÷ 'ñ 'ú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    r6   Ú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   €€r6   rØ  rþ  ™  s&   ø„ ØˆÙ%;Ð"á	×	"Ñ	"ñ	ó 
#ñ	r8   rØ  Ú	retrievalc                 óF   —  t        d¬«      d„ t        | «      D «       «      S )NrA   ry   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   r   rh   s     r6   rk   z>test_retrieval_context.<locals>.nested_call.<locals>.<genexpr>¥  s   è ø€ Ò!C°Q +¤'¬"£+¨a§.Ñ!Cùrl   rn   )Úns    r6   Únested_callz+test_retrieval_context.<locals>.nested_call¤  s   € Ø!Œx˜qÔ!Ñ!C¼%À»(Ô!CÓCÐCr8   rA   ry   c              3   ó@   •K  — | ]  } t        ‰«      |«      –— Œ y ­wr:   r  )ri   rj   r  s     €r6   rk   z)test_retrieval_context.<locals>.<genexpr>¨  s%   øè ø€ ò 
àð !ŒG�KÓ  ×#ñ
ùr  r†   r5   r   )r  r   r&   r"   ro   r$   rj   r%   )rw   rû  rØ  rñ  r  r  s    `  @@r6   Útest_retrieval_contextr
  “  s¢   ú€ ó ÷Ô$ô ô ˜k¨9Ô5òDñ 
�Ó	ð ! ØŒ˜Ôó 
ä˜1“Xô
ô 	
ð ”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    r6   Útest_invalid_batch_sizer  µ  s'   € ä	”
Ó	ñ (Ü˜JÕ'÷(÷ (ñ (ús   �&¦/z)n_tasks, n_jobs, pre_dispatch, batch_size))rA   rA   r¨   rq  )rA   rA   re   rq  ©rã   rA   re   rq  )i  rA   re   rq  r  )rã   r“   re   rq  )éÈ   ra  re   rq  )é   ra  ú
2 * n_jobsr   )éú   ra  r¨   r   )r  ra  r  rS   )r  ra  r  rq  c                 ó¬   — |||dœ}t        | «      D �cg c]  }t        |«      ‘Œ }} t        di |¤Žd„ t        | «      D «       «      }||k(  sJ ‚y c c}w )N)re   rg  r]  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   rg   rh   s     r6   rk   z/test_dispatch_race_condition.<locals>.<genexpr>Î  s   è ø€ Ò L¸ ¤¬£°×!3Ñ Lùrl   r;   r‰   )Ún_tasksre   rg  r]  Úparamsrj   r«   r�   s           r6   Útest_dispatch_race_conditionr  »  s_   € ð  °Ø&ñ(€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_argsÚget)Úmp_start_methodrñ   rw   Ústart_methods       r6   Útest_default_mp_contextr  Ò  sM   € ä×)Ñ)Ó+€OÜ˜Ð#4Ô5€AØ�o‰o×!Ñ! )Ó,€GØ×+Ñ+Ó-€LØ˜?Ò*Ñ*Ð*r8   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     €r6   rk   zAtest_no_blas_crash_or_freeze_with_subprocesses.<locals>.<genexpr>ñ  s+   øè ø€ ò (3Ø$%ˆŒ”—‘‹˜˜1Ÿ3™3×ñ(3ùs   ƒ47)
r   r.   r   ÚrandomÚRandomStateÚrandnr!  r"  r"   ro   )r5   ÚrngrH   s     @r6   Ú.test_no_blas_crash_or_freeze_with_subprocessesr'  Û  s{   ø€ ð Ð#Ò#ô —.‘. Ó)ˆô �)‰)×
Ñ
 Ó
#€Cð 	�	‰	�$˜Ó€AÜ‡F�Fˆ1ˆa�c‰c„Nð („H�A˜wÔ'ó (3Ü).¨q«ô(3õ 3r8   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\]©r  Ústdout_regex)	r   r  r»   ÚskipÚ,UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_NO_MAINÚformatr   r©   Ú
executable)r5   Úcodes     r6   Ú2test_parallel_with_interactively_defined_functionsr2    sY   € ð
 Ð#Ò#¬×(;Ñ(;Ó(=ÀÒ(GÜ�‰ð 6ô 	7ä7×>Ñ>¸wÓG€DÜÜ	�‰˜˜tÐ$¨bØ*ö,r8   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)r3  r5   r4  Újoblib_root_folderzunpicklable_func_script.pyrã   r*  r+  )ÚSQUARE_MAINr©   Úplatformr»   r-  Ú)UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_MAINr/  rÐ  ÚpathÚdirnameÚjoblibÚ__file__rË   Úwriter   r0  Ústrpath)r5   r3  r4  Útmpdirr1  Ú	code_files         r6   Ú0test_parallel_with_unpicklable_functions_in_argsrD  C  s¨   € ð Ð.Ñ.Øœ;Ò&¬#¯,©,¸'Ò*AÜ�‰Ð/Ô0Ü4×;Ñ;Ø¨Ø+ÜŸ7™7Ÿ?™?¬2¯7©7¯?©?¼6¿?¹?Ó+KÓLð <ó N€Dð —‘Ð8Ó9€IØ‡O�O�DÔÜÜ	�‰˜×*Ñ*Ð+°RØ*ö,r8   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)
))
)r8  c                 ó    — | j                  d«      }|j                  t        «       t        t        j
                  |j                  gdd ¬«       y )Nz(joblib_interactively_defined_function.pyr*  )r,  r  )rË   r@  Ú5INTERACTIVE_DEFINED_FUNCTION_AND_CLASS_SCRIPT_CONTENTr   r©   r0  rA  ©rB  Úscripts     r6   Ú7test_parallel_with_interactively_defined_functions_lokyrI  ƒ  s>   € ð
 �[‰[ÐCÓD€FØ
‡L�LÔFÔGÜÜ	�‰˜Ÿ™Ð(Ø*Øör8   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é   )r,  Ústderr_regexr  )rË   r@  Ú9INTERACTIVELY_DEFINED_SUBCLASS_WITH_METHOD_SCRIPT_CONTENTr   r©   r0  rA  rG  s     r6   Ú:test_parallel_with_interactively_defined_bound_method_lokyrO  «  s>   € à�[‰[ÐDÓE€FØ
‡L�LÔJÔKÜœ3Ÿ>™>¨6¯>©>Ð:Ø'>Ø'5Ø"$ö&r8   c                  óH   — t        g «      }  t        d¬«      | «      g k(  sJ ‚y )NrA   ry   )Úiterr"   )Úexhausted_iterators    r6   Ú%test_parallel_with_exhausted_iteratorrS  µ  s'   € Ü˜b›ÐØŒ8˜1ÔÐ0Ó1°RÒ7Ñ7Ð7r8   c                  óB   — t        «        t        j                  d«       y)z+Helper function to force gc in each worker.rÃ   N)r   rX   r   r;   r8   r6   Ú_cleanup_workerrU  º  s   € ä„OÜ‡J�Jˆr…Nr8   c                 ó€   — t        | t        j                  «      st        dt	        | «      «      ‚| j                  «       S )Nz#Expected np.memmap instance, got %r)Ú
isinstancer   ÚmemmapÚ	TypeErrorr`   Úcopy)rH   s    r6   Úcheck_memmapr[  À  s2   € Ü�aœŸ™Ô#ÜÐ=Ü˜Q›ó!ð 	!à�6‰6‹8€Or8   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     r6   Ú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   Ú
max_nbytesr5   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   ©r#   r[  ©ri   rH   s     r6   rk   z<test_auto_memmap_on_arrays_from_generator.<locals>.<genexpr>Ô  ó&   è ø€ ò @@Ø%&ÐŒ”Ó˜a× ñ@@ùrl   r„   r“   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   re  rf  s     r6   rk   z<test_auto_memmap_on_arrays_from_generator.<locals>.<genexpr>Ü  rg  rl   )r"   r.  rš   r   r  r  )r5   ra  r�   r  r«   s        r6   Ú)test_auto_memmap_on_arrays_from_generatorri  Ç  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ñ8r8   c                 ó   — | S r:   r;   )Úargs    r6   Úidentityrl  â  s   € Ø€Jr8   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Úuint8r^  r¤  )Ú	mmap_moderA   ry   c              3   óH   •K  — | ]  } t        t        «      ‰«      –— Œ y ­wr:   )r#   rl  )ri   r´   rX  s     €r6   rk   z.test_memmap_with_big_offset.<locals>.<genexpr>î  s   øè ø€ Ò H¸qÐ!2¤¬Ó!2°6×!:Ñ HùrÔ   rA  r   )rË   rA  ÚmmapÚALLOCATIONGRANULARITYr   Úzerosr_  r   r   r"   rW  rX  Úoffsetr  r  )rB  ÚfnameÚsizeÚobjr  rX  s        @r6   Útest_memmap_with_big_offsetrx  æ  s±   ø€ ð �K‰K˜Ó$×,Ñ,€EÜ×%Ñ%€DÜ�8‰8�D Ô(¬"¯'©'°$¸gÔ*FÐ
G€CÜˆˆeÔÜ�% 3Ô'€FØ Œh˜aÔ Ó HÀCÔ HÓH�G€FÜ�f˜Q‘i¤§¡Ô+Ñ+Ø�!‰9×Ñ˜dÒ"Ñ"Ü‡J�J×!Ñ! # vÕ.r8   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   r  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   rg   rh   s     r6   rk   zFtest_warning_about_timeout_not_supported_by_backend.<locals>.<genexpr>ö  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š   rW  r™   r²  r˜   )rœ   rž   s     r6   Ú3test_warning_about_timeout_not_supported_by_backendr|  ô  sŽ   € Ü	×	 Ñ	 ¨Ô	-ð M°Ø%Œ˜ 1Ô%Ñ%LÄ%ÈÃ)Ô%LÔL÷Mäˆx‹=˜AÒÑØ�‰€AÜ�a—i‘i¤Ô-Ñ-Üˆq�y‰y‹>ð	òñ ð ÷Mð Mús   —$BÂBc                 ó   — || |<   |S r:   r;   )Ú
input_listrj  r�   s      r6   Úset_list_valuer     s   € Ø€JˆuÑØ€Lr8   )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†   Ú	generatorr-   ©re   Ú	return_asr5   c              3   óL   •K  — | ]  } t        t        «      ‰||«      –— Œ y ­wr:   )r#   r  )ri   rj   r~  s     €r6   rk   zPtest_parallel_return_order_with_return_as_generator_parameter.<locals>.<genexpr>  s)   øè ø€ ò +EØ67ÐŒ”Ó 
¨A¨q×1ñ+Eùrø  c              3   ó,   K  — | ]  \  }}||k(  –— Œ y ­wr:   r;   ©ri   Úvr¤  s      r6   rk   zPtest_parallel_return_order_with_return_as_generator_parameter.<locals>.<genexpr>  s   è ø€ Ò:™$˜!˜Qˆq�A�vÑ:ùó   ‚)r"   ro   rb  r¨   r.  )re   r  r~  s     @r6   Ú=test_parallel_return_order_with_return_as_generator_parameterr‰    sd   ø€ ð
 ��q‘€Jð+ŒX˜V¨{Ø)ô+ó+EÜ;@À»8ô+EóE€Fô
 �&‹\€FäÑ:¤# j°&Ó"9Ô:Ô:Ñ:Ð:r8   c                 ó2   — |rt        d«       t        | «      S )Nr  )r   r   )ÚeÚdelays     r6   Ú_sqrt_with_delayr�    s   € ÙÜˆbŒ	Ü�‹7€Nr8   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 ‚‹t        «        y )
NÚgenerator_unorderedr‚  c              3   óT   K  — | ]   } t        t        «      |d z  |dk(  «      –— Œ" y­w)rA   r   N)r#   r�  rh   s     r6   rk   zK_test_parallel_unordered_generator_returns_fastest_first.<locals>.<genexpr>   s/   è ø€ ò 'FØ67Ð!ŒÔ Ó! ! Q¡$¨¨a©×1ñ'Fùr;  rã   c              3   ó4   •K  — | ]  }t        ‰«      –— Œ y ­wr:   )Únext)ri   r´   r  s     €r6   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:   r;   r†  s      r6   rk   zK_test_parallel_unordered_generator_returns_fastest_first.<locals>.<genexpr>'  s   è ø€ ò Ù�1�aˆˆQ�ñùrˆ  )r"   ro   Úsortedrb  r¨   r.  r   )r5   re   Úquickly_returnedÚexpected_quickly_returnedr  s       @r6   Ú8_test_parallel_unordered_generator_returns_fastest_firstr˜    sŽ   ø€ ð'ŒX˜VÐ/DØ%ô'ñ'FÜ;@À»9ô'FóF€Fô Ó=´E¸!³HÔ=Ó=Ðà!" ¤d¬5°°B«<Ó&8Ñ 8Ðäñ ÜÐ8Ð:JÓKôô ñ ð 	Ü…Or8   rA   Ú
sequentialc                 ó   — t        | |«       y r:   )r˜  ©r5   re   s     r6   Ú7test_parallel_unordered_generator_returns_fastest_firstrœ  /  s   € ô =¸WÀfÕMr8   zThis test requires daskc                 ó®   — t        j                  dd¬«      5   |d«      5  t        d | «       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w©NrA   ©Ú	n_workersÚthreads_per_workerÚdask)ÚdistributedÚClientr˜  )re   rw   s     r6   ÚAtest_parallel_unordered_generator_returns_fastest_first_with_daskr¥  9  s]   € ô 
×	Ñ	Ø¨Aô
ñ OáˆvƒñOô 	AÀÀvÔN÷O÷ O÷ Oñ Oú÷ Oð Oús   ˜	A¡?®A¿A	ÁAÁA)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     r6   rk   z%test_abort_backend.<locals>.<genexpr>K  s&   è ø€ ò 14Ø'(ÐŒG”D—J‘JÓ ×"ñ14ùs   ‚)+r7  )r   rY  rX   r"   )re   r5   ÚdelaysÚt_startÚdts        r6   Útest_abort_backendr¬  E  sy   € ð ˆU�b�T˜C‘ZÑ€FÜ	”	Ó	ñ 4Ü—)‘)“+ˆØ0Œ˜¨Ô0ñ 14Ø,2ô14ô 	4÷4ô 
�‰‹�wÑ	€BØ�Š7�Nˆ7÷4ð 4ús   š/A0Á0A9c                 óX   — t        j                  t        d«      t        ¬«      }d|d<   |S )Ng    €„Ar^  Fr   )r   r_  ÚintÚbool)rk  r  s     r6   Úget_large_objectr°  Q  s$   € Ü�W‰W”S˜“\¬Ô.€FØ€Fˆ1�IØ€Mr8   c                 ó¼   — t        || |¬«      5 } |d„ t        d«      D «       «      }t        |«       t        |«       ~t        «        d d d «       y # 1 sw Y   y xY w)N)re   r5   rƒ  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   )r#   r°  rh   s     r6   rk   z0_test_deadlock_with_generator.<locals>.<genexpr>\  s   è ø€ ÒJ¸1Ð3œ'Ô"2Ó3°A×6ÑJùrl   rã   )r"   ro   r’  r   )r5   rƒ  re   r   r  s        r6   Ú_test_deadlock_with_generatorr³  W  sW   € ô 
˜¨Ø%ô
'ð Ø*2ÙÑJÄÀbÃ	ÔJÓJˆÜˆVŒÜˆVŒØô 	Œ÷÷ ñ ús   �:AÁArƒ  r�  r�  c                 ó   — t        | ||«       y r:   )r³  )r5   rƒ  re   s      r6   Útest_deadlock_with_generatorrµ  e  s   € ô
 " '¨9°fÕ=r8   c                 ó°   — t        j                  dd¬«      5   | d«      5  t        d ||«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY wrž  )r£  r¤  r³  )rw   rƒ  re   s      r6   Ú%test_deadlock_with_generator_and_daskr·  m  sV   € ô 
×	Ñ	Ø¨Aô
ñ ?áˆvƒñ?ô 	& d¨I°vÔ>÷?÷ ?÷ ?ñ ?ú÷ ?ð ?ús!   ˜	A¡A ¯AÁ A		ÁAÁAc                 óL  — 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	«       ‚~t        «        y # 1 sw Y   Œ6xY w)
Nú)This Parallel instance is already runningrý   ©r5   rƒ  c              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­wrÝ   rÄ   rÅ   s     r6   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     r6   rk   z/test_multiple_generator_call.<locals>.<genexpr>…  s   è ø€ Ò;¨1˜œ¤› AŸÑ;ùrl   r„   rA   úZThe error should be raised immediatly when submitting a new task but it took more than 2s.)r   rù   r"   ro   rX   r   )r5   rƒ  re   r   Úgrª  Úgen2s          r6   Útest_multiple_generator_callrÀ  y  s˜   € ô 
”ØAô
Cñ <ä˜F¨G¸yÔIˆÙÑ:´°b³	Ô:Ó:ˆÜ—)‘)“+ˆÙÑ;´°c³
Ô;Ó;ˆ÷<ô �9‰9‹;˜Ñ  1Ò$ð ð	$ôð
 	
ô …O÷!<ð <ús   ’ABÂB#c                 óx  — 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 «       ~t        «        y # 1 sw Y   Œ?xY w# 1 sw Y   Œ!xY w)
Nrº  c              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­wr$  rÄ   rÅ   s     r6   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     r6   rk   z7test_multiple_generator_call_managed.<locals>.<genexpr>   s   è ø€ Ò=¨Q˜+œ'¤"›+ aŸ.Ñ=ùrl   r„   rA   r½  )r"   ro   rX   r   rù   r   )r5   rƒ  re   r   r¾  rª  Úg2s          r6   Ú$test_multiple_generator_call_managedrÅ  “  s²   € ô 
�& 'Ø%ô
'ð 
Ø*2ÙÑ;´°r³Ô;Ó;ˆÜ—)‘)“+ˆÜ”LØEôGñ 	>áÑ=´%¸³*Ô=Ó=ˆB÷	>ô
 �y‰y‹{˜WÑ$ qÒ(ð 	
ð(ô	
Ð(÷
ð  	
Ü…O÷	>ð 	>ú÷	
ð 
ús#   �>B0ÁB$Á&)B0Â$B-	Â)B0Â0B9Ú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 )	Nrº  c              3   óL   K  — | ]  } t        t        «      |d z  «      –— Œ y­w©rA   NrÈ  rh   s     r6   rk   z9test_multiple_generator_call_separated.<locals>.<genexpr>¶  s&   è ø€ ò AØ"#ˆŒ”‹�a˜1‘f×ñAùó   ‚"$rã   c              3   óL   K  — | ]  } t        t        «      |d z  «      –— Œ y­wrÊ  rÈ  rh   s     r6   rk   z9test_multiple_generator_call_separated.<locals>.<genexpr>¹  s&   è ø€ ò BØ"#ˆŒ”‹�a˜1‘f×ñBùrË  r7  r�  c              3   ó,   K  — | ]  \  }}||k(  –— Œ y ­wr:   r;   ©ri   r¾   rj   s      r6   rk   z9test_multiple_generator_call_separated.<locals>.<genexpr>Ã  s   è ø€ Ò8™F˜C ˆs�a�xÑ8ùrˆ  c              3   ó,   K  — | ]  \  }}||k(  –— Œ y ­wr:   r;   rÎ  s      r6   rk   z9test_multiple_generator_call_separated.<locals>.<genexpr>Ä  s   è ø€ Ò=™F˜C ˆs�a�xÑ=ùrˆ  )r"   ro   r•  r¨   r.  )r5   rÆ  rÇ  re   r¾  rÄ  s         r6   Ú&test_multiple_generator_call_separatedrÐ  ®  s½   € ð 	AŒ� °KÔ@ñ AÜ',¨R£yôAó 	€Að 
BŒ�& '°[Ô	Añ BÜ',¨R°£}ôBó 
€Bð Ð+Ò+Ü�1‹IˆàÐ+Ò+Ü�B‹ZˆäÑ8¤c¨!¬U°2«YÓ&7Ô8Ô8Ñ8ÜÑ=¤c¨"¬e°B¸«mÓ&<Ô=Ô=Ñ=Ð=r8   zbackend, error))r,   T)r-   F)r™  Fc                 óR  — | dk(  rt         €t        j                  d«       t        d| |¬«      } |d„ t	        d«      D «       «      }t        j                  |d„ «      }|rt        t        d¬	«      n	t        «       }|5  t        j                  «       } t        d| |¬«      d
„ t	        dd«      D «       «      }t        «        |dk(  rt        |«      }t        d„ t        |t	        dd«      «      D «       «      sJ ‚	 d d d «       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   rº  c              3   óF   K  — | ]  } t        t        «      d «      –— Œ y­wr$  rÄ   rh   s     r6   rk   z<test_multiple_generator_call_separated_gc.<locals>.<genexpr>Ø  s   è ø€ Ò7¨�”œ“ ×#Ñ7ùrl   rã   c                  ó   — t        d«      S )NzGenerator collected)rÆ   r;   r8   r6   ú<lambda>z;test_multiple_generator_call_separated_gc.<locals>.<lambda>Ù  s   € ¤uÐ-BÓ'C€ r8   z The executor underlying Parallelrý   c              3   óL   K  — | ]  } t        t        «      |d z  «      –— Œ y­wrÊ  rÈ  rh   s     r6   rk   z<test_multiple_generator_call_separated_gc.<locals>.<genexpr>ä  s&   è ø€ ò @
Ø&'ˆMŒG”D‹M˜!˜q™&×!ñ@
ùrË  r7  r�  c              3   ó,   K  — | ]  \  }}||k(  –— Œ y ­wr:   r;   rÎ  s      r6   rk   z<test_multiple_generator_call_separated_gc.<locals>.<genexpr>ï  s   è ø€ Ò@¡  Q�3˜!•8Ñ@ùrˆ  r†   r   rm   r   rœ  )r   r»   r-  r"   ro   ÚweakrefÚfinalizer   rù   r   rX   r   r•  r¨   r.  Úaliver   r¥  r2  )
r5   rÆ  rÇ  Úerrorr   r¾  Úg_wrrñ  rª  Úretrys
             r6   Ú)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Ü!“mð ð 
ñ Aô
 —)‘)“+ˆØ?ŒH�Q °;Ô?ñ @
Ü+0°°R«=ô@
ó 
ˆô 	ŒàÐ/Ò/Ü�q“	ˆAäÑ@¬#¨a´°r¸2³Ó*?Ô@Ô@Ñ@Ð@÷#Aô& �9‰9‹;˜Ñ  1Ò$Ñ$ð €EØ
�*Š*˜ šØ�‰
ˆÜ�
‰
�2Œð �*Š*˜ ›ô �9‰9‹;˜Ñ  1Ò$Ñ$à!€x×!Ñ!Ó# qÒ(ð ×!Ò!Ñ!Ð!ð )÷9Að Aús   Á=A<FÆF&c                 óØ  — |j                   }t        dd| |¬«      5 } |d„ t        j                  j                  d«      gdz  D «       «       t	        t        j                  |«      «      dkD  sJ ‚ |d„ t        d«      D «       «       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 «       «        |d„ t        d«      D «       «       t        d«      D ]$  }t        j                  |«      s y t        d	«       Œ& t        d
«      ‚# 1 sw Y   ŒÙxY w)NrA   r   )re   rc  r5   Útemp_folderc              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   re  rf  s     r6   rk   z(test_memmapping_leaks.<locals>.<genexpr>  s   è ø€ Ò	G qÐ
Œ'”,Ó
 ×
"Ñ	Gùrl   rã   r   c              3   óD   K  — | ]  } t        t        «      «       –— Œ y ­wr:   ©r#   rU  rÅ   s     r6   rk   z(test_memmapping_leaks.<locals>.<genexpr>  s   è ø€ Ò	7¨Ð
"Œ'”/Ó
"×
$Ñ	7ùrÕ  r„   rÃ   z/temporary directory of Parallel was not removedrb  c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   re  rf  s     r6   rk   z(test_memmapping_leaks.<locals>.<genexpr>#  s   è ø€ ÒC 1Ð„gŒlÓ˜A×ÑCùrl   c              3   óD   K  — | ]  } t        t        «      «       –— Œ y ­wr:   râ  rÅ   s     r6   rk   z(test_memmapping_leaks.<locals>.<genexpr>$  s   è ø€ Ò3 QÐ„gŒoÓ× Ñ3ùrÕ  )
rA  r"   r   r#  rš   rÐ  Úlistdirro   r   ÚAssertionError)r5   rB  rñ   r´   s       r6   Útest_memmapping_leaksrç     sH  € ð �^‰^€Fô 
˜ q°'Ø$ô
&ð 8Ø)*Ù	Ñ	G¬R¯Y©Y×-=Ñ-=¸bÓ-AÐ,BÀQÑ,FÔ	GÔGô ”2—:‘:˜fÓ%Ó&¨Ò*Ñ*ñ 	
Ñ	7¬e°A«hÔ	7Ô7÷8ô  �3‹Zò PˆÜ�z‰z˜&Ô!ÙÜˆb�	ðPô
 ÐNÓOÐOô 	˜ a°Ô9€AÙÑC¬¯©×)9Ñ)9¸"Ó)=Ð(>ÀÑ(BÔCÔCÙÑ3¬%°«(Ô3Ô3ä�3‹Zò PˆÜ�z‰z˜&Ô!ÙÜˆb�	ðPô
 ÐNÓOÐO÷C8ð 8ús   œA,E Å E))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@   r;   rB   s    r6   rÔ  z2test_lambda_expression.<locals>.<genexpr>.<lambda>5  s
   € ˜!˜q™&€ r8   Nr  rh   s     r6   rk   z)test_lambda_expression.<locals>.<genexpr>4  s#   è ø€ ò 29Ø)*Ð!ŒÑ Ó! !×$ñ29ùs   ‚rã   rn   )r5   r�   rj   s      r6   Útest_lambda_expressionrë  .  sL   € ð 2Œh˜a¨Ô1ñ 29Ü.3°B«iô29ó 9€Gà¤u¨R£yÖ1 !�q˜A“vÒ1Ò1Ñ1Ð1ùÒ1s   ²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   r5   c              3   ó\   •K  — | ]#  } t        t        j                  «      ‰«      –— Œ% y ­wr:   r¨  ©ri   rj   Ú	task_times     €r6   rk   z6test_backend_batch_statistics_reset.<locals>.<genexpr>B  ó"   øè ø€ Ò>¨Ð„gŒd�j‰jÓ˜)×$Ñ>ùó   ƒ),c              3   ó\   •K  — | ]#  } t        t        j                  «      ‰«      –— Œ% y ­wr:   r¨  rî  s     €r6   rk   z6test_backend_batch_statistics_reset.<locals>.<genexpr>H  rð  rñ  N)r"   ro   rð   Ú_effective_batch_sizeÚ_DEFAULT_EFFECTIVE_BATCH_SIZEÚ_smoothed_batch_durationÚ _DEFAULT_SMOOTHED_BATCH_DURATION)r5   re   Ún_inputsrñ   rï  s       @r6   Ú#test_backend_batch_statistics_resetrø  9  sá   ø€ ð €FØ€HØ�X‘€Iä˜ F°GÔ<€AÙÓ>¬e°H«oÔ>Ô>Ø�J‰J×,Ñ,Ø�J‰J×4Ñ4ò5ñ 6à�J‰J×/Ñ/Ø�J‰J×7Ñ7ò8ñ 9ñ Ó>¬e°H«oÔ>Ô>Ø�J‰J×,Ñ,Ø�J‰J×4Ñ4ò5ñ 6à�J‰J×/Ñ/Ø�J‰J×7Ñ7ò8ñ 9ð 8r8   c                 óˆ  — dD ]¨  }t        t        |¬«      j                  «      t        k(  sJ ‚t        |d¬«      }t        |j                  «      t        u sJ ‚t        |d¬«      }t        |j                  «      t        u sJ ‚t        |d¬«      }t        |j                  «      t        u 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   r5   rü  ©rü  rm   ©r   r   )r`   r"   rð   r­  r   r!   re   )rw   re   rñ   s      r6   Ú$test_backend_hinting_and_constraintsr  O  sý  € ð ò 
4ˆÜ”H FÔ+×4Ñ4Ó5¼ÒGÑGä˜F¨9Ô5ˆÜ�A—J‘JÓÔ#3Ñ3Ñ3ä˜F¨;Ô7ˆÜ�A—J‘JÓ¤>Ñ1Ñ1ä˜F¨KÔ8ˆÜ�A—J‘JÓÔ#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Ø�x‰x˜1Š}Ñˆ}÷ñ 
� Ô	"ñ Ü˜A {Ô3ˆÜ�A—J‘JÓÔ#3Ñ3Ñ3Ø�x‰x˜1Š}Ñˆ}÷ð ÷-ð ú÷ð ú÷ð ú÷ð ús0   Ã#;HÄ1<H Æ ;H,Ç<H8ÈHÈ H)È,H5È8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:   r;   rú   s    r6   Úapply_asynczgtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomThreadingBackend.apply_async‰  ó   € Ør8   c                 ó   — |S r:   r;   r˜  s     r6   r'   zltest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomThreadingBackend.effective_n_jobsŒ  ó   € ØˆMr8   N©rN   rO   rP   Úsupports_sharedmemÚuse_threadsr  r'   r;   r8   r6   ÚMyCustomThreadingBackendr  …  s   „ Ø!ÐØˆò	ó	r8   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:   r;   rú   s    r6   r  zhtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomProcessingBackend.apply_asyncš  r	  r8   c                 ó   — |S r:   r;   r˜  s     r6   r'   zmtest_backend_hinting_and_constraints_with_custom_backends.<locals>.MyCustomProcessingBackend.effective_n_jobs�  r  r8   Nr  r;   r8   r6   ÚMyCustomProcessingBackendr  –  s   „ Ø"ÐØˆò	ó	r8   r  r‹  rã   )re   r   r‚   z…Using ThreadingBackend as joblib backend instead of MyCustomProcessingBackend as the latter does not provide shared memory semantics.©r5   r   )	r    r"   r`   rð   Ú
readouterrr   Ústripr   rT   )Úcapsysrw   r  rñ   r  ÚoutÚerrr«   s           r6   Ú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ÑØ�bŠyÑä˜A {¸BÔ?ˆÜ�A—J‘JÓÔ#3Ñ3Ñ3à×$Ñ$Ó&‰ˆˆSð@ˆð �y‰y‹{˜hÒ&Ñ&Ø�bŠyÑˆy÷!ô$ 
”
Ó	ñ KÜÑ2Ó4¸kÕJ÷Kð K÷G<ð <ú÷"ð ú÷$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   r;   r8   r6   Ú,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   Nr;   )r#   Ú_recursive_backend_info)ri   rj   r5  r!  s     €€r6   rk   z*_recursive_backend_info.<locals>.<genexpr>Ò  s2   øè ø€ ò 'Øð 5”GÔ3Ó4ÑO¸5À1¹9ÐOÈÕOñ 'ùr  r   )r"   r`   rð   rN   rî  ro   )r!  r5  rñ   Ú
this_levelr�   s   ``   r6   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 «       t        «       dk(  rd}d}nd}d}|j                  «       dz   }|df|dfd|fd|fg}|k(  sJ ‚y # 1 sw Y   ŒHxY w)NrA   ry   r   r   r   ÚBackendr   )r"  r(   Útitle)rw   r5   Úbackend_types_and_levelsÚsecond_level_backend_typeÚ	max_levelÚtop_level_backend_typeÚexpected_types_and_levelss          r6   Útest_nested_parallelism_limitr,  ×  s˜   € ñ 
� Ô	#ñ =Ü#:Ó#<Ð ÷=ô ƒ{�aÒØ$7Ð!Ø‰	à$6Ð!Øˆ	à$Ÿ]™]›_¨yÑ8Ðà	 Ð#Ø	" AÐ&Ø	˜iÐ(Ø	˜iÐ(ð	!Ðð $Ð'@Ò@Ñ@Ð@÷#=ð =ús   ‹AÁA&c                 ó
  — t        j                  dd¬«      5  t        j                  t	        d«      t        j
                  ¬«      }t        d«      D ]C  } | d«      5  t        |¬«      }d d d «       t        «      dk(  sJ ‚t        d„ |D «       «      rŒCJ ‚  | d«      5  t        «       }d d d «       t        «      dk(  sJ ‚t        d	„ |D «       «      sJ ‚	 d d d «       y # 1 sw Y   ŒxxY w# 1 sw Y   ŒCxY w# 1 sw Y   y xY w)
NrA   rŸ  g    ÐcAr^  r¢  )Údatar“   c              3   ó,   K  — | ]  \  }}|d k(  –— Œ y­w©ÚDaskDistributedBackendNr;   ©ri   rŒ   r´   s      r6   rk   z4test_nested_parallelism_with_dask.<locals>.<genexpr>ú  s$   è ø€ ò @Ù"˜4 ð Ð7Õ7ñ @ùrˆ  c              3   ó,   K  — | ]  \  }}|d k(  –— Œ y­wr0  r;   r2  s      r6   rk   z4test_nested_parallelism_with_dask.<locals>.<genexpr>  s"   è ø€ ò <Ù�t˜Qð Ð3Õ3ñ <ùrˆ  )
r£  r¤  r   r_  r®  rn  ro   r"  rš   r¨   )rw   r.  rj   r'  s       r6   Ú!test_nested_parallelism_with_daskr4  ï  s  € ô 
×	Ñ	 a¸AÔ	>ñ <ä�w‰w”s˜3“x¤r§x¡xÔ0ˆÜ�q“ò 	@ˆAÙ˜“ñ NÜ+BÈÔ+MÐ(÷NäÐ/Ó0°AÒ5Ñ5Üñ @Ø&>ô@õ @ñ @ð		@ñ �V‹_ñ 	AÜ'>Ó'@Ð$÷	AäÐ+Ó,°Ò1Ñ1Üñ <Ø":ô<ô <ñ 	<ð <÷<ð <÷Nð Nú÷	Að 	Aú÷<ð <úsB   ˜AC9ÁC!Á**C9ÂC9Â C-Â+,C9Ã!C*Ã&C9Ã-C6	Ã2C9Ã9D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     r6   rk   z&_recursive_parallel.<locals>.<genexpr>  s   è ø€ ÒG¸Ð2”gÔ1Ó2×4ÑGùrÕ  rA   rn   )Únesting_limits    r6   r7  r7    s   € àŒ8‹:ÑG¼eÀA»hÔGÓGÐGr8   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   ÚBaseExceptionr7  r�   Ú&joblib.externals.loky.process_executorr:  rW  r   r»   r¼   ÚRecursionError)rw   r5   r�  Úexcr:  s        r6   Útest_thread_bomb_mitigationr?  
  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Ð  Úenvironr  r   )Úenv_varsÚvars     r6   Ú_run_parallel_sumrK  '  sB   € Ø€Hð3ò ,ˆô Ÿ
™
Ÿ™ sÓ+ˆ�Šð,ð ”\ #Ó&Ð&Ð&r8   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#   rK  rÅ   s     r6   rk   z-test_parallel_thread_limit.<locals>.<genexpr>3  s!   è ø€ ò 2Ø)*Ð"ŒÔ!Ó"×$ñ2ùrÕ  r   Ú_THREADSrG  Ú1)r"   ro   r—  r(   ÚitemsÚendswithr˜   )r5   r�   Úexpected_num_threadsÚworker_env_varsÚomp_num_threadsrŒ   r�   s          r6   Útest_parallel_thread_limitrU  0  s¬   € ð 2Œh˜a¨Ô1ñ 2Ü.3°A«hô2ó €Gô œy›{¨aÑ/°Ó3ÐØ,3ò $Ñ(ˆ˜ØÐ"6Ò6Ñ6Ø*×0Ñ0Ó2ò 	$‰KˆD�%Ø�}‰}˜ZÔ(Ø¤Ð$8Ó 9Ó9Ñ9à˜|Ò+Ñ+Ø “|Ñ#ñ	$ñ$r8   c                 ó`   — t        t        d¬«      5   | d«       d d d «       y # 1 sw Y   y xY w)NzPlease install daskrý   r¢  )r   rT   )rw   s    r6   Ú)test_dask_backend_when_dask_not_installedrW  A  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_   r;   )rG   r£   r5  s      r6   r•  z=test_zero_worker_backend.<locals>.ZeroWorkerBackend.configureM  ó   € Ør8   Nc                 ó   — t        d«      ‚)NzNo worker availabler   )rG   ÚfuncÚcallbacks      r6   r  z?test_zero_worker_backend.<locals>.ZeroWorkerBackend.apply_asyncP  s   € ÜÐ4Ó5Ð5r8   c                  ó   — yr_   r;   r˜  s     r6   r'   zDtest_zero_worker_backend.<locals>.ZeroWorkerBackend.effective_n_jobsS  r\  r8   r:   )rN   rO   rP   r•  r  r'   r;   r8   r6   ÚZeroWorkerBackendrZ  L  s   „ ò	ó	6ó	r8   ra  z&ZeroWorkerBackend has no active workerrý   rA   ry   c              3   óF   K  — | ]  } t        t        «      |«      –— Œ y ­wr:   r   rh   s     r6   rk   z+test_zero_worker_backend.<locals>.<genexpr>Y  s   è ø€ Ò@°!˜{œw¤r›{¨1Ÿ~Ñ@ùrl   )r   r»   r   rù   r"   ro   )rw   ra  Úexpected_msgs      r6   Útest_zero_worker_backendrd  H  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_VARIABLEr;   r8   r6   Úcheck_globalsz@test_globals_update_at_each_parallel_call.<locals>.check_globalsd  s   € ä!Ð!r8   rA   ry   c              3   ó>   •K  — | ]  } t        ‰«      «       –— Œ y ­wr:   r  ©ri   rj   rh  s     €r6   rk   z<test_globals_update_at_each_parallel_call.<locals>.<genexpr>j  ó!   øè ø€ ò 14Ø%&ÐŒ�Ó× ñ14ùó   ƒzchanged valuec              3   ó>   •K  — | ]  } t        ‰«      «       –— Œ y ­wr:   r  rj  s     €r6   rk   z<test_globals_update_at_each_parallel_call.<locals>.<genexpr>s  rk  rl  )rg  r"   ro   rá  )Úworkers_global_variablerh  s    @r6   Ú)test_globals_update_at_each_parallel_callro  \  s§   ø€ ð *Ðò"ñ ‹?Ð.Ò.Ñ.à0œh¨aÔ0ó 14Ü*/°«(ô14ó 4ÐäÐ&Ó'Ð,<Ð+=Ò=Ñ=ð )ÐÙ‹?˜oÒ-Ñ-à0œh¨aÔ0ó 14Ü*/°«(ô14ó 4ÐäÐ&Ó'¨OÐ+<Ò<Ñ<Ð<r8   c                  ó‚   — dd l } | j                  j                  dd«      } | j                  ||«       ddlm}  |«       S )Nr   r„   )Úthreadpool_info)Únumpyr#  r%  r!  Úthreadpoolctlrq  )r   rH   rq  s      r6   Ú_check_numpy_threadpool_limitsrt  }  s6   € Ûð 	�	‰	�‰˜˜SÓ!€AØ
€B‡F�Fˆ1ˆa„LÝ-ÙÓÐr8   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   r/  )Úchild_moduleÚparent_infoÚparent_modules      r6   Ú_parent_max_num_threads_forr{  ˆ  sJ   € Ø$ò 0ˆØ˜Ñ$¨°ZÑ(@Ó@Ø  Ñ/Ò/ð0ô ÐDß‘f˜\Ó*ó,ð ,r8   c                 óf   — | D ],  }|D ]%  }t        ||«      }t        ||«      |h}|d   |v rŒ%J ‚ Œ. y )Nrw  )r{  Úmin)Úworkers_infory  rw  Úchild_threadpool_inforx  Úparent_max_num_threadsr«   s          r6   Úcheck_child_num_threadsr�  �  sU   € ð ".ò ;ÐØ1ò 	;ˆLÜ%@Ø˜kó&+Ð"ä˜KÐ)?Ó@À+ÐNˆHØ Ñ.°(Ò:Ñ:ñ		;ñ;r8   )rA   r“   r�   rx   c                 ó  — t        «       }t        |«      dk(  rt        j                  d¬«        t	        d| ¬«      d„ t        d«      D «       «      }t        | «      } 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#   rt  rh   s     r6   rk   z;test_threadpool_limitation_in_child_loky.<locals>.<genexpr>¨  s%   è ø€ ò GEØ67Ð/ŒÔ.Ó/×1ñGEùrÕ  rA   r   ©
rt  rš   r»   r-  r"   ro   r'   r—  r(   r�  )re   ry  Úworkers_threadpool_infosÚexpected_child_num_threadss       r6   Ú(test_threadpool_limitation_in_child_lokyr‰  œ  s€   € ô 1Ó2€KÜ
ˆ;Ó˜1ÒÜ�‰ÐCÕDàFœx°¸vÔFñ GEÜ;@À»8ôGEó  EÐô ˜fÓ%€FÜ!$¤Y£[°FÑ%:¸AÓ!>ÐäÐ4°kØ6õ8r8   Úinner_max_num_threads)r   rA   r“   Nc                 óJ  — t        «       }t        |«      dk(  rt        j                  d¬«        | d|¬«      5   t	        |¬«      d„ t        d«      D «       «      }d d d «       t        |«      }|€t        t        «       |z  d	«      }n|}t        ||«       y # 1 sw Y   Œ>xY w)
Nr   rƒ  r¸   r,   ©rŠ  ry   c              3   óD   K  — | ]  } t        t        «      «       –— Œ y ­wr:   r…  rh   s     r6   rk   z>test_threadpool_limitation_in_child_context.<locals>.<genexpr>Ã  s#   è ø€ ò ;IØ:;Ð3ŒGÔ2Ó3×5ñ;IùrÕ  rA   r   r†  )rw   re   rŠ  ry  r‡  rˆ  s         r6   Ú+test_threadpool_limitation_in_child_contextrŽ  ²  s¬   € ô 1Ó2€KÜ
ˆ;Ó˜1ÒÜ�‰ÐCÕDá	�Ð/DÔ	Eñ IØ#:¤8°6Ô#:ñ ;IÜ?DÀQ»xô;Ió $IÐ ÷Iô ˜fÓ%€FØÐ$Ü%(¬«¸Ñ)>ÀÓ%BÑ"à%:Ð"äÐ4°kØ6õ8÷Ið Iús   ¹#BÂB"Úvar_name)rB  rC  rA  c                 óF  ‡‡— 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)NT©Úreusec                 ó@   — t         j                  j                  | «      S r:   )rÐ  rH  r  )r�  s    r6   Ú_get_envz>test_threadpool_limitation_in_child_override.<locals>._get_envÞ  s   € Ü�z‰z�~‰~˜hÓ'Ð'r8   Ú4ry   c              3   ó@   •K  — | ]  } t        ‰«      ‰«      –— Œ y ­wr:   r  ©ri   rj   r”  r�  s     €€r6   rk   z?test_threadpool_limitation_in_child_override.<locals>.<genexpr>å  s#   øè ø€ ò *;Ø,-ÐŒG�HÓ˜h×'ñ*;ùr  rA   r,   r   rŒ  c              3   ó@   •K  — | ]  } t        ‰«      ‰«      –— Œ y ­wr:   r  r—  s     €€r6   rk   z?test_threadpool_limitation_in_child_override.<locals>.<genexpr>ê  s#   øè ø€ ò .?Ø01Ð!”˜Ó! (×+ñ.?ùr  rO  )r   ÚshutdownrÐ  rH  r  r"   ro   )rw   re   r�  Úoriginal_var_valuer�   r”  s     `  @r6   Ú,test_threadpool_limitation_in_child_overrider›  Ð  s  ù€ ô  Ô%×.Ñ.Ô0ò(ô Ÿ™Ÿ™¨Ó1Ðð6Ø"Œ�
‰
�8Ñà)”( &Ô)ô *;Ü16°q³ô*;ó ;ˆà˜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C7 Â&C+Â1C7 Ã+C4Ã0C7 Ã7)D )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     €r6   rk   zAtest_loky_reuse_workers.<locals>.parallel_call.<locals>.<genexpr>ý  s   øè ø€ ÒC°A ¤¬£¨Q§ÑCùrÔ   )ro   r"   )re   r<   s    @r6   Úparallel_callz.test_loky_reuse_workers.<locals>.parallel_callû  s%   ø€ Ü�"‹IˆØŒ˜ÔÓC¼¸r»ÔCÕCr8   Tr‘  rã   )r   ro   )re   r   Úfirst_executorr´   Úexecutors        r6   Útest_loky_reuse_workersr£  õ  sN   € òDñ
 �&ÔÜ*°Ô6€Nô �2‹Yò *ˆÙ�fÔÜ(¨tÔ4ˆØ˜>Ó)Ñ)ñ*r8   )F)r   r   )rm   r:   )ÏrQ   rÐ  r©   rX   rq  r×  r–   r-   Ú	tracebackr   Úmathr   r   Úpickler   r  r   r+   r	   r»   r>  r   r   r   Újoblib._multiprocessing_helpersr   Újoblib.test.commonr   r   r   r   r   Újoblib.testingr   r   r   r   r   Újoblib.externals.lokyr   rE  r   ÚposixÚImportErrorÚ _openmp_test_helper.parallel_sumr   r£  Újoblib._parallel_backendsr   r   r   r    r!   Újoblib.parallelr"   r#   r$   r%   r&   r'   r(   r)   r*   rZ  ÚRETURN_GENERATOR_BACKENDSÚpopr•  ÚkeysÚALL_VALID_BACKENDSÚPROCESS_BACKENDSÚPARALLEL_BACKENDSÚhasattrrD  r.   r­  r7   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  r!  r%  r4  rB  rG  rd  ro  rw  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  r  r  r'  r.  r2  r;  r9  ÚSQUARE_LOCALÚSQUARE_LAMBDArD  r/  r<  r=  r?  rF  rI  rN  rO  rS  rU  r[  ri  rl  rx  r|  r  r‰  r�  r˜  rá  rœ  r¥  r¬  r°  r³  rµ  r·  rÀ  rÅ  rÐ  rÝ  rç  rë  rø  r  r  r  r"  r,  r4  r7  Úno_coverr?  rK  rU  rW  rd  ro  rt  r{  r�  r‰  rŽ  r›  r£  )Úbackend_strrj   s   00r6   ú<module>r¿     s  ðñó 
Û 
Û Û Û Û Û Ý &Ý Ý Ý  Ý "Ý (Û ã Ý ß å .ç -Ý 3ß 5÷+õ +ð €>å;å ðÛðÝ>ðÛõ 8Ý 6Ý <Ý 9Ý 1ç -Ý +Ý ,Ý 5ß 7ç 9Ñ 9ð *˜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šÓ%ñ7ó &ó 'ó ,ð7ñ ˆYÐ*Ó+ñó ,ðò.ð2 ÙÐ4ò 7ó ñóó ðð6 ÙˆYÒ@ÓAñó Bó ðò 0ñ
 ˆ_˜hÓ'ÙÐ˜xÓ(ñ?ó )ó (ð?ò
ð ñ9ó ð9òñ ˆX’yÓ!ñFó "ðFñ ˆYÐ)Ó*ñ/ó +ð/ð: ñ
5ó ð
5ð ØÙˆ[š/Ó*ñ5ó +ó ó ð5ñ& ˆYÐ)Ó*ñ9ó +ð9ð ÙˆYÐ)Ó*ñ3ó +ó ð3ð ÙˆYÐ(Ó)ñA"ó *ó ðA"ðH ÙˆY˜Ó!ñEó "ó ðEò.'ñ ˆY˜Ó!ÙÐ)Øò /ð 0ð ò Jð Kð
LóMñóMó "ðð  ÙˆYÐ)Ó*ñó +ó ðò:4ð ÙˆYÐ(Ó)ñ3ó *ó ð3ò=ò9ò
>ð
 ÙˆYÐ)Ó*Ø‡�×ÑÐCÐÓDñ-ó Eó +ó ð-ô*Ð+ô ò
ñ ˆYÐ*Ó+ñHó ,ðHð$ ÙˆYÐ)Ó*ÙˆX’}Ó%ñ:ó &ó +ó ð:ò%ò	4ñ ˆ�$ˆÐ=Ô>ñ9ó ?ð9ò;ð* $5±QÐ#7Ð  Ø  × 'Ñ 'Ù$)¨!£HÖ-˜qÐ˜ÓÒ-ôð
 ÙˆYÐ8Ó9ÙˆYÐ)¨?Ð;Ó<ñ4ó =ó :ó ð4ô(Ð#4ô ñ ˆY˜Ð*:Ð;Ó<ñ4ó =ð4ñ( ˆY˜Ð*:Ð;Ó<ñ4ó =ð4ò(ò
1ô>�×)Ò)×5Ñ5ô >ñ Ð/°Ô ;ð ÙˆYò 0ó 1áˆY˜Ð*:Ð;Ó<ñ
,ó =ó1ó ð
,ð ÙˆX’}Ó%ÙˆYÐ)Ó*ÙˆY˜Ð*:Ð;Ó<ñ
ó =ó +ó &ó ð
ò47ð Ùˆ_Ð/Ó0Ùˆ_Ð/Ó0ÙˆY˜Ð*:Ð;Ó<ñ'ó =ó 1ó 1ó ð'ð ÙˆY˜Ð*:Ð;Ó<ÙÐ%¨¨e }Ó5ñ!ó 6ó =ó ð!ñ> ˆ\š=Ó)ñ(ó *ð(ñ
 Ð8ò
/ó0ñó0ðð ñ+ó ð+ð ØÙˆYÐ(Ó)ñ3ó *ó ó ð3ð.0Ð ,ð  ÙˆYÐ(Ó)ñ	,ó *ó ð	,ð-Ð )ð@€ð€ð€ð
 ÙˆYÐ(°"°*©BÀ7À)ÑLÓMÙˆ]˜[¨,¸ÐFÓGÙÐ Ò"?Ó@ñ,ó Aó Hó Nó ð,ð (9÷P ‚F˜bŸgšgŸošoØ‡G‚G‡O‚O�F—O’OÓ$ó&€Fó 'ðQ 6ðX ñ
ó ð
ð=÷, ‚F˜bŸgšgŸošoØ‡G‚G‡O‚O�F—O’OÓ$ó&€Fó 'ð- :ð4 ñ&ó ð&ò8ò
òð ØÙˆYÐ(Ó)ñ8ó *ó ó ð8ò0ð Øñ	/ó ó ð	/ò	òð
 ‡�×Ñ˜¢9Ó-ñ;ó .ð;òòð( ‡�×Ñ˜ A q 6Ó*ð ÙˆY™Ð5Ó6¸,¸ÑGÓHñNó Ió ó	 +ðNð ‡�×Ñ˜ A r 7Ó+ÙˆY˜Ð*:Ð;Ó<Ùˆ�tÐÐ$=Ô>ñOó ?ó =ó ,ðOñ ˆYÐ*Ó+ÙˆX’~Ó&ñó 'ó ,ðòòð ÙˆYÐ1Ó2Ùˆ[˜;Ð(=Ð>Ó?ÙˆX’~Ó&ñ>ó 'ó @ó 3ó ð>ð Ø‡�×Ñ˜ A r 7Ó+Ùˆ[˜;Ð(=Ð>Ó?ÙˆY˜Ð*:Ð;Ó<Ùˆ�tÐÐ$=Ô>ñ?ó ?ó =ó @ó ,ó ð
?ñ ˆYÐ1Ó2Ùˆ[˜;Ð(=Ð>Ó?ÙˆX’~Ó&ñó 'ó @ó 3ðñ. ˆYÐ1Ó2Ùˆ[˜;Ð(=Ð>Ó?ÙˆX’~Ó&ñó 'ó @ó 3ðñ0 ˆYÐ1Ó2Ùˆ]˜[Ð*?Ð@ÓAÙˆ]˜[Ð*?Ð@ÓAÙˆX’~Ó&ñ>ó 'ó Bó Bó 3ð>ñ* Ðò  ó ñ
 ˆ]˜[Ð*?Ð@ÓAÙˆ]˜[Ð*?Ð@ÓAñ/"ó Bó Bóð/"ðd ØÙˆYÐ(Ó)ñ(Pó *ó ó ð(PñV ˆYØ%' Zˆt�[Ñ!Ú.óñ2ó	ð2ð ÙˆYÐ(Ó)ñ9ó *ó ð9ð( ÙˆY˜Ð*:Ð;Ó<ñ+ó =ó ð+ñ\ ˆY˜Ð*:Ð;Ó<ñ3Kó =ð3KòlEó*	'ð ÙˆY˜ Ð-Ó.ÙˆY˜Ð*:Ð;Ó<ñAó =ó /ó ðAð* ÙˆY˜Ð*:Ð;Ó<Ùˆ�tÐÐ$=Ô>ñ<ó ?ó =ó ð<ó&Hð
 ‡�×ÒÙˆY˜Ð*:Ð;Ó<ÙØ  �‘°&¸+Ð1Fóñ+óó =ó ð
+ò0'ñ ˆY¨2¨>˜$ ™À¸vÓGÙˆ˜ÐÐ%BÔCñ$ó Dó Hð$ñ ˆY˜Ð*:Ð;Ó<Ùˆ˜4ÐÐ(AÔBñó Có =ðñ
 ˆY˜Ð*:Ð;Ó<ñAó =ðAò&=òBò,ò	;ð ØÙˆX’~Ó&ñ8ó 'ó ó ð8ð& ØÙÐ$¢oÓ6ÙˆX˜˜2�wÓÙˆY˜Ð*:Ð;Ó<ñ8ó =ó  ó 7ó ó ð
8ð2 ÙˆX˜˜2�wÓÙˆZò -ó .ñ ˆY˜Ð*:Ð;Ó<ñ6ó =ó.ó  ó ð6ð> ÙˆX’zÓ"ñ*ó #ó ñ*øðW> ò ØƒEðûð
 ò ØƒLðûð
 ò ØƒKðüò. Lùòh .sB   Âk' Âk5 Âl Ä/lÐlë'k2ë1k2ë5l ë?l ìlìl