o
    f,E                    @  s  U d dl m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mZmZmZmZmZmZ d dlmZ d dlmZmZ d dlmZmZmZ d dlmZ d dlmZ d d	lmZm Z  d d
l!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dlm3Z3m4Z4 d dl	m5Z5 d dl6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF d dl
mGZG d dlHZHddlImJZJmKZKmLZLmMZM ddlNmOZOmPZP ddlQmRZRmSZSmTZTmUZUmVZV ddlWmXZX ddlYmZZZ ddl[m\Z] ddl[m^Z_ ddl[m`Z` ddlambZc dd lMmdZdmeZemfZfmgZgmhZh dd!limjZj dd"lkmlZlmmZm ejnd#krDd d$l8moZo nd d$lpmoZo ejnd%kr_d d&lmqZq d d'l8mrZrmsZs n@d dlZd dltZtd dl1Z1d d(lmuZumvZvmwZwmxZx d d)lymzZz d d'lpmrZrmsZs G d*d+ d+etj{Z|G d,d- d-Zqdd2d3Z}dd4d5Z~eEd6ZeEd7d8d9Zerd:Zeod;Zejd<Zd=ed<< dd?d@ZddDdEZeG ZdFedG< ddJdKZG dLdM dMecZbG dNdO dOZeG ZdPedQ< G dRdS dSeMjZddWdXZG dYdZ dZeMjZeDeBe eBe f ZG d[d\ d\e5Zejd]Zd^ed]< ejd_Zd`ed_< G dadb dbeMjZe"dcddG dedf dfeMjZe"dcddG dgdh dheMjZe"dcddG didj djeMjZddodpZddrdsZG dtdu duejZG dvdw dwejZG dxdy dyeMjZG dzd{ d{ZG d|d} d}eeMjZG d~d deMjfZG dd deMjfZG dd deMjZG dd deMjZG dd deeMjZG dd deeMjZejdZded< ejdZded< G dd de_Z^G dd de]Z\ejdZded< G dd dZG dd deLZG dd deMjZG dd dedZeZdS )    )annotationsN)AbstractEventLoopCancelledError	all_taskscreate_taskcurrent_taskget_running_loopsleep)_run_until_complete_cb)OrderedDictdeque)AsyncIterator	GeneratorIterable)Future)suppress)Contextcopy_context)	dataclass)partialwraps)CORO_RUNNINGCORO_SUSPENDEDgetcoroutinestateiscoroutine)IOBase)PathLike)Queue)Signals)AddressFamily
SocketKind)Thread)TracebackType)IOAnyAsyncGenerator	AwaitableCallable
CollectionContextManager	CoroutineMappingOptionalSequenceTupleTypeVarcast)WeakKeyDictionary   )CapacityLimiterStatisticsEventStatisticsTaskInfoabc)claim_worker_threadthreadlocals)BrokenResourceErrorBusyResourceErrorClosedResourceErrorEndOfStream
WouldBlock)convert_ipv6_sockaddr)create_memory_object_streamCapacityLimiterEvent)ResourceGuardCancelScope)AsyncBackendIPSockAddrTypeSocketListenerUDPPacketTypeUNIXDatagramPacketType)RunVar)MemoryObjectReceiveStreamMemoryObjectSendStream)   
   )	ParamSpecrO      )Runner)TypeVarTupleUnpack)
coroutinesevents
exceptionstasks)BaseExceptionGroupc                   @  s   e Zd ZdZdZdZdS )_StatecreatedinitializedclosedN)__name__
__module____qualname__CREATEDINITIALIZEDCLOSED rf   rf   P/var/www/NoticeGen/venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.pyr\   g   s    r\   c                   @  sj   e Zd Zdddd&ddZd'd
dZd(ddZd)ddZd*ddZddd+ddZd)d d!Z	d,d$d%Z
dS )-rT   Ndebugloop_factoryri   bool | Nonerj   &Callable[[], AbstractEventLoop] | Nonec                C  s0   t j| _|| _|| _d | _d | _d| _d| _d S )Nr   F)	r\   rc   _state_debug_loop_factory_loop_context_interrupt_count_set_event_loop)selfri   rj   rf   rf   rg   __init__n   s   
zRunner.__init__returnc                 C  s   |    | S N)
_lazy_initrt   rf   rf   rg   	__enter__|   s   zRunner.__enter__exc_typetype[BaseException]exc_valBaseExceptionexc_tbr"   Nonec                 C  s   |    d S rw   )closert   r{   r}   r   rf   rf   rg   __exit__   s   zRunner.__exit__c              	   C  s   | j tjurdS z8| j}t| ||  t|dr$||  n|t	| W | j
r4td |  d| _tj| _ dS | j
rItd |  d| _tj| _ w )zShutdown and close event loop.Nshutdown_default_executor)rm   r\   rd   rp   _cancel_all_tasksrun_until_completeshutdown_asyncgenshasattrr   _shutdown_default_executorrs   rX   set_event_loopr   re   rt   looprf   rf   rg   r      s(   



zRunner.closer   c                 C  s   |    | jS )zReturn embedded event loop.)rx   rp   ry   rf   rf   rg   get_loop   s   zRunner.get_loop)contextcoroCoroutine[T_Retval]T_Retvalc             
   C  sd  t |std|t durtd|   |du r!| j}|| j	j
|}t t u rVttjtju rVt| j|d}z	ttj| W n tyU   d}Y nw d}d| _z?z| j	|W W |duryttj|u rzttjtj S S S  tjy   | jdkrt|dd}|dur| dkrt  w |durttj|u rttjtj w w w )z/Run a coroutine inside the embedded event loop.za coroutine was expected, got Nz7Runner.run() cannot be called from a running event loop)	main_taskr   uncancel)rW   r   
ValueErrorrX   _get_running_loopRuntimeErrorrx   rq   runrp   r   	threadingcurrent_threadmain_threadsignal	getsignalSIGINTdefault_int_handlerr   
_on_sigintrr   r   rY   r   getattrKeyboardInterrupt)rt   r   r   tasksigint_handlerr   rf   rf   rg   r      sN   
	
z
Runner.runc                 C  s   | j tju r
td| j tju rd S | jd u r)t | _| j	s(t
| j d| _	n|  | _| jd ur:| j| j t | _tj| _ d S )NzRunner is closedT)rm   r\   re   r   rd   ro   rX   new_event_looprp   rs   r   rn   	set_debugcontextvarsr   rq   ry   rf   rf   rg   rx      s   




zRunner._lazy_initr   asyncio.Taskc                 C  sB   |  j d7  _ | j dkr| s|  | jdd  d S t )N   c                   S  s   d S rw   rf   rf   rf   rf   rg   <lambda>   s    z#Runner._on_sigint.<locals>.<lambda>)rr   donecancelrp   call_soon_threadsafer   )rt   signumframer   rf   rf   rg   r      s   zRunner._on_sigint)ri   rk   rj   rl   )rv   rT   )r{   r|   r}   r~   r   r"   rv   r   rv   r   rv   r   )r   r   rv   r   )r   r   rv   r   )r`   ra   rb   ru   rz   r   r   r   r   rx   r   rf   rf   rf   rg   rT   l   s    




0rT   r   r   rv   r   c                 C  st   t | }|s	d S |D ]}|  q| t j|ddi |D ]}| r&q| d ur7| d| |d qd S )Nreturn_exceptionsTz1unhandled exception during asyncio.run() shutdown)message	exceptionr   )rZ   r   r   r   gather	cancelledr   call_exception_handler)r   	to_cancelr   rf   rf   rg   r      s$   

r   c                   sh   d
 fdd}d _  jdu rdS   }tj||fd	}|  z|I dH  W |  dS |  w )z.Schedule the shutdown of the default executor.futureasyncio.futures.Futurerv   r   c              
     sX   z j jdd  | jd  W d S  ty+ } z | j| W Y d }~d S d }~ww )NT)wait)_default_executorshutdownr   
set_result	Exceptionset_exception)r   exr   rf   rg   _do_shutdown  s   z0_shutdown_default_executor.<locals>._do_shutdownTN)targetargs)r   r   rv   r   )_executor_shutdown_calledr   create_futurer   r!   startjoin)r   r   r   threadrf   r   rg   r     s   
r   r   T_contraT)contravariantPosArgsTP
_root_taskzRunVar[asyncio.Task | None]r   c                  C  s   t d } | d ur|  s| S t D ]-}|jr?| s?dd |jD }|D ]}|tu s3t|dd dkr>t | |    S q%qtt	j
t }t|}|rm|j}|rb|jd urb|j}|rb|jd usX|d urmtt	j
|jS |S )Nc                 S  s   g | ]\}}|qS rf   rf   ).0cbr   rf   rf   rg   
<listcomp>(      z"find_root_task.<locals>.<listcomp>ra   zuvloop.loop)r   getr   r   
_callbacksr
   r   setr0   asyncioTaskr   _task_statescancel_scope_parent_scope
_host_task)	root_taskr   	callbacksr   stater   rf   rf   rg   find_root_task   s.   



r   funcr'   strc                 C  s0   t | dd }t | dd }ddd ||fD S )Nra   rb   .c                 S  s   g | ]}|r|qS rf   rf   )r   xrf   rf   rg   r   B  r   z%get_callable_name.<locals>.<listcomp>)r   r   )r   modulequalnamerf   rf   rg   get_callable_name?  s   r   z1WeakKeyDictionary[asyncio.AbstractEventLoop, Any]	_run_varsr   boolc                 C  s8   zt |  ttfv W S  ty   td|  ddw )zBReturn ``True`` if the task has been started and has not finished.zCannot determine if task z has started or notN)r   get_coror   r   AttributeErrorr   r   rf   rf   rg   _task_startedL  s
   r   c                   @  s   e Zd Zejddd3dd	Zejdfd4d
dZd5ddZd6ddZd7ddZ	d8ddZ
d9dd Zd8d!d"Zd:d#d$Zd8d%d&Zed;d'd(Zejd<d*d(Zed:d+d,Zed:d-d.Zed:d/d0Zejd=d1d0Zd2S )>rF   Fdeadlineshieldr   floatr   r   rv   c                C  
   t | S rw   object__new__clsr   r   rf   rf   rg   r   [  s   
zCancelScope.__new__c                 C  sV   || _ || _d | _t | _d| _d| _d| _d | _d | _	t | _
d | _d| _d | _d S )NFr   )	_deadline_shieldr   r   _child_scopes_cancel_called_cancelled_caught_active_timeout_handle_cancel_handle_tasksr   _cancel_calls_cancelling)rt   r   r   rf   rf   rg   ru   `  s   
zCancelScope.__init__c                 C  s   | j rtdttjt  | _}| j| zt	| }W n t
y/   td | }|t	|< Y nw |j| _| |_| jd urJ| jj|  | jj| |   d| _ tjdkr\| j | _| jrd| |  | S )Nz;Each CancelScope may only be used for a single 'with' blockTrR   )r   r   r0   r   r   r   r   r   addr   KeyError	TaskStater   r   r   remove_timeoutsysversion_info
cancellingr  r   _deliver_cancellation)rt   	host_task
task_staterf   rf   rg   rz   o  s0   



zCancelScope.__enter__r{   type[BaseException] | Noner}   BaseException | Noner   TracebackType | Nonerk   c                 C  s  | j stdt | jurtd| jd usJ t| j}|d u s'|j| ur+tdd| _ | jr9| j  d | _| j	
| j | jd urT| jj
|  | jj	| j | j|_|   | jr|d urt|D ]}t|tr{| || _| jr{ | jS qg| jS d S )NzThis cancel scope is not activezIAttempted to exit cancel scope in a different task than it was entered inzTAttempted to exit a cancel scope that isn't the current tasks's current cancel scopeF)r   r   r   r   r   r   r   r   r   r   r  r   r   r  _restart_cancellation_in_parentr   iterate_exceptions
isinstancer   	_uncancelr   )rt   r{   r}   r   host_task_stateexcrf   rf   rg   r     s@   


 zCancelScope.__exit__cancelled_excr   c                 C  sr   t jdk s
| jd u rd| _dS | jd ur+| jr+|  jd8  _| j | jkr(dS | jsd| _dt| d|jv S )NrO   	   r   Tr   Cancelled by cancel scope r   )r  r  r   r   r  r   idr   )rt   r  rf   rf   rg   r    s   
zCancelScope._uncancelr   c                 C  sF   | j tjkr!t }| | j kr|   d S || j | j| _d S d S rw   )	r   mathinfr   timer   call_atr  r   r   rf   rf   rg   r    s   zCancelScope._timeoutoriginc                 C  s   d}t  }| jD ]>}|jrqd}||urF|| ju st|rF|j}t|tjr*|	 sF| j
d7  _
tjdkrB|dt|d q|  q| jD ]}|jsY|jsY||pX|}qJ|| u rn|rkt | j|| _|S d| _|S )aZ  
        Deliver cancellation to directly contained tasks and nested cancel scopes.

        Schedule another run at the end if we still have tasks eligible for
        cancellation.

        :param origin: the cancel scope that originated the cancellation
        :return: ``True`` if the delivery needs to be retried on the next cycle

        FTr   r  r  r   N)r   r   _must_cancelr   r   _fut_waiterr  r   r   r   r   r  r  r   r  r   r   cancel_calledr
  r   	call_soonr   )rt   r  should_retrycurrentr   waiterscoperf   rf   rg   r
    s4   


z!CancelScope._deliver_cancellationc                 C  sL   | j }|dur$|jr|jdu r|| dS |jrdS |j }|dusdS dS )zb
        Restart the cancellation effort in the closest directly cancelled parent scope.

        N)r   r   r   r
  r   )rt   r'  rf   rf   rg   r    s   

z+CancelScope._restart_cancellation_in_parentc                 C  s6   | j }|d ur|js|jrdS |j }|d ur|jr
dS )NTF)r   r   r   )rt   r   rf   rf   rg   _parent_cancelled  s   zCancelScope._parent_cancelledc                 C  sB   | j s| jr| j  d | _d| _ | jd ur| |  d S d S d S NT)r   r   r   r   r
  ry   rf   rf   rg   r   !  s   

zCancelScope.cancelc                 C     | j S rw   )r   ry   rf   rf   rg   r   +     zCancelScope.deadlinevaluec                 C  sD   t || _| jd ur| j  d | _| jr| js |   d S d S d S rw   )r   r   r   r   r   r   r  rt   r,  rf   rf   rg   r   /  s   


c                 C  r*  rw   )r   ry   rf   rf   rg   r"  9  r+  zCancelScope.cancel_calledc                 C  r*  rw   )r   ry   rf   rf   rg   cancelled_caught=  r+  zCancelScope.cancelled_caughtc                 C  r*  rw   )r   ry   rf   rf   rg   r   A  r+  zCancelScope.shieldc                 C  s(   | j |kr|| _ |s|   d S d S d S rw   )r   r  r-  rf   rf   rg   r   E  s   
Nr   r   r   r   rv   rF   )r   r   r   r   )rv   rF   r{   r  r}   r  r   r  rv   rk   )r  r   rv   r   r   )r  rF   rv   r   rv   r   rv   r   r,  r   rv   r   )r,  r   rv   r   )r`   ra   rb   r  r  r   ru   rz   r   r  r  r
  r  r(  r   propertyr   setterr"  r.  r   rf   rf   rf   rg   rF   Z  s0    


1


-


	rF   c                   @  s   e Zd ZdZdZd
ddZd	S )r  z
    Encapsulates auxiliary task information that cannot be added to the Task instance
    itself because there are no guarantees about its implementation.
    )	parent_idr   __weakref__r6  
int | Noner   CancelScope | Nonec                 C     || _ || _d S rw   r6  r   )rt   r6  r   rf   rf   rg   ru   Z     
zTaskState.__init__N)r6  r8  r   r9  )r`   ra   rb   __doc__	__slots__ru   rf   rf   rf   rg   r  R  s    r  z*WeakKeyDictionary[asyncio.Task, TaskState]r   c                   @  s"   e Zd ZdddZddddZdS )_AsyncioTaskStatusr   asyncio.Futurer6  intc                 C  r:  rw   )_future
_parent_id)rt   r   r6  rf   rf   rg   ru   h  r<  z_AsyncioTaskStatus.__init__Nr,  T_contra | Nonerv   r   c                 C  sX   z| j | W n tjy   | j  stdd Y nw ttjt }| j	t
| _d S )Nz.called 'started' twice on the same task status)rB  r   r   InvalidStateErrorr   r   r0   r   r   rC  r   r6  )rt   r,  r   rf   rf   rg   startedl  s   
z_AsyncioTaskStatus.started)r   r@  r6  rA  rw   )r,  rD  rv   r   )r`   ra   rb   ru   rF  rf   rf   rf   rg   r?  g  s    
r?  r   r~   $Generator[BaseException, None, None]c                 c  s4    t | tr| jD ]	}t|E d H  q	d S | V  d S rw   )r  r[   rY   r  )r   r  rf   rf   rg   r  y  s   


r  c                   @  sX   e Zd Zd$ddZd%ddZd&ddZ	d'd(ddZddd)ddZddd*d"d#ZdS )+	TaskGrouprv   r   c                 C  s    t  | _d| _g | _t | _d S )NF)rF   r   r   _exceptionsr   r   ry   rf   rf   rg   ru     s   zTaskGroup.__init__c                   s   | j   d| _| S r)  )r   rz   r   ry   rf   rf   rg   
__aenter__  s   
zTaskGroup.__aenter__r{   r  r}   r  r   r  rk   c              
     s   | j |||}|d ur| j   t|ts| j| d }| jrNzt	| jI d H  W n tyJ } z| j   |d u r@|}W Y d }~nd }~ww | js"d| _
| jrZtd| j|rd|d u sb|rd||S )NFzunhandled errors in a TaskGroup)r   r   r   r  r   rI  appendr   r   r   r   r[   )rt   r{   r}   r   ignore_exception!cancelled_exc_while_waiting_tasksr  rf   rf   rg   	__aexit__  s4   



zTaskGroup.__aexit__Nr   ,Callable[[Unpack[PosArgsT]], Awaitable[Any]]r   tuple[Unpack[PosArgsT]]namer   task_status_futureasyncio.Future | Noner   c           
        s   d fdd} j stdi }r%tt }tt jj|d< nt jj}||i |}t|sQt|d	rA|j	 d
nd}	t
d|	 |j d|d|d u rYt|nt|}t||d| t| jdt<  jj  j S )N_taskr   rv   r   c              
     s0  t |  }|jd usJ | |jjv sJ |jj|   j t | = z|  }W n# tyL } zt|jtr@|j}t|jts7|}W Y d }~nd }~ww |d urd ur[ r[d S d u sc	 r|t|tsn j
|  j sz j  d S d S | d S d ur	 std d S d S d S )Nz2Child exited without calling task_status.started())r   r   r   r  r   r   r  __context__r   r   rI  rK  r(  r   r   r   )rT  r  r  ert   r   rR  rf   rg   	task_done  s<   

z#TaskGroup._spawn.<locals>.task_donez;This task group is not active; no new tasks can be started.task_statusra   r    z	Expected z0() to return a coroutine, but the return value (z) is not a coroutine objectrQ  r;  )rT  r   rv   r   )r   r   r  r   r?  r   r   r   r   ra   	TypeErrorrb   r   r   r   add_done_callbackr  r   r   r  )
rt   r   r   rQ  rR  rX  kwargsr6  r   prefixrf   rW  rg   _spawn  s:   $



zTaskGroup._spawnr[  Unpack[PosArgsT]c                G  s   |  ||| d S rw   )r`  )rt   r   rQ  r   rf   rf   rg   
start_soon  s   zTaskGroup.start_soonCallable[..., Awaitable[Any]]r$   c                  s   t  }| ||||}z|I d H W S  tyT   |  tdd( tt |I d H  W d    n1 s8w   Y  W d     W d     1 sNw   Y   w NTr   )r   r   r`  r   r   rF   r   )rt   r   rQ  r   r   r   rf   rf   rg   r     s    (zTaskGroup.startr   )rv   rH  r0  rw   )
r   rO  r   rP  rQ  r   rR  rS  rv   r   )r   rO  r   ra  rQ  r   rv   r   )r   rc  r   r   rQ  r   rv   r$   )	r`   ra   rb   ru   rJ  rN  r`  rb  r   rf   rf   rf   rg   rH    s    


,Q	rH  c                      sB   e Zd ZdZd fdd	ZdddZdddZddddZ  ZS ) WorkerThreadrP   r   r   workersset[WorkerThread]idle_workersdeque[WorkerThread]c                   sF   t  jdd || _|| _|| _|j| _td| _t	
 | _d| _d S )NzAnyIO worker threadr[  r2   F)superru   r   rg  ri  rp   r   r   queueAsyncIOBackendcurrent_time
idle_sincestopping)rt   r   rg  ri  	__class__rf   rg   ru   *  s   

zWorkerThread.__init__r   r@  resultr$   r  r  rv   r   c                 C  sh   t  | _| js| j|  | s2|d ur+t|tr$t	d}||_
|}|| d S || d S d S )Nzcoroutine raised StopIteration)rm  rn  ro  rp  ri  rK  r   r  StopIterationr   	__cause__r   r   )rt   r   rs  r  new_excrf   rf   rg   _report_result;  s   

zWorkerThread._report_resultc           
      C  s   t t| jc 	 | j }|d u r	 W d    d S |\}}}}}| scd }d }|t_z$z|j|g|R  }W n t	yL }	 z|	}W Y d }	~	nd }	~	ww W t`nt`w | j
 sc| j| j||| | j  q1 slw   Y  d S rw   )r7   rm  r   rl  r   r   r8   current_cancel_scoper   r~   	is_closedr   rw  rX  )
rt   itemr   r   r   r   r   rs  r   r  rf   rf   rg   r   M  s4   



zWorkerThread.runNfasyncio.Task | Nonec                 C  sF   d| _ | jd  | j|  z	| j|  W d S  ty"   Y d S w r)  )rp  rl  
put_nowaitrg  discardri  r  r   )rt   r{  rf   rf   rg   stoph  s   zWorkerThread.stop)r   r   rg  rh  ri  rj  )r   r@  rs  r$   r  r  rv   r   r   rw   )r{  r|  rv   r   )	r`   ra   rb   MAX_IDLE_TIMEru   rw  r   r  __classcell__rf   rf   rq  rg   rf  '  s    

rf  _threadpool_idle_workerszRunVar[deque[WorkerThread]]_threadpool_workerszRunVar[set[WorkerThread]]c                      s2   e Zd ZdddZd fddZdddZ  ZS )BlockingPortalrv   c                 C  r   rw   r   r   rf   rf   rg   r   y     
zBlockingPortal.__new__r   c                   s   t    t | _d S rw   )rk  ru   r   rp   ry   rq  rf   rg   ru   |  s   
zBlockingPortal.__init__r   <Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]r   rP  r^  dict[str, Any]rQ  r   r   Future[T_Retval]c                 C  s,   t t| jj|d| j||||f| j d S )Nr[  )rm  run_sync_from_threadr   _task_grouprb  
_call_funcrp   )rt   r   r   r^  rQ  r   rf   rf   rg   _spawn_task_from_thread  s
   z&BlockingPortal._spawn_task_from_thread)rv   r  r   )r   r  r   rP  r^  r  rQ  r   r   r  rv   r   )r`   ra   rb   r   ru   r  r  rf   rf   rq  rg   r  x  s    
r  F)eqc                   @  s,   e Zd ZU ded< dddd	ZdddZdS )StreamReaderWrapperzasyncio.StreamReader_stream   	max_bytesrA  rv   bytesc                   s    | j |I d H }|r|S trw   )r  readr<   )rt   r  datarf   rf   rg   receive  s
   zStreamReaderWrapper.receiver   c                      | j   t I d H  d S rw   )r  feed_eofrm  
checkpointry   rf   rf   rg   aclose     
zStreamReaderWrapper.acloseNr  r  rA  rv   r  r   )r`   ra   rb   __annotations__r  r  rf   rf   rf   rg   r    s   
 r  c                   @  s*   e Zd ZU ded< dddZdd	d
ZdS )StreamWriterWrapperzasyncio.StreamWriterr  rz  r  rv   r   c                   s"   | j | | j  I d H  d S rw   )r  writedrainrt   rz  rf   rf   rg   send  s   zStreamWriterWrapper.sendc                   r  rw   )r  r   rm  r  ry   rf   rf   rg   r    r  zStreamWriterWrapper.acloseNrz  r  rv   r   r   )r`   ra   rb   r  r  r  rf   rf   rf   rg   r    s   
 
r  c                   @  s   e Zd ZU ded< ded< ded< ded< d$d
dZd%ddZd$ddZd$ddZd&ddZe	d%ddZ
e	d'ddZe	d(ddZe	d)dd Ze	d)d!d"Zd#S )*Processzasyncio.subprocess.Process_processzStreamWriterWrapper | None_stdinzStreamReaderWrapper | None_stdout_stderrrv   r   c                   s   t dd) | jr| j I d H  | jr| j I d H  | jr(| j I d H  W d    n1 s2w   Y  z
|  I d H  W d S  tyi   |   t dd |  I d H  W d     1 scw   Y   w rd  )rF   r  r  r  r  r   r~   killry   rf   rf   rg   r    s*   
zProcess.acloserA  c                   s   | j  I d H S rw   )r  r   ry   rf   rf   rg   r     s   zProcess.waitc                 C     | j   d S rw   )r  	terminatery   rf   rf   rg   r       zProcess.terminatec                 C  r  rw   )r  r  ry   rf   rf   rg   r    r  zProcess.killr   c                 C  s   | j | d S rw   )r  send_signal)rt   r   rf   rf   rg   r       zProcess.send_signalc                 C     | j jS rw   )r  pidry   rf   rf   rg   r       zProcess.pidr8  c                 C  r  rw   )r  
returncodery   rf   rf   rg   r    r  zProcess.returncodeabc.ByteSendStream | Nonec                 C  r*  rw   )r  ry   rf   rf   rg   stdin  r+  zProcess.stdinabc.ByteReceiveStream | Nonec                 C  r*  rw   )r  ry   rf   rf   rg   stdout  r+  zProcess.stdoutc                 C  r*  rw   )r  ry   rf   rf   rg   stderr  r+  zProcess.stderrNr   rv   rA  )r   rA  rv   r   )rv   r8  )rv   r  )rv   r  )r`   ra   rb   r  r  r   r  r  r  r4  r  r  r  r  r  rf   rf   rf   rg   r    s(   
 




r  rg  set[Process]rT  r   c                 C  s   d}t jdk rzt  }W n	 ty   Y nw | D ])}|jdu r#q|jjj	
  |jjj	
  |jjj	
  |  |rD||j qdS )zG
    Forcibly shuts down worker processes belonging to this event loop.N)rO      )r  r  r   get_event_loop_policyget_child_watcherNotImplementedErrorr  r  r  
_transportr   r  r  r  remove_child_handlerr  )rg  rT  child_watcherprocessrf   rf   rg   '_forcibly_shutdown_process_pool_on_exit  s$   

r  set[abc.Process]c                   sd   zt tjI dH  W dS  tjy1   | D ]}|jdu r!|  q| D ]	}| I dH  q$Y dS w )z
    Shuts down worker processes belonging to this event loop.

    NOTE: this only works when the event loop was started using asyncio.run() or
    anyio.run().

    N)r	   r  r  r   r   r  r  r  )rg  r  rf   rf   rg   _shutdown_process_pool_on_exit  s   	
r  c                   @  sz   e Zd ZU ded< ded< ded< dZded< d	Zd
ed< d ddZd!ddZd"ddZd#ddZ	d$ddZ
d$ddZdS )%StreamProtocolzdeque[bytes]
read_queueasyncio.Event
read_eventwrite_eventNException | Noner   Fr   	is_at_eof	transportasyncio.BaseTransportrv   r   c                 C  s<   t  | _t | _t | _| j  ttj|	d d S Nr   )
r   r  r   rC   r  r  r   r0   	Transportset_write_buffer_limitsrt   r  rf   rf   rg   connection_made$  s
   


zStreamProtocol.connection_mader  c                 C  s,   |r
t  | _|| j_| j  | j  d S rw   )r9   r   ru  r  r   r  rt   r  rf   rf   rg   connection_lost+  s
   
zStreamProtocol.connection_lostr  r  c                 C  s   | j | | j  d S rw   )r  rK  r  r   )rt   r  rf   rf   rg   data_received3  s   zStreamProtocol.data_receivedrk   c                 C  s   d| _ | j  dS r)  )r  r  r   ry   rf   rf   rg   eof_received7  s   
zStreamProtocol.eof_receivedc                 C     t  | _d S rw   )r   rC   r  ry   rf   rf   rg   pause_writing<  r  zStreamProtocol.pause_writingc                 C  r  rw   r  r   ry   rf   rf   rg   resume_writing?  r  zStreamProtocol.resume_writingr  r  rv   r   r  r  rv   r   )r  r  rv   r   )rv   rk   r   )r`   ra   rb   r  r   r  r  r  r  r  r  r  rf   rf   rf   rg   r    s   
 




r  c                   @  sn   e Zd ZU ded< ded< ded< dZded< dddZd ddZd!ddZd"ddZd#ddZ	d#ddZ
dS )$DatagramProtocolz#deque[tuple[bytes, IPSockAddrType]]r  r  r  r  Nr  r   r  r  rv   r   c                 C  s.   t dd| _t | _t | _| j  d S )Nd   )maxlen)r   r  r   rC   r  r  r   r  rf   rf   rg   r  I  s   

z DatagramProtocol.connection_mader  c                 C  s   | j   | j  d S rw   )r  r   r  r  rf   rf   rg   r  O  s   
z DatagramProtocol.connection_lostr  r  addrrH   c                 C  s&   t |}| j||f | j  d S rw   )r>   r  rK  r  r   )rt   r  r  rf   rf   rg   datagram_receivedS  s   z"DatagramProtocol.datagram_receivedr   c                 C  s
   || _ d S rw   )r   r  rf   rf   rg   error_receivedX  r  zDatagramProtocol.error_receivedc                 C  r  rw   )r  clearry   rf   rf   rg   r  [  r  zDatagramProtocol.pause_writingc                 C  r  rw   r  ry   rf   rf   rg   r  ^  r  zDatagramProtocol.resume_writingr  r  )r  r  r  rH   rv   r   )r  r   rv   r   r   )r`   ra   rb   r  r   r  r  r  r  r  r  rf   rf   rf   rg   r  C  s   
 




r  c                   @  sN   e Zd ZdddZedd	d
ZddddZdddZdddZdddZ	dS ) SocketStreamr  asyncio.Transportprotocolr  c                 C  *   || _ || _td| _td| _d| _d S Nreading from
writing toFr  	_protocolrD   _receive_guard_send_guard_closedrt   r  r  rf   rf   rg   ru   c  s
   


zSocketStream.__init__rv   socket.socketc                 C     | j dS Nsocketr  get_extra_infory   rf   rf   rg   _raw_socketj     zSocketStream._raw_socketr  r  rA  r  c              	     s  | j  | jj s(| j s(| jjs(| j  | jj I d H  | j	  nt
 I d H  z| jj }W n tyP   | jrDtd | jjrM| jjd td w t||krk|d | ||d  }}| jj| | jjs}| jj  W d    |S W d    |S 1 sw   Y  |S rw   )r  r  r  is_setr  
is_closingr  resume_readingr   pause_readingrm  r  r  popleft
IndexErrorr  r;   r   r<   len
appendleftr  )rt   r  chunkleftoverrf   rf   rg   r  n  sB   



 
  zSocketStream.receiverz  r   c                   s   | j F t I d H  | jrt| jjd ur| jjz| j| W n t	y8 } z	| j
 r3t| d }~ww | jj I d H  W d    d S 1 sMw   Y  d S rw   )r  rm  r  r  r;   r  r   r  r  r   r  r9   r  r   )rt   rz  r  rf   rf   rg   r    s"   
"zSocketStream.sendc                   s(   z| j   W d S  ty   Y d S w rw   )r  	write_eofOSErrorry   rf   rf   rg   send_eof  s   zSocketStream.send_eofc                   s^   | j  s-d| _z| j   W n	 ty   Y nw | j   tdI d H  | j   d S d S NTr   )r  r  r  r  r  r   r	   abortry   rf   rf   rg   r    s   

zSocketStream.acloseN)r  r  r  r  rv   r  r  r  r  r   )
r`   ra   rb   ru   r4  r  r  r  r  r  rf   rf   rf   rg   r  b  s    

#
r  c                   @  s`   e Zd ZU dZded< dZded< dZddd	ZedddZ	dddZ
dddZdddZdS )_RawSocketMixinNrS  _receive_future_send_futureF
raw_socketr  c                 C  s   || _ td| _td| _d S )Nr  r  )_RawSocketMixin__raw_socketrD   r  r  rt   r  rf   rf   rg   ru     s   
z_RawSocketMixin.__init__rv   c                 C  r*  rw   )r  ry   rf   rf   rg   r    r+  z_RawSocketMixin._raw_socketr   asyncio.AbstractEventLoopr@  c                   >   d fdd}t   }_ j|jd  || |S )Nr{  r   rv   r   c                      `  j d S rw   )r  remove_readerr  r{  r   rt   rf   rg   callback     z6_RawSocketMixin._wait_until_readable.<locals>.callbackr{  r   rv   r   )r   r   r  
add_readerr  r   r]  rt   r   r  r{  rf   r  rg   _wait_until_readable  
   
z$_RawSocketMixin._wait_until_readablec                   r  )Nr{  r   rv   r   c                   r  rw   )r  remove_writerr  r  r  rf   rg   r    r  z6_RawSocketMixin._wait_until_writable.<locals>.callbackr  )r   r   r  
add_writerr  r   r]  r  rf   r  rg   _wait_until_writable  r  z$_RawSocketMixin._wait_until_writabler   c                   sV   | j s'd| _ | j dkr| j  | jr| jd  | jr)| jd  d S d S d S )NT)_closingr  filenor   r  r   r  ry   rf   rf   rg   r    s   
z_RawSocketMixin.acloser  r  r	  )r   r  rv   r@  r   )r`   ra   rb   r  r  r  r!  ru   r4  r  r  r  r  rf   rf   rf   rg   r
    s   
 




r
  c                   @  s@   e Zd ZdddZddd	d
ZdddZdddZdddZdS )UNIXSocketStreamrv   r   c                   s<   | j  | jtj W d    d S 1 sw   Y  d S rw   )r  r  r   r  SHUT_WRry   rf   rf   rg   r    s   "zUNIXSocketStream.send_eofr  r  rA  r  c                   s   t  }t I d H  | j> 	 z| j|}W n% ty)   | |I d H  Y n" ty= } z	| j	r6t
d t|d }~ww |sBt|W  d    S q1 sOw   Y  d S rw   )r   rm  r  r  r  recvBlockingIOErrorr  r  r!  r;   r9   r<   )rt   r  r   r  r  rf   rf   rg   r    s*   zUNIXSocketStream.receiverz  c                   s   t  }t I d H  | jM t|}|rSz| j|}W n% ty.   | |I d H  Y n t	yB } z	| j
r;td t|d }~ww ||d  }|sW d    d S W d    d S 1 s^w   Y  d S rw   )r   rm  r  r  
memoryviewr  r  r'  r  r  r!  r;   r9   )rt   rz  r   view
bytes_sentr  rf   rf   rg   r    s*   "zUNIXSocketStream.sendmsglenmaxfdstuple[bytes, list[int]]c                   sl  t |tr
|dk rtdt |tr|dk rtdt }td}t I d H  | jJ 	 z| j	|t
||j \}}}}W n% tyS   | |I d H  Y n tyg }	 z	| jr`td t|	d }	~	ww |sn|sntnq/W d    n1 szw   Y  |D ].\}
}}|
t
jks|t
jkrtd|d|
 d	| ||d t|t||j    q|t|fS )
Nr   z%msglen must be a non-negative integerr   z!maxfds must be a positive integeriTz.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r  rA  r   r   arrayrm  r  r  r  recvmsgr  CMSG_LENitemsizer'  r  r  r!  r;   r9   r<   
SOL_SOCKET
SCM_RIGHTSr   	frombytesr   list)rt   r+  r,  r   fdsr   ancdataflagsr  r  
cmsg_level	cmsg_type	cmsg_datarf   rf   rg   receive_fds  sN   
&zUNIXSocketStream.receive_fdsr   r7  Collection[int | IOBase]c                   s  |st d|st dt }g }|D ]}t|tr!|| qt|tr-||  qtd|}t	 I d H  | j
A 	 z| j|gtjtj|fg W n& tya   | |I d H  Y n tyu } z	| jrntd t|d }~ww q@W d    d S 1 sw   Y  d S )Nzmessage must not be emptyzfds must not be emptyr.  )r   r   r  rA  rK  r   r"  r/  rm  r  r  r  sendmsgr  r3  r4  r'  r  r  r!  r;   r9   )rt   r   r7  r   filenosfdfdarrayr  rf   rf   rg   send_fds7  sB   

"zUNIXSocketStream.send_fdsNr   r  r  r  )r+  rA  r,  rA  rv   r-  )r   r  r7  r>  rv   r   )r`   ra   rb   r  r  r  r=  rC  rf   rf   rf   rg   r$    s    


'r$  c                   @  sJ   e Zd ZU dZded< dZdddZedd
dZdddZ	dddZ
dS )TCPSocketListenerNr9  _accept_scopeFr  r  c                 C  s$   || _ ttjt | _td| _d S )Naccepting connections from)_TCPSocketListener__raw_socketr0   r   BaseEventLoopr   rp   rD   _accept_guardr  rf   rf   rg   ru   ]  s   zTCPSocketListener.__init__rv   c                 C  r*  rw   )rG  ry   rf   rf   rg   r  b  r+  zTCPSocketListener._raw_socketabc.SocketStreamc                   s  | j rt| j` t I d H  t F| _z8z| j| j	I d H \}}W n$ t
jyI   z	| j| j	 W n ttfyA   Y nw | j rHtd  w W d | _nd | _w W d    n1 s]w   Y  W d    n1 slw   Y  |tjtjd | jt|I d H \}}t||S Nr   )r  r;   rI  rm  r  rF   rE  rp   sock_acceptr  r   r   r  r   r  
setsockoptr  IPPROTO_TCPTCP_NODELAYconnect_accepted_socketr  r  )rt   client_sock_addrr  r  rf   rf   rg   acceptf  s8   

zTCPSocketListener.acceptr   c              	     sh   | j rd S d| _ | jr-z	| j| j W n ttfy    Y nw | j  tdI d H  | j	  d S r  )
r  rE  rp   r  r  r   r  r   r	   r   ry   rf   rf   rg   r    s   
zTCPSocketListener.acloser#  r	  rv   rJ  r   )r`   ra   rb   rE  r  r  ru   r4  r  rS  r  rf   rf   rf   rg   rD  Y  s   
 

rD  c                   @  s8   e Zd ZdddZdddZdd
dZedddZdS )UNIXSocketListenerr  r  c                 C  s"   || _ t | _td| _d| _d S )NrF  F)_UNIXSocketListener__raw_socketr   rp   rD   rI  r  r  rf   rf   rg   ru     s   

zUNIXSocketListener.__init__rv   rJ  c                   s   t  I d H   jU 	 z j \}}|d t|W W  d    S  tyJ   t	 } j
 j|jd  | fdd |I d H  Y n ty^ } z	 jrWtd t|d }~ww q1 scw   Y  d S )NTFc                   s    j  jS rw   )rp   r  rV  _ry   rf   rg   r     s    z+UNIXSocketListener.accept.<locals>.<lambda>)rm  r  rI  rV  rS  setblockingr$  r'  r   r   rp   r  r   r]  r  r  r;   r9   )rt   rQ  rX  r{  r  rf   ry   rg   rS    s0   

zUNIXSocketListener.acceptr   c                   s   d| _ | j  d S r)  )r  rV  r   ry   rf   rf   rg   r    s   zUNIXSocketListener.aclosec                 C  r*  rw   )rV  ry   rf   rf   rg   r    r+  zUNIXSocketListener._raw_socketNr#  rT  r   r	  )r`   ra   rb   ru   rS  r  r4  r  rf   rf   rf   rg   rU    s    


rU  c                   @  sB   e Zd ZdddZedd	d
ZdddZdddZdddZdS )	UDPSocketr  asyncio.DatagramTransportr  r  c                 C  r  r  r  r  rf   rf   rg   ru     
   


zUDPSocket.__init__rv   r  c                 C  r  r  r  ry   rf   rf   rg   r    r  zUDPSocket._raw_socketr   c                   $   | j  sd| _| j   d S d S r)  r  r  r  r   ry   rf   rf   rg   r    
   
zUDPSocket.aclosetuple[bytes, IPSockAddrType]c              	     s   | j ? t I d H  | jjs$| j s$| jj  | jj	 I d H  z| jj
 W W  d    S  tyB   | jr?td td w 1 sFw   Y  d S rw   r  rm  r  r  r  r  r  r  r  r   r  r  r  r;   r9   ry   rf   rf   rg   r    s   
zUDPSocket.receiverz  rJ   c                   sr   | j + t I d H  | jj I d H  | jrt| j	 r!t
| jj|  W d    d S 1 s2w   Y  d S rw   r  rm  r  r  r  r   r  r;   r  r  r9   sendtor  rf   rf   rg   r       
"zUDPSocket.sendNr  r[  r  r  r	  r   )rv   r`  )rz  rJ   rv   r   	r`   ra   rb   ru   r4  r  r  r  r  rf   rf   rf   rg   rZ    s    
	

rZ  c                   @  sB   e Zd ZdddZedd	d
ZdddZdddZdddZdS )ConnectedUDPSocketr  r[  r  r  c                 C  r  r  r  r  rf   rf   rg   ru     r\  zConnectedUDPSocket.__init__rv   r  c                 C  r  r  r  ry   rf   rf   rg   r    r  zConnectedUDPSocket._raw_socketr   c                   r]  r)  r^  ry   rf   rf   rg   r    r_  zConnectedUDPSocket.acloser  c              	     s   | j D t I d H  | jjs$| j s$| jj  | jj	 I d H  z| jj
 }W n ty<   | jr9td td w |d W  d    S 1 sKw   Y  d S r  ra  )rt   packetrf   rf   rg   r    s   $zConnectedUDPSocket.receiverz  c                   sr   | j + t I d H  | jj I d H  | jrt| j	 r!t
| j| W d    d S 1 s2w   Y  d S rw   rb  r  rf   rf   rg   r    rd  zConnectedUDPSocket.sendNre  r	  r   rv   r  r  rf  rf   rf   rf   rg   rg    s    
	

rg  c                   @      e Zd Zd
ddZdddZd	S )UNIXDatagramSocketrv   rK   c                      t  }t I d H  | j: 	 z| jd}W n% ty)   | |I d H  Y n ty= } z	| j	r6t
d t|d }~ww |W  d    S q1 sKw   Y  d S NTr  )r   rm  r  r  r  recvfromr'  r  r  r!  r;   r9   rt   r   r  r  rf   rf   rg   r    &   zUNIXDatagramSocket.receiverz  r   c                   s   t  }t I d H  | j: 	 z| jj|  W n% ty)   | |I d H  Y n ty= } z	| j	r6t
d t|d }~ww 	 W d    d S q1 sKw   Y  d S rw   )r   rm  r  r  r  rc  r'  r  r  r!  r;   r9   rt   rz  r   r  rf   rf   rg   r  .  rp  zUNIXDatagramSocket.sendN)rv   rK   )rz  rK   rv   r   r`   ra   rb   r  r  rf   rf   rf   rg   rk        
rk  c                   @  rj  )ConnectedUNIXDatagramSocketrv   r  c                   rl  rm  )r   rm  r  r  r  r&  r'  r  r  r!  r;   r9   ro  rf   rf   rg   r  A  rp  z#ConnectedUNIXDatagramSocket.receiverz  r   c                   s   t  }t I d H  | j: 	 z| j| W n% ty)   | |I d H  Y n ty= } z	| j	r6t
d t|d }~ww 	 W d    d S q1 sKw   Y  d S rw   )r   rm  r  r  r  r  r'  r  r  r!  r;   r9   rq  rf   rf   rg   r  R  rp  z ConnectedUNIXDatagramSocket.sendNri  r  rr  rf   rf   rf   rg   rt  @  rs  rt  read_eventsz RunVar[dict[Any, asyncio.Event]]_read_eventswrite_events_write_eventsc                   @  sH   e Zd ZdddZdddZdddZdd
dZdddZdddZdS )rC   rv   c                 C  r   rw   r   r  rf   rf   rg   r   n  r  zEvent.__new__r   c                 C  r  rw   )r   rC   _eventry   rf   rf   rg   ru   q  r  zEvent.__init__c                 C  r  rw   )ry  r   ry   rf   rf   rg   r   t  r  z	Event.setr   c                 C  
   | j  S rw   )ry  r  ry   rf   rf   rg   r  w  r  zEvent.is_setc                   s0   |   rt I d H  d S | j I d H  d S rw   )r  rm  r  ry  r   ry   rf   rf   rg   r   z  s   z
Event.waitr4   c                 C  s   t t| jjS rw   )r4   r   ry  _waitersry   rf   rf   rg   
statistics  r  zEvent.statisticsN)rv   rC   r   r1  )rv   r4   )	r`   ra   rb   r   ru   r   r  r   r|  rf   rf   rf   rg   rC   m  s    




rC   c                   @  s   e Zd ZU dZded< d0ddZd1dd	Zd2ddZd3ddZe	d4ddZ
e
jd5ddZ
e	d6ddZe	d4ddZd2ddZd7d"d#Zd2d$d%Zd7d&d'Zd2d(d)Zd7d*d+Zd8d-d.Zd/S )9rA   r   r   _total_tokenstotal_tokensrv   c                 C  r   rw   r   r   r~  rf   rf   rg   r     r  zCapacityLimiter.__new__c                 C  s   t  | _t | _|| _d S rw   )r   
_borrowersr   _wait_queuer~  )rt   r~  rf   rf   rg   ru     s   
zCapacityLimiter.__init__r   c                   s   |   I d H  d S rw   )acquirery   rf   rf   rg   rJ       zCapacityLimiter.__aenter__r{   r  r}   r  r   r  c                   s   |    d S rw   )releaser   rf   rf   rg   rN    s   zCapacityLimiter.__aexit__c                 C  r*  rw   )r}  ry   rf   rf   rg   r~    r+  zCapacityLimiter.total_tokensr,  c                 C  s   t |tst|std|dk rtdt|| j d}|| _| jr>|rB| jj	ddd }|
  |d8 }| jr@|s&d S d S d S d S )Nz'total_tokens must be an int or math.infr   ztotal_tokens must be >= 1r   Flast)r  rA  r  isinfr\  r   maxr}  r  popitemr   )rt   r,  waiters_to_notifyeventrf   rf   rg   r~    s   
rA  c                 C  s
   t | jS rw   )r   r  ry   rf   rf   rg   borrowed_tokens     
zCapacityLimiter.borrowed_tokensc                 C  s   | j t| j S rw   )r}  r   r  ry   rf   rf   rg   available_tokens     z CapacityLimiter.available_tokensc                 C     |  t  d S rw   )acquire_on_behalf_of_nowaitr   ry   rf   rf   rg   acquire_nowait  r  zCapacityLimiter.acquire_nowaitborrowerr   c                 C  s<   || j v r	td| jst| j | jkrt| j | d S )NzEthis borrower is already holding one of this CapacityLimiter's tokens)r  r   r  r   r}  r=   r  )rt   r  rf   rf   rg   r    s   
z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   s   |  t I d H S rw   )acquire_on_behalf_ofr   ry   rf   rf   rg   r    r  zCapacityLimiter.acquirec                   s   t  I d H  z| | W n2 tyA   t }|| j|< z	| I d H  W n ty7   | j	|d   w | j
| Y d S w z
t  I d H  W d S  tyX   |    w rw   )rm  checkpoint_if_cancelledr  r=   r   rC   r  r   r~   popr  r  cancel_shielded_checkpointr  rt   r  r  rf   rf   rg   r    s*   
z$CapacityLimiter.acquire_on_behalf_ofc                 C  r  rw   )release_on_behalf_ofr   ry   rf   rf   rg   r    r  zCapacityLimiter.releasec                 C  sf   z| j | W n ty   tdd w | jr/t| j | jk r1| jjddd }|  d S d S d S )Nz@this borrower isn't holding any of this CapacityLimiter's tokensFr  r   )	r  r  r  r   r  r   r}  r  r   r  rf   rf   rg   r    s   z$CapacityLimiter.release_on_behalf_ofr3   c                 C  s   t | j| jt| jt| jS rw   )r3   r  r~  tupler  r   r  ry   rf   rf   rg   r|    s   zCapacityLimiter.statisticsN)r~  r   rv   rA   )r~  r   r   r{   r  r}   r  r   r  rv   r   r2  r3  r  )r  r   rv   r   )rv   r3   )r`   ra   rb   r}  r  r   ru   rJ  rN  r4  r~  r5  r  r  r  r  r  r  r  r  r|  rf   rf   rf   rg   rA     s*   
 









rA   _default_thread_limiterzRunVar[CapacityLimiter]c                   @  sH   e Zd ZdddZdd	d
ZdddZdddZdddZdddZdS ) _SignalReceiversignalstuple[Signals, ...]c                 C  s,   || _ t | _t | _t | _t | _	d S rw   )
_signalsr   rp   r   _signal_queuer   r   rB  r   _handled_signals)rt   r  rf   rf   rg   ru     s
   
z_SignalReceiver.__init__r   r   rv   r   c                 C  s*   | j | | j s| jd  d S d S rw   )r  rK  rB  r   r   )rt   r   rf   rf   rg   _deliver  s   
z_SignalReceiver._deliverc                 C  s2   t | jD ]}| j|| j| | j| q| S rw   )r   r  rp   add_signal_handlerr  r  r  )rt   sigrf   rf   rg   rz     s   z_SignalReceiver.__enter__r{   r  r}   r  r   r  rk   c                 C  s   | j D ]}| j| qd S rw   )r  rp   remove_signal_handler)rt   r{   r}   r   r  rf   rf   rg   r     s   
z_SignalReceiver.__exit__c                 C  s   | S rw   rf   ry   rf   rf   rg   	__aiter__  s   z_SignalReceiver.__aiter__c                   s6   t  I d H  | jst | _| jI d H  | j S rw   )rm  r  r  r   r   rB  r  ry   rf   rf   rg   	__anext__  s   

z_SignalReceiver.__anext__N)r  r  )r   r   rv   r   )rv   r  r0  )rv   r   )	r`   ra   rb   ru   r  rz   r   r  r  rf   rf   rf   rg   r    s    





r  c                      s(   e Zd Zd	 fddZd
ddZ  ZS )AsyncIOTaskInfor   r   c                   sL   t |}|d u rd }n|j}t t||| |  t	|| _
d S rw   )r   r   r6  rk  ru   r  get_namer   weakrefrefrT  )rt   r   r  r6  rq  rf   rg   ru   .  s   
zAsyncIOTaskInfo.__init__rv   r   c                 C  sn   |    }sdS tjdkr| rdS nt|jtjr"|j r"dS t	
| }r5|j }r5|jp4| S dS )NFrR   T)rT  r  r  r	  r  r!  r   r   r   r   r   r   r"  r(  )rt   r   r  r   rf   rf   rg   has_pending_cancellation8  s   

z(AsyncIOTaskInfo.has_pending_cancellation)r   r   r1  )r`   ra   rb   ru   r  r  rf   rf   rq  rg   r  -  s    
r  c                   @  s   e Zd ZU ded< ddddd>ddZd?ddZd@ddZdAddZdBd!d"ZdCd#d$Z	dDd'd(Z
dEd0d1ZdFd5d6ZdGd8d9ZdHd<d=ZdS )I
TestRunnerzBMemoryObjectSendStream[tuple[Awaitable[Any], asyncio.Future[Any]]]_send_streamNF)ri   
use_uvlooprj   ri   rk   r  r   rj   rl   rv   r   c                C  s8   |r|d u rdd l }|j}t||d| _g | _d | _d S )Nr   rh   )uvloopr   rT   _runnerrI  _runner_task)rt   ri   r  rj   r  rf   rf   rg   ru   P  s   
zTestRunner.__init__c                 C  s   | j   |  | j | S rw   )r  rz   r   set_exception_handler_exception_handlerry   rf   rf   rg   rz   `  s   
zTestRunner.__enter__r{   r  r}   r  r   r  c                 C  s   | j ||| d S rw   )r  r   r   rf   rf   rg   r   e  s   zTestRunner.__exit__r   c                 C  rz  rw   )r  r   ry   rf   rf   rg   r   m  r  zTestRunner.get_loopr   r  r   r  c                 C  s2   t |dtr| j|d  d S || d S )Nr   )r  r   r   rI  rK  default_exception_handler)rt   r   r   rf   rf   rg   r  p  s   zTestRunner._exception_handlerc                 C  s>   | j r| j g }| _ t|dkr|d |rtd|d S d S )Nr   r   z6Multiple exceptions occurred in asynchronous callbacks)rI  r   r[   )rt   rY   rf   rf   rg   _raise_async_exceptionsx  s   z"TestRunner._raise_async_exceptionsreceive_streamOMemoryObjectReceiveStream[tuple[Awaitable[T_Retval], asyncio.Future[T_Retval]]]c                   s   |\ | j @ |2 z43 d H W \}}z|I d H }W n ty4 } z| s*|| W Y d }~q
d }~ww | s>|| q
6 W d    n1 sJw   Y  W d    d S W d    d S 1 sbw   Y  d S rw   )r  r~   r   r   r   )rt   r  r   r   retvalr  rf   rf   rg   _run_tests_and_fixtures  s   

Pz"TestRunner._run_tests_and_fixturesr    Callable[P, Awaitable[T_Retval]]r   P.argsr^  P.kwargsr   c                   sr   | j stttt tjf  d\| _}|  	| 
|| _ ||i |}|   }| j||f |I d H S rK  )r  r?   r.   r&   r$   r   r   r  r   r   r  r   send_nowait)rt   r   r   r^  r  r   r   rf   rf   rg   _call_in_runner_task  s   

zTestRunner._call_in_runner_taskfixture_func,Callable[..., AsyncGenerator[T_Retval, Any]]Iterable[T_Retval]c                 c  s    |di |}|   | |jd }|   |V  z|   | |jd  W n ty7   |   Y d S w |   |  td)Nz$Async generator fixture did not stoprf   )r   r   r  asendr  StopAsyncIterationr  r   )rt   r  r^  asyncgenfixturevaluerf   rf   rg   run_asyncgen_fixture  s    zTestRunner.run_asyncgen_fixture,Callable[..., Coroutine[Any, Any, T_Retval]]c                 C  s(   |   | j|fi |}|   |S rw   )r   r   r  r  )rt   r  r^  r  rf   rf   rg   run_fixture  s
   zTestRunner.run_fixture	test_func'Callable[..., Coroutine[Any, Any, Any]]c              
   C  s^   z|   | j|fi | W n ty( } z| j| W Y d }~nd }~ww |   d S rw   )r   r   r  r   rI  rK  r  )rt   r  r^  r  rf   rf   rg   run_test  s   zTestRunner.run_test)ri   rk   r  r   rj   rl   rv   r   )rv   r  r  r   )r   r  r   r  rv   r   r   )r  r  rv   r   )r   r  r   r  r^  r  rv   r   )r  r  r^  r  rv   r  )r  r  r^  r  rv   r   )r  r  r^  r  rv   r   )r`   ra   rb   r  ru   rz   r   r   r  r  r  r  r  r  r  rf   rf   rf   rg   r  M  s    
 








r  c                   @  s2  e Zd Zedd
dZedddZedddZedddZedddZedddZ	edddZ
edddZeejdd dd%d&Zedd'd(Zedd*d+Zedd-d.Zedd1d2Ze		3ddd8d9Zedd:d;Zedd=d>Zedd?d@ZeddBdCZed3d3ddDddRdSZeddVdWZe	3ddd_d`ZeddddeZeddidjZeddkdlZeddrdsZeddxdyZedzdzdzdzd{dddZ e	zddddZ!edddZ"edddZ#edddZ$edddZ%edddZ&edddZ'edddZ(edddZ)d3S )rm  r   1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r   rP  r^  r  optionsrv   r   c           
        s   t d fdd}|dd }|dd }|d u r)|ddr)d	d l}|j}t||d
}	|	| W  d    S 1 s@w   Y  d S )Nrv   r   c                    sL   t tjt } | t td d t| < z  I d H W t| = S t| = w rw   )r0   r   r   r   set_namer   r  r   r   r   r   rf   rg   wrapper  s   z#AsyncIOBackend.run.<locals>.wrapperri   rj   r  Fr   rh   )rv   r   )r   r   r  r   rT   r   )
r   r   r   r^  r  r  ri   rj   r  runnerrf   r  rg   r     s   

$zAsyncIOBackend.runr   c                 C     t  S rw   )r   r  rf   rf   rg   current_token  r+  zAsyncIOBackend.current_tokenr   c                 C  s
   t   S rw   )r   r  r  rf   rf   rg   rn    r  zAsyncIOBackend.current_timer|   c                 C  s   t S rw   )r   r  rf   rf   rg   cancelled_exception_class  s   z(AsyncIOBackend.cancelled_exception_classr   c                   s   t dI d H  d S r  r	   r  rf   rf   rg   r        zAsyncIOBackend.checkpointc                   sn   t  }|d u r
d S zt| j}W n
 ty   Y d S w |r5|jr)tdI d H  n|jr.d S |j}|sd S d S r  )r   r   r   r  r"  r	   r   r   )r   r   r   rf   rf   rg   r    s    z&AsyncIOBackend.checkpoint_if_cancelledc                   s@   t dd tdI d H  W d    d S 1 sw   Y  d S )NTre  r   )rF   r	   r  rf   rf   rg   r    s   "z)AsyncIOBackend.cancel_shielded_checkpointdelayc                   s   t |I d H  d S rw   r  )r   r  rf   rf   rg   r	     r  zAsyncIOBackend.sleepFr   r   r   r   rF   c                C  s   t ||dS )Nr   rE   r   rf   rf   rg   create_cancel_scope   s   z"AsyncIOBackend.create_cancel_scopec                 C  sn   zt t  j}W n ty   tj Y S w tj}|r5t||j}|jr*tj }	 |S |j	r0	 |S |j
}|s|S rw   )r   r   r   r  r  r  minr   r   r   r   )r   r   r   rf   rf   rg   current_effective_deadline&  s,   

z)AsyncIOBackend.current_effective_deadlineabc.TaskGroupc                 C  r  rw   )rH  r  rf   rf   rg   create_task_group<  r+  z AsyncIOBackend.create_task_group	abc.Eventc                 C  r  rw   rB   r  rf   rf   rg   create_event@  r+  zAsyncIOBackend.create_eventr~  abc.CapacityLimiterc                 C     t |S rw   r@   r  rf   rf   rg   create_capacity_limiterD  r  z&AsyncIOBackend.create_capacity_limiterN&Callable[[Unpack[PosArgsT]], T_Retval]abandon_on_cancellimiterabc.CapacityLimiter | Nonec              	     s  |   I d H  z
t }t }W n ty+   t }t }t| t| Y nw |p1|  4 I d H  t| d}t	
 }t }	|s]t|	||}
|
  ||
 |	|
j n&| }
|  }|r||d j tjk rrn| }|j|j |  |sgt }|tjjd  |s|jd u r|}n|j}|
j|||||f |I d H W  d    W  d   I d H  S 1 sw   Y  W d   I d H  d S 1 I d H sw   Y  d S )Nre  r   )r  r  r   r  LookupErrorr   r   current_default_thread_limiterrF   r   r   r   rf  r   r  r]  r  r  rn  ro  r  r  r   remove_done_callbackr   r   sniffiocurrent_async_library_cvarr   rl  r}  )r   r   r   r  r  ri  rg  r'  r   r   workernowexpired_workerr   worker_scoperf   rf   rg   run_sync_in_worker_threadH  sX   

.z(AsyncIOBackend.run_sync_in_worker_threadc                 C  sH   t j}|d ur"|jrtdt|d|jrd S |j}|d usd S d S )Nr  r   )r8   rx  r"  r   r  r   r   )r   r'  rf   rf   rg   check_cancelled  s   zAsyncIOBackend.check_cancelledtokenc           	        sR   d fdd}t t|}t }|tjjd |tj}|t	j
||}| S )	Nr'  rF   rv   r   c              
     s   d}t tjt }td | t|< | j| z%z  I d H W W | j| S  t	y< } z	t
j	t|d d }~ww | j| w r)  )r0   r   r   r   r  r   r   r  r~  r   
concurrentfuturesr   )r'  __tracebackhide__r   r  r  rf   rg   task_wrapper  s   z:AsyncIOBackend.run_async_from_thread.<locals>.task_wrapperr   )r'  rF   rv   r   )r0   r   r   r   r  r  r   r8   rx  r   run_coroutine_threadsafers  )	r   r   r   r  r  r   r   r  r{  rf   r  rg   run_async_from_thread  s   

z$AsyncIOBackend.run_async_from_threadc                   s<   t d fdd}t tt|}||  S )Nrv   r   c               
     s^   zt jd    W d S  ty. }  z|  t| ts# W Y d } ~ d S d } ~ ww )Nr   )r  r  r   r   r~   r   r  r   )r  r   r{  r   rf   rg   r    s   

z4AsyncIOBackend.run_sync_from_thread.<locals>.wrapperr   )r   r   r0   r   r   rs  )r   r   r   r  r  r   rf   r  rg   r    s   	

z#AsyncIOBackend.run_sync_from_threadabc.BlockingPortalc                 C  r  rw   )r  r  rf   rf   rg   create_blocking_portal  r+  z%AsyncIOBackend.create_blocking_portal)cwdenvstart_new_sessioncommand#str | bytes | Sequence[str | bytes]shellr  int | IO[Any] | Noner  r  r  str | bytes | PathLike | Noner  Mapping[str, str] | Noner  r  c             	     s   |   I d H  |rtjtd|||||||dI d H }	ntj|||||||dI d H }	|	jr5t|	jnd }
|	jr?t|	jnd }|	j	rIt|	j	nd }t
|	|
||S )Nstr | bytes)r  r  r  r  r  r  )r  r   create_subprocess_shellr0   create_subprocess_execr  r  r  r  r  r  )r   r   r  r  r  r  r  r  r  r  stdin_streamstdout_streamstderr_streamrf   rf   rg   open_process  s2   

zAsyncIOBackend.open_processrg  r  c                 C  s&   t t|dd t tt| d S )Nz AnyIO process pool shutdown taskr[  )r   r  r   r]  r   r  )r   rg  rf   rf   rg   #setup_process_pool_exit_at_shutdown  s   z2AsyncIOBackend.setup_process_pool_exit_at_shutdownhostr   portrA  local_addressIPSockAddrType | NonerJ  c                   sB   t ttjtf t jt|||dI d H \}}|  t||S )N)
local_addr)	r0   r.   r   r  r  r   create_connectionr  r  )r   r  r  r  r  r  rf   rf   rg   connect_tcp  s   

zAsyncIOBackend.connect_tcppathr  abc.UNIXSocketStreamc                   s   |   I d H  t  ttjd 	 z
| W tS  tyE   t } 	|j
d  | fdd |I d H  Y n tyP      w q)NFTc                   
     S rw   r  rW  r   r  rf   rg   r   	     
 z-AsyncIOBackend.connect_unix.<locals>.<lambda>)r  r   r  AF_UNIXrY  connectr'  r   r   r  r   r]  r~   r   r$  )r   r  r{  rf   r  rg   connect_unix	  s&   

zAsyncIOBackend.connect_unixsockr  rI   c                 C  r  rw   )rD  r   r  rf   rf   rg   create_tcp_listener	  r  z"AsyncIOBackend.create_tcp_listenerc                 C  r  rw   )rU  r  rf   rf   rg   create_unix_listener	  r  z#AsyncIOBackend.create_unix_listenerfamilyr   remote_address
reuse_portUDPSocket | ConnectedUDPSocketc                   sN   t  jt||||dI d H \}}|jr|  |j|s"t||S t||S )N)r  remote_addrr"  r$  )r   create_datagram_endpointr  r   r   rZ  rg  )r   r"  r  r#  r$  r  r  rf   rf   rg   create_udp_socket 	  s   

z AsyncIOBackend.create_udp_socketr  remote_pathstr | bytes | None8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocketc                   s   |   I d H  t  |rI	 z
| W tS  ty<   t } |jd  | fdd |I d H  Y n t	yG   
   w qtS )NTc                   r  rw   r  rW  r  rf   rg   r   F	  r  z<AsyncIOBackend.create_unix_datagram_socket.<locals>.<lambda>)r  r   r  r'  r   r   r  r   r]  r~   r   rt  rk  )r   r  r)  r{  rf   r  rg   create_unix_datagram_socket8	  s&   
z*AsyncIOBackend.create_unix_datagram_socketr   r"  typeprotor9  bytes | str | Nonestr | int | Noneint | AddressFamilyr.  int | SocketKindr/  r9  ]list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]]c                  s    t  j||||||dI d H S )Nr-  )r   getaddrinfo)r   r  r  r"  r.  r/  r9  rf   rf   rg   r5  P	  s   zAsyncIOBackend.getaddrinfosockaddrrH   tuple[str, str]c                   s   t  ||I d H S rw   )r   getnameinfo)r   r6  r9  rf   rf   rg   r8  g	  s   zAsyncIOBackend.getnameinfoc              
     s   |   I d H  zt }W n ty   i }t| Y nw ||r)tdd t }t  }||< |	||j z|
 I d H  W ||d d urT|| d}nd}n||d d urg|| d}w d}w |sntd S )Nr  TF)r  rv  r   r  r   r:   r   r   rC   r  r   r  r  r;   )r   r  ru  r   r  readablerf   rf   rg   wait_socket_readablem	  s4   



z#AsyncIOBackend.wait_socket_readablec              
     s   |   I d H  zt }W n ty   i }t| Y nw ||r)tdd t }t  }||< |	|
 |j z| I d H  W ||d d urV|| d}nd}n||d d uri|| d}w d}w |sptd S )Nr  TF)r  rx  r   r  r   r:   r   r   rC   r  r"  r   r  r  r;   )r   r  rw  r   r  writablerf   rf   rg   wait_socket_writable	  s4   



z#AsyncIOBackend.wait_socket_writablerA   c                 C  s4   zt  W S  ty   td}t | | Y S w )N(   )r  r   r  rA   r   )r   r  rf   rf   rg   r  	  s   

z-AsyncIOBackend.current_default_thread_limiterr  r   &ContextManager[AsyncIterator[Signals]]c                 G  r  rw   )r  )r   r  rf   rf   rg   open_signal_receiver	  s   z#AsyncIOBackend.open_signal_receiverr5   c                 C  s
   t t S rw   )r  r   r  rf   rf   rg   get_current_task	  r  zAsyncIOBackend.get_current_taskSequence[TaskInfo]c                 C  s   dd t  D S )Nc                 S  s   g | ]
}|  st|qS rf   )r   r  )r   r   rf   rf   rg   r   	  s    z4AsyncIOBackend.get_running_tasks.<locals>.<listcomp>)r   r  rf   rf   rg   get_running_tasks	  r  z AsyncIOBackend.get_running_tasksc                   s\   |   I d H  t }	 t D ]}||u rq|j}|d u s!| r*tdI d H   nqd S q)NTg?)r  r   r   r!  r   r	   )r   	this_taskr   r&  rf   rf   rg   wait_all_tasks_blocked	  s   
z%AsyncIOBackend.wait_all_tasks_blockedr  c                 C  s   t di |S )Nrf   )r  )r   r  rf   rf   rg   create_test_runner	  s   z!AsyncIOBackend.create_test_runner)
r   r  r   rP  r^  r  r  r  rv   r   )rv   r   r2  )rv   r|   r   )r  r   rv   r   r/  )rv   r  )rv   r  )r~  r   rv   r  )FN)
r   r  r   rP  r  r   r  r  rv   r   )r   r  r   rP  r  r   rv   r   )r   r  r   rP  r  r   rv   r   )rv   r  )r   r  r  r   r  r  r  r  r  r  r  r  r  r  r  r   rv   r  rg  r  rv   r   rw   )r  r   r  rA  r  r  rv   rJ  )r  r  rv   r  )r  r  rv   rI   )
r"  r   r  r  r#  r  r$  r   rv   r%  )r  r  r)  r*  rv   r+  )r  r0  r  r1  r"  r2  r.  r3  r/  rA  r9  rA  rv   r4  )r   )r6  rH   r9  rA  rv   r7  )r  r  rv   r   )rv   rA   )r  r   rv   r>  )rv   r5   )rv   rA  )r  r  rv   r  )*r`   ra   rb   classmethodr   r  rn  r  r  r  r  r	   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r(  r,  r5  r8  r:  r<  r  r?  r@  rB  rD  rE  rf   rf   rf   rg   rm    s    :	'	rm  )r   r   rv   r   )rv   r   )r   r'   rv   r   )r   r   rv   r   )r   r~   rv   rG  )rg  r  rT  r   rv   r   rF  )
__future__r   r/  r   concurrent.futuresr  r  r  r  r   r  r   r   r   r   r   r   r	   asyncio.base_eventsr
   collectionsr   r   collections.abcr   r   r   r   
contextlibr   r   r   r   dataclassesr   	functoolsr   r   inspectr   r   r   r   ior   osr   rl  r   r   r   r   r    r!   typesr"   typingr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r  rZ  r3   r4   r5   r6   _core._eventloopr7   r8   _core._exceptionsr9   r:   r;   r<   r=   _core._socketsr>   _core._streamsr?   _core._synchronizationrA   BaseCapacityLimiterrC   	BaseEventrD   _core._tasksrF   BaseCancelScoperG   rH   rI   rJ   rK   lowlevelrL   streams.memoryrM   rN   r  rQ   typing_extensionsrT   rU   rV   enumrW   rX   rY   rZ   exceptiongroupr[   Enumr\   r   r   r   r   r   r   r   r  r   r   r   r   r  r   
TaskStatusr?  r  rH  r~   _Retval_Queue_Typerf  r  r  r  ByteReceiveStreamr  ByteSendStreamr  r  r  r  Protocolr  r  r  r
  r$  rD  rU  rZ  rg  rk  rt  rv  rx  r  r  r  r  rm  backend_classrf   rf   rf   rg   <module>   s    $	@ 





 y

 "K
9
&U.t<%02$$r/  
   |