
    z%iz                        	 d Z ddlZddlZddlZddlZddlZddlZddlZddl	Z	ddlm
Z
 ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ  ej$                  d      j&                  Zd.dZd.dZd Z G d dej0                        ZeZ	 ddlZej2                  xZZddddZej                   j>                  Zej                   j@                  Z ej                   jB                  Z!de!ddZ"d Z#d Z$d Z%d Z&dddZ'ejP                  d        Z)d.dZ*dddZ+ G d dejX                        Z-d d!d"Z.d# Z/d$ Z0d% Z1 e1e      Z2 e	jf                         Z4 e5       Z6i Z7d& Z8d' Z9d( Z:d) Z;d* Z<d+ Z=d, Z>eZ?e8Z@e9ZAe=ZBe>ZCe:ZDe;ZEe<ZF	 dd-lm8Z8m9Z9m=Z=m>Z>m:Z:m;Z;m<Z<m4Z4m6Z6m7Z7mZ eZGe8ZHe9ZIe=ZJe>ZKe:ZLe;ZMe<ZNy# e$ r Y w xY w# e$ r Y yw xY w)/)Taskcreate_taskFIRST_COMPLETEDFIRST_EXCEPTIONALL_COMPLETEDwaitwait_foras_completedsleepgathershieldensure_futurerun_coroutine_threadsafecurrent_task	all_taskscreate_eager_task_factoryeager_task_factory_register_task_unregister_task_enter_task_leave_task    N)GenericAlias   )
base_tasks)
coroutines)events)
exceptions)futures)timeoutsc                 Z    	 | t        j                         } t        j                  |       S N)r   get_running_loop_current_tasksgetloops    A/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/asyncio/tasks.pyr   r   $   s)    +|&&(d##    c                 P   	 | t        j                         } t        t              }d }d}	 	 t        t              }	 t        j                  ||      D ch c]+  }t        j                  |      | u r|j                         s|- c}S # t
        $ r |dz  }|dk\  r Y nw xY wwc c}w )Nr   r   i  )r   r"   list_eager_tasks_scheduled_tasksRuntimeError	itertoolschainr   	_get_loopdone)r&   eager_tasksscheduled_tasksits        r'   r   r   +   s    1|&&( |$K O	A
	"#34O  D >!  #t+AFFH  > >  	FADy 	 >s   B 0B#BBc                     |	 | j                   } ||       y y # t        $ r t        j                  dt        d       Y y w xY w)Nz~Task.set_name() was added in Python 3.8, the method support will be mandatory for third-party task implementations since 3.13.   )
stacklevel)set_nameAttributeErrorwarningswarnDeprecationWarning)tasknamer9   s      r'   _set_task_namer@   F   sM    	}}H TN   	8MM 9 )Q8	8s    %AAc                        e Zd Z	 dZddddd fd
Z fdZ ee      Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdddZddddZddZd Zd Zd ZddZ fdZd Z xZS )r   TNFr&   r?   contexteager_startc                F   t         |   |       | j                  r| j                  d= t        j                  |      sd| _        t        d|      |dt                | _        nt        |      | _        d| _
        d| _        d | _        || _        |t        j                         | _        n|| _        |r+| j"                  j%                         r| j'                          y | j"                  j)                  | j*                  | j                          t-        |        y )Nr%   Fza coroutine was expected, got zTask-r   rC   )super__init___source_tracebackr   iscoroutine_log_destroy_pending	TypeError_task_name_counter_namestr_num_cancels_requested_must_cancel_fut_waiter_corocontextvarscopy_context_context_loop
is_running_Task__eager_start	call_soon_Task__stepr   )selfcoror&   r?   rC   rD   	__class__s         r'   rI   zTask.__init__e   s    d#!!&&r*%%d+ ).D%<THEFF< !3!5 67DJTDJ&'#!
?'446DM#DM4::002 JJ  dmm D4 r(   c                     | j                   t        j                  k(  rG| j                  r;| dd}| j                  r| j                  |d<   | j
                  j                  |       t        | !          y )Nz%Task was destroyed but it is pending!)r>   messagesource_traceback)	_stater   _PENDINGrL   rJ   rX   call_exception_handlerrH   __del__)r]   rC   r_   s     r'   rf   zTask.__del__   sb    ;;'***t/H/HBG %%.2.D.D*+JJ--g6r(   c                 ,    t        j                  |       S r!   )r   
_task_reprr]   s    r'   __repr__zTask.__repr__   s    $$T**r(   c                     | j                   S r!   )rT   ri   s    r'   get_corozTask.get_coro       zzr(   c                     | j                   S r!   )rW   ri   s    r'   get_contextzTask.get_context   s    }}r(   c                     | j                   S r!   )rO   ri   s    r'   get_namezTask.get_name   rm   r(   c                 $    t        |      | _        y r!   )rP   rO   )r]   values     r'   r9   zTask.set_name   s    Z
r(   c                     t        d      )Nz*Task does not support set_result operationr-   )r]   results     r'   
set_resultzTask.set_result   s    GHHr(   c                     t        d      )Nz-Task does not support set_exception operationru   )r]   	exceptions     r'   set_exceptionzTask.set_exception   s    JKKr(   )limitc                0    	 t        j                  | |      S r!   )r   _task_get_stack)r]   r{   s     r'   	get_stackzTask.get_stack   s    	( ))$66r(   )r{   filec                2    	 t        j                  | ||      S r!   )r   _task_print_stack)r]   r{   r   s      r'   print_stackzTask.print_stack   s    	 ++D%>>r(   c                     	 d| _         | j                         ry| xj                  dz  c_        | j                  | j                  j	                  |      ryd| _        || _        y)NFr   msgT)_log_tracebackr1   rQ   rS   cancelrR   _cancel_message)r]   r   s     r'   r   zTask.cancel   sk    	* $99;##q(# '&&3&/  "r(   c                     	 | j                   S r!   rQ   ri   s    r'   
cancellingzTask.cancelling   s    	
 ***r(   c                 d    	 | j                   dkD  r| xj                   dz  c_         | j                   S )Nr   r   r   ri   s    r'   uncancelzTask.uncancel   s4    	 &&*''1,'***r(   c                 p   t        | j                  |       }	 t        |        	 | j                  j	                  | j
                  d        t        |        	 	 t        | j                  |      }| j                         r
d | _        d } y t        |        y # t        |        w xY w# | j                         r
d | _        d } w t        |        w xY w# 	 t        | j                  |      }| j                         r
d | _        d } w t        |        w # | j                         r
d | _        d } w t        |        w xY wxY wr!   )
_swap_current_taskrX   _register_eager_taskrW   run!_Task__step_run_and_handle_result_unregister_eager_taskr1   rT   r   )r]   	prev_taskcurtasks      r'   __eager_startzTask.__eager_start  s    &tzz48		) &-!!$"C"CTJ&t,),TZZC 99;!%DJD"4( 't, 99;!%DJD"4(),TZZC 99;!%DJD"4(	 99;!%DJD"4(sF   C &B 
C B# B  C #'C
D5D%&D5'D22D5c                    | j                         rt        j                  d| d|      | j                  r1t	        |t        j
                        s| j                         }d| _        d | _        t        | j                  |        	 | j                  |       t        | j                  |        d } y # t        | j                  |        d } w xY w)Nz_step(): already done: z, F)r1   r   InvalidStateErrorrR   
isinstanceCancelledError_make_cancelled_errorrS   r   rX   r   r   )r]   excs     r'   __stepzTask.__step  s    99;..)$C7;= =c:#<#<=002 %DDJJ%	--c2

D)D 

D)Ds   B1 1Cc                    | j                   }	 ||j                  d       }n|j                  |      }t        |dd       }|lt	        j
                  |      | j                  urGt        d| d|d      }| j                  j                  | j                  || j                         d } y |r|| u rCt        d|       }| j                  j                  | j                  || j                         d } y d|_        |j                  | j                  | j                         || _        | j                  rN| j                  j!                  | j"                        r'd| _        	 d } y t        d	| d
|      }| j                  j                  | j                  || j                         	 d } y |4| j                  j                  | j                  | j                         d } y t%        j&                  |      rFt        d| d
|      }| j                  j                  | j                  || j                         d } y t        d|      }| j                  j                  | j                  || j                         	 d } y d } y # t(        $ rS}| j                  r"d| _        t*        | A  | j"                         nt*        | Y  |j.                         Y d }~d } y d }~wt0        j2                  $ r!}|| _        t*        | A          Y d }~d } y d }~wt6        t8        f$ r}t*        | u  |        d }~wt<        $ r}t*        | u  |       Y d }~d } y d }~ww xY w# d } w xY w)N_asyncio_future_blockingzTask z got Future z attached to a different looprG   zTask cannot await on itself: Fr   z-yield was used instead of yield from in task z with z;yield was used instead of yield from for generator in task zTask got bad yield: )rT   sendthrowgetattrr   r0   rX   r-   r[   r\   rW   r   add_done_callback_Task__wakeuprS   rR   r   r   inspectisgeneratorStopIterationrH   rw   rs   r   r   _cancelled_excKeyboardInterrupt
SystemExitrz   BaseException)r]   r   r^   rv   blockingnew_excr_   s         r'   __step_run_and_handle_resultz!Task.__step_run_and_handle_result*  se   zzG	{ 4C$ v'A4HH#$$V,DJJ>*x|!*$ACDG JJ((Wdmm ) EP DM ~".;D8D#F

,, KK$-- - ID D? ;@700 MM4== 1 B+1(,,#//66(,(<(<  7  >49 10 D- +##'(&
<=G JJ((Wdmm ) E& D! 

$$T[[$--$H D $$V,&))-vjBC 

$$KK$-- % A D	 ')=fZ'HI

$$KK$-- % A D4DA  	.  $)!4#7#78"399-t Ds (( 	"%DGNl Dk ":. 	G!#& 	'G!#&&b De	'd Ds   %J A5M ,AM 5A0M )AM 03M &AM A M 	MAKM M5L
M M#L33M?MM MM M!c                     	 |j                          | j                          d } y # t        $ r}| j                  |       Y d }~d } y d }~ww xY wr!   )rv   r\   r   )r]   futurer   s      r'   __wakeupzTask.__wakeupu  sH    	MMO KKM  	KK 	s   % 	AAAr!   )__name__
__module____qualname__rL   rI   rf   classmethodr   __class_getitem__rj   rl   ro   rq   r9   rw   rz   r~   r   r   r   r   rZ   r\   r   r   __classcell__r_   s   @r'   r   r   S   s     +  %)d"!>	 $L1+ IL "& 7. $(d 	?(T+
+)&"IVr(   r   r?   rC   c                    	 t        j                         }||j                  |       }n|j                  | |      }t        ||       |S )NrG   )r   r"   r   r@   )r^   r?   rC   r&   r>   s        r'   r   r     sP     ""$D%g64Kr(   )timeoutreturn_whenc                  K   	 t        j                  |       st        j                  |       r!t	        dt        |       j                         | st        d      |t        t        t        fvrt        d|       t        |       } t        d | D              rt	        d      t        j                         }t        | |||       d {   S 7 w)Nzexpect a list of futures, not zSet of Tasks/Futures is empty.zInvalid return_when value: c              3   F   K   | ]  }t        j                  |        y wr!   )r   rK   ).0fs     r'   	<genexpr>zwait.<locals>.<genexpr>  s     
1:!!!$
1s   !z6Passing coroutines is forbidden, use tasks explicitly.)r   isfuturer   rK   rM   typer   
ValueErrorr   r   r   setanyr   r"   _wait)fsr   r   r&   s       r'   r   r     s      z55b98b9J9J8KLMM9::?O]KK6{mDEE	RB

1b
11PQQ""$Dr7K6666s   CC
CCc                 H    | j                         s| j                  d        y y r!   )r1   rw   )waiterargss     r'   _release_waiterr     s    ;;=$ r(   c                   K   	 |T|dk  rOt        |       } | j                         r| j                         S t        |        d {    	 | j                         S t        j                  |      4 d {    |  d {   cd d d       d {    S 7 N# t        j
                  $ r}t        |d }~ww xY w7 C7 ;7 -# 1 d {  7  sw Y   y xY wwNr   )	r   r1   rv   _cancel_and_waitr   r   TimeoutErrorr   r   )futr   r   s      r'   r   r     s     D w!|C 88:::<s###	(::< (  y   	$ (( 	(C'	(   s   ACBC
B C3B74C7B==B9>B=CB;CB4(B//B44C9B=;C=CCCCc                 2  	
K   	 |j                         
d 	||j                  |t        
      	t        |       	
fd}| D ]  }|j	                  |        	 
 d {    		j                          | D ]  }|j                  |        	 t               t               }}| D ]5  }|j                         r|j                  |       %|j                  |       7 ||fS 7 # 		j                          | D ]  }|j                  |        w xY ww)Nc                     dz  dk  s2t         k(  s)t        k(  rW| j                         sF| j                         5j	                          j                         sj                  d        y y y y y )Nr   r   )r   r   	cancelledry   r   r1   rw   )r   counterr   timeout_handler   s    r'   _on_completionz_wait.<locals>._on_completion  st    1qL?*?*AKKM010I)%%';;=!!$' ! 1J 5B*r(   )
create_future
call_laterr   lenr   r   remove_done_callbackr   r1   add)r   r   r   r&   r   r   r1   pendingr   r   r   s     `     @@@r'   r   r      s    
 !FN/6J"gG
(  ,	N+,3%!!# 	3A"">2	3 E35'D 668HHQKKKN	
 = 	%!!# 	3A"">2	3s1   ADC( $C&%C( )A=D&C( (,DDc                 4  K   	 t        j                         }|j                         }t        j                  t
        |      }| j                  |       	 | j                          | d {    | j                  |       y 7 # | j                  |       w xY wwr!   )	r   r"   r   	functoolspartialr   r   r   r   )r   r&   r   cbs       r'   r   r   ,  s~     F""$D!F			?F	3B"%

   $ 	  $s0   ABB )B *B .B B BB)r   c             #   
  	
K   	 t        j                  |       st        j                  |       r!t	        dt        |       j                         ddlm}  |       	t        j                         }t        |       D ch c]  }t        ||       c}d 
	fd}	
fd	fd}D ]  }|j                          r||j                  ||      
t        t!                    D ]  } |         y c c}w w)Nz#expect an iterable of futures, not r   )Queuer%   c                  x    D ]$  } | j                         j                  d        & j                          y r!   )r   
put_nowaitclear)r   r   r1   todos    r'   _on_timeoutz!as_completed.<locals>._on_timeoutZ  s7     	"A"">2OOD!	" 	

r(   c                 |    sy j                  |        j                  |        sj                          y y y r!   )remover   r   )r   r1   r   r   s    r'   r   z$as_completed.<locals>._on_completion`  s;    A2!!# 3tr(   c                     K   j                          d {   } | t        j                  | j                         S 7 &wr!   )r$   r   r   rv   )r   r1   s    r'   _wait_for_onez#as_completed.<locals>._wait_for_oneh  s7     ((*9)))xxz	 s   A >'A )r   r   r   rK   rM   r   r   queuesr   r   get_event_loopr   r   r   r   ranger   )r   r   r   r&   r   r   r   _r   r1   r   r   s           @@@@r'   r	   r	   >  s     " z55b9=d2h>O>O=PQRR7D  "D14R9AM!$'9DN$  ,	N+,#+>3t9 o9 :s   A;DC>A.Dc               #      K   	 d  y wr!    r   r(   r'   __sleep0r   w  s      
s   	c                 2  K   	 | dk  rt                d {    |S t        j                         }|j                         }|j	                  | t
        j                  ||      }	 | d {   |j                          S 7 g7 # |j                          w xY wwr   )r   r   r"   r   r   r   _set_result_unless_cancelledr   )delayrv   r&   r   hs        r'   r
   r
     s     Czj""$D!F<<	(A|	
 	 	
s:   BA>AB$B )B *B -B B BBr%   c                   	 t        j                  |       r&|"|t        j                  |       urt        d      | S d}t	        j
                  |       s.t        j                  |       rd } ||       } d}nt        d      |t        j                         }	 |j                  |       S # t        $ r |r| j                           w xY w)NzRThe future belongs to a different loop than the one specified as the loop argumentTc                 "   K   |  d {   S 7 wr!   r   )	awaitables    r'   _wrap_awaitablez&ensure_future.<locals>._wrap_awaitable  s     &&s   Fz:An asyncio.Future, a coroutine or an awaitable is required)r   r   r0   r   r   rK   r   isawaitablerM   r   r   r   r-   close)coro_or_futurer&   should_closer   s       r'   r   r     s     'G,=,=n,M M E F FL!!.1~.' -^<N L * + + |$$&//   "s   B* *Cc                   (     e Zd Z	  fdZddZ xZS )_GatheringFuturec                B    t         |   |       || _        d| _        y )Nr%   F)rH   rI   	_children_cancel_requested)r]   childrenr&   r_   s      r'   rI   z_GatheringFuture.__init__  s"    d#!!&r(   c                     | j                         ryd}| j                  D ]  }|j                  |      sd} |rd| _        |S )NFr   T)r1   r  r   r  )r]   r   retchilds       r'   r   z_GatheringFuture.cancel  sM    99;^^ 	E|||$	  &*D"
r(   r!   )r   r   r   rI   r   r   r   s   @r'   r  r    s    'r(   r  F)return_exceptionsc                    	
 	 |s7t        j                         }|j                         j                  g        S 	
 fd}i }g d
d	g }d }d |D ]  }||vrmt	        ||      }|t        j                  |      }||urd|_        
dz  
|||<   |j                         r|j                  |       n|j                  |       n||   }j                  |        t        |      |D ]
  } ||        S )Nc                    dz  j                         r!| j                         s| j                          y sV| j                         r"| j                         }j	                  |       y | j                         }|j	                  |       y k(  rg }D ]s  } | j                         r.t        j                  | j                  dn| j                        }n"| j                         }|| j                         }|j                  |       u j                  r"| j                         }j	                  |       y j                  |       y y )Nr    )r1   r   ry   r   rz   r   r   r   rv   appendr  rw   )	r   r   resultsresr  	nfinishednfutsouterr	  s	       r'   _done_callbackzgather.<locals>._done_callback  s1   Q	=EJJL==? }} //1##C(mmo?'', G $==? %33!119++-C --/C{!jjls#$" && //1##C(  ); r(   r   r%   Fr   )r   r   r   rw   r   r   r0   rL   r1   r  r   r  )r	  coros_or_futuresr&   r  
arg_to_fut	done_futsargr   r  r  r  r  s   `       @@@@r'   r   r     s/   : $$&""$5* 5*n JHEIIDE j $/C|((-#~
 ,1(QJE!JsOxxz  %%%n5 S/C/2 XD1E  sLr(   c                     	 t        |       j                         rS t        j                        }|j	                         fdfd}j                         j                  |       S )Nc                 0   j                         r!| j                         s| j                          y | j                         rj                          y | j                         }|j                  |       y j	                  | j                                y r!   )r   ry   r   rz   rw   rv   )innerr   r  s     r'   _inner_done_callbackz$shield.<locals>._inner_done_callback  sj    ????$!??LLN//#C##C(  0r(   c                 J    j                         sj                         y y r!   )r1   r   )r  r  r  s    r'   _outer_done_callbackz$shield.<locals>._outer_done_callback  s     zz|&&';< r(   )r   r1   r   r0   r   r   )r  r&   r  r  r  r  s      @@@r'   r   r   W  sp    @ #Ezz|U#D E1"= 
01	01Lr(   c                      	 t        j                         st        d      t        j                  j                          fd}j                  |       S )NzA coroutine object is requiredc                      	 t        j                  t                     y # t        t        f$ r  t
        $ r'} j                         rj                  |         d } ~ ww xY w)Nr%   )r   _chain_futurer   r   r   r   set_running_or_notify_cancelrz   )r   r^   r   r&   s    r'   callbackz*run_coroutine_threadsafe.<locals>.callback  s]    	!!-4"@&I-. 	 	224$$S)	s   !% A$"AA$)r   rK   rM   
concurrentr   Futurecall_soon_threadsafe)r^   r&   r"  r   s   `` @r'   r   r     sR     !!$'899&&(F 	h'Mr(   c                      	 d d d fd
}|S )Nr   c                     || ||d      S )NTrB   r   )r&   r^   r?   rC   custom_task_constructors       r'   factoryz*create_eager_task_factory.<locals>.factory  s    &t$TK 	Kr(   r   )r(  r)  s   ` r'   r   r     s    $ %)$ K Nr(   c                 0    	 t        j                  |        y r!   )r,   r   r>   s    r'   r   r     s    Er(   c                 0    	 t        j                  |        y r!   )r+   r   r+  s    r'   r   r     s    @Tr(   c                 h    t        j                  |       }|t        d|d|d      |t         | <   y )NzCannot enter into task z while another task z is being executed.r#   r$   r-   r&   r>   r   s      r'   r   r     sL    !%%d+L4TH =##/"22EG H 	HN4r(   c                 h    t        j                  |       }||urt        d|d|d      t         | = y )NzLeaving task z! does not match the current task .r.  r/  s      r'   r   r     sJ    !%%d+L4]4( 3//;.>aA B 	Btr(   c                 X    t        j                  |       }|	t         | = |S |t         | <   |S r!   )r#   r$   )r&   r>   r   s      r'   r   r     s9    ""4(I|4    $tr(   c                 0    	 t        j                  |        y r!   )r,   discardr+  s    r'   r   r     s    1T"r(   c                 0    	 t        j                  |        y r!   )r+   r4  r+  s    r'   r   r      s    @r(   )r   r   r   r   r   r   r   r,   r+   r#   r   r!   )O__all__concurrent.futuresr#  rU   r   r   r.   typesr;   weakrefr   r  r   r   r   r   r   r   count__next__rN   r   r   r@   	_PyFuturer   _PyTask_asyncio_CTaskImportErrorr   r   r   r   r   r   r   r   r   r	   	coroutiner   r
   r   r$  r  r   r   r   r   r   WeakSetr,   r   r+   r#   r   r   r   r   r   r   r   _py_current_task_py_register_task_py_register_eager_task_py_unregister_task_py_unregister_eager_task_py_enter_task_py_leave_task_py_swap_current_task_c_current_task_c_register_task_c_register_eager_task_c_unregister_task_c_unregister_eager_task_c_enter_task_c_leave_task_c_swap_current_taskr   r(   r'   <module>rS     sM   6               
 %Y__Q'00 $>6
p7 pf	 "
 MM!D6 #D $ $$44$$44""00 # 7@ 
0d)X%$ !% 6r 
 
" +/ @w~~ : 16 CL?D.4 /t4  #7??$ u 

 #

   " . & 2 * .( ( ( ( #O%1)5MM-i  		T  		s$   F4 	G  4F=<F= GG