U
    2ÒtcO  ã                   @   s(   d dl Z ddlmZ G dd„ deƒZdS )é    Né   )ÚCachec                   @   sL   e Zd ZdZddd„Zejfdd„Zejfdd„Zejfd	d
„Zdd„ Z	dS )ÚLFUCachez1Least Frequently Used (LFU) cache implementation.Nc                 C   s   t  | ||¡ t ¡ | _d S ©N)r   Ú__init__ÚcollectionsÚCounterÚ_LFUCache__counter)ÚselfÚmaxsizeÚ	getsizeof© r   ú2/tmp/pip-unpacked-wheel-7ofpm20j/cachetools/lfu.pyr   	   s    zLFUCache.__init__c                 C   s(   || |ƒ}|| kr$| j |  d8  < |S ©Nr   ©r	   )r
   ÚkeyZcache_getitemÚvaluer   r   r   Ú__getitem__   s    
zLFUCache.__getitem__c                 C   s"   || ||ƒ | j |  d8  < d S r   r   )r
   r   r   Zcache_setitemr   r   r   Ú__setitem__   s    zLFUCache.__setitem__c                 C   s   || |ƒ | j |= d S r   r   )r
   r   Zcache_delitemr   r   r   Ú__delitem__   s    
zLFUCache.__delitem__c                 C   sR   z| j  d¡\\}}W n( tk
r>   tdt| ƒj ƒd‚Y nX ||  |¡fS dS )z@Remove and return the `(key, value)` pair least frequently used.r   z%s is emptyN)r	   Úmost_commonÚ
ValueErrorÚKeyErrorÚtypeÚ__name__Úpop)r
   r   Ú_r   r   r   Úpopitem   s
    zLFUCache.popitem)N)
r   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r   r   r      s   
r   )r   Úcacher   r   r   r   r   r   Ú<module>   s   