ó
¢X[\c           @` se   d  d l  m Z m Z m Z d  d l m Z d d l m Z m Z d „  Z d e f d „  ƒ  YZ	 d S(	   i    (   t   absolute_importt   divisiont   print_function(   t   heapdicti   (   t   ZictBaset   closec         C` s   d  S(   N(    (   t   kt   v(    (    s'   lib/python2.7/site-packages/zict/lru.pyt
   do_nothing   s    t   LRUc           B` s›   e  Z d  Z d d „  d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z e Z d „  Z d „  Z RS(   s   Evict Least Recently Used Elements

    Parameters
    ----------
    n: int
        Number of elements to keep, or total weight if weight= is used
    d: MutableMapping
        Dictionary in which to hold elements
    on_evict: list of callables
        Function:: k, v -> action to call on key value pairs prior to eviction
    weight: callable
        Function:: k, v -> number to determine the size of keeping the item in
        the mapping.  Defaults to ``(k, v) -> 1``

    Examples
    --------
    >>> lru = LRU(2, dict(), on_evict=lambda k, v: print("Lost", k, v))
    >>> lru['x'] = 1
    >>> lru['y'] = 2
    >>> lru['z'] = 3
    Lost x 1
    c         C` s   d S(   Ni   (    (   R   R   (    (    s'   lib/python2.7/site-packages/zict/lru.pyt   <lambda>#   t    c         C` sp   | |  _  | |  _ t ƒ  |  _ d |  _ t | ƒ r? | g } n  | pH g  |  _ | |  _ d |  _ t	 ƒ  |  _
 d  S(   Ni    (   t   dt   nR   t   heapt   it   callablet   on_evictt   weightt   total_weightt   dictt   weights(   t   selfR   R   R   R   (    (    s'   lib/python2.7/site-packages/zict/lru.pyt   __init__#   s    					c         C` s0   |  j  | } |  j d 7_ |  j |  j | <| S(   Ni   (   R   R   R   (   R   t   keyt   result(    (    s'   lib/python2.7/site-packages/zict/lru.pyt   __getitem__/   s    c         C` sÍ   | |  j  k r |  | =n  |  j | | ƒ } | |  j k r… | |  j  | <|  j d 7_ |  j |  j | <| |  j | <|  j | 7_ n! x |  j D] } | | | ƒ q Wx  |  j |  j k rÈ |  j ƒ  q© Wd  S(   Ni   (	   R   R   R   R   R   R   R   R   t   evict(   R   R   t   valueR   t   cb(    (    s'   lib/python2.7/site-packages/zict/lru.pyt   __setitem__5   s    
c         C` sv   |  j  j ƒ  \ } } |  j j | ƒ } |  j | 8_ |  j j | ƒ } x |  j D] } | | | ƒ qR W| | | f S(   sà    Evict least recently used key

        This is typically called from internal use, but can be externally
        triggered as well.

        Returns
        -------
        k: key
        v: value
        w: weight
        (   R   t   popitemR   t   popR   R   R   (   R   R   t   priorityR   R   R   (    (    s'   lib/python2.7/site-packages/zict/lru.pyR   I   s    c         C` s3   |  j  | =|  j | =|  j |  j j | ƒ 8_ d  S(   N(   R   R   R   R   R    (   R   R   (    (    s'   lib/python2.7/site-packages/zict/lru.pyt   __delitem__]   s    

c         C` s   |  j  j ƒ  S(   N(   R   t   keys(   R   (    (    s'   lib/python2.7/site-packages/zict/lru.pyR#   b   s    c         C` s   |  j  j ƒ  S(   N(   R   t   values(   R   (    (    s'   lib/python2.7/site-packages/zict/lru.pyR$   e   s    c         C` s   |  j  j ƒ  S(   N(   R   t   items(   R   (    (    s'   lib/python2.7/site-packages/zict/lru.pyR%   h   s    c         C` s   t  |  j ƒ S(   N(   t   lenR   (   R   (    (    s'   lib/python2.7/site-packages/zict/lru.pyt   __len__k   s    c         C` s   t  |  j ƒ S(   N(   t   iterR   (   R   (    (    s'   lib/python2.7/site-packages/zict/lru.pyt   __iter__n   s    c         C` s   | |  j  k S(   N(   R   (   R   R   (    (    s'   lib/python2.7/site-packages/zict/lru.pyt   __contains__q   s    c         C` s>   t  |  j t ƒ s! t |  j ƒ n d } d |  j |  j | f S(   NR   s   <LRU: %s/%s on %s>(   t
   isinstanceR   R   t   strR   R   (   R   t   sub(    (    s'   lib/python2.7/site-packages/zict/lru.pyt   __str__t   s    'c         C` s   |  j  j ƒ  d  S(   N(   R   t   flush(   R   (    (    s'   lib/python2.7/site-packages/zict/lru.pyR/   z   s    c         C` s   t  |  j ƒ d  S(   N(   R   R   (   R   (    (    s'   lib/python2.7/site-packages/zict/lru.pyR   }   s    N(   t   __name__t
   __module__t   __doc__t   NoneR   R   R   R   R"   R#   R$   R%   R'   R)   R*   R.   t   __repr__R/   R   (    (    (    s'   lib/python2.7/site-packages/zict/lru.pyR	      s    												N(
   t
   __future__R    R   R   R   t   commonR   R   R   R	   (    (    (    s'   lib/python2.7/site-packages/zict/lru.pyt   <module>   s   	