
    f jER                       d dl m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 d
dlmZmZ d
dlmZ d
dlmZmZ  ed          Z ed           G d d                      Z ed           G d d                      Z ed           G d d                      Z ed           G d d                      Z ed           G d d                      Z G d d          Z G d de          Z  G d  d!          Z! G d" d#e!          Z" G d$ d%          Z# G d& d'          Z$ G d( d)e$          Z% G d* d+          Z& G d, d-e&          Z' G d. d/          Z(dS )0    )annotationsN)deque)Callable)	dataclass)TracebackType)TypeVar   )checkpoint_if_cancelled   )get_async_backend)BusyResourceErrorNoEventLoopError)CancelScope)TaskInfoget_current_taskTT)frozenc                      e Zd ZU dZded<   dS )EventStatisticszR
    :ivar int tasks_waiting: number of tasks waiting on :meth:`~.Event.wait`
    inttasks_waitingN__name__
__module____qualname____doc____annotations__     pC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\site-packages\anyio/_core/_synchronization.pyr   r      s*           r   r   c                  <    e Zd ZU dZded<   ded<   ded<   ded<   d	S )
CapacityLimiterStatisticsa  
    :ivar int borrowed_tokens: number of tokens currently borrowed by tasks
    :ivar float total_tokens: total number of available tokens
    :ivar tuple borrowers: tasks or other objects currently holding tokens borrowed from
        this limiter
    :ivar int tasks_waiting: number of tasks waiting on
        :meth:`~.CapacityLimiter.acquire` or
        :meth:`~.CapacityLimiter.acquire_on_behalf_of`
    r   borrowed_tokensfloattotal_tokensztuple[object, ...]	borrowersr   Nr   r   r   r    r"   r"      sN           !!!!r   r"   c                  2    e Zd ZU dZded<   ded<   ded<   dS )	LockStatisticsa  
    :ivar bool locked: flag indicating if this lock is locked or not
    :ivar ~anyio.TaskInfo owner: task currently holding the lock (or ``None`` if the
        lock is not held by any task)
    :ivar int tasks_waiting: number of tasks waiting on :meth:`~.Lock.acquire`
    boollockedTaskInfo | Noneownerr   r   Nr   r   r   r    r(   r(   .   s?           LLLr   r(   c                  (    e Zd ZU dZded<   ded<   dS )ConditionStatisticsz
    :ivar int tasks_waiting: number of tasks blocked on :meth:`~.Condition.wait`
    :ivar ~anyio.LockStatistics lock_statistics: statistics of the underlying
        :class:`~.Lock`
    r   r   r(   lock_statisticsNr   r   r   r    r.   r.   <   s6           ######r   r.   c                      e Zd ZU dZded<   dS )SemaphoreStatisticszZ
    :ivar int tasks_waiting: number of tasks waiting on :meth:`~.Semaphore.acquire`

    r   r   Nr   r   r   r    r1   r1   H   s*          
 r   r1   c                  6    e Zd ZddZddZddZddZdd	Zd
S )Eventreturnc                    	 t                                                      S # t          $ r t                      cY S w xY wN)r   create_eventr   EventAdapterclss    r    __new__zEvent.__new__S   sJ    	"$&&33555 	" 	" 	">>!!!	"s   " ==Nonec                    t           )z&Set the flag, notifying all listeners.NotImplementedErrorselfs    r    setz	Event.setY       !!r   r)   c                    t           )z5Return ``True`` if the flag is set, ``False`` if not.r>   r@   s    r    is_setzEvent.is_set]   rC   r   c                   K   t           )z
        Wait until the flag has been set.

        If the flag has already been set when this method is called, it returns
        immediately.

        r>   r@   s    r    waitz
Event.waita   s       "!r   r   c                    t           )z8Return statistics about the current state of this event.r>   r@   s    r    
statisticszEvent.statisticsk   rC   r   Nr4   r3   r4   r<   r4   r)   r4   r   )r   r   r   r;   rB   rE   rG   rI   r   r   r    r3   r3   R   sx        " " " "" " " "" " " "" " " "" " " " " "r   r3   c                  l    e Zd ZU dZded<   dZded<   ddZedd
            ZddZ	ddZ
ddZddZdS )r8   NzEvent | None_internal_eventFr)   _is_setr4   c                6    t                               |           S r6   objectr;   r9   s    r    r;   zEventAdapter.__new__t       ~~c"""r   r3   c                    | j         Et                                                      | _         | j        r| j                                          | j         S r6   )rO   r   r7   rP   rB   r@   s    r    _eventzEventAdapter._eventw   sO     	+#4#6#6#C#C#E#ED | +$((***##r   r<   c                X    | j         	d| _        d S | j                                         d S NT)rO   rP   rV   rB   r@   s    r    rB   zEventAdapter.set   s0     	DLLLKOOr   c                P    | j         | j        S | j                                         S r6   )rO   rP   rE   r@   s    r    rE   zEventAdapter.is_set   s*     	 <#**,,,r   c                H   K   | j                                          d {V  d S r6   )rV   rG   r@   s    r    rG   zEventAdapter.wait   s2      k           r   r   c                b    | j         t          d          S | j                                         S Nr   )r   )rO   r   rI   r@   s    r    rI   zEventAdapter.statistics   s3     	4"3333#..000r   )r4   r8   rJ   rK   rL   rM   )r   r   r   rO   r   rP   r;   propertyrV   rB   rE   rG   rI   r   r   r    r8   r8   p   s         $(O((((G# # # # $ $ $ X$   - - - -! ! ! !1 1 1 1 1 1r   r8   c                  T    e Zd Zdd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S )LockFfast_acquirera   r)   r4   c                   	 t                                          |          S # t          $ r t          |          cY S w xY wNr`   )r   create_lockr   LockAdapterr:   ra   s     r    r;   zLock.__new__   sV    	:$&&222MMM 	: 	: 	:L999999	:s   !$ A Ar<   c                >   K   |                                   d {V  d S r6   acquirer@   s    r    
__aenter__zLock.__aenter__   ,      llnnr   exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Nonec                2   K   |                                   d S r6   releaserA   rl   rn   rp   s       r    	__aexit__zLock.__aexit__          	r   c                   K   t           )Acquire the lock.r>   r@   s    r    ri   zLock.acquire         !!r   c                    t           )w
        Acquire the lock, without blocking.

        :raises ~anyio.WouldBlock: if the operation would block

        r>   r@   s    r    acquire_nowaitzLock.acquire_nowait   
     "!r   c                    t           )Release the lock.r>   r@   s    r    rt   zLock.release   rC   r   c                    t           z*Return True if the lock is currently held.r>   r@   s    r    r*   zLock.locked   rC   r   r(   c                    t           )zh
        Return statistics about the current state of this lock.

        .. versionadded:: 3.0
        r>   r@   s    r    rI   zLock.statistics   
     "!r   N)ra   r)   r4   r_   rK   rl   rm   rn   ro   rp   rq   r4   r<   rL   r4   r(   )r   r   r   r;   rj   rv   ri   r}   rt   r*   rI   r   r   r    r_   r_      s        -2 : : : : : :      " " " "" " " "" " " "" " " "" " " " " "r   r_   c                      e Zd ZU dZded<   dddd	Zdddd
Ze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S )#re   NLock | None_internal_lockFr`   ra   r)   r4   c               6    t                               |           S r6   rR   rf   s     r    r;   zLockAdapter.__new__   rT   r   c                   || _         d S r6   )_fast_acquire)rA   ra   s     r    __init__zLockAdapter.__init__   s    )r   r_   c                v    | j         ,t                                          | j                  | _         | j         S rc   )r   r   rd   r   r@   s    r    _lockzLockAdapter._lock   sB     	"3"5"5"A"A!/ #B # #D ""r   r<   c                H   K   | j                                          d {V  d S r6   r   ri   r@   s    r    rj   zLockAdapter.__aenter__   s2      j  """""""""""r   rl   rm   rn   ro   rp   rq   c                N   K   | j         | j                                          d S d S r6   )r   rt   ru   s       r    rv   zLockAdapter.__aexit__   s8        	*'')))))	* 	*r   c                H   K   | j                                          d{V  dS )ry   Nr   r@   s    r    ri   zLockAdapter.acquire   s2      j  """""""""""r   c                8    | j                                          dS )r|   N)r   r}   r@   s    r    r}   zLockAdapter.acquire_nowait   s     	
!!#####r   c                8    | j                                          dS )r   Nr   rt   r@   s    r    rt   zLockAdapter.release       
r   c                4    | j                                         S r   r   r*   r@   s    r    r*   zLockAdapter.locked       z  """r   r(   c                d    | j         t          ddd          S | j                                         S )zi
        Return statistics about the current state of this lock.

        .. versionadded:: 3.0

        NFr   )r   r(   rI   r@   s    r    rI   zLockAdapter.statistics   s6      	2!%q111"--///r   )ra   r)   r4   re   )ra   r)   )r4   r_   rK   r   rL   r   )r   r   r   r   r   r;   r   r]   r   rj   rv   ri   r}   rt   r*   rI   r   r   r    re   re      s        "&N&&&&-2 # # # # # # 05 * * * * * * # # # X## # # #* * * *# # # #$ $ $ $   # # # #
0 
0 
0 
0 
0 
0r   re   c                      e Zd ZU dZded<   d#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Zd%dZd%dZd*d Zd+d"ZdS ),	ConditionNr+   _owner_tasklockr   c                V    |pt                      | _        t                      | _        d S r6   )r_   r   r   _waiters)rA   r   s     r    r   zCondition.__init__	  s     ^TVV
&+ggr   r4   r<   c                >   K   |                                   d {V  d S r6   rh   r@   s    r    rj   zCondition.__aenter__  rk   r   rl   rm   rn   ro   rp   rq   c                2   K   |                                   d S r6   rs   ru   s       r    rv   zCondition.__aexit__  rw   r   c                R    | j         t                      k    rt          d          d S )Nz3The current task is not holding the underlying lock)r   r   RuntimeErrorr@   s    r    _check_acquiredzCondition._check_acquired  s5    /111 	VTUUU	V 	Vr   c                n   K   | j                                          d{V  t                      | _        dS )zAcquire the underlying lock.N)r   ri   r   r   r@   s    r    ri   zCondition.acquire  s@      j  """""""""+--r   c                ^    | j                                          t                      | _        dS )
        Acquire the underlying lock, without blocking.

        :raises ~anyio.WouldBlock: if the operation would block

        N)r   r}   r   r   r@   s    r    r}   zCondition.acquire_nowait!  s,     	
!!###+--r   c                8    | j                                          dS )zRelease the underlying lock.Nr   r@   s    r    rt   zCondition.release+  r   r   r)   c                4    | j                                         S )zReturn True if the lock is set.r   r@   s    r    r*   zCondition.locked/  r   r   r   nr   c                    |                                   t          |          D ]C}	 | j                                        }n# t          $ r Y  dS w xY w|                                 DdS )zNotify exactly n listeners.N)r   ranger   popleft
IndexErrorrB   )rA   r   _events       r    notifyzCondition.notify3  s    q 	 	A--//    IIKKKK	 	s   A
AAc                    |                                   | j        D ]}|                                 | j                                         dS )zNotify all the listeners.N)r   r   rB   clearrA   r   s     r    
notify_allzCondition.notify_all>  sN    ] 	 	EIIKKKKr   c                   K   t                       d{V  |                                  t                      }| j                            |           |                                  	 |                                 d{V  np# t          $ rc |                                s| j        	                    |           n2| j        r+| j        
                                                                  w xY w	 t          d          5  |                                  d{V  ddd           dS # 1 swxY w Y   dS # t          d          5  |                                  d{V  ddd           w # 1 swxY w Y   w xY w)zWait for a notification.NT)shield)r
   r   r3   r   appendrt   rG   BaseExceptionrE   remover   rB   r   ri   r   s     r    rG   zCondition.waitF  s'     %'''''''''U###	%**,, 	 	 	<<>> .$$U++++ . %%''++---	  D))) % %llnn$$$$$$$% % % % % % % % % % % % % % % % % %D))) % %llnn$$$$$$$% % % % % % % % % % % % % % % %sU   (B D9 A-C00D9 D,,D03D09E=
E1%E=1E55E=8E59E=	predicateCallable[[], T]r   c                n   K    |            x}s&|                                   d{V   |            x}&|S )z
        Wait until a predicate becomes true.

        :param predicate: a callable that returns a truthy value when the condition is
            met
        :return: the result of the predicate

        .. versionadded:: 4.11.0

        N)rG   )rA   r   results      r    wait_forzCondition.wait_for\  sW       'Y[[(6 	))++ 'Y[[(6 	 r   r.   c                t    t          t          | j                  | j                                                  S )zm
        Return statistics about the current state of this condition.

        .. versionadded:: 3.0
        )r.   lenr   r   rI   r@   s    r    rI   zCondition.statisticsl  s,     #3t}#5#5tz7L7L7N7NOOOr   r6   )r   r   rK   r   rL   )r   )r   r   r4   r<   )r   r   r4   r   )r4   r.   )r   r   r   r   r   r   rj   rv   r   ri   r}   rt   r*   r   r   rG   r   rI   r   r   r    r   r     s?        #'K''''. . . . .      V V V V. . . .
. . . .   # # # #	 	 	 	 	   % % % %,    P P P P P Pr   r   c                      e Zd ZdddddZdddddZddZd dZd!dZd!dZd!dZ	e
d"d            Ze
d#d            Zd$dZdS )%	SemaphoreNF	max_valuera   initial_valuer   r   
int | Nonera   r)   r4   c                   	 t                                          |||          S # t          $ r t          ||          cY S w xY w)Nr   r   )r   create_semaphorer   SemaphoreAdapterr:   r   r   ra   s       r    r;   zSemaphore.__new__v  sl    	H$&&77 8      	H 	H 	H#MYGGGGGG	Hs   #& AAc                   t          |t                    st          d          |dk     rt          d          |9t          |t                    st          d          ||k     rt          d          || _        d S )Nz initial_value must be an integerr   zinitial_value must be >= 0z$max_value must be an integer or Nonez7max_value must be equal to or higher than initial_value)
isinstancer   	TypeError
ValueErrorr   )rA   r   r   ra   s       r    r   zSemaphore.__init__  s     --- 	@>???1 	;9::: 	i-- H FGGG=(  M   *r   c                >   K   |                                   d {V  | S r6   rh   r@   s    r    rj   zSemaphore.__aenter__  s+      llnnr   rl   rm   rn   ro   rp   rq   r<   c                2   K   |                                   d S r6   rs   ru   s       r    rv   zSemaphore.__aexit__  rw   r   c                   K   t           )z5Decrement the semaphore value, blocking if necessary.r>   r@   s    r    ri   zSemaphore.acquire  rz   r   c                    t           )r   r>   r@   s    r    r}   zSemaphore.acquire_nowait  r~   r   c                    t           )zIncrement the semaphore value.r>   r@   s    r    rt   zSemaphore.release  rC   r   c                    t           )z#The current value of the semaphore.r>   r@   s    r    valuezSemaphore.value  
     "!r   c                    t           )z#The maximum value of the semaphore.r>   r@   s    r    r   zSemaphore.max_value  r   r   r1   c                    t           )zm
        Return statistics about the current state of this semaphore.

        .. versionadded:: 3.0
        r>   r@   s    r    rI   zSemaphore.statistics  r   r   )r   r   r   r   ra   r)   r4   r   )r   r   r   r   ra   r)   r4   r   r   rK   r4   r   r4   r   r4   r1   )r   r   r   r;   r   rj   rv   ri   r}   rt   r]   r   r   rI   r   r   r    r   r   u  s       
 !%"H H H H H H$ !%"* * * * * **      " " " "" " " "" " " " " " " X" " " " X"" " " " " "r   r   c                       e Zd ZU dZded<   dddddZdddd fdZedd            ZddZ	ddZ
ddZedd            Zedd            ZddZ xZS ) r   NzSemaphore | None_internal_semaphoreFr   r   r   r   r   ra   r)   r4   c               6    t                               |           S r6   rR   r   s       r    r;   zSemaphoreAdapter.__new__  s     ~~c"""r   r<   c               l    t                                          |||           || _        || _        d S )Nr   )superr   _initial_value
_max_value)rA   r   r   ra   	__class__s       r    r   zSemaphoreAdapter.__init__  s7     	),WWW+#r   r   c                    | j         2t                                          | j        | j                  | _         | j         S )Nr   )r   r   r   r   r   r@   s    r    
_semaphorezSemaphoreAdapter._semaphore  sF    # 	'8':':'K'K#t (L ( (D$ ''r   c                H   K   | j                                          d {V  d S r6   )r   ri   r@   s    r    ri   zSemaphoreAdapter.acquire  s2      o%%'''''''''''r   c                8    | j                                          d S r6   )r   r}   r@   s    r    r}   zSemaphoreAdapter.acquire_nowait  s    &&(((((r   c                8    | j                                          d S r6   )r   rt   r@   s    r    rt   zSemaphoreAdapter.release  s    !!!!!r   c                6    | j         | j        S | j        j        S r6   )r   r   r   r   r@   s    r    r   zSemaphoreAdapter.value  s!    # 	'&&$$r   c                    | j         S r6   )r   r@   s    r    r   zSemaphoreAdapter.max_value  s
    r   r1   c                b    | j         t          d          S | j                                        S r\   )r   r1   r   rI   r@   s    r    rI   zSemaphoreAdapter.statistics  s2    # 	8&Q7777))+++r   )r   r   r   r   ra   r)   r4   r   )r   r   r   r   ra   r)   r4   r<   r   rK   r   r   r   )r   r   r   r   r   r;   r   r]   r   ri   r}   rt   r   r   rI   __classcell__)r   s   @r    r   r     s9        ,00000 !%"# # # # # # !%"	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ ( ( ( X(( ( ( () ) ) )" " " " % % % X%    X, , , , , , , ,r   r   c                      e Zd ZddZd dZd!dZed"d            Zej        d#d            Zed$d            Z	e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S )'CapacityLimiterr%   r$   r4   c                    	 t                                          |          S # t          $ r t          |          cY S w xY wr6   )r   create_capacity_limiterr   CapacityLimiterAdapterr:   r%   s     r    r;   zCapacityLimiter.__new__  sP    	8$&&>>|LLL 	8 	8 	8),77777	8s    # ??r<   c                   K   t           r6   r>   r@   s    r    rj   zCapacityLimiter.__aenter__  s      !!r   rl   rm   rn   ro   rp   rq   c                   K   t           r6   r>   ru   s       r    rv   zCapacityLimiter.__aexit__         "!r   c                    t           )a  
        The total number of tokens available for borrowing.

        This is a read-write property. If the total number of tokens is increased, the
        proportionate number of tasks waiting on this limiter will be granted their
        tokens.

        .. versionchanged:: 3.0
            The property is now writable.
        .. versionchanged:: 4.12
            The value can now be set to 0.

        r>   r@   s    r    r%   zCapacityLimiter.total_tokens  s
     "!r   r   c                    t           r6   r>   rA   r   s     r    r%   zCapacityLimiter.total_tokens'  rC   r   r   c                    t           )z7The number of tokens that have currently been borrowed.r>   r@   s    r    r#   zCapacityLimiter.borrowed_tokens+  r   r   c                    t           )z7The number of tokens currently available to be borrowedr>   r@   s    r    available_tokensz CapacityLimiter.available_tokens0  r   r   c                    t           )z
        Acquire a token for the current task without waiting for one to become
        available.

        :raises ~anyio.WouldBlock: if there are no tokens available for borrowing

        r>   r@   s    r    r}   zCapacityLimiter.acquire_nowait5  
     "!r   borrowerrS   c                    t           )z
        Acquire a token without waiting for one to become available.

        :param borrower: the entity borrowing a token
        :raises ~anyio.WouldBlock: if there are no tokens available for borrowing

        r>   rA   r  s     r    acquire_on_behalf_of_nowaitz+CapacityLimiter.acquire_on_behalf_of_nowait?  r  r   c                   K   t           )zr
        Acquire a token for the current task, waiting if necessary for one to become
        available.

        r>   r@   s    r    ri   zCapacityLimiter.acquireI  r   r   c                   K   t           )z
        Acquire a token, waiting if necessary for one to become available.

        :param borrower: the entity borrowing a token

        r>   r  s     r    acquire_on_behalf_ofz$CapacityLimiter.acquire_on_behalf_ofQ  s       "!r   c                    t           )z
        Release the token held by the current task.

        :raises RuntimeError: if the current task has not borrowed a token from this
            limiter.

        r>   r@   s    r    rt   zCapacityLimiter.releaseZ  r  r   c                    t           )z
        Release the token held by the given borrower.

        :raises RuntimeError: if the borrower has not borrowed a token from this
            limiter.

        r>   r  s     r    release_on_behalf_ofz$CapacityLimiter.release_on_behalf_ofd  r  r   r"   c                    t           )zl
        Return statistics about the current state of this limiter.

        .. versionadded:: 3.0

        r>   r@   s    r    rI   zCapacityLimiter.statisticsn  r~   r   N)r%   r$   r4   r   rK   r   r4   r$   r   r$   r4   r<   r   r  rS   r4   r<   r4   r"   )r   r   r   r;   rj   rv   r]   r%   setterr#   r   r}   r  ri   r	  rt   r  rI   r   r   r    r   r     s`       8 8 8 8" " " "" " " " " " " X"  " " " " " " " X" " " " X"" " " "" " " "" " " "" " " "" " " "" " " "" " " " " "r   r   c                      e Zd ZU dZded<   d$dZd%d	Zed&d            Zd'dZ	d(dZ
ed)d            Zej        d*d            Zed+d            Ze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S ).r   NzCapacityLimiter | None_internal_limiterr%   r$   r4   c                6    t                               |           S r6   rR   r   s     r    r;   zCapacityLimiterAdapter.__new__{  rT   r   r<   c                    || _         d S r6   )r%   )rA   r%   s     r    r   zCapacityLimiterAdapter.__init__~  s    (r   r   c                t    | j         +t                                          | j                  | _         | j         S r6   )r  r   r   _total_tokensr@   s    r    _limiterzCapacityLimiterAdapter._limiter  s<    ! 	%6%8%8%P%P"& &D" %%r   c                H   K   | j                                          d {V  d S r6   )r  rj   r@   s    r    rj   z!CapacityLimiterAdapter.__aenter__  s2      m&&(((((((((((r   rl   rm   rn   ro   rp   rq   c                J   K   | j                             |||           d {V S r6   )r  rv   ru   s       r    rv   z CapacityLimiterAdapter.__aexit__  s4       ],,XwGGGGGGGGGr   c                6    | j         | j        S | j         j        S r6   )r  r  r%   r@   s    r    r%   z#CapacityLimiterAdapter.total_tokens  s"    ! 	&%%%22r   r   c                    t          |t                    s|t          j        urt	          d          |dk     rt          d          | j        	|| _        d S || j        _	        d S )Nz'total_tokens must be an int or math.infr   ztotal_tokens must be >= 1)
r   r   mathinfr   r   r  r  r  r%   r   s     r    r%   z#CapacityLimiterAdapter.total_tokens  st    %%% 	:%tx*? 	:EFFFQY 	:8999! 	!&DF%*"""r   r   c                ,    | j         dS | j         j        S )Nr   )r  r#   r@   s    r    r#   z&CapacityLimiterAdapter.borrowed_tokens  s    ! 	1%55r   c                6    | j         | j        S | j         j        S r6   )r  r  r   r@   s    r    r   z'CapacityLimiterAdapter.available_tokens  s"    ! 	&%%%66r   c                8    | j                                          d S r6   )r  r}   r@   s    r    r}   z%CapacityLimiterAdapter.acquire_nowait  s    $$&&&&&r   r  rS   c                :    | j                             |           d S r6   )r  r  r  s     r    r  z2CapacityLimiterAdapter.acquire_on_behalf_of_nowait  s    11(;;;;;r   c                H   K   | j                                          d {V  d S r6   )r  ri   r@   s    r    ri   zCapacityLimiterAdapter.acquire  s2      m##%%%%%%%%%%%r   c                J   K   | j                             |           d {V  d S r6   )r  r	  r  s     r    r	  z+CapacityLimiterAdapter.acquire_on_behalf_of  s4      m00:::::::::::r   c                8    | j                                          d S r6   )r  rt   r@   s    r    rt   zCapacityLimiterAdapter.release  s    r   c                :    | j                             |           d S r6   )r  r  r  s     r    r  z+CapacityLimiterAdapter.release_on_behalf_of  s    **844444r   r"   c                r    | j         t          d| j        dd          S | j                                         S )Nr   r   )r#   r%   r&   r   )r  r"   r%   rI   r@   s    r    rI   z!CapacityLimiterAdapter.statistics  sJ    ! 	, !!.	    %00222r   )r%   r$   r4   r   )r%   r$   r4   r<   )r4   r   rK   r   r  r  r   r  r  )r   r   r   r  r   r;   r   r]   r  rj   rv   r%   r  r#   r   r}   r  ri   r	  rt   r  rI   r   r   r    r   r   x  s        044444# # # #) ) ) ) & & & X&) ) ) )H H H H 3 3 3 X3 
+ 
+ 
+ 
+ 6 6 6 X6 7 7 7 X7' ' ' '< < < <& & & &; ; ; ;       5 5 5 5	3 	3 	3 	3 	3 	3r   r   c                  0    e Zd ZdZdZdddZdd	ZddZdS )ResourceGuarda  
    A context manager for ensuring that a resource is only used by a single task at a
    time.

    Entering this context manager while the previous has not exited it yet will trigger
    :exc:`BusyResourceError`.

    :param action: the action to guard against (visible in the :exc:`BusyResourceError`
        when triggered, e.g. "Another task is already {action} this resource")

    .. versionadded:: 4.1
    action_guardedusingr,  strc                "    || _         d| _        d S NFr+  )rA   r,  s     r    r   zResourceGuard.__init__  s    !r   r4   r<   c                J    | j         rt          | j                  d| _         d S rX   )r-  r   r,  r@   s    r    	__enter__zResourceGuard.__enter__  s'    = 	1#DK000r   rl   rm   rn   ro   rp   rq   c                    d| _         d S r1  )r-  ru   s       r    __exit__zResourceGuard.__exit__  s     r   N)r.  )r,  r/  rK   r   )r   r   r   r   	__slots__r   r3  r5  r   r   r    r*  r*    sf          %I            r   r*  ))
__future__r   r  collectionsr   collections.abcr   dataclassesr   typesr   typingr   lowlevelr
   
_eventloopr   _exceptionsr   r   _tasksr   _testingr   r   r   r   r"   r(   r.   r1   r3   r8   r_   re   r   r   r   r   r   r*  r   r   r    <module>rB     s	   " " " " " "        $ $ $ $ $ $ ! ! ! ! ! !             . . . . . . ) ) ) ) ) ) < < < < < < < <       0 0 0 0 0 0 0 0GCLL $        $       " $
 
 
 
 
 
 
 
 $$ $ $ $ $ $ $ $ $       " " " " " " " "<#1 #1 #1 #1 #15 #1 #1 #1L-" -" -" -" -" -" -" -"`=0 =0 =0 =0 =0$ =0 =0 =0@lP lP lP lP lP lP lP lP^Q" Q" Q" Q" Q" Q" Q" Q"h8, 8, 8, 8, 8,y 8, 8, 8,vq" q" q" q" q" q" q" q"hZ3 Z3 Z3 Z3 Z3_ Z3 Z3 Z3z                   r   