ó
    F\h €  ã                   ó²  • S S/r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
Jr  SSK
JrJr  SSKJr  SrS	rS
rSr\R(                  " 5       rS rS r " S S\5      r " S S5      rS r " S S\5      r  S#S jrS r " S S\5      r  " S S \!5      r" " S S\!5      r#\#r$ " S S\#5      r% " S S\!5      r& " S  S!\&5      r' " S" S\"5      r(g)$ÚPoolÚ
ThreadPoolé    Né   )Úutil)Úget_contextÚTimeoutError)ÚwaitÚINITÚRUNÚCLOSEÚ	TERMINATEc                 ó$   • [        [        U 6 5      $ ©N)ÚlistÚmap©Úargss    Ú+/usr/lib/python3.13/multiprocessing/pool.pyÚmapstarr   /   s   € Ü”�T�
ÓÐó    c                 óN   • [        [        R                  " U S   U S   5      5      $ )Nr   r   )r   Ú	itertoolsÚstarmapr   s    r   Ústarmapstarr   2   s"   € Ü”	×!Ò! $ q¡'¨4°©7Ó3Ó4Ð4r   c                   ó    • \ rS rSrS rS rSrg)ÚRemoteTracebacké9   c                 ó   • Xl         g r   ©Útb)Úselfr    s     r   Ú__init__ÚRemoteTraceback.__init__:   s   € Ø�r   c                 ó   • U R                   $ r   r   ©r!   s    r   Ú__str__ÚRemoteTraceback.__str__<   s   € Ø�w‰wˆr   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r"   r&   Ú__static_attributes__© r   r   r   r   9   s   † òõr   r   c                   ó    • \ rS rSrS rS rSrg)ÚExceptionWithTracebacké?   c                 ó†   • [         R                  " [        U5      X5      nSR                  U5      nXl        SU-  U l        g )NÚ z

"""
%s""")Ú	tracebackÚformat_exceptionÚtypeÚjoinÚexcr    )r!   r7   r    s      r   r"   ÚExceptionWithTraceback.__init__@   s6   € Ü×'Ò'¬¨S«	°3Ó;ˆØ�W‰W�R‹[ˆØŒØ  2Ñ%ˆ�r   c                 ó>   • [         U R                  U R                  44$ r   )Úrebuild_excr7   r    r%   s    r   Ú
__reduce__Ú!ExceptionWithTraceback.__reduce__E   s   € Ü˜TŸX™X t§w¡wÐ/Ð/Ð/r   ©r7   r    N)r(   r)   r*   r+   r"   r;   r,   r-   r   r   r/   r/   ?   s   † ò&õ
0r   r/   c                 ó&   • [        U5      U l        U $ r   )r   Ú	__cause__r=   s     r   r:   r:   H   s   € Ü# BÓ'€C„MØ€Jr   c                   ó8   ^ • \ rS rSrSrU 4S jrS rS rSrU =r	$ )ÚMaybeEncodingErroréP   zRWraps possible unpickleable errors, so they can be
safely sent through the socket.c                 ó–   >• [        U5      U l        [        U5      U l        [        [        U ]  U R                  U R                  5        g r   )Úreprr7   ÚvalueÚsuperrA   r"   )r!   r7   rE   Ú	__class__s      €r   r"   ÚMaybeEncodingError.__init__T   s3   ø€ Ü˜“9ˆŒÜ˜%“[ˆŒ
ÜÔ  $Ñ0°·±¸4¿:¹:ÕFr   c                 ó@   • SU R                   < SU R                  < S3$ )NzError sending result: 'z'. Reason: 'Ú')rE   r7   r%   s    r   r&   ÚMaybeEncodingError.__str__Y   s   � Ø=A¿Z¼ZØ=A¿X¼XðGð 	Gr   c                 ó@   • SU R                   R                  < SU < S3$ )NÚ<z: Ú>)rG   r(   r%   s    r   Ú__repr__ÚMaybeEncodingError.__repr__]   s   � Ø!Ÿ^™^×4Ô4³dÐ;Ð;r   )r7   rE   )
r(   r)   r*   r+   Ú__doc__r"   r&   rO   r,   Ú__classcell__©rG   s   @r   rA   rA   P   s   ø† ñ'õGò
G÷<ð <r   rA   c                 óÆ  • Ub5  [        U[        5      (       a  US:¼  d  [        SR                  U5      5      eUR                  nU R
                  n[        U S5      (       a4  U R                  R                  5         UR                  R                  5         Ub  U" U6   SnUb  U(       af  X„:  aa   U" 5       n	U	c  [        R                  " S5        O?U	u  p«pÍn SU" U0 UD64n U" X«U45        S =n	=n
=n=n=pÞUS-  nUc  MS  U(       a  X„:  a  Ma  [        R                  " S
U-  5        g ! [        [        4 a    [        R                  " S5         MC  f = f! [         a4  nU(       a  U[        La  [!        UUR"                  5      nSU4n S nAN®S nAff = f! [         a>  n[%        UUS   5      n[        R                  " S	U-  5        U" X«SU445         S nANîS nAff = f)Nr   zMaxtasks {!r} is not validÚ_writerr   z)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFz0Possible encoding error while sending result: %szworker exiting after %d tasks)Ú
isinstanceÚintÚAssertionErrorÚformatÚputÚgetÚhasattrrU   ÚcloseÚ_readerÚEOFErrorÚOSErrorr   ÚdebugÚ	ExceptionÚ_helper_reraises_exceptionr/   Ú__traceback__rA   )ÚinqueueÚoutqueueÚinitializerÚinitargsÚmaxtasksÚwrap_exceptionrZ   r[   Ú	completedÚtaskÚjobÚiÚfuncr   ÚkwdsÚresultÚeÚwrappeds                     r   Úworkerrt   a   sß  € àÑ¤z°(¼C×'@Ñ'@Ø+3°q«=ÜÐ9×@Ñ@ÀÓJÓKÐKØ
�,‰,€CØ
�+‰+€CÜˆw˜	×"Ñ"Ø�‰×ÑÔØ×Ñ×ÑÔ àÑÙ�XÑà€IØ
Ñ
žx¨IÓ,@ð	Ù“5ˆDð
 ‰<Ü�JŠJÐ7Ô8Øà#'Ñ ˆ�˜Dð	 Ø™D $Ð/¨$Ñ/Ð0ˆFð
	,Ù�˜Ð Ô!ð 48Ð7ˆÐ7ˆsÐ7�VÐ7˜dÐ7 TØ�Q‰ˆ	ð7 Ó
žx¨IÕ,@ô8 	‡J‚JÐ.°Ñ:Õ;øô3 œ'Ð"ó 	Ü�JŠJÐBÔCÚð	ûô ó 	 Þ $Ô.HÒ"HÜ*¨1¨a¯o©oÓ>�Ø˜Q�Z�Fûð	 ûô ó 	,Ü(¨¨F°1©IÓ6ˆGÜ�JŠJÐIØñô á�˜% Ð)Ð*×+Ñ+ûð		,úsB   Â0D* Ã
E Ã#
F Ä*&EÅEÅ
FÅ!*FÆFÆ
G Æ"4GÇG c                 ó   • U e)z@Pickle-able helper function for use by _guarded_task_generation.r-   )Úexs    r   rc   rc   Ž   s   € à
€Hr   c                   ó@   ^ • \ rS rSrSrSS.U 4S jjrU 4S jrSrU =r$ )Ú
_PoolCacheé–   zÞ
Class that implements a cache for the Pool class that will notify
the pool management threads every time the cache is emptied. The
notification is done by the use of a queue that is provided when
instantiating the cache.
N©Únotifierc               ó2   >• Xl         [        TU ]  " U0 UD6  g r   )r{   rF   r"   )r!   r{   r   rp   rG   s       €r   r"   Ú_PoolCache.__init__�   s   ø€ Ø ŒÜ‰Ò˜$Ð' $Ó'r   c                 ój   >• [         TU ]  U5        U (       d  U R                  R                  S 5        g g r   )rF   Ú__delitem__r{   rZ   )r!   ÚitemrG   s     €r   r   Ú_PoolCache.__delitem__¡   s,   ø€ Ü‰Ñ˜DÔ!ö Ø�M‰M×Ñ˜dÕ#ð r   )	r(   r)   r*   r+   rQ   r"   r   r,   rR   rS   s   @r   rx   rx   –   s!   ø† ñð +/÷ (ð (÷
$ó 
$r   rx   c                   óÊ  • \ rS rSrSrSr\S 5       r  S*S jr\	R                  \4S jrS	 rS
 r\S 5       r\S 5       rS r\S 5       r\S 5       rS rS rS0 4S jrS+S jrS+S jr  S,S jrS rS-S jrS-S jrS0 SS4S jr  S,S jr  S,S jr\S+S j5       r \!S 5       r"\S 5       r#\S 5       r$\S  5       r%S! r&S" r'S# r(S$ r)\S% 5       r*\!S& 5       r+S' r,S( r-S)r.g).r   é­   zK
Class which supports an async version of applying functions to arguments.
Tc                 ó&   • U R                   " U0 UD6$ r   ©ÚProcess)Úctxr   rp   s      r   r†   ÚPool.Process³   s   € à�{Š{˜DÐ) DÑ)Ð)r   Nr-   c                 óª  • / U l         [        U l        U=(       d
    [        5       U l        U R                  5         [        R                  " 5       U l        U R                  R                  5       U l	        [        U R                  S9U l        X@l        X l        X0l        Uc  [        R                   " 5       =(       d    SnUS:  a  [#        S5      eUb&  [%        U[&        5      (       a  US::  a  [#        S5      eUb  [)        U5      (       d  [+        S5      eXl         U R/                  5         U R9                  5       n[:        R<                  " [>        R@                  U R                  U R                  U R                  U RB                  U R,                  U R                   U RD                  U RF                  U R                  U R                  U R                  U RH                  XpR                  4S9U l%        SU RJ                  l&        [N        U RJ                  l        U RJ                  RQ                  5         [:        R<                  " [>        RR                  U R                  U RT                  U RF                  U R                   U R                  4S9U l+        SU RV                  l&        [N        U RV                  l        U RV                  RQ                  5         [:        R<                  " [>        RX                  U RF                  U RZ                  U R                  4S9U l.        SU R\                  l&        [N        U R\                  l        U R\                  RQ                  5         [^        R`                  " X Rb                  U R                  U RD                  U RF                  U R                   U R                  U RJ                  U RV                  U R\                  U R                  4	S	S
9U l2        [N        U l        g ! [0         aW    U R                    H"  nUR2                  b  M  UR5                  5         M$     U R                    H  nUR7                  5         M     e f = f)Nrz   r   z&Number of processes must be at least 1r   z/maxtasksperchild must be a positive int or Nonezinitializer must be a callable©Útargetr   Té   )r   Úexitpriority)3Ú_poolr
   Ú_stater   Ú_ctxÚ_setup_queuesÚqueueÚSimpleQueueÚ
_taskqueueÚ_change_notifierrx   Ú_cacheÚ_maxtasksperchildÚ_initializerÚ	_initargsÚosÚprocess_cpu_countÚ
ValueErrorrV   rW   ÚcallableÚ	TypeErrorÚ
_processesÚ_repopulate_poolrb   ÚexitcodeÚ	terminater6   Ú_get_sentinelsÚ	threadingÚThreadr   Ú_handle_workersr†   Ú_inqueueÚ	_outqueueÚ_wrap_exceptionÚ_worker_handlerÚdaemonr   ÚstartÚ_handle_tasksÚ
_quick_putÚ_task_handlerÚ_handle_resultsÚ
_quick_getÚ_result_handlerr   ÚFinalizeÚ_terminate_poolÚ
_terminate)r!   Ú	processesrg   rh   ÚmaxtasksperchildÚcontextÚpÚ	sentinelss           r   r"   ÚPool.__init__·   sI  € ð ˆŒ
ÜˆŒà×,œ{›}ˆŒ	Ø×ÑÔÜ×+Ò+Ó-ˆŒð !%§	¡	× 5Ñ 5Ó 7ˆÔÜ ¨$×*?Ñ*?Ñ@ˆŒØ!1ÔØ'ÔØ!ŒàÑÜ×,Ò,Ó.×3°!ˆIØ�q‹=ÜÐEÓFÐFØÑ'ÜÐ.´×4Ñ4Ð8HÈAÓ8MÜ Ð!RÓSÐSàÑ"¬8°K×+@Ñ+@ÜÐ<Ó=Ð=à#Œð	Ø×!Ñ!Ô#ð ×'Ñ'Ó)ˆ	ä(×/Ò/Ü×'Ñ'Ø—+‘+˜tŸ™°·	±	¸4¿<¹<Ø—/‘/ 4§:¡:¨t¯}©}¸d¿n¹nØ×#Ñ# T§^¡^°T×5KÑ5KØ×&Ñ&¨	×3HÑ3HðJñ ˆÔð '+ˆ×ÑÔ#Ü&)ˆ×ÑÔ#Ø×Ñ×"Ñ"Ô$ô '×-Ò-Ü×%Ñ%Ø—/‘/ 4§?¡?°D·N±NØ—*‘*˜dŸk™kð+ñˆÔð
 %)ˆ×ÑÔ!Ü$'ˆ×ÑÔ!Ø×Ñ× Ñ Ô"ä(×/Ò/Ü×'Ñ'Ø—.‘. $§/¡/°4·;±;Ð?ñ ˆÔð '+ˆ×ÑÔ#Ü&)ˆ×ÑÔ#Ø×Ñ×"Ñ"Ô$äŸ-š-Ø×&Ñ&Ø—/‘/ 4§=¡=°$·.±.À$Ç*Á*Ø×'Ñ'¨×)=Ñ)=¸t×?QÑ?QØ×&Ñ&¨¯©ð5ð ñˆŒô ˆ�øô] ó 	Ø—Z”Z�Ø—:‘:Ó%Ø—K‘K–Mñ  ð —Z”Z�Ø—‘–ñ  àð	ús   ÄO1 Ï1$QÐ9Qc                 óš   • U R                   U:X  a;  U" SU < 3[        U S9  [        U SS 5      b  U R                  R	                  S 5        g g g )Nz&unclosed running multiprocessing pool )Úsourcer•   )r�   ÚResourceWarningÚgetattrr•   rZ   )r!   Ú_warnr   s      r   Ú__del__ÚPool.__del__
  sT   € Ø�;‰;˜#ÓÙÐ:¸4¹(ÐCÜ!¨$ò0ä�tÐ/°Ó6ÑBØ×%Ñ%×)Ñ)¨$Õ/ð Cð r   c           
      óš   • U R                   nSUR                   SUR                   SU R                   S[	        U R
                  5       S3	$ )NrM   Ú.z state=z pool_size=rN   )rG   r)   r*   r�   ÚlenrŽ   )r!   Úclss     r   rO   ÚPool.__repr__  sQ   € Ø�n‰nˆØ�C—N‘NÐ# 1 S×%5Ñ%5Ð$6ð 7ØŸ™˜ð &Ü  §¡›_Ð-¨Qð0ð 	1r   c                 ój   • U R                   R                  /nU R                  R                  /n/ UQUQ$ r   )r¨   r^   r•   )r!   Útask_queue_sentinelsÚself_notifier_sentinelss      r   r£   ÚPool._get_sentinels  s<   € Ø $§¡× 6Ñ 6Ð7ÐØ#'×#8Ñ#8×#@Ñ#@Ð"AÐØ@Ð%Ð@Ð(?Ð@Ð@r   c                 ól   • U  Vs/ s H"  n[        US5      (       d  M  UR                  PM$     sn$ s  snf )NÚsentinel)r\   rÍ   )Úworkersrt   s     r   Ú_get_worker_sentinelsÚPool._get_worker_sentinels  s<   € ñ ó8Úð %+Ü" 6¨:×6ó  �—”Ùñ8ð 	8ùò 8s   …1ž1c                 óÒ   • Sn[        [        [        U 5      5      5       HC  nX   nUR                  c  M  [        R
                  " SU-  5        UR                  5         SnX	 ME     U$ )z�Cleanup after any worker processes which have exited due to reaching
their specified lifetime.  Returns True if any workers were cleaned up.
Fúcleaning up worker %dT)ÚreversedÚrangerÅ   r¡   r   ra   r6   )ÚpoolÚcleanedrn   rt   s       r   Ú_join_exited_workersÚPool._join_exited_workers!  s^   € ð
 ˆÜœ%¤ D£	Ó*Ö+ˆAØ‘WˆFØ�‰Ó*ä—
’
Ð2°QÑ6Ô7Ø—‘”Ø�Ø’Gñ ,ð ˆr   c                 óþ   • U R                  U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  5
      $ r   )Ú_repopulate_pool_staticr�   r†   rŸ   rŽ   r§   r¨   r˜   r™   r—   r©   r%   s    r   r    ÚPool._repopulate_pool1  s_   € Ø×+Ñ+¨D¯I©I°t·|±|Ø,0¯O©OØ,0¯J©J¸¿¹Ø,0¯N©N¸D×<MÑ<MØ,0¯N©NØ,0×,BÑ,BØ,0×,@Ñ,@óBð 	Br   c
                 ó  • [        U[        U5      -
  5       Hr  n
U" U [        XEUXxU	4S9nUR                  R	                  SS5      Ul        SUl        UR                  5         UR                  U5        [        R                  " S5        Mt     g)zpBring the number of pool processes up to the specified number,
for use after reaping workers which have exited.
rŠ   r†   Ú
PoolWorkerTzadded workerN)
rÔ   rÅ   rt   ÚnameÚreplacer«   r¬   Úappendr   ra   )r‡   r†   r¶   rÕ   re   rf   rg   rh   r·   rj   rn   Úws               r   rÚ   ÚPool._repopulate_pool_static:  sz   € ô �y¤3 t£9Ñ,Ö-ˆAÙ˜¤FØ%Ø)Ø&Ø,ð.ñ/ˆAð
 —V‘V—^‘^ I¨|Ó<ˆAŒFØˆAŒHØ�G‰GŒIØ�K‰K˜ŒNÜ�JŠJ�~Ö&ò .r   c
                 ón   • [         R                  U5      (       a  [         R                  XX#XEUXxU	5
        gg)zEClean up any exited workers and start replacements for them.
        N)r   r×   rÚ   )
r‡   r†   r¶   rÕ   re   rf   rg   rh   r·   rj   s
             r   Ú_maintain_poolÚPool._maintain_poolM  s7   € ô ×$Ñ$ T×*Ñ*Ü×(Ñ(¨°yØ)0¸KØ)1Ø)7õ9ð +r   c                 ó  • U R                   R                  5       U l        U R                   R                  5       U l        U R                  R                  R
                  U l        U R                  R                  R                  U l	        g r   )
r�   r“   r§   r¨   rU   Úsendr®   r^   Úrecvr±   r%   s    r   r‘   ÚPool._setup_queuesY  sX   € ØŸ	™	×-Ñ-Ó/ˆŒØŸ™×.Ñ.Ó0ˆŒØŸ-™-×/Ñ/×4Ñ4ˆŒØŸ.™.×0Ñ0×5Ñ5ˆ�r   c                 óB   • U R                   [        :w  a  [        S5      eg )NzPool not running)r�   r   rœ   r%   s    r   Ú_check_runningÚPool._check_running_  s   € Ø�;‰;œ#ÓÜÐ/Ó0Ð0ð r   c                 óB   • U R                  XU5      R                  5       $ )z<
Equivalent of `func(*args, **kwds)`.
Pool must be running.
)Úapply_asyncr[   )r!   ro   r   rp   s       r   ÚapplyÚ
Pool.applyc  s    € ð
 ×Ñ ¨DÓ1×5Ñ5Ó7Ð7r   c                 óL   • U R                  X[        U5      R                  5       $ )z`
Apply `func` to each element in `iterable`, collecting the results
in a list that is returned.
)Ú
_map_asyncr   r[   ©r!   ro   ÚiterableÚ	chunksizes       r   r   ÚPool.mapj  s    € ð
 �‰˜t¬w¸	ÓB×FÑFÓHÐHr   c                 óL   • U R                  X[        U5      R                  5       $ )z¬
Like `map()` method but the elements of the `iterable` are expected to
be iterables as well and will be unpacked as arguments. Hence
`func` and (a, b) becomes func(a, b).
)rò   r   r[   ró   s       r   r   ÚPool.starmapq  s    € ð �‰˜t¬{¸IÓF×JÑJÓLÐLr   c                 ó2   • U R                  X[        UXE5      $ )z-
Asynchronous version of `starmap()` method.
)rò   r   ©r!   ro   rô   rõ   ÚcallbackÚerror_callbacks         r   Ústarmap_asyncÚPool.starmap_asyncy  s   € ð
 �‰˜t¬{¸IØ'ó9ð 	9r   c              #   óš   #   •  Sn[        U5       H  u  pEXX%40 4v •  M     g! [         a  nUWS-   [        U40 4v •   SnAgSnAff = f7f)zŠProvides a generator of tasks for imap and imap_unordered with
appropriate handling for iterables which throw exceptions during
iteration.éÿÿÿÿr   N)Ú	enumeraterb   rc   )r!   Ú
result_jobro   rô   rn   Úxrr   s          r   Ú_guarded_task_generationÚPool._guarded_task_generation�  sY   é € ð	JØˆAÜ! (Ö+‘�Ø! d¨D°"Ð5Ô5ò ,øäó 	JØ˜q ™sÔ$>ÀÀÀbÐI×Iûð	Jüs)   ‚A„# ¢A£
A­A¾AÁAÁAc                 óê  • U R                  5         US:X  aN  [        U 5      nU R                  R                  U R	                  UR
                  X5      UR                  45        U$ US:  a  [        SR                  U5      5      e[        R                  XU5      n[        U 5      nU R                  R                  U R	                  UR
                  [        U5      UR                  45        S U 5       $ )z@
Equivalent of `map()` -- can be MUCH slower than `Pool.map()`.
r   zChunksize must be 1+, not {0:n}c              3   ó6   #   • U  H  o  H  o"v •  M     M     g 7fr   r-   ©Ú.0Úchunkr€   s      r   Ú	<genexpr>ÚPool.imap.<locals>.<genexpr>§  ó   é € Ð?¢f˜U»°”D¹‘D¢fùó   ‚)rë   ÚIMapIteratorr”   rZ   r  Ú_jobÚ_set_lengthrœ   rY   r   Ú
_get_tasksr   ©r!   ro   rô   rõ   rq   Útask_batchess         r   ÚimapÚ	Pool.imapŒ  sè   € ð 	×ÑÔØ˜‹>Ü! $Ó'ˆFØ�O‰O×Ñà×1Ñ1°&·+±+¸tÓNØ×&Ñ&ðôð
 ˆMà˜1‹}Ü Ø5×<Ñ<Ø!ó#ó$ð $ô  Ÿ?™?¨4¸9ÓEˆLÜ! $Ó'ˆFØ�O‰O×Ñà×1Ñ1°&·+±+Ü29Ø2>ó@ð ×&Ñ&ð	ôñ @¡fÓ?Ð?r   c                 óê  • U R                  5         US:X  aN  [        U 5      nU R                  R                  U R	                  UR
                  X5      UR                  45        U$ US:  a  [        SR                  U5      5      e[        R                  XU5      n[        U 5      nU R                  R                  U R	                  UR
                  [        U5      UR                  45        S U 5       $ )z<
Like `imap()` method but ordering of results is arbitrary.
r   zChunksize must be 1+, not {0!r}c              3   ó6   #   • U  H  o  H  o"v •  M     M     g 7fr   r-   r  s      r   r  Ú&Pool.imap_unordered.<locals>.<genexpr>Ã  r  r  )rë   ÚIMapUnorderedIteratorr”   rZ   r  r  r  rœ   rY   r   r  r   r  s         r   Úimap_unorderedÚPool.imap_unordered©  så   € ð 	×ÑÔØ˜‹>Ü*¨4Ó0ˆFØ�O‰O×Ñà×1Ñ1°&·+±+¸tÓNØ×&Ñ&ðôð
 ˆMà˜1‹}Ü Ø5×<Ñ<¸YÓGóIð IäŸ?™?¨4¸9ÓEˆLÜ*¨4Ó0ˆFØ�O‰O×Ñà×1Ñ1°&·+±+Ü29Ø2>ó@ð ×&Ñ&ð	ôñ @¡fÓ?Ð?r   c                 ó–   • U R                  5         [        XU5      nU R                  R                  UR                  SXU4/S45        U$ )z+
Asynchronous version of `apply()` method.
r   N)rë   ÚApplyResultr”   rZ   r  )r!   ro   r   rp   rû   rü   rq   s          r   rî   ÚPool.apply_asyncÅ  sH   € ð
 	×ÑÔÜ˜T¨^Ó<ˆØ�‰×Ñ˜vŸ{™{¨A¨t¸4Ð@ÐAÀ4ÐHÔIØˆr   c                 ó2   • U R                  X[        X4U5      $ )z)
Asynchronous version of `map()` method.
)rò   r   rú   s         r   Ú	map_asyncÚPool.map_asyncÏ  s   € ð
 �‰˜t¬w¸	Øóð 	r   c                 ó¾  • U R                  5         [        US5      (       d  [        U5      nUc9  [        [	        U5      [	        U R
                  5      S-  5      u  pGU(       a  US-  n[	        U5      S:X  a  Sn[        R                  XU5      n[        X[	        U5      UUS9n	U R                  R                  U R                  U	R                  UU5      S45        U	$ )zI
Helper function to implement map, starmap and their async counterparts.
Ú__len__Né   r   r   ©rü   )rë   r\   r   ÚdivmodrÅ   rŽ   r   r  Ú	MapResultr”   rZ   r  r  )
r!   ro   rô   Úmapperrõ   rû   rü   Úextrar  rq   s
             r   rò   ÚPool._map_async×  sÍ   € ð
 	×ÑÔÜ�x ×+Ñ+Ü˜H“~ˆHàÑÜ%¤c¨(£m´S¸¿¹³_ÀqÑ5HÓIÑˆIÞØ˜Q‘�	Üˆx‹=˜AÓØˆIä—‘ t°yÓAˆÜ˜4¬C°«M¸8Ø*8ñ:ˆà�‰×Ñà×-Ñ-¨f¯k©kØ.4Ø.:ó<ð ð	ô	
ð ˆr   c                 ó�   • [        XS9  UR                  5       (       d(  UR                  5         UR                  5       (       d  M'  g g )N)Útimeout)r	   Úemptyr[   )rº   Úchange_notifierr-  s      r   Ú_wait_for_updatesÚPool._wait_for_updatesô  s6   € äˆYÒ(Ø!×'Ñ'×)Ñ)Ø×ÑÔ!ð "×'Ñ'×)Õ)r   c                 óº  • [         R                  " 5       nUR                  [        :X  d  U(       a„  UR                  [        :w  ap  U R                  X4XVUX‰U
X¼5
        / U R                  U5      QUQnU R                  UU5        UR                  [        :X  a  MS  U(       a  UR                  [        :w  a  Mp  UR                  S 5        [        R                  " S5        g )Nzworker handler exiting)r¤   Úcurrent_threadr�   r   r   rä   rÏ   r0  rZ   r   ra   )rÆ   ÚcacheÚ	taskqueuer‡   r†   r¶   rÕ   re   rf   rg   rh   r·   rj   rº   r/  ÚthreadÚcurrent_sentinelss                    r   r¦   ÚPool._handle_workersú  s¯   € ô
 ×)Ò)Ó+ˆð �m‰mœsÓ"¦u°·±Ä)Ó1KØ×Ñ˜s¨Y¸gØ'°hØ/ôAð !O #×";Ñ";¸DÓ"AÐ NÀIÐ NÐà×!Ñ!Ð"3°_ÔEð �m‰mœsÕ"¦u°·±Ä)Õ1Kð 	�‰�dÔÜ�
Š
Ð+Õ,r   c                 óf  • [         R                  " 5       n[        U R                  S 5       HŠ  u  pgS n U H8  nUR                  [
        :w  a  [        R                  " S5          OK U" U5        M:     U(       a/  [        R                  " S5        U(       a  US   OSnU" US-   5         S =n=pjM„   S =n=pj  O   [        R                  " S5         [        R                  " S5        UR                  S 5        [        R                  " S	5        U H  nU" S 5        M     [        R                  " S5        g ! [         a@  n	US S u  p« XJ   R                  USU	45         S n	A	GM/  ! [         a	      S n	A	GMA  f = fS n	A	ff = f! S =n=pjf = f! [         a    [        R                  " S
5         N�f = f)Nz'task handler found thread._state != RUNé   Fzdoing set_length()r   r   ztask handler got sentinelz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got OSError when sending sentinelsztask handler exiting)r¤   r3  Úiterr[   r�   r   r   ra   rb   Ú_setÚKeyErrorrZ   r`   )r5  rZ   rf   rÕ   r4  r6  ÚtaskseqÚ
set_lengthrl   rr   rm   Úidxr¹   s                r   r­   ÚPool._handle_tasks  s‘  € ä×)Ò)Ó+ˆä#'¨	¯©°tÖ#<ÑˆGØˆDð,ã#�DØ—}‘}¬Ó+ÜŸ
š
Ð#LÔMÙð!Ù˜Dž	ñ $ö "ÜŸ
š
Ð#7Ô8Þ)-˜d 1šg°2˜Ù" 3¨¡7Ô+Øð (,Ð+�Ð+�w¡ð à'+Ð+�Ð+�w¡ñ1 $=ô4 �JŠJÐ2Ô3ð
	Jä�JŠJÐHÔIØ�L‰L˜Ôô �JŠJÐAÔBÛ�Ù�D–	ñ ô
 	�
Š
Ð)Õ*øô= %ó !Ø#'¨¨ 8™˜ð!Ø!™JŸO™O¨C°%¸°×<Ó<øÜ'ó !ß ð!þð	!ûð (,Ð+�Ð+�w ûô ó 	JÜ�JŠJÐHÖIð	Júsl   ´1FÁ&D6Á.:FÃAF Ä6
F Å E;ÅE%ÅFÅ%
E8	Å/E;Å0FÅ7E8	Å8E;Å;F Æ FÆF
Æ F0Æ/F0c                 ón  • [         R                  " 5       n  U" 5       nUR                  [        :w  a2  UR                  [        :X  d   S5       e[        R
                  " S5        O:Uc  [        R
                  " S5        O Uu  pVn X%   R                  Xg5        S =n=pWMˆ  U(       ar  UR                  [        :w  a^   U" 5       nUc  [        R
                  " S5        M>  Uu  pVn X%   R                  Xg5        S =n=pWU(       a  UR                  [        :w  a  M^  [        U S5      (       aR  [        R
                  " S5         [        S5       H+  nU R                  R                  5       (       d    OU" 5         M-      [        R
                  " S	[        U5      UR                  5        g ! [        [        4 a    [        R
                  " S5         g f = f! [         a     GNHf = f! [        [        4 a    [        R
                  " S5         g f = f! [         a     GN'f = f! [        [        4 a     N¸f = f)
Nz.result handler got EOFError/OSError -- exitingzThread not in TERMINATEz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelr^   z"ensuring that outqueue is not fullé
   z7result handler exiting: len(cache)=%s, thread._state=%s)r¤   r3  r`   r_   r   ra   r�   r   r   r<  r=  r\   rÔ   r^   ÚpollrÅ   )rf   r[   r4  r6  rl   rm   rn   Úobjs           r   r°   ÚPool._handle_results=  sü  € ä×)Ò)Ó+ˆàðÙ“u�ð
 �}‰}¤Ó#Ø—}‘}¬	Ó1ÐLÐ3LÓLÐ1Ü—
’
ÐIÔJØà‰|Ü—
’
Ð8Ô9Øà‰KˆC�CðØ‘
—‘ Ô'ð  $Ð#ˆDÐ#�3ñ+ ö. ˜Ÿ™¬Ó2ðÙ“u�ð
 ‰|Ü—
’
ÐCÔDÙØ‰KˆC�CðØ‘
—‘ Ô'ð  $Ð#ˆDÐ#�3ö ˜Ÿ™¬Õ2ô" �8˜Y×'Ñ'Ü�JŠJÐ;Ô<ðÜ˜rž�AØ#×+Ñ+×0Ñ0×2Ñ2ÙÙ–Eò #ô 	�
Š
ÐLÜ�%‹j˜&Ÿ-™-õ	)øôe œXÐ&ó Ü—
’
ÐKÔLÙðûô  ó Úðûô œXÐ&ó Ü—
’
ÐKÔLÙðûô ó Úðûô œXÐ&ó Ùðús_   ˜F' ÂG Â;G$ Ã#H Å .H! Å/H! Æ'&GÇGÇ
G!Ç G!Ç$&HÈHÈ
HÈHÈ!H4È3H4c              #   ó~   #   • [        U5      n [        [        R                  " X5      5      nU(       d  g X4v •  M.  7fr   )r;  Útupler   Úislice)ro   ÚitÚsizer  s       r   r  ÚPool._get_tasksy  s8   é € ä�"‹XˆØÜ”i×&Ò& rÓ0Ó1ˆAÞØØ�)ŠOñ	 ùs   ‚;=c                 ó   • [        S5      e)Nz:pool objects cannot be passed between processes or pickled)ÚNotImplementedErrorr%   s    r   r;   ÚPool.__reduce__‚  s   € Ü!ØJóð 	r   c                 óÐ   • [         R                  " S5        U R                  [        :X  a<  [        U l        [        U R
                  l        U R                  R                  S 5        g g )Nzclosing pool)r   ra   r�   r   r   rª   r•   rZ   r%   s    r   r]   Ú
Pool.close‡  sH   € Ü�
Š
�>Ô"Ø�;‰;œ#ÓÜˆDŒKÜ*/ˆD× Ñ Ô'Ø×!Ñ!×%Ñ% dÕ+ð r   c                 óf   • [         R                  " S5        [        U l        U R	                  5         g )Nzterminating pool)r   ra   r   r�   rµ   r%   s    r   r¢   ÚPool.terminateŽ  s    € Ü�
Š
Ð%Ô&ÜˆŒØ�‰Õr   c                 óš  • [         R                  " S5        U R                  [        :X  a  [	        S5      eU R                  [
        [        4;  a  [	        S5      eU R                  R                  5         U R                  R                  5         U R                  R                  5         U R                   H  nUR                  5         M     g )Nzjoining poolzPool is still runningzIn unknown state)r   ra   r�   r   rœ   r   r   rª   r6   r¯   r²   rŽ   )r!   r¹   s     r   r6   Ú	Pool.join“  s�   € Ü�
Š
�>Ô"Ø�;‰;œ#ÓÜÐ4Ó5Ð5Ø�[‰[¤¬	Ð 2Ó2ÜÐ/Ó0Ð0Ø×Ñ×!Ñ!Ô#Ø×Ñ×ÑÔ!Ø×Ñ×!Ñ!Ô#Ø—”ˆAØ�F‰FŽHò r   c                 óž  • [         R                  " S5        U R                  R                  5         UR	                  5       (       aˆ  U R
                  R                  5       (       ah  U R
                  R                  5         [        R                  " S5        UR	                  5       (       a"  U R
                  R                  5       (       a  Mf  g g g g )Nz7removing tasks from inqueue until task handler finishedr   )
r   ra   Ú_rlockÚacquireÚis_aliver^   rD  rè   ÚtimeÚsleep)re   Útask_handlerrK  s      r   Ú_help_stuff_finishÚPool._help_stuff_finishŸ  s‰   € ô 	�
Š
ÐLÔMØ�‰×ÑÔ Ø×#Ñ#×%Ñ%¨'¯/©/×*>Ñ*>×*@Ñ*@Ø�O‰O× Ñ Ô"Ü�JŠJ�qŒMð ×#Ñ#×%Ñ%¨'¯/©/×*>Ñ*>×*@Ô*@Ð%Ð*@Ð%r   c
                 óÊ  • [         R                  " S5        [        Ul        UR	                  S 5        [        Ul        [         R                  " S5        U R                  X'[        U5      5        UR                  5       (       d  [        U	5      S:w  a  [        S5      e[        Ul        UR	                  S 5        UR	                  S 5        [         R                  " S5        [        R                  " 5       ULa  UR                  5         U(       aR  [        US   S5      (       a>  [         R                  " S5        U H"  n
U
R                  b  M  U
R                  5         M$     [         R                  " S5        [        R                  " 5       ULa  UR                  5         [         R                  " S	5        [        R                  " 5       ULa  UR                  5         U(       a  [        US   S5      (       aj  [         R                  " S
5        U HM  n
U
R                  5       (       d  M  [         R                  " SU
R                  -  5        U
R                  5         MO     g g g )Nzfinalizing poolz&helping task handler/workers to finishr   z/Cannot have cache with result_handler not alivezjoining worker handlerr¢   zterminating workerszjoining task handlerzjoining result handlerzjoining pool workersrÒ   )r   ra   r   r�   rZ   r]  rÅ   rY  rX   r¤   r3  r6   r\   r¡   r¢   Úpid)rÆ   r5  re   rf   rÕ   r/  Úworker_handlerr\  Úresult_handlerr4  r¹   s              r   r´   ÚPool._terminate_pool¨  s½  € ô 	�
Š
Ð$Ô%ô
 !*ˆÔØ×Ñ˜DÔ!ä'ˆÔä�
Š
Ð;Ô<Ø×Ñ˜w´c¸$³iÔ@à×'Ñ'×)Ñ)´°E³
¸a³Ü ØAóCð Cô !*ˆÔØ×Ñ˜DÔ!Ø�‰�TÔô 	�
Š
Ð+Ô,Ü×#Ò#Ó%¨^Ò;Ø×ÑÔ!ö ”G˜D ™G [×1Ñ1Ü�JŠJÐ,Ô-Û�Ø—:‘:Ó%Ø—K‘K–Mñ ô 	�
Š
Ð)Ô*Ü×#Ò#Ó%¨\Ò9Ø×ÑÔä�
Š
Ð+Ô,Ü×#Ò#Ó%¨^Ò;Ø×ÑÔ!æ”G˜D ™G [×1Ñ1Ü�JŠJÐ-Ô.Û�Ø—:‘:—<“<ä—J’JÐ6¸¿¹Ñ>Ô?Ø—F‘F–Hò	 ð 2ˆ4r   c                 ó&   • U R                  5         U $ r   )rë   r%   s    r   Ú	__enter__ÚPool.__enter__Þ  s   € Ø×ÑÔØˆr   c                 ó$   • U R                  5         g r   )r¢   )r!   Úexc_typeÚexc_valÚexc_tbs       r   Ú__exit__ÚPool.__exit__â  s   € Ø�‰Õr   )r–   r•   r�   r™   r˜   r§   r—   r¨   rŽ   rŸ   r±   r®   r²   r�   r¯   r”   rµ   rª   )NNr-   NNr   )NNN)r   )/r(   r)   r*   r+   rQ   r©   Ústaticmethodr†   r"   ÚwarningsÚwarnr   rÁ   rO   r£   rÏ   r×   r    rÚ   rä   r‘   rë   rï   r   r   rý   r  r  r  rî   r!  rò   r0  Úclassmethodr¦   r­   r°   r  r;   r]   r¢   r6   r]  r´   re  rk  r,   r-   r   r   r   r   ­   sÁ  † ñð €Oàñ*ó ð*ð CEØ04ôOðf %ŸM™M¨sô 0ò1òAð
 ñ8ó ð8ð ñó ðòBð ñ'ó ð'ð$ ñ	9ó ð	9ò6ò1ð  "¨ô 8ôIôMð FJØô9ò	Jô@ô:@ð8 &(¨b¸4Øôð BFØôð KOØôð: ó"ó ð"ð
 ñ-ó ð-ð( ñ++ó ð++ðZ ñ9)ó ð9)ðv ñó ðòò
,òò

ð ñó ðð ñ3ó ð3òjõr   c                   ód   • \ rS rSrS rS rS rS
S jrS
S jrS r	\
" \R                  5      rS	rg)r  ié  c                 óÖ   • Xl         [        R                  " 5       U l        [	        [
        5      U l        UR                  U l        X l        X0l	        X R                  U R                  '   g r   )
rŽ   r¤   ÚEventÚ_eventÚnextÚjob_counterr  r–   Ú	_callbackÚ_error_callback)r!   rÕ   rû   rü   s       r   r"   ÚApplyResult.__init__ë  sG   € ØŒ
Ü—o’oÓ'ˆŒÜœÓ%ˆŒ	Ø—k‘kˆŒØ!ŒØ-ÔØ!%�‰�D—I‘IÒr   c                 ó6   • U R                   R                  5       $ r   )rt  Úis_setr%   s    r   ÚreadyÚApplyResult.readyô  s   € Ø�{‰{×!Ñ!Ó#Ð#r   c                 óx   • U R                  5       (       d  [        SR                  U 5      5      eU R                  $ )Nz{0!r} not ready)r|  rœ   rY   Ú_successr%   s    r   Ú
successfulÚApplyResult.successful÷  s.   € Ø�z‰z�|‰|ÜÐ.×5Ñ5°dÓ;Ó<Ð<Ø�}‰}Ðr   Nc                 ó:   • U R                   R                  U5        g r   )rt  r	   ©r!   r-  s     r   r	   ÚApplyResult.waitü  s   € Ø�‰×Ñ˜Õ!r   c                 ó¬   • U R                  U5        U R                  5       (       d  [        eU R                  (       a  U R                  $ U R                  er   )r	   r|  r   r  Ú_valuerƒ  s     r   r[   ÚApplyResult.getÿ  s:   € Ø�	‰	�'ÔØ�z‰z�|‰|ÜÐØ�=�=Ø—;‘;Ðà—+‘+Ðr   c                 ó†  • Uu  U l         U l        U R                  (       a,  U R                   (       a  U R                  U R                  5        U R                  (       a,  U R                   (       d  U R                  U R                  5        U R                  R                  5         U R                  U R                  	 S U l        g r   )	r  r†  rw  rx  rt  Úsetr–   r  rŽ   ©r!   rn   rE  s      r   r<  ÚApplyResult._set  ss   € Ø%(Ñ"ˆŒ�t”{Ø�>�>˜dŸmŸmØ�N‰N˜4Ÿ;™;Ô'Ø××¨¯¯Ø× Ñ  §¡Ô-Ø�‰�‰ÔØ�K‰K˜Ÿ	™	Ð"Øˆ�
r   )r–   rw  rx  rt  r  rŽ   r  r†  r   )r(   r)   r*   r+   r"   r|  r€  r	   r[   r<  rp  ÚtypesÚGenericAliasÚ__class_getitem__r,   r-   r   r   r  r  é  s3   † ò&ò$òô
"ôòñ $ E×$6Ñ$6Ó7Ór   r  c                   ó    • \ rS rSrS rS rSrg)r(  i  c                 ó
  • [         R                  XUUS9  SU l        S /U-  U l        X l        US::  a9  SU l        U R                  R                  5         U R                  U R                  	 g X2-  [        X2-  5      -   U l        g )Nr&  Tr   )r  r"   r  r†  Ú
_chunksizeÚ_number_leftrt  r‰  r–   r  Úbool)r!   rÕ   rõ   Úlengthrû   rü   s         r   r"   ÚMapResult.__init__  sz   € Ü×Ñ˜T¨Ø,:ð 	ñ 	<àˆŒØ�f˜v‘oˆŒØ#ŒØ˜‹>Ø !ˆDÔØ�K‰K�O‰OÔØ—‘˜DŸI™IÑ&à &Ñ 1´D¸Ñ9KÓ4LÑ LˆDÕr   c                 óÚ  • U =R                   S-  sl         Uu  p4U(       a±  U R                  (       a   X@R                  XR                  -  US-   U R                  -  & U R                   S:X  ae  U R                  (       a  U R	                  U R                  5        U R
                  U R                  	 U R                  R                  5         S U l	        g g U(       d  U R                  (       a  SU l        X@l        U R                   S:X  ae  U R                  (       a  U R                  U R                  5        U R
                  U R                  	 U R                  R                  5         S U l	        g g )Nr   r   F)r’  r  r†  r‘  rw  r–   r  rt  r‰  rŽ   rx  )r!   rn   Úsuccess_resultÚsuccessrq   s        r   r<  ÚMapResult._set)  sþ   € Ø×Ò˜QÑÕØ(‰ˆÞ�t—}—}ØCI�K‰K˜Ÿ/™/Ñ)¨1¨Q©3°·±Ñ*?Ð@Ø× Ñ  AÓ%Ø—>—>Ø—N‘N 4§;¡;Ô/Ø—K‘K §	¡	Ð*Ø—‘—‘Ô!Ø!�•
ð &ö ˜tŸ}Ÿ}à %�”Ø$”Ø× Ñ  AÓ%à×'×'Ø×(Ñ(¨¯©Ô5Ø—K‘K §	¡	Ð*Ø—‘—‘Ô!Ø!�•
ð &r   )r‘  r’  rŽ   r  r†  N)r(   r)   r*   r+   r"   r<  r,   r-   r   r   r(  r(    s   † òMõ"r   r(  c                   ó:   • \ rS rSrS rS rS	S jr\rS rS r	Sr
g)
r  iE  c                 óD  • Xl         [        R                  " [        R                  " 5       5      U l        [        [        5      U l        UR                  U l        [        R                  " 5       U l        SU l        S U l        0 U l        X R                  U R                  '   g )Nr   )rŽ   r¤   Ú	ConditionÚLockÚ_condru  rv  r  r–   ÚcollectionsÚdequeÚ_itemsÚ_indexÚ_lengthÚ	_unsorted)r!   rÕ   s     r   r"   ÚIMapIterator.__init__G  sl   € ØŒ
Ü×(Ò(¬¯ªÓ)9Ó:ˆŒ
ÜœÓ%ˆŒ	Ø—k‘kˆŒÜ!×'Ò'Ó)ˆŒØˆŒØˆŒØˆŒØ!%�‰�D—I‘IÒr   c                 ó   • U $ r   r-   r%   s    r   Ú__iter__ÚIMapIterator.__iter__R  s   € Øˆr   Nc                 óø  • U R                       U R                  R                  5       nS S S 5        Wu  p4U(       a  U$ Ue! [         až    U R                  U R
                  :X  a  S U l        [        S eU R                   R                  U5         U R                  R                  5       n N�! [         a0    U R                  U R
                  :X  a  S U l        [        S e[        S ef = ff = f! , (       d  f       NÈ= fr   )
rž  r¡  ÚpopleftÚ
IndexErrorr¢  r£  rŽ   ÚStopIterationr	   r   )r!   r-  r€   r˜  rE   s        r   ru  ÚIMapIterator.nextU  sÐ   € Ø�Z‹Zð1Ø—{‘{×*Ñ*Ó,�÷ ð  ‰ˆÞØˆLØˆøô! ó 1Ø—;‘; $§,¡,Ó.Ø!%�D”JÜ'¨TÐ1Ø—
‘
—‘ Ô(ð1ØŸ;™;×.Ñ.Ó0’DøÜ!ó 1Ø—{‘{ d§l¡lÓ2Ø%)˜œ
Ü+°Ð5Ü&¨DÐ0ð	1úð1ú÷ �Zús5   �C+�A Á AC(ÂB*Â(C+Â*:C$Ã$C(Ã(C+Ã+
C9c                 ó¨  • U R                      U R                  U:X  aÖ  U R                  R                  U5        U =R                  S-  sl        U R                  U R                  ;   aq  U R                  R                  U R                  5      nU R                  R                  U5        U =R                  S-  sl        U R                  U R                  ;   a  Mq  U R                   R                  5         OX R                  U'   U R                  U R                  :X  a  U R                  U R                  	 S U l
        S S S 5        g ! , (       d  f       g = f©Nr   )rž  r¢  r¡  rà   r¤  ÚpopÚnotifyr£  r–   r  rŽ   rŠ  s      r   r<  ÚIMapIterator._setm  sÞ   € Ø�Z‹ZØ�{‰{˜aÓØ—‘×"Ñ" 3Ô'Ø—’˜qÑ •Ø—k‘k T§^¡^Ó3ØŸ.™.×,Ñ,¨T¯[©[Ó9�CØ—K‘K×&Ñ& sÔ+Ø—K’K 1Ñ$•Kð —k‘k T§^¡^Õ3ð —
‘
×!Ñ!Õ#à$'—‘˜qÑ!à�{‰{˜dŸl™lÓ*Ø—K‘K §	¡	Ð*Ø!�”
÷ �ZŽZús   �C
EÃA!EÅ
Ec                 ó   • U R                      Xl        U R                  U R                  :X  a8  U R                   R                  5         U R                  U R
                  	 S U l        S S S 5        g ! , (       d  f       g = fr   )rž  r£  r¢  r±  r–   r  rŽ   )r!   r”  s     r   r  ÚIMapIterator._set_length~  sO   € Ø�Z‹ZØ!ŒLØ�{‰{˜dŸl™lÓ*Ø—
‘
×!Ñ!Ô#Ø—K‘K §	¡	Ð*Ø!�”
÷ �ZŽZús   �AA/Á/
A=)r–   rž  r¢  r¡  r  r£  rŽ   r¤  r   )r(   r)   r*   r+   r"   r§  ru  Ú__next__r<  r  r,   r-   r   r   r  r  E  s"   † ò	&òôð, €Hò"õ""r   r  c                   ó   • \ rS rSrS rSrg)r  iŠ  c                 óT  • U R                      U R                  R                  U5        U =R                  S-  sl        U R                   R	                  5         U R                  U R
                  :X  a  U R                  U R                  	 S U l        S S S 5        g ! , (       d  f       g = fr¯  )	rž  r¡  rà   r¢  r±  r£  r–   r  rŽ   rŠ  s      r   r<  ÚIMapUnorderedIterator._setŒ  sj   € Ø�Z‹ZØ�K‰K×Ñ˜sÔ#Ø�KŠK˜1Ñ�KØ�J‰J×ÑÔØ�{‰{˜dŸl™lÓ*Ø—K‘K §	¡	Ð*Ø!�”
÷ �ZŽZús   �BBÂ
B')rŽ   N)r(   r)   r*   r+   r<  r,   r-   r   r   r  r  Š  s   † õ"r   r  c                   ód   • \ rS rSrSr\S 5       rSS jrS rS r	\S 5       r
\S	 5       rS
 rSrg)r   i™  Fc                 ó   • SSK Jn  U" U0 UD6$ )Nr   r…   )Údummyr†   )r‡   r   rp   r†   s       r   r†   ÚThreadPool.Processœ  s   € å"Ù˜Ð% Ñ%Ð%r   Nc                 ó0   • [         R                  XX#5        g r   )r   r"   )r!   r¶   rg   rh   s       r   r"   ÚThreadPool.__init__¡  s   € Ü�‰�d {Õ=r   c                 óØ   • [         R                  " 5       U l        [         R                  " 5       U l        U R                  R                  U l        U R                  R                  U l        g r   )r’   r“   r§   r¨   rZ   r®   r[   r±   r%   s    r   r‘   ÚThreadPool._setup_queues¤  sD   € Ü×)Ò)Ó+ˆŒÜ×*Ò*Ó,ˆŒØŸ-™-×+Ñ+ˆŒØŸ.™.×,Ñ,ˆ�r   c                 ó0   • U R                   R                  /$ r   )r•   r^   r%   s    r   r£   ÚThreadPool._get_sentinelsª  s   € Ø×%Ñ%×-Ñ-Ð.Ð.r   c                 ó   • / $ r   r-   )rÎ   s    r   rÏ   Ú ThreadPool._get_worker_sentinels­  s   € àˆ	r   c                 ó¤   •   U R                  SS9  M  ! [        R                   a     Of = f[        U5       H  nU R	                  S 5        M     g )NF)Úblock)r[   r’   ÚEmptyrÔ   rZ   )re   r\  rK  rn   s       r   r]  ÚThreadPool._help_stuff_finish±  sM   € ð	ØØ—‘ %�Ñ(ñ øä�{‰{ó 	Ùð	úä�t–ˆAØ�K‰K˜Öò s   ‚ ”+ª+c                 ó0   • [         R                  " U5        g r   )rZ  r[  )r!   rº   r/  r-  s       r   r0  ÚThreadPool._wait_for_updates¼  s   € Ü�
Š
�7Õr   )r§   r¨   r±   r®   )NNr-   )r(   r)   r*   r+   r©   rm  r†   r"   r‘   r£   rÏ   r]  r0  r,   r-   r   r   r   r   ™  sU   † Ø€Oàñ&ó ð&ô>ò-ò/ð ñó ðð ñó ðõr   )Nr-   NF))Ú__all__rŸ  r   rš   r’   r¤   rZ  r3   rŒ  rn  r2   r   r   r   Ú
connectionr	   r
   r   r   r   Úcountrv  r   r   rb   r   r/   r:   rA   rt   rc   Údictrx   Úobjectr   r  ÚAsyncResultr(  r  r  r   r-   r   r   Ú<module>rÑ     s  ðð �<Ð
 €ó Û Û 	Û Û Û Û Û Û õ ß 'Ý ð €Ø€Ø€Ø€	ð �oŠoÓ€òò5ô�iô ÷0ñ 0òô<˜ô <ð" GKØô+<òZô$�ô $ô.vˆ6ô vôx)8�&ô )8ðV €ô%"�ô %"ôV?"�6ô ?"ôJ	"˜Lô 	"ô$�õ $r   