o
    í6Wj.  ã                   @  s  U d dl mZ dZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZ d d	lmZ d
dlmZ d
dlmZ d
dl m!Z!m"Z" edƒZ#edƒZ$edƒZ%e!dƒZ&de'd< G dd„ dƒZ(e(ƒ Z)de'd< G dd„ deƒZ*G dd„ deƒZ+G dd„ dee# ƒZ,eG dd„ dee%e#f ƒƒZ-G dd„ dƒZ.edJd$d%„ƒZ/edKd(d%„ƒZ/dLd+d%„Z/ed,d,d,d,d-œdMd4d5„ƒZ0edJd6d5„ƒZ0edKd7d5„ƒZ0	dNd8d9d9dd-œdOd;d5„Z0edPdAdB„ƒZ1edQdEdB„ƒZ1e)fdRdIdB„Z1dS )Sé    )Úannotations)ÚAsyncCacheInfoÚAsyncCacheParametersÚAsyncLRUCacheWrapperÚcacheÚ	lru_cacheÚreduceN)ÚOrderedDict)ÚAsyncIterableÚ	AwaitableÚCallableÚ	CoroutineÚHashableÚIterable)Úupdate_wrapper)Úiscoroutinefunction)	ÚAnyÚGenericÚ
NamedTupleÚ	ParamSpecÚ	TypedDictÚTypeVarÚcastÚfinalÚoverload)ÚWeakKeyDictionaryé   )Úcurrent_time)ÚLock)ÚRunVarÚ
checkpointÚTÚSÚPÚlru_cache_itemsz¡RunVar[WeakKeyDictionary[AsyncLRUCacheWrapper[Any, Any], OrderedDict[Hashable, tuple[_InitialMissingType, Lock, float | None] | tuple[Any, None, float | None]]]]c                   @  s   e Zd ZdS )Ú_InitialMissingTypeN)Ú__name__Ú
__module__Ú__qualname__© r)   r)   ú^/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/anyio/functools.pyr%   8   s    r%   Úinitial_missingc                   @  s6   e Zd ZU ded< ded< ded< ded< ded< dS )	r   ÚintÚhitsÚmissesú
int | NoneÚmaxsizeÚcurrsizeÚttlN©r&   r'   r(   Ú__annotations__r)   r)   r)   r*   r   ?   s   
 r   c                   @  s.   e Zd ZU ded< ded< ded< ded< dS )r   r/   r0   ÚboolÚtypedÚalways_checkpointr2   Nr3   r)   r)   r)   r*   r   G   s
   
 r   c                   @  s>   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S )Ú_LRUMethodWrapperÚwrapperúAsyncLRUCacheWrapper[..., T]ÚinstanceÚobjectc                 C  s   || _ || _d S ©N)Ú_LRUMethodWrapper__wrapperÚ_LRUMethodWrapper__instance)Úselfr9   r;   r)   r)   r*   Ú__init__O   s   
z_LRUMethodWrapper.__init__Úreturnr   c                 C  ó
   | j  ¡ S r=   )r>   Ú
cache_info©r@   r)   r)   r*   rD   S   ó   
z_LRUMethodWrapper.cache_infor   c                 C  rC   r=   )r>   Úcache_parametersrE   r)   r)   r*   rG   V   rF   z"_LRUMethodWrapper.cache_parametersÚNonec                 C  s   | j  ¡  d S r=   )r>   Úcache_clearrE   r)   r)   r*   rI   Y   s   z_LRUMethodWrapper.cache_clearÚargsr   Úkwargsr!   c                 Ï  sB   �| j d u r| j|i |¤ŽI d H S | j| j g|¢R i |¤ŽI d H S r=   )r?   r>   )r@   rJ   rK   r)   r)   r*   Ú__call__\   s   €
 z_LRUMethodWrapper.__call__N)r9   r:   r;   r<   ©rB   r   ©rB   r   ©rB   rH   )rJ   r   rK   r   rB   r!   )r&   r'   r(   rA   rD   rG   rI   rL   r)   r)   r)   r*   r8   N   s    



r8   c                   @  sL   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"d#„ZdS )+r   ÚfuncúCallable[P, Awaitable[T]]r0   r/   r6   r5   r7   r2   c                 C  sP   || _ d| _d| _|d urt|dƒnd | _d| _|| _|| _|| _t	| |ƒ d S ©Nr   )
Ú__wrapped__Ú_hitsÚ_missesÚmaxÚ_maxsizeÚ	_currsizeÚ_typedÚ_always_checkpointÚ_ttlr   )r@   rP   r0   r6   r7   r2   r)   r)   r*   rA   e   s   zAsyncLRUCacheWrapper.__init__rB   r   c                 C  s   t | j| j| j| j| jƒS r=   )r   rT   rU   rW   rX   r[   rE   r)   r)   r*   rD   w   s   ÿzAsyncLRUCacheWrapper.cache_infor   c                 C  s   | j | j| j| jdœS )N©r0   r6   r7   r2   ©rW   rY   rZ   r[   rE   r)   r)   r*   rG   |   s
   üz%AsyncLRUCacheWrapper.cache_parametersrH   c                 C  s4   t  d ¡ }r| | d ¡ d | _ | _| _d S d S rR   )r$   ÚgetÚpoprT   rU   rX   )r@   r   r)   r)   r*   rI   „   s   þz AsyncLRUCacheWrapper.cache_clearrJ   úP.argsrK   úP.kwargsr!   c           
   	   Ï  sÄ  �| j dkr| j|i |¤ŽI d H }|  jd7  _|S |}|r*|tft| ¡ dƒ 7 }| jrJ|tdd„ |D ƒƒ7 }|rJ|tftdd„ | ¡ D ƒƒ 7 }zt	 
¡ }W n tya   tƒ }t	 |¡ Y nw z||  }W n tyx   tƒ  }|| < Y nw z	|| \}}}	W n tyŸ   tt| j d�d }}}	|||	f||< Y nw |d u rã|	d urÉtƒ |	krÉ|  jd8  _tt| j d�d }}}	|||	f||< n|  jd7  _| |¡ | jrÞtƒ I d H  tt|ƒS |4 I d H šk || d  }tu �r8|  jd7  _| j d u�r| j| j k�r|jdd	� n|  jd7  _| j|i |¤ŽI d H }| jd u�r.tƒ | j nd }	|d |	f||< n|  jd7  _| |¡ tt|ƒ}W d   ƒI d H  |S 1 I d H �s[w   Y  |S )
Nr   r   r)   c                 s  ó   � | ]}t |ƒV  qd S r=   ©Útype)Ú.0Úargr)   r)   r*   Ú	<genexpr>—   ó   € z0AsyncLRUCacheWrapper.__call__.<locals>.<genexpr>c                 s  rb   r=   rc   )re   Úvalr)   r)   r*   rg   ™   rh   )Úfast_acquireF)Úlast)rW   rS   rU   r+   ÚsumÚitemsrY   ÚtupleÚvaluesr$   r^   ÚLookupErrorr   ÚsetÚKeyErrorr	   r   rZ   r   rX   rT   Úmove_to_endr    r   r!   Úpopitemr[   )
r@   rJ   rK   ÚvalueÚkeyr   Úcache_entryÚcached_valueÚlockÚ
expires_atr)   r)   r*   rL   ‰   s|   €
 þÿ
ýù	
ý

ÿ
îìzAsyncLRUCacheWrapper.__call__Nr;   r<   Úownerútype | Noneú_LRUMethodWrapper[T]c                 C  s   t | |ƒ}t|| jƒ |S r=   )r8   r   rS   )r@   r;   r{   r9   r)   r)   r*   Ú__get__Ú   s   
zAsyncLRUCacheWrapper.__get__)
rP   rQ   r0   r/   r6   r5   r7   r5   r2   r/   rM   rN   rO   )rJ   r`   rK   ra   rB   r!   r=   )r;   r<   r{   r|   rB   r}   )	r&   r'   r(   rA   rD   rG   rI   rL   r~   r)   r)   r)   r*   r   c   s    




Rÿr   c                   @  s<   e Zd Zddd„Zeddd„ƒZeddd„ƒZddd„ZdS )Ú_LRUCacheWrapperr0   r/   r6   r5   r7   r2   c                 C  s   || _ || _|| _|| _d S r=   r]   )r@   r0   r6   r7   r2   r)   r)   r*   rA   ã   s   
z_LRUCacheWrapper.__init__rP   ú#Callable[P, Coroutine[Any, Any, T]]rB   úAsyncLRUCacheWrapper[P, T]c                C  ó   d S r=   r)   ©r@   rP   r)   r)   r*   rL   ë   ó   z_LRUCacheWrapper.__call__úCallable[..., T]úfunctools._lru_cache_wrapper[T]c                C  r‚   r=   r)   rƒ   r)   r)   r*   rL   ð   r„   Úfú6Callable[P, Coroutine[Any, Any, T]] | Callable[..., T]ú<AsyncLRUCacheWrapper[P, T] | functools._lru_cache_wrapper[T]c                C  s6   t |ƒrt|| j| j| j| jƒS tj| j| jd�|ƒS )N)r0   r6   )r   r   rW   rY   rZ   r[   Ú	functoolsr   )r@   r‡   r)   r)   r*   rL   õ   s
   ÿN)r0   r/   r6   r5   r7   r5   r2   r/   ©rP   r€   rB   r�   ©rP   r…   rB   r†   )r‡   rˆ   rB   r‰   )r&   r'   r(   rA   r   rL   r)   r)   r)   r*   r   â   s    
r   rP   r€   rB   r�   c                C  r‚   r=   r)   ©rP   r)   r)   r*   r      r„   r   r…   r†   c                C  r‚   r=   r)   r�   r)   r)   r*   r     ó   ú:Callable[..., Any] | Callable[P, Coroutine[Any, Any, Any]]r   c                C  s   t dd�| ƒS )z’
    A convenient shortcut for :func:`lru_cache` with ``maxsize=None``.

    This is the asynchronous equivalent to :func:`functools.cache`.

    N)r0   )r   r�   r)   r)   r*   r   
  s   .r\   r0   r/   r6   r5   r7   r2   c                 C  r‚   r=   r)   r\   r)   r)   r*   r     s   r   c                C  r‚   r=   r)   r�   r)   r)   r*   r     r„   c                C  r‚   r=   r)   r�   r)   r)   r*   r   $  rŽ   é€   FúCCallable[..., Coroutine[Any, Any, Any]] | Callable[..., Any] | Nonec               C  s8   | du rt ||||ƒS t| ƒstdƒ‚t ||||ƒ| ƒS )aÞ  
    An asynchronous version of :func:`functools.lru_cache`.

    If a synchronous function is passed, the standard library
    :func:`functools.lru_cache` is applied instead.

    :param always_checkpoint: if ``True``, every call to the cached function will be
        guaranteed to yield control to the event loop at least once
    :param ttl: time in seconds after which to invalidate cache entries

    .. note:: Caches and locks are managed on a per-event loop basis.

    Nz#the first argument must be callable)r   ÚcallableÚ	TypeError)rP   r0   r6   r7   r2   r)   r)   r*   r   (  s
   ÚinitialÚfunctionúCallable[[T, S], Awaitable[T]]ÚiterableúIterable[S] | AsyncIterable[S]c                Ã  ó   �d S r=   r)   )r•   r—   r”   r)   r)   r*   r   G  s   €r   úCallable[[T, T], Awaitable[T]]úIterable[T] | AsyncIterable[T]c                Ã  r™   r=   r)   )r•   r—   r)   r)   r*   r   P  s   €úT | _InitialMissingTypeú?Callable[[T, T], Awaitable[T]] | Callable[[T, S], Awaitable[T]]ú?Iterable[T] | Iterable[S] | AsyncIterable[T] | AsyncIterable[S]c                Ã  s  �d}t |tƒrC| ¡ }|tu r)ztt| ¡ I dH ƒ}W n ty(   tdƒd‚w tt|ƒ}|2 z3 dH W }| ||ƒI dH }d}q06 n<t |t	ƒr{t
|ƒ}|tu rfz	ttt|ƒƒ}W n tye   tdƒd‚w tt|ƒ}|D ]}| ||ƒI dH }d}qmntdƒ‚|s‡tƒ I dH  |S )at  
    Asynchronous version of :func:`functools.reduce`.

    :param function: a coroutine function that takes two arguments: the accumulated
        value and the next element from the iterable
    :param iterable: an iterable or async iterable
    :param initial: the initial value (if missing, the first element of the iterable is
        used as the initial value)

    FNz0reduce() of empty sequence with no initial valueTz9reduce() argument 2 must be an iterable or async iterable)Ú
isinstancer
   Ú	__aiter__r+   r   r!   Ú	__anext__ÚStopAsyncIterationr“   r   ÚiterÚnextÚStopIterationr    )r•   r—   r”   Úfunction_calledÚasync_itru   ÚelementÚitr)   r)   r*   r   X  sP   €
ÿþÿ
þ
ÿþÿ
þr‹   rŒ   )rP   r�   rB   r   )
r0   r/   r6   r5   r7   r5   r2   r/   rB   r   r=   )rP   r‘   r0   r/   r6   r5   r7   r5   r2   r/   rB   r   )r”   r!   r•   r–   r—   r˜   rB   r!   )r•   rš   r—   r›   rB   r!   )r”   rœ   r•   r�   r—   rž   rB   r!   )2Ú
__future__r   Ú__all__rŠ   Úcollectionsr	   Úcollections.abcr
   r   r   r   r   r   r   Úinspectr   Útypingr   r   r   r   r   r   r   r   r   Úweakrefr   Ú_core._eventloopr   Ú_core._synchronizationr   Úlowlevelr   r    r!   r"   r#   r$   r4   r%   r+   r   r   r8   r   r   r   r   r   r)   r)   r)   r*   Ú<module>   sj    	 ,

÷~

û	ÿùü