
                         @    d dl mZ d dlZddlmZ d Z G d de      Zy)    )absolute_importN   )Cachec                 ,    t        j                  |       S N)randomchoice)seqs     lib/third_party/cachetools/rr.py_choicer   	   s    	s	    c                   F    e Zd ZdZej
                  dfdZed        Zd Zy)RRCachez-Random Replacement (RR) cache implementation.Nc                 |    t        j                  | ||       |t        j                  u rt        | _        y || _        y r   )r   __init__r   r	   r   _RRCache__choice)selfmaxsizer	   	getsizeofs       r   r   zRRCache.__init__   s,    	NN4),dmdmr   c                     | j                   S )z(The `choice` function used by the cache.)r   )r   s    r   r	   zRRCache.choice   s     ==r   c                     	 | j                  t        |             }|| j                  |      fS # t        $ r# t	        d| j
                  j                  z        w xY w)z/Remove and return a random `(key, value)` pair.z%s is empty)r   listpop
IndexErrorKeyError	__class____name__)r   keys     r   popitemzRRCache.popitem   sY    "MM$t*%c 488C=!!  >]T^^%<%<<==>s	   / ,A)	r   
__module____qualname____doc__r   r	   r   propertyr    r   r   r   r      s,    5%+]]d   "r   r   )
__future__r   r   cacher   r   r   r$   r   r   <module>r'      s    &  "e "r   