o
    
۾i>                     @   s   d dl mZ d dlmZmZmZmZmZ d dlm	Z	 d dl
mZmZmZmZ d dlZededZedZed	ZG d
d dZe ZG dd deeef ZG dd deZG dd dejeef ZdS )    )UserDict)CallableHashableIteratorKeysViewMapping)MappingProxyType)
NamedTupleTypeVarcastoverloadN_K)bound_V_Tc                   @   s   e Zd ZdS )	_SentinelN)__name__
__module____qualname__ r   r   D/home/ubuntu/.local/lib/python3.10/site-packages/vllm/utils/cache.pyr      s    r   c                       sZ   e Zd Zdeeef deedf f fddZdee fddZde	e fd	d
Z
  ZS )_MappingOrderCacheViewdataordered_keysNc                    s   t  | || _d S N)super__init__r   )selfr   r   	__class__r   r   r      s   
z_MappingOrderCacheView.__init__returnc                 C   
   t | jS r   )iterr   r   r   r   r   __iter__      
z_MappingOrderCacheView.__iter__c                 C   r!   r   )r   r   r#   r   r   r   keys   r%   z_MappingOrderCacheView.keys)r   r   r   r   r   r   r   r   r$   r   r&   __classcell__r   r   r   r   r      s    &r   c                   @   s:   e Zd ZU eed< eed< edefddZd
ddZd	S )	CacheInfohitstotalr    c                 C      | j dkrdS | j| j  S Nr   )r*   r)   r#   r   r   r   	hit_ratio%      
zCacheInfo.hit_ratiootherc                 C   s   t | j|j | j|j dS )Nr)   r*   )r(   r)   r*   )r   r/   r   r   r   __sub__,   s   

zCacheInfo.__sub__N)r/   r(   )	r   r   r   int__annotations__propertyfloatr-   r1   r   r   r   r   r(   !   s   
 r(   c                       sB  e Zd Zd:dedeegef dB f fddZddded	ed
ef fddZ	ded
df fddZ
ed
eeef fddZed
eedf fddZed
efddZed
efddZddded
efddZded
dfddZeded
edB fddZed eeB ded
eeB fd!dZd:d eeB dB ded
eeB dB fd"dZeded
efd#d$Zeded eeB d
eeB fd%d$Zd:ded eeB dB d
eeB dB fd&d$Zded'ed
dfd(d)Zded
dfd*d+Zded
dfd,d-Zded'edB d
dfd.d/Zdd0d1ed
dfd2d3Zd;d4d5Zd<d1efd6d7Zd;d8d9Z  Z S )=LRUCacheNcapacity	getsizeofc                    s8   t  || tt  | _d| _d| _tddd| _d S )Nr   r0   )	r   r   setr   pinned_items_hits_totalr(   
_last_info)r   r7   r8   r   r   r   r   4   s
   zLRUCache.__init__Tupdate_infokeyr?   r    c                   s0   t  |}|r|  jd7  _|  jd7  _|S )N   )r   __getitem__r;   r<   )r   r@   r?   valuer   r   r   rB   =   s
   zLRUCache.__getitem__c                    sN   || v }| j |dd}t | || jv r| | |r%| || d S d S NFr>   )rB   r   __delitem__r:   _unpin
_on_remove)r   r@   run_on_removerC   r   r   r   rE   F   s   

zLRUCache.__delitem__c                 C   s   t | j| jS )z:Return the internal cache dictionary in order (read-only).)r   _Cache__dataorderr#   r   r   r   cacheP   s   zLRUCache.cachec                 C   r!   )z1Return the internal order dictionary (read-only).)r   _LRUCache__orderr#   r   r   r   rJ   X   s   
zLRUCache.orderc                 C   s   | j S r   )maxsizer#   r   r   r   r7   ]   s   zLRUCache.capacityc                 C   r+   r,   )rM   currsizer#   r   r   r   usagea   r.   zLRUCache.usageF)deltarP   c                C   s,   t | j| jd}|r|| j }|| _|}|S )z
        Gets the cumulative number of hits and queries against this cache.

        If `delta=True`, instead gets these statistics
        since the last call that also passed `delta=True`.
        r0   )r(   r;   r<   r=   )r   rP   info
info_deltar   r   r   stath   s   
zLRUCache.statc                 C   s2   z	| j | W d S  ty   d | j |< Y d S w r   )rL   move_to_endKeyErrorr   r@   r   r   r   touchx   s
   zLRUCache.touchc                C      d S r   r   rV   r   r   r   get~      zLRUCache.getdefaultc                C   rX   r   r   r   r@   r[   r   r   r   rY      rZ   c                C   s<   || v r| j |dd}|  jd7  _n|}|  jd7  _|S )NFr>   rA   )rB   r;   r<   r   r@   r[   rC   r   r   r   rY      s   c                 C   rX   r   r   rV   r   r   r   pop   rZ   zLRUCache.popc                 C   rX   r   r   r\   r   r   r   r^      rZ   c                 C   s(   || vr|S | j |dd}| | |S rD   )rB   rE   r]   r   r   r   r^      s
   
rC   c                 C   s   |  || d S r   )__setitem__r   r@   rC   r   r   r   put   s   zLRUCache.putc                 C   s(   || vrt d| d| j| dS )zd
        Pins a key in the cache preventing it from being
        evicted in the LRU order.
        zCannot pin key: z not in cache.N)
ValueErrorr:   addrV   r   r   r   pin   s   zLRUCache.pinc                 C   s   | j | dS )z_
        Unpins a key in the cache allowing it to be
        evicted in the LRU order.
        N)r:   removerV   r   r   r   rF      s   zLRUCache._unpinc                 C   rX   r   r   r`   r   r   r   rG      rZ   zLRUCache._on_removeremove_pinnedrg   c                C   s    t | dkrd S | j|d d S )Nr   rf   )lenpopitem)r   rg   r   r   r   remove_oldest   s   zLRUCache.remove_oldestc                 C   s(   | j | jkr|   | j | jksd S d S r   )rN   r7   rj   r#   r   r   r   _remove_old_if_needed   s   zLRUCache._remove_old_if_neededc                    sV   |st  fdd jD t}|tu rtdnt t j} tt|}||fS )z>Remove and return the `(key, value)` pair least recently used.c                 3   s    | ]
}| j vr|V  qd S r   )r:   ).0r@   r#   r   r   	<genexpr>   s    z#LRUCache.popitem.<locals>.<genexpr>z:All items are pinned, cannot remove oldest from the cache.)nextrJ   ALL_PINNED_SENTINELRuntimeErrorr"   r^   r   r   )r   rg   lru_keyrC   r   r#   r   ri      s   zLRUCache.popitemc                 C   sB   t | dkr| jdd t | dksd| _d| _tddd| _d S )Nr   Trf   r0   )rh   rj   r;   r<   r(   r=   r#   r   r   r   clear   s   zLRUCache.clearr   )r    N)F)!r   r   r   r5   r   r   r   r   boolrB   rE   r4   r   rK   rJ   r7   rO   r(   rS   rW   r   rY   r   r^   ra   rd   rF   rG   rj   rk   ri   rr   r'   r   r   r   r   r6   3   s@    & 		
 ( (		
r6   )collectionsr   collections.abcr   r   r   r   r   typesr   typingr	   r
   r   r   
cachetoolsr   r   r   r   ro   r   r(   r6   r   r   r   r   <module>   s   