o
    g|                     @   s^  	 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 edjZdAd
dZdAddZdd ZG dd dejZeZzddlZW n	 eyu   Y nw ej ZZddddZejjZejjZejj Z de dddZ!dd Z"dd Z#dd Z$dd Z%dd d!d"Z&ej'd#d$ Z(dAd%d&Z)dd'd(d)Z*dd'd*d+Z+ej'd,d- Z,ee,_G d.d/ d/ej-Z.d0d1d2d3Z/d4d5 Z0d6d7 Z1e	2 Z3i Z4d8d9 Z5d:d; Z6d<d= Z7d>d? Z8e5Z9e8Z:e6Z;e7Z<zdd@lm5Z5m8Z8m6Z6m7Z7m3Z3m4Z4 W n ey$   Y dS w e5Z=e8Z>e6Z?e7Z@dS )B)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_register_task_unregister_task_enter_task_leave_task    N   )
base_tasks)
coroutines)events)
exceptions)futures)_is_coroutinec                 C   s   	 | d u r	t  } t| S N)r   get_running_loop_current_tasksgetloop r"   C/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/asyncio/tasks.pyr   "   s   
r   c                    s`   	  d u r	t   d}	 ztt}W n ty$   |d7 }|dkr" Y nw q'q fdd|D S )Nr   Tr   i  c                    s&   h | ]}t | u r| s|qS r"   )r   	_get_loopdone).0tr    r"   r#   	<setcomp><   s
    
zall_tasks.<locals>.<setcomp>)r   r   list
_all_tasksRuntimeError)r!   iZtasksr"   r    r#   r   )   s    	r   c                 C   s8   |d urz| j }W n
 ty   Y d S w || d S d S r   )set_nameAttributeError)tasknamer-   r"   r"   r#   _set_task_name@   s   
r1   c                       s   e Zd Z	 dZddd fdd
Z fddZdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd ZddddZdddddZd"ddZd" fdd	Zd d! Z  ZS )#r   TN)r!   r0   c                   s   t  j|d | jr| jd= t|sd| _td||d u r)dt  | _nt	|| _d| _
d | _|| _t | _| jj| j| jd t|  d S )Nr    Fza coroutine was expected, got zTask-context)super__init___source_tracebackr   iscoroutine_log_destroy_pending	TypeError_task_name_counter_namestr_must_cancel_fut_waiter_corocontextvarsZcopy_context_context_loop	call_soon_Task__stepr   )selfcoror!   r0   	__class__r"   r#   r6   \   s   


zTask.__init__c                    sF   | j tjkr| jr| dd}| jr| j|d< | j| t   d S )Nz%Task was destroyed but it is pending!)r/   messageZsource_traceback)	_stater   Z_PENDINGr9   r7   rC   Zcall_exception_handlerr5   __del__)rF   r4   rH   r"   r#   rL   s   s   
zTask.__del__c                 C   s   | S r   r"   )clstyper"   r"   r#   __class_getitem__~   s   zTask.__class_getitem__c                 C   s
   t | S r   )r   Z_task_repr_inforF   r"   r"   r#   
_repr_info   s   
zTask._repr_infoc                 C      | j S r   )r@   rP   r"   r"   r#   get_coro      zTask.get_coroc                 C   rR   r   )r<   rP   r"   r"   r#   get_name   rT   zTask.get_namec                 C   s   t || _d S r   )r=   r<   )rF   valuer"   r"   r#   r-      s   zTask.set_namec                 C      t d)Nz*Task does not support set_result operationr+   )rF   resultr"   r"   r#   
set_result      zTask.set_resultc                 C   rW   )Nz-Task does not support set_exception operationrX   )rF   	exceptionr"   r"   r#   set_exception   r[   zTask.set_exception)limitc                C   s   	 t | |S r   )r   Z_task_get_stack)rF   r^   r"   r"   r#   	get_stack   s   zTask.get_stack)r^   filec                C   s   	 t | ||S r   )r   Z_task_print_stack)rF   r^   r`   r"   r"   r#   print_stack   s   zTask.print_stackc                 C   s@   	 d| _ |  r
dS | jd ur| jj|drdS d| _|| _dS NFmsgT)Z_log_tracebackr%   r?   cancelr>   _cancel_message)rF   rd   r"   r"   r#   re      s   
zTask.cancelc              
      s  |   rtd| d|| jrt|tjs|  }d| _| j}d | _t	| j
|  zz|d u r8|d }n||}W nn tyg } z| jrUd| _t j| jd nt |j W Y d }~nd }~w tjy } z|| _t   W Y d }~nd }~w ttfy } zt |  d }~w ty } zt | W Y d }~nd }~ww t|dd }|d ur't|| j
urtd| d|d}| j
j| j|| jd	 n|r|| u rtd
| }| j
j| j|| jd	 nd|_|j | j!| jd	 || _| jr| jj| jdrd| _ntd| d|}| j
j| j|| jd	 nj|d u r7| j
j| j| jd	 nt"#|rStd| d|}| j
j| j|| jd	 nutd|}| j
j| j|| jd	 W t$| j
|  d } d S W t$| j
|  d } d S W t$| j
|  d } d S W t$| j
|  d } d S W t$| j
|  d } d S W t$| j
|  d } d S W t$| j
|  d } d S W t$| j
|  d } d S W t$| j
|  d } d S W t$| j
|  d } d S t$| j
|  d } w )Nz_step(): already done: z, Frc   _asyncio_future_blockingzTask z got Future z attached to a different loopr3   zTask cannot await on itself: 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: )%r%   r   InvalidStateErrorr>   
isinstanceCancelledError_make_cancelled_errorr@   r?   r   rC   sendthrowStopIterationr5   re   rf   rZ   rV   Z_cancelled_excKeyboardInterrupt
SystemExitr]   BaseExceptiongetattrr   r$   r+   rD   rE   rB   rg   add_done_callback_Task__wakeupinspectZisgeneratorr   )rF   excrG   rY   blockingnew_excrH   r"   r#   Z__step   s   







61("zTask.__stepc              
   C   sR   z|   W n ty  } z| | W Y d }~d } d S d }~ww |   d } d S r   )rY   rq   rE   )rF   futurerv   r"   r"   r#   Z__wakeup.  s   	
zTask.__wakeupr   )__name__
__module____qualname__r9   r6   rL   rO   rQ   rS   rU   r-   rZ   r]   r_   ra   re   rE   rt   __classcell__r"   r"   rH   r#   r   J   s"    
"Wr   )r0   c                C   s"   	 t  }|| }t|| |S r   )r   r   r   r1   )rG   r0   r!   r/   r"   r"   r#   r   K  s
   

r   )timeoutreturn_whenc                   s   	 t | st| rtdt| j | std|tt	t
fvr*td| t  t| } tdd | D rCtjdtdd  fd	d
| D } t| || I d H S )Nzexpect a list of futures, not z#Set of coroutines/Futures is empty.zInvalid return_when value: c                 s   s    | ]}t |V  qd S r   )r   r8   r&   fr"   r"   r#   	<genexpr>x  s    zwait.<locals>.<genexpr>zThe explicit passing of coroutine objects to asyncio.wait() is deprecated since Python 3.8, and scheduled for removal in Python 3.11.   
stacklevelc                       h | ]}t | d qS r    r   r   r    r"   r#   r(   ~      zwait.<locals>.<setcomp>)r   isfuturer   r8   r:   rN   rz   
ValueErrorr   r   r   r   r   setanywarningswarnDeprecationWarning_wait)fsr~   r   r"   r    r#   r   ]  s    r   c                 G   s   |   s| d  d S d S r   )r%   rZ   )waiterargsr"   r"   r#   _release_waiter     r   c              
      s  	 t  }|d u r| I d H S |dkrFt| |d} |  r!|  S t| |dI d H  z	|   W t  tjyE } zt |d }~ww |	 }|
|t|}tt|}t| |d} | | zez|I d H  W n& tjy   |  r|   Y W |  S | | t| |dI d H   w |  r|  W |  S | | t| |dI d H  z	|   W t  tjy } zt |d }~ww |  w )Nr   r    )r   r   r   r%   rY   _cancel_and_waitr   rj   TimeoutErrorcreate_future
call_laterr   	functoolspartialrs   re   remove_done_callback)futr~   r!   rv   r   timeout_handlecbr"   r"   r#   r     s\   










r   c              
      s   	 |  d |d ur||tt|   fdd}| D ]}|| q"zI d H  W d ur9  | D ]}|| q;d urK  | D ]}|| qMw t t }}| D ]}| rk|	| q_|	| q_||fS )Nc                    sj    d8   dkst kstkr-|  s/|  d ur1d ur"   s3d  d S d S d S d S d S )Nr   r   )r   r   	cancelledr\   re   r%   rZ   r   Zcounterr   r   r   r"   r#   _on_completion  s    
z_wait.<locals>._on_completion)
r   r   r   lenrs   re   r   r   r%   add)r   r~   r   r!   r   r   r%   pendingr"   r   r#   r     s6   r   c              	      sR   	 |  }tt|}| | z|   |I d H  W | | d S | | w r   )r   r   r   r   rs   re   r   )r   r!   r   r   r"   r"   r#   r     s   
r   )r~   c                #   s    	 t | st| rtdt| j ddlm} | t	
 fddt| D d  fdd}fdd	 fd
d}D ]}|  qHr\|d ur\||ttD ]}| V  qbd S )Nz#expect an iterable of futures, not r   )Queuec                    r   r   r   r   r    r"   r#   r(   )  r   zas_completed.<locals>.<setcomp>c                     s*   D ]} |    d  q  d S r   )r   
put_nowaitclearr   )r   r%   todor"   r#   _on_timeout,  s   
z!as_completed.<locals>._on_timeoutc                    s<   sd S  |   |  sd ur  d S d S d S r   )remover   re   r   )r%   r   r   r"   r#   r   2  s   

z$as_completed.<locals>._on_completionc                     s&      I d H } | d u rtj|  S r   )r   r   r   rY   r   )r%   r"   r#   _wait_for_one:  s
   z#as_completed.<locals>._wait_for_one)r   r   r   r8   r:   rN   rz   queuesr   r   _get_event_loopr   rs   r   ranger   )r   r~   r   r   r   r   _r"   )r   r%   r!   r   r   r#   r     s&   
r   c                   c   s    	 d V  d S r   r"   r"   r"   r"   r#   __sleep0I  s   
r   c                    s^   	 | dkrt  I d H  |S t }| }|| tj||}z
|I d H W |  S |  w )Nr   )r   r   r   r   r   r   Z_set_result_unless_cancelledre   )delayrY   r!   ry   hr"   r"   r#   r	   U  s   
r	   r    c                C   s   	 t | |dS Nr    )_ensure_futureZcoro_or_futurer!   r"   r"   r#   r   f  s   r   c                C   sp   t | r|d ur|t | urtd| S t| s)t| r%t| } nt	d|d u r3t
jdd}|| S )NzRThe future belongs to a different loop than the one specified as the loop argumentz:An asyncio.Future, a coroutine or an awaitable is required   r   )r   r   r$   r   r   r8   ru   Zisawaitable_wrap_awaitabler:   r   r   r   r   r"   r"   r#   r   n  s   




r   c                 c   s    	 |   E d H S r   )	__await__)Z	awaitabler"   r"   r#   r     s   r   c                       s(   e Zd Z	  fddZdddZ  ZS )_GatheringFuturec                   s   t  j|d || _d| _d S )Nr    F)r5   r6   	_children_cancel_requested)rF   childrenr!   rH   r"   r#   r6     s   
z_GatheringFuture.__init__Nc                 C   s:   |   rdS d}| jD ]
}|j|drd}q|rd| _|S rb   )r%   r   re   r   )rF   rd   Zretchildr"   r"   r#   re     s   
z_GatheringFuture.cancelr   )rz   r{   r|   r6   re   r}   r"   r"   rH   r#   r     s    r   F)return_exceptionsc                    s   	 |st  }| g  S  fdd}i }g  ddd }|D ]3}||vrRt||d}|d u r=t|}||urDd|_d7 |||< || n|| } 	| q(t
 |dS )Nc                    s   d7   r|  s|   d S s2|  r#|  }| d S |  }|d ur2| d S krug } D ]%} |  rNt| jd u rIdn| j}n|  }|d u rZ|  }|	| q:j
rn|  }| d S | d S d S )Nr    )r%   r   r\   rk   r]   r   rj   rf   rY   appendr   rZ   )r   rv   resultsresr   Z	nfinishedZnfutsouterr   r"   r#   _done_callback  s>   

zgather.<locals>._done_callbackr   r    Fr   )r   r   r   rZ   r   r   r$   r9   rs   r   r   )r   Zcoros_or_futuresr!   r   Z
arg_to_futargr   r"   r   r#   r
     s4   
7
r
   c                    sZ   	 t |  rS t}| fdd  fdd}  | S )Nc                    s`      r|   s|   d S |   r   d S |  }|d ur' | d S  |   d S r   )r   r\   re   r]   rZ   rY   )innerrv   r   r"   r#   _inner_done_callbackE  s   z$shield.<locals>._inner_done_callbackc                    s     s  d S d S r   )r%   r   r   )r   r   r"   r#   _outer_done_callbackV  r   z$shield.<locals>._outer_done_callback)r   r%   r   r$   r   rs   )r   r!   r   r"   )r   r   r   r#   r   $  s   


r   c                    s<   	 t  s
tdtj  fdd}| S )NzA coroutine object is requiredc               
      sZ   zt t d W d S  ttfy     ty, }  z
 r'|   d } ~ ww r   )r   Z_chain_futurer   rp   ro   rq   set_running_or_notify_cancelr]   )rv   rG   ry   r!   r"   r#   callbackh  s   
z*run_coroutine_threadsafe.<locals>.callback)r   r8   r:   
concurrentr   FutureZcall_soon_threadsafe)rG   r!   r   r"   r   r#   r   _  s   



r   c                 C      	 t |  d S r   )r*   r   r/   r"   r"   r#   r   ~     r   c                 C   s4   t | }|d urtd|d|d|t | < d S )NzCannot enter into task z while another task z is being executed.r   r   r+   r!   r/   r   r"   r"   r#   r     s   


r   c                 C   s2   t | }||urtd|d|dt | = d S )NzLeaving task z! does not match the current task .r   r   r"   r"   r#   r     s   



r   c                 C   r   r   )r*   discardr   r"   r"   r#   r     r   r   )r   r   r   r   r*   r   r   )A__all__concurrent.futuresr   rA   r   ru   	itertoolstypesr   weakrefr   r   r   r   r   r   r   count__next__r;   r   r   r1   Z	_PyFuturer   Z_PyTaskZ_asyncioImportErrorZ_CTaskr   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   Z_py_register_taskZ_py_unregister_taskZ_py_enter_taskZ_py_leave_taskZ_c_register_taskZ_c_unregister_taskZ_c_enter_taskZ_c_leave_taskr"   r"   r"   r#   <module>   s    	


 v
&K,9


z;$