
    -hh                        S r SSKrSSKJr  SSKrSSKrSSKrSSKJ	r	  SSK
r
SSKrSSKJr  SSKrSSKrSSKJr  \R$                  " 5       rSq " S S	5      rS
 r\
R.                  " \5        SrSr " S S\5      r " S S5      rS r " S S\5      r " S S\5      r  " S S\5      r! " S S\	5      r"S r#  S%S jr$S&S jr% " S S\
RL                  5      r'Sq(Sq)S r*S  r+ " S! S"\RX                  5      r- " S# S$\R\                  5      r/g)'z"Brian Quinlan (brian@sweetapp.com)    N)_base)Queue)partial)format_exceptionFc                   ,    \ rS rSrS rS rS rS rSrg)_ThreadWakeupD   c                     SU l         [        R                  " 5       U l        [        R
                  " SS9u  U l        U l        g )NF)duplex)_closed	threadingLock_lockmpPipe_reader_writerselfs    C/opt/python-3.13.8/usr/lib/python3.13/concurrent/futures/process.py__init___ThreadWakeup.__init__E   s.    ^^%
%'WWE%:"dl    c                     U R                      U R                  (       d;  SU l        U R                  R                  5         U R                  R                  5         S S S 5        g ! , (       d  f       g = fNT)r   r   r   closer   r   s    r   r   _ThreadWakeup.closeJ   sC     ZZ<<#""$""$	 ZZs   AA##
A1c                     U R                      U R                  (       d  U R                  R                  S5        S S S 5        g ! , (       d  f       g = f)Nr   )r   r   r   
send_bytesr   s    r   wakeup_ThreadWakeup.wakeupV   s,    ZZ<<'', ZZs   -A
Ac                     U R                   (       a  [        S5      eU R                  R                  5       (       a<  U R                  R	                  5         U R                  R                  5       (       a  M;  g g )Nz!operation on closed _ThreadWakeup)r   RuntimeErrorr   poll
recv_bytesr   s    r   clear_ThreadWakeup.clear[   sM    <<BCCll!!LL##% ll!!r   )r   r   r   r   N)	__name__
__module____qualname____firstlineno__r   r   r    r&   __static_attributes__ r   r   r   r   D   s    ;

%-
&r   r   c                      Sq [        [        R                  5       5      n U  H  u  pUR	                  5         M     U  H  u  p1UR                  5         M     g r   )_global_shutdownlist_threads_wakeupsitemsr    join)r2   _thread_wakeupts       r   _python_exitr7   b   sL    !'')*E! " 	 r      =   c                        \ rS rSrS rS rSrg)_RemoteTraceback   c                     Xl         g Ntb)r   r@   s     r   r   _RemoteTraceback.__init__   s    r   c                     U R                   $ r>   r?   r   s    r   __str___RemoteTraceback.__str__   s    wwr   r?   N)r(   r)   r*   r+   r   rC   r,   r-   r   r   r;   r;      s    r   r;   c                        \ rS rSrS rS rSrg)_ExceptionWithTraceback   c                     SR                  [        [        U5      X5      5      nXl        S U R                  l        SU-  U l        g )N z

"""
%s""")r3   r   typeexc__traceback__r@   )r   rK   r@   s      r   r    _ExceptionWithTraceback.__init__   s;    WW%d3i9: "& 2%r   c                 >    [         U R                  U R                  44$ r>   )_rebuild_excrK   r@   r   s    r   
__reduce__"_ExceptionWithTraceback.__reduce__   s    dhh000r   rK   r@   N)r(   r)   r*   r+   r   rP   r,   r-   r   r   rF   rF      s    &1r   rF   c                 &    [        U5      U l        U $ r>   )r;   	__cause__rR   s     r   rO   rO      s    $R(CMJr   c                       \ rS rSrS rSrg)	_WorkItem   c                 4    Xl         X l        X0l        X@l        g r>   )futurefnargskwargs)r   rY   rZ   r[   r\   s        r   r   _WorkItem.__init__   s    	r   )r[   rZ   rY   r\   Nr(   r)   r*   r+   r   r,   r-   r   r   rV   rV          r   rV   c                       \ rS rSrSS jrSrg)_ResultItem   Nc                 4    Xl         X l        X0l        X@l        g r>   )work_id	exceptionresultexit_pid)r   rd   re   rf   rg   s        r   r   _ResultItem.__init__   s    " r   )re   rg   rf   rd   NNNr^   r-   r   r   ra   ra      s    !r   ra   c                       \ rS rSrS rSrg)	_CallItem   c                 4    Xl         X l        X0l        X@l        g r>   )rd   rZ   r[   r\   )r   rd   rZ   r[   r\   s        r   r   _CallItem.__init__   s    	r   )r[   rZ   r\   rd   Nr^   r-   r   r   rk   rk      r_   r   rk   c                   8   ^  \ rS rSrSU 4S jjrU 4S jrSrU =r$ )
_SafeQueue   c                8   > X0l         X@l        [        TU ]  XS9  g )N)ctx)pending_work_itemsr5   superr   )r   max_sizers   rt   r5   	__class__s        r   r   _SafeQueue.__init__   s    "4*+r   c                   > [        U[        5      (       a  [        [        U5      XR                  5      n[        SR                  SR                  U5      5      5      Ul        U R                  R                  UR                  S 5      nU R                  R                  5         Ub  UR                  R                  U5        g g [         TU ]E  X5        g )Nz

"""
{}"""rI   )
isinstancerk   r   rJ   rL   r;   formatr3   rT   rt   poprd   r5   r    rY   set_exceptionru   _on_queue_feeder_error)r   eobjr@   	work_itemrw   s        r   r~   !_SafeQueue._on_queue_feeder_error   s    c9%%!$q'1oo>B*>+@+@+MNAK//33CKKFI%%' $  ..q1 % G*12r   )rt   r5   )r   )r(   r)   r*   r+   r   r~   r,   __classcell__rw   s   @r   rp   rp      s    ,
3 3r   rp   c                 6    U Vs/ s H  o " U6 PM	     sn$ s  snf r>   r-   )rZ   chunkr[   s      r   _process_chunkr      s      #((%$BI%(((s   c           	           U R                  [        XX4S95        g ! [         a8  n[        XUR                  5      nU R                  [        XUS95         S nAg S nAff = f)N)rf   re   rg   re   rg   )putra   BaseExceptionrF   rL   )result_queuerd   rf   re   rg   r   rK   s          r   _sendback_resultr      s`    9W/8M 	N 9%a9W.68 	9 	99s    
A.AAc                 6   Ub   U" U6   SnS n U R	                  SS9nUc%  UR                  [        R                  " 5       5        g Ub  US-  nXT:  a  [        R                  " 5       n UR                  " UR                  0 UR                  D6n[        XR                  UUS9  AAUb  g M  ! [          a!    [        R                  R                  SSS9   g f = f! [          a4  n	[        XR                  5      n
[        XR                  U
US9   S n	A	NnS n	A	ff = f)	NzException in initializer:T)exc_infor   blockr8   )rf   rg   r   )r   r   LOGGERcriticalgetr   osgetpidrZ   r[   r\   r   rd   rF   rL   )
call_queuer   initializerinitargs	max_tasks	num_tasksrg   	call_itemrr   rK   s              r   _process_workerr      s$    	" IH
NNN.	RYY[) NI%99;		innA	0@0@AA \+<+<Q&.0 9   	LL!!"=!M 		*  	0)!__=C\+<+<&.0	0s)   B, )&C ,(CC
D$*DDc                   t   ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
S	 rS
 rS rS rSS jrS rSrU =r$ )_ExecutorManagerThreadi  c                   > UR                   U l        UR                  U l        U R                  [        R
                  R                  4S jn[        R                  " X5      U l	        UR                  U l        UR                  U l        UR                  U l        UR                   U l        UR$                  U l        UR(                  U l        [,        TU ]]  5         g )Nc                 4    U" S5        UR                  5         g )Nz?Executor collected: triggering callback for QueueManager wakeup)r    )r4   r5   mp_util_debugs      r   
weakref_cb3_ExecutorManagerThread.__init__.<locals>.weakref_cb*  s      1 2  "r   )_executor_manager_thread_wakeupr5   _shutdown_lockshutdown_lockr   utildebugweakrefrefexecutor_reference
_processes	processes_call_queuer   _result_queuer   	_work_idswork_ids_queue_max_tasks_per_childmax_tasks_per_child_pending_work_itemsrt   ru   r   )r   executorr   rw   s      r   r   _ExecutorManagerThread.__init__  s    
 &EE%44 &*%7%7%'WW]]	# #*++h"C ",, #.. %22 '00 $,#@#@  #+">">r   c                 6     U R                  5         U R	                  5       u  p4nU(       a  U R                  U5        g Ub  U R                  U5        UR                  S LnU(       a5  U R                  R                  UR                  5      nUR                  5         AU R                  5       =n(       aH  U(       a&  U R                     UR                  5         S S S 5        OUR                  R                  5         AU R                  5       (       aB  U R!                  5         U R                  5         U R"                  (       d  U R%                  5         g GMU  ! [         a&  n[        U5      nU R                  U5         S nAg S nAff = f! , (       d  f       N= fr>   )add_call_item_to_queuer   r   terminate_brokenwait_result_broken_or_wakeupprocess_result_itemrg   r   r|   r3   r   r   _adjust_process_count_idle_worker_semaphorereleaseis_shutting_downflag_executor_shutting_downrt   join_executor_internals)r   rK   causeresult_item	is_brokenprocess_exitedpr   s           r   run_ExecutorManagerThread.runJ  sZ    ++- -1,M,M,O)KE%%e,&((5!,!5!5T!A!**;+?+?@AFFH  #668888%!//$::< 0/ !77??A $$&&002
 ++- ..002_ 
 ! (-%%e,0 0/s#   E F

F!FF

Fc                     U R                   R                  5       (       a  g  U R                  R                  SS9nU R                  U   nUR
                  R                  5       (       aE  U R                   R                  [        UUR                  UR                  UR                  5      SS9  OU R                  U	 M  M  ! [        R                   a     g f = f)NTFr   )r   fullr   r   rt   rY   set_running_or_notify_cancelr   rk   rZ   r[   r\   queueEmpty)r   rd   r   s      r   r   -_ExecutorManagerThread.add_call_item_to_queue~  s     ##%%--111> !33G<	##@@BBOO''	'2;,,2;..2;2B2B)D /3	 ( 4 //8% 
 ;; s   C   CCc                    U R                   R                  nU R                  R                  nX/n[        U R                  R                  5       5       Vs/ s H  oDR                  PM     nn[        R                  R                  X5-   5      nS nSnS n	X;   a   UR                  5       n	SnOX&;   a  SnU R                  R                  5         XU4$ s  snf ! [         a  n
[        U
5      n S n
A
N=S n
A
ff = fNTF)r   r   r5   r0   r   valuessentinelr   
connectionwaitrecvr   r   r&   )r   result_readerwakeup_readerreadersr   worker_sentinelsreadyr   r   r   rK   s              r   r   3_ExecutorManagerThread.wait_result_broken_or_wakeup  s     ))11**22 004T^^5J5J5L0MN0M1JJ0MN""7#=>	!.+002!	 #I  "u,,% O ! .(-.s   CC 
C5 C00C5c                    U R                   R                  UR                  S 5      nUbY  UR                  b&  UR                  R                  UR                  5        g UR                  R                  UR                  5        g g r>   )rt   r|   rd   re   rY   r}   
set_resultrf   )r   r   r   s      r   r   *_ExecutorManagerThread.process_result_item  sm    
 ++//0C0CTJ	 $$0  ..{/D/DE  ++K,>,>?	 !r   c                 j    U R                  5       n[        =(       d    US L =(       d    UR                  $ r>   )r   r/   _shutdown_thread)r   r   s     r   r   '_ExecutorManagerThread.is_shutting_down  s4    **,
 ! -H$4 -,,	.r   c                 H   U R                  5       nUb  SUl        SUl        S n[        S5      nUb#  [	        SSR                  U5       S35      Ul        U R                  R                  5        H"  u  pE UR                  R                  U5        AM$     U R                  R                  5         U R                  R                  5        H  nUR!                  5         M     U R"                  R%                  5         U R'                  SS9  g ! [        R                   a     Nf = f)NzKA child process terminated abruptly, the process pool is not usable anymoreTz^A process in the process pool was terminated abruptly while the future was running or pending.z
'''
rI   z''')broken)r   _brokenr   BrokenProcessPoolr;   r3   rT   rt   r2   rY   r}   r   InvalidStateErrorr&   r   r   	terminater   _terminate_broken_join_executor_internals)r   r   r   bperd   r   r   s          r   r   (_ExecutorManagerThread._terminate_broken  s    **,!1H )-H%H   !6 7 ,"''%.)-/CM #'"9"9"?"?"AG  ..s3  #B 	%%' &&(AKKM ) 	))+ 	%%T%2% ** 
 s   5D

D! D!c                 r    U R                      U R                  U5        S S S 5        g ! , (       d  f       g = fr>   )r   r   )r   r   s     r   r   '_ExecutorManagerThread.terminate_broken  s%    ""5)  s   (
6c                 |   U R                  5       nUb  SUl        UR                  (       an  0 nU R                  R	                  5        H*  u  p4UR
                  R                  5       (       a  M&  XBU'   M,     X l          U R                  R                  5         M  g g ! [        R                   a     Of = fSUl        g r   )r   r   _cancel_pending_futuresrt   r2   rY   cancelr   
get_nowaitr   r   )r   r   new_pending_work_itemsrd   r   s        r   r   2_ExecutorManagerThread.flag_executor_shutting_down  s     **,(,H%// *,&*.*A*A*G*G*I&G$++2244:Cw7 +J +A' ++668  0    !;;  490s   >B B32B3c                 8   U R                  5       nSnX!:  ag  U R                  5       S:  aR  [        X-
  5       H$  n U R                  R                  S 5        US-  nM&     X!:  a  U R                  5       S:  a  MP  g g g g ! [        R
                   a       M7  f = f)Nr   r8   )get_n_children_aliveranger   
put_nowaitr   Full)r   n_children_to_stopn_sentinels_sentis       r   shutdown_workers'_ExecutorManagerThread.shutdown_workers  s    !668  4--/!3-@AOO..t4$)$ B  4--/!3 53 5 zz s    B  BBc                 p    U R                      U R                  5         S S S 5        g ! , (       d  f       g = fr>   )r   r   r   s    r   r   ._ExecutorManagerThread.join_executor_internals%  s#    ))+  s   '
5c                 ^   U(       d  U R                  5         U R                  R                  5         U R                  R                  5         U R                  R                  5         U R
                  R                  5        H*  nU(       a  UR                  5         UR                  5         M,     g r>   )	r   r   r   join_threadr5   r   r   r   r3   )r   r   r   s      r   r   /_ExecutorManagerThread._join_executor_internals)  ss    !!# 	##%  " &&(AFFH )r   c                 V    [        S U R                  R                  5        5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr>   )is_alive).0r   s     r   	<genexpr>>_ExecutorManagerThread.get_n_children_alive.<locals>.<genexpr><  s     A)@A::<<)@s   )sumr   r   r   s    r   r   +_ExecutorManagerThread.get_n_children_alive:  s     A)>)>)@AAAr   )	r   r   r   rt   r   r   r   r5   r   )F)r(   r)   r*   r+   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r   r   s   @r   r   r     sO    ,\2h.-<@.-3^*94,"B Br   r   c                  6   [         (       a  [        (       a  [        [        5      eSq  SS Kn  [
        R                  " S5      nUS:X  a  g US:  a  g SU-  q[        [        5      e! [         a    Sq[        [        5      ef = f! [        [        4 a     g f = f)NTr   zxThis Python build lacks multiprocessing.synchronize, usually due to named semaphores being unavailable on this platform.SC_SEM_NSEMS_MAX   z@system provides too few semaphores (%d available, 256 necessary))	_system_limits_checked_system_limitedNotImplementedErrormultiprocessing.synchronizeImportErrorr   sysconfAttributeError
ValueError)multiprocessing	nsems_maxs     r   _check_system_limitsr  C  s    ?%o66!3*JJ12	 B 	C 	46?@O
o
..+  3F 	 "/223 J' s   A& B &BBBc              #      #    U  H7  nUR                  5         U(       d  M  UR                  5       v   U(       a  M  M9     g 7fr>   )reverser|   )iterableelements     r   _chain_from_iterable_of_listsr   c  s3      g++- g s   AAAc                       \ rS rSrSrg)r   io  r-   N)r(   r)   r*   r+   r,   r-   r   r   r   r   o  s     r   r   c                     ^  \ rS rSr  SSS.S jjrS rS rS rS rS	 r	\
R                  R                  R                  \	l        SS
S.U 4S jjrSSS.S jjr\
R                  R                  R                  \l        SrU =r$ )ProcessPoolExecutoriv  N)r   c                   [        5         UcW  [        R                  " 5       =(       d    SU l        [        R
                  S:X  a  [        [        U R                  5      U l        OGUS::  a  [        S5      e[        R
                  S:X  a  U[        :  a  [        S[         35      eXl        Uc/  Ub  [        R                  " S5      nO[        R                  " 5       nX l        U R                  R                  SS9S	:g  U l        Ub  [        U5      (       d  [        S
5      eX0l        X@l        UbY  [%        U[&        5      (       d  [        S5      eUS::  a  [        S5      eU R                  R                  SS9S	:X  a  [        S5      eXPl        S U l        0 U l        SU l        [0        R2                  " 5       U l        [0        R6                  " S5      U l        SU l        SU l        0 U l        SU l         [C        5       U l"        U R                  [F        -   n[I        X`R                  U R>                  U RD                  S9U l%        SU RJ                  l&        URO                  5       U l(        [R        RT                  " 5       U l+        g )Nr8   win32r   z"max_workers must be greater than 0zmax_workers must be <= spawnF)
allow_noneforkzinitializer must be a callablez&max_tasks_per_child must be an integerz max_tasks_per_child must be >= 1zpmax_tasks_per_child is incompatible with the 'fork' multiprocessing start method; supply a different mp_context.)rv   rs   rt   r5   T),r  r   process_cpu_count_max_workerssysplatformmin_MAX_WINDOWS_WORKERSr  r   get_context_mp_contextget_start_method#_safe_to_dynamically_spawn_childrencallable	TypeError_initializer	_initargsrz   intr   _executor_manager_threadr   r   r   r   r   	Semaphorer   r   _queue_countr   r   r   r   EXTRA_QUEUED_CALLSrp   r   _ignore_epipeSimpleQueuer   r   r   r   )r   max_workers
mp_contextr   r   r   
queue_sizes          r   r   ProcessPoolExecutor.__init__w  sV   ( 	 " 4 4 6 ;!D||w&$'(<(,(9(9%;! a !EFF,,')22 -.B-CDF F !,".^^G4
^^-
%   11U1CvM 	0 "8K+@+@<=='!*1377 HII$) !CDD00E0BfL  "C D D %8! )-%  !&'nn.&/&9&9!&<##% ',$ 0=, &&);;
%%5%5#77>>@ *.&'335r   c                     U R                   ci  U R                  (       d  U R                  5         [        U 5      U l         U R                   R	                  5         U R
                  [        U R                   '   g g r>   )r8  r2  _launch_processesr   startr   r1   r   s    r   _start_executor_manager_thread2ProcessPoolExecutor._start_executor_manager_thread  s`    ((0;;&&(,B4,HD)))//144 T::; 1r   c                     U R                   c  g U R                  R                  SS9(       a  g [        U R                   5      nXR                  :  a  U R                  5         g g )NF)blocking)r   r   acquirelenr*  _spawn_process)r   process_counts     r   r   )ProcessPoolExecutor._adjust_process_count  sZ     ??" &&...>DOO,,,, ! -r   c                     [        [        U R                  5      U R                  5       H  nU R	                  5         M     g r>   )r   rJ  r   r*  rK  )r   r4   s     r   rC  %ProcessPoolExecutor._launch_processes  s1    
 s4??+T->->?A! @r   c                     U R                   R                  [        U R                  U R                  U R
                  U R                  U R                  4S9nUR                  5         XR                  UR                  '   g )N)targetr[   )r0  Processr   r   r   r5  r6  r   rD  r   pid)r   r   s     r   rK  "ProcessPoolExecutor._spawn_process	  sk    $$"""$$##..++	- % . 	
	!"r   c                   U R                      U R                  (       a  [        U R                  5      eU R                  (       a  [	        S5      e[
        (       a  [	        S5      e[        R                  " 5       n[        XAX#5      nXPR                  U R                  '   U R                  R                  U R                  5        U =R                  S-  sl
        U R                  R                  5         U R                  (       a  U R!                  5         U R#                  5         UsS S S 5        $ ! , (       d  f       g = f)Nz*cannot schedule new futures after shutdownz6cannot schedule new futures after interpreter shutdownr8   )r   r   r   r   r#   r/   r   FuturerV   r   r:  r   r   r   r    r2  r   rE  )r   rZ   r[   r\   fws         r   submitProcessPoolExecutor.submit  s      ||'55$$"#OPP" $: ; ; A!.A:;$$T%6%67NNt001"0077977**,//1+ !  s   DD//
D=r8   )timeout	chunksizec                   > US:  a  [        S5      e[        TU ]	  [        [        U5      [
        R                  " [        U6 U5      US9n[        U5      $ )Nr8   zchunksize must be >= 1.)r[  )	r  ru   mapr   r   	itertoolsbatchedzipr   )r   rZ   r[  r\  	iterablesresultsrw   s         r   r^  ProcessPoolExecutor.map-  sX    * q=677'+gnb9'//YK&-  / -W55r   F)cancel_futuresc                   U R                      X l        SU l        U R                  b  U R                  R	                  5         S S S 5        U R
                  b!  U(       a  U R
                  R                  5         S U l        S U l        U R                  b!  U(       a  U R                  R                  5         S U l        S U l
        S U l        g ! , (       d  f       N= fr   )r   r   r   r   r    r8  r3   r   r   r   r   )r   r   re  s      r   shutdownProcessPoolExecutor.shutdownJ  s      +9($(D!33?44;;= ! ((4))..0 )-%)d$$&!/3,# ! s   5C


C)r   r   r   r8  r   r   r6  r5  r   r*  r0  r   r   r:  r   r2  r   r   r   )NNNr-   )T)r(   r)   r*   r+   r   rE  r   rC  rK  rY  r   Executor__doc__r^  rg  r,   r   r   s   @r   r#  r#  v  s    48,.j'GKj'X5"("	#. ^^**22FN*.! 6 6:4E 4( ~~..66Hr   r#  ri   r>   )0
__author__r   concurrent.futuresr   r   r  r   multiprocessing.connectionmultiprocessing.queuesr   r   r   	functoolsr   r_  r+  	tracebackr   WeakKeyDictionaryr1   r/   r   r7   _register_atexitr;  r.  	Exceptionr;   rF   rO   objectrV   ra   rk   rp   r   r   r   Threadr   r  r  r  r   BrokenExecutorr   ri  r#  r-   r   r   <module>rw     s1  \ 2
 	 $   " (     
 & ,,.  & &< 
  < (    y 	1 	1 !& ! 3 3,	) DH"	93llBY-- lB^	  /@	 ,, h7%.. h7r   