
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    Wz8\ì  ã                   @   sþ   d dl Z d dlmZ d dlmZmZmZmZ zd dl mZ W n e	k
rZ   e
e dƒZY nX dZdZdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zddddœdd„Ze jdd„ ƒZdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd+ddddd(œd)d*„ZdS ),é    N)ÚOrderedDict)Ú
_CacheInfoÚ	_make_keyÚpartialÚwraps)Úensure_futureÚasyncz1.0.2)Ú
alru_cachec                 C   s0   z
|   ¡ W S  tk
r*   tj| d� Y S X d S )N©Úloop)Úcreate_futureÚAttributeErrorÚasyncioÚFuturer
   © r   ú:/opt/alt/python38/lib/python3.8/site-packages/async_lru.pyr      s    
r   c                 C   s   t | dƒr| j} q | S )NÚfunc)Úhasattrr   )Úfnr   r   r   Ú	unpartial   s    
r   c                 C   sD   |  ¡ r|  ¡  d S | ¡ }|d k	r2|  |¡ d S |  | ¡ ¡ d S ©N)Ú	cancelledÚcancelÚ	exceptionÚset_exceptionÚ
set_resultÚresult)ÚfutÚtaskÚexcr   r   r   Ú_done_callback   s    
r    c                 O   s*   t |||ƒ}|| jk}|r&| j |¡ |S r   )r   Ú_cacheÚpop)ÚwrappedÚtypedÚargsÚkwargsÚkeyÚexistsr   r   r   Ú_cache_invalidate*   s
    
r)   c                 C   s    d | _ | _tƒ | _tƒ | _d S )Nr   )ÚhitsÚmissesr   r!   ÚsetÚtasks)r#   r   r   r   Ú_cache_clear5   s    r.   c                 C   s`   | j stdƒ‚| j| j  koDt| jƒ  koDt| jƒ  koDdkn  }|sVtdƒ‚d| _ d S )Nzalru_cache is not closedr   z#alru_cache was not closed correctlyF)ÚclosedÚRuntimeErrorr*   r+   Úlenr-   r!   )r#   Z
was_closedr   r   r   Ú_open;   s    ÿþýüÿr2   FT)r   Úreturn_exceptionsr   c                C   sB   | j rtdƒ‚d| _ |r4| jD ]}| ¡ s| ¡  qt| ||d�S )Nzalru_cache is closedT©r3   r   )r/   r0   r-   Údoner   Ú_wait_closed)r#   r   r3   r   r   r   r   r   Ú_closeM   s    

ýr7   c                c   sV   |d krt  ¡ }t j| j||dœŽ}| tt| ƒ¡ |E d H }t jd|d�E d H  |S )Nr4   r   r
   )r   Úget_event_loopZgatherr-   Úadd_done_callbackr   Ú_close_waitedÚsleep)r#   r3   r   Zwait_closedÚretr   r   r   r6   _   s    ý
r6   c                 C   s   |   ¡  d S r   )Úcache_clear)r#   Ú_r   r   r   r:   t   s    r:   c                 C   s   t | j| j|t| jƒƒS r   )r   r*   r+   r1   r!   )r#   Úmaxsizer   r   r   Ú_cache_infox   s    ür@   c                 C   s*   z| j  |¡ W n tk
r$   Y nX d S r   )r!   Úmove_to_endÚKeyError©r#   r'   r   r   r   Ú__cache_touch�   s    rD   c                 C   s   |  j d7  _ t| |ƒ d S ©Né   )r*   rD   rC   r   r   r   Ú
_cache_hitˆ   s    rG   c                 C   s   |  j d7  _ t| |ƒ d S rE   )r+   rD   rC   r   r   r   Ú_cache_miss�   s    rH   c                C   sv   t |tƒr\| |A stdƒ‚| rRt|dd ƒ}|d krF|s>tdƒ‚|d }t||ƒ}qr|| }n|d krnt ¡ }n|}|S )Nz"choose self.loop or kwargs["loop"]Ú__self__zseems not unbound functionr   )Ú
isinstanceÚstrÚAssertionErrorÚgetattrr   r8   )Úclsr&   r   Úfn_argsÚ	fn_kwargsr   Ú_selfÚ_loopr   r   r   Ú	_get_loop’   s    


rS   é€   )rN   r&   Úcache_exceptionsr   c                   sN   ‡ ‡‡‡‡‡fdd„}| d kr"|S t | ƒs4t| dƒr<|| ƒS td | ¡ƒ‚d S )Nc              
      s²   t ˆ ƒ}t |¡s td ˆ ¡ƒ‚tˆ dƒr2ˆ  ¡ ‰ tˆ ƒtj‡‡‡ ‡‡‡‡‡fdd„ƒƒ‰t	ˆƒ |ˆ_
dˆ_ttˆˆƒˆ_tt	ˆƒˆ_ttˆˆƒˆ_ttˆƒˆ_ttˆƒˆ_ˆS )Nz&Coroutine function is required, got {}Ú_make_unbound_methodc                  ?   s:  ˆj rtd ˆ¡ƒ‚tˆˆˆj| |ˆd�}t| |ˆƒ}ˆj |¡}|d k	r | ¡ spt	ˆ|ƒ t
j||d�E d H S |j}|d ks‚ˆ r”t	ˆ|ƒ | ¡ S ˆj |¡ t|d�}ˆ| |Ž}t||d�}| tt|ƒ¡ ˆj |¡ | ˆjj¡ |ˆj|< ˆd k	�rtˆjƒˆk�rˆjjdd� tˆ|ƒ t
j||d�E d H S )Nzalru_cache is closed for {}r
   F)Úlast)r/   r0   ÚformatrS   Ú_originr   r!   Úgetr5   rG   r   ZshieldÚ
_exceptionr   r"   r   r   r9   r   r    r-   ÚaddÚremover1   ÚpopitemrH   )rO   rP   rR   r'   r   r   Úcoror   )rU   rN   r   r&   r   r?   r$   r#   r   r   r#   ½   sD    ÿú	





z,alru_cache.<locals>.wrapper.<locals>.wrappedF)r   r   Úiscoroutinefunctionr0   rX   r   rV   r   Ú	coroutiner.   rY   r/   r   r@   Ú
cache_infor=   r)   Z
invalidater7   Úcloser2   Úopen)r   rY   ©rU   rN   r&   r   r?   r$   )r   r#   r   Úwrapper²   s&    
ÿ
0zalru_cache.<locals>.wrapperrV   z{} decorating is not supported)Úcallabler   ÚNotImplementedErrorrX   )r   r?   r$   rN   r&   rU   r   rf   r   re   r   r	   ¨   s    
Hr	   )NrT   F)r   Úcollectionsr   Ú	functoolsr   r   r   r   r   ÚImportErrorrM   Ú__version__Ú__all__r   r   r    r)   r.   r2   r7   ra   r6   r:   r@   rD   rG   rH   rS   r	   r   r   r   r   Ú<module>   s@   
	   ýø