o
    ^iu/                     @   s  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	 d dl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ejdkrNd dl
mZ nd dlmZ ejdk r_d dlmZ dZd	Z ed
Z!edZ"eeee"f Z#ede#e" f Z$ee$e" ddf Z%eG dd deZ&eej'G dd dee" Z(eG dd dee" Z)eG dd dee"e!f Z*		d%dee+ de,dee- dee- dee%e" ge)e" f f
ddZ.e		d&ddd dee+ de,dee- dee- dee%e" ge)e" f f
d!d"Z/ede%e" de)e" fd#d"Z/		d&ddd deee+ e%e" f de,dee- dee- deee%e" ge)e" f e)e" f f
d$d"Z/dS )'    N)
_CacheInfo	_make_keypartialpartialmethod)AnyCallable	CoroutineGenericHashableListOptionalOrderedDictType	TypedDictTypeVarUnioncastfinaloverload)      )Selfr      )_is_coroutinez2.2.0)
alru_cache_T_R.zpartial[_Coro[_R]]zpartialmethod[_Coro[_R]]c                   @   s2   e Zd ZU eed< ee ed< eed< eed< dS )_CacheParameterstypedmaxsizetasksclosedN)__name__
__module____qualname__bool__annotations__r   int r)   r)   M/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/async_lru/__init__.pyr   /   s
   
 r   c                   @   s6   e Zd ZU ded< eej ed< eed< d	ddZdS )

_CacheItemasyncio.Task[_R]task
later_callwaitersreturnNc                 C   s"   | j d ur| j   d | _ d S d S N)r.   cancelselfr)   r)   r*   r2   >   s   


z_CacheItem.cancelr0   N)	r#   r$   r%   r'   r   asyncioHandler(   r2   r)   r)   r)   r*   r+   7   s
   
 r+   c                   @   sL  e Zd Zdee dee dedee dee ddfdd	Z	e
ded
 fddZdejddfddZdededefddZd3ddZdddeddfddZdefddZdefddZdeddfd d!Zdeddfd"d#Zded$d
ddfd%d&Zd'ee dedefd(d)Zd*ed+edefd,d-Zd.ed/ee e  de!e"d0f fd1d2Z#dS )4_LRUCacheWrapperfnr    r   ttljitterr0   Nc                 C   s  z|j | _ W n	 ty   Y nw z|j| _W n	 ty   Y nw z|j| _W n	 ty/   Y nw z|j| _W n	 ty?   Y nw z|j| _W n	 tyO   Y nw z	| j|j W n	 tyb   Y nw tj	dk rkt
| _
|| _|| _|| _|| _|| _t | _d| _d| _d| _d | _d S )Nr   Fr   )r$   AttributeErrorr#   r%   __doc__r'   __dict__updatesysversion_infor   __wrapped___LRUCacheWrapper__maxsize_LRUCacheWrapper__typed_LRUCacheWrapper__ttl_LRUCacheWrapper__jitterr   _LRUCacheWrapper__cache_LRUCacheWrapper__closed_LRUCacheWrapper__hits_LRUCacheWrapper__misses_LRUCacheWrapper__first_loop)r4   r9   r    r   r:   r;   r)   r)   r*   __init__F   sT   

z_LRUCacheWrapper.__init__r,   c                 C   s   t dd | j D S )Nc                 S   s   h | ]
}|j  s|j qS r)   )r-   done).0
cache_itemr)   r)   r*   	<setcomp>z   s    z+_LRUCacheWrapper.__tasks.<locals>.<setcomp>)listrG   valuesr3   r)   r)   r*   __tasksu   s
   z_LRUCacheWrapper.__tasksloopc                 C   s*   | j d u r
|| _ d S | j |urtdd S )Nzalru_cache is not safe to use across event loops: this cache instance was first used with a different event loop. Use separate cache instances per event loop.)rK   RuntimeError)r4   rT   r)   r)   r*   _check_loop   s   


z_LRUCacheWrapper._check_loopargskwargsc                O   s4   t ||| j}| j|d }|d u rdS |  dS )NFT)r   rD   rG   popr2   )r4   rW   rX   keyrO   r)   r)   r*   cache_invalidate   s   z!_LRUCacheWrapper.cache_invalidatec                 C   s:   d| _ d| _| j D ]
}|jr|j  q| j  d S Nr   )rI   rJ   rG   rR   r.   r2   clear)r4   cr)   r)   r*   cache_clear   s   
z_LRUCacheWrapper.cache_clearF)waitr`   c                   s`   t  }| | d| _| j}|sd S |s#|D ]
}| s"|  qt j|ddiI d H  d S )NTreturn_exceptions)r6   get_running_looprV   rH   _LRUCacheWrapper__tasksrM   r2   gather)r4   r`   rT   r!   r-   r)   r)   r*   cache_close   s   
z_LRUCacheWrapper.cache_closec                 C   s   t | j| j| jt| jS r1   )r   rI   rJ   rC   lenrG   r3   r)   r)   r*   
cache_info   s   z_LRUCacheWrapper.cache_infoc                 C   s   t | j| jt| j| jdS )N)r    r   r!   r"   )r   rC   rD   rf   rc   rH   r3   r)   r)   r*   cache_parameters   s   z!_LRUCacheWrapper.cache_parametersrZ   c                 C   s   |  j d7  _ | j| d S N   )rI   rG   move_to_endr4   rZ   r)   r)   r*   
_cache_hit   s   z_LRUCacheWrapper._cache_hitc                 C   s   |  j d7  _ d S ri   )rJ   rl   r)   r)   r*   _cache_miss   s   z_LRUCacheWrapper._cache_missr-   c                 C   s   |  s	|jd ur| j|d  d S | j|}| jd urC|d urE| j}| jd ur2|td| j7 }t	
 }||| jj|d |_d S d S d S r\   )	cancelled
_exceptionrG   rY   getrE   rF   randomuniformr6   rb   
call_laterr.   )r4   rZ   r-   rO   effective_ttlrT   r)   r)   r*   _task_done_callback   s   

z$_LRUCacheWrapper._task_done_callbackrO   c              	      s   |j }z3zt|I d H W W | jd8  _S  tjy7   |jdkr6| s6|  |  | j|d   w | jd8  _w ri   )	r-   r6   shieldr/   CancelledErrorrM   r2   rG   rY   )r4   rO   rZ   r-   r)   r)   r*   "_shield_and_handle_cancelled_error   s   
z3_LRUCacheWrapper._shield_and_handle_cancelled_errorfn_args	fn_kwargsc          
         s  | j rtd|  t }t||| j}| j|}| | |d urD| 	| |j
 s?| jd7  _| ||I d H S |j
 S | j|i |}||}|t| j| t|d d}|| j|< | jd urt| j| jkr| jjdd\}}	|	  | | | ||I d H S )Nzalru_cache is closed for rj   F)last)rH   rU   r6   rb   r   rD   rG   rq   rV   rm   r-   rM   r/   ry   resultrB   create_taskadd_done_callbackr   rv   r+   rC   rf   popitemr2   rn   )
r4   rz   r{   rT   rZ   rO   coror-   dropped_keydropped_cache_itemr)   r)   r*   __call__   s.   






z_LRUCacheWrapper.__call__instanceownerz&_LRUCacheWrapperInstanceMethod[_R, _T]c                 C   s   |d u r| S t | |S r1   )_LRUCacheWrapperInstanceMethod)r4   r   r   r)   r)   r*   __get__  s   
z_LRUCacheWrapper.__get__r5   )$r#   r$   r%   _CBr   r   r(   r&   floatrL   propertyr   rc   r6   AbstractEventLooprV   r
   r   r[   r_   re   r   rg   r   rh   rm   rn   rv   r+   r   ry   r   r   r   r   r   r)   r)   r)   r*   r8   D   sP    
/


	
"

r8   c                   @   s   e Zd Zdee deddfddZdedede	fd	d
Z
dddZdddde	de	ddfddZdefddZdefddZdededefddZdS )r   wrapperr   r0   Nc                 C   s   z|j | _ W n	 ty   Y nw z|j| _W n	 ty   Y nw z|j| _W n	 ty/   Y nw z|j| _W n	 ty?   Y nw z|j| _W n	 tyO   Y nw z	| j|j W n	 tyb   Y nw tj	dk rkt
| _
|j| _|| _|| _d S )Nr   )r$   r<   r#   r%   r=   r'   r>   r?   r@   rA   r   rB   (_LRUCacheWrapperInstanceMethod__instance'_LRUCacheWrapperInstanceMethod__wrapper)r4   r   r   r)   r)   r*   rL     sF   

z'_LRUCacheWrapperInstanceMethod.__init__rW   rX   c                O   s   | j j| jg|R i |S r1   )r   r[   r   )r4   rW   rX   r)   r)   r*   r[   <  s   z/_LRUCacheWrapperInstanceMethod.cache_invalidatec                 C   s   | j   d S r1   )r   r_   r3   r)   r)   r*   r_   ?  s   z*_LRUCacheWrapperInstanceMethod.cache_clearFT)r2   ra   r2   ra   c                   s   | j  I d H  d S r1   )r   re   )r4   r2   ra   r)   r)   r*   re   B  s   z*_LRUCacheWrapperInstanceMethod.cache_closec                 C   
   | j  S r1   )r   rg   r3   r)   r)   r*   rg   G     
z)_LRUCacheWrapperInstanceMethod.cache_infoc                 C   r   r1   )r   rh   r3   r)   r)   r*   rh   J  r   z/_LRUCacheWrapperInstanceMethod.cache_parametersrz   r{   c                   s"   | j | jg|R i |I d H S r1   )r   r   )r4   rz   r{   r)   r)   r*   r   M  s    z'_LRUCacheWrapperInstanceMethod.__call__r5   )r#   r$   r%   r8   r   r   rL   r
   r   r&   r[   r_   re   r   rg   r   rh   r   r)   r)   r)   r*   r     s*    
%

r   r    r   r:   r;   r0   c                    sX    d urd u rt d d ur dk rt ddtt dtt f fdd}|S )Nzjitter requires ttl to be setr   zjitter must be non-negativer9   r0   c                    s   | }t |ttfr|j}t |ttfs	t|std| t| dr(|  } t	t
tt |  }tjdkr?t|}|S )Nz$Coroutine function is required, got _make_unbound_method)r      )
isinstancer   r   funcinspectiscoroutinefunctionrU   hasattrr   r8   r   r   r   r@   rA   markcoroutinefunction)r9   originr   r;   r    r:   r   r)   r*   r   \  s   



z_make_wrapper.<locals>.wrapper)
ValueError_CBPr   r8   )r    r   r:   r;   r   r)   r   r*   _make_wrapperQ  s   $r      F)r:   r;   c                C      d S r1   r)   )r    r   r:   r;   r)   r)   r*   r   p  s   r   c                C   r   r1   r)   )r    r)   r)   r*   r   {  s   c                C   s`   | d u s	t | trt| |||S ttt | }t|s t|dr)tddd d |S t|d)Nr   r   Fz decorating is not supported)	r   r(   r   r   r   r   callabler   NotImplementedError)r    r   r:   r;   r9   r)   r)   r*   r     s   )NN)r   F)0r6   dataclassesr   rr   r@   	functoolsr   r   r   r   typingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   rA   r   typing_extensionsasyncio.coroutinesr   __version____all__r   r   _Coror   r   r   	dataclassr+   r8   r   r(   r&   r   r   r   r)   r)   r)   r*   <module>   s    D

 Q>

 