
X[\c           @` sx   d  d l  m Z m Z m Z d  d l m Z d  d l m Z d  d l Z d d l	 m
 Z
 m Z d e
 f d     YZ d S(	   i    (   t   absolute_importt   divisiont   print_function(   t   defaultdict(   t   chainNi   (   t   ZictBaset   closet   Sievec           B` s   e  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 e Z d   Z d   Z RS(   s   Store values in different mappings based on a selector's
    output.

    This creates a MutableMapping combining several underlying
    MutableMappings for storage.  Items are dispatched based on
    a selector function provided by the user.

    Parameters
    ----------
    mappings: dict of {mapping key: MutableMapping}
    selector: callable (key, value) -> mapping key

    Examples
    --------
    >>> small = {}
    >>> large = DataBase()                        # doctest: +SKIP
    >>> mappings = {True: small, False: large}    # doctest: +SKIP
    >>> def is_small(key, value):                 # doctest: +SKIP
            return sys.getsizeof(value) < 10000
    >>> d = Sieve(mappings, is_small)             # doctest: +SKIP

    See Also
    --------
    Buffer
    c         C` s   | |  _  | |  _ i  |  _ d  S(   N(   t   mappingst   selectort   key_to_mapping(   t   selfR   R	   (    (    s)   lib/python2.7/site-packages/zict/sieve.pyt   __init__$   s    		c         C` s   |  j  | | S(   N(   R
   (   R   t   key(    (    s)   lib/python2.7/site-packages/zict/sieve.pyt   __getitem__)   s    c         C` sh   |  j  j |  } |  j |  j | |  } | d  k	 rM | | k	 rM | | =n  | | | <| |  j  | <d  S(   N(   R
   t   getR   R	   t   None(   R   R   t   valuet   old_mappingt   mapping(    (    s)   lib/python2.7/site-packages/zict/sieve.pyt   __setitem__,   s    

c         C` s   |  j  j |  | =d  S(   N(   R
   t   pop(   R   R   (    (    s)   lib/python2.7/site-packages/zict/sieve.pyt   __delitem__4   s    c         C` s  g  } t  t  } t d   |  j j   D  } x~ | D]v \ } } |  j j |  } |  j |  j | |  } | d  k	 r | | k	 r | | =n  | t	 |  j
 | | f  q8 WxU | j   D]G \ }	 }
 | |	 } | j |
  x! |
 D] \ } } | |  j | <q Wq Wd  S(   Nc         s` s!   |  ] } t  |  | f Vq d  S(   N(   t   id(   t   .0t   m(    (    s)   lib/python2.7/site-packages/zict/sieve.pys	   <genexpr><   s    (   R   t   listt   dictR   t   valuesR
   R   R	   R   R   t   appendt   itemst   update(   R   R   t	   to_deletet   updatest   mapping_idsR   R   R   R   t   midt   mitemst   _(    (    s)   lib/python2.7/site-packages/zict/sieve.pyt
   _do_update7   s    
!
c         C` s   t  j |  j j    S(   N(   R   t   from_iterableR   R   (   R   (    (    s)   lib/python2.7/site-packages/zict/sieve.pyt   keysL   s    c         C` s    t  j d   |  j j   D  S(   Nc         s` s   |  ] } | j    Vq d  S(   N(   R   (   R   R   (    (    s)   lib/python2.7/site-packages/zict/sieve.pys	   <genexpr>P   s    (   R   R'   R   R   (   R   (    (    s)   lib/python2.7/site-packages/zict/sieve.pyR   O   s    c         C` s    t  j d   |  j j   D  S(   Nc         s` s   |  ] } | j    Vq d  S(   N(   R   (   R   R   (    (    s)   lib/python2.7/site-packages/zict/sieve.pys	   <genexpr>S   s    (   R   R'   R   R   (   R   (    (    s)   lib/python2.7/site-packages/zict/sieve.pyR   R   s    c         C` s   t  t t |  j j     S(   N(   t   sumt   mapt   lenR   R   (   R   (    (    s)   lib/python2.7/site-packages/zict/sieve.pyt   __len__U   s    c         C` s   | |  j  k S(   N(   R
   (   R   R   (    (    s)   lib/python2.7/site-packages/zict/sieve.pyt   __contains__Z   s    c         C` s   d t  |  j  f S(   Ns	   Sieve<%s>(   t   strR   (   R   (    (    s)   lib/python2.7/site-packages/zict/sieve.pyt   __str__]   s    c         C` s(   x! |  j  j   D] } | j   q Wd  S(   N(   R   R   t   flush(   R   R   (    (    s)   lib/python2.7/site-packages/zict/sieve.pyR0   b   s    c         C` s(   x! |  j  j   D] } t |  q Wd  S(   N(   R   R   R   (   R   R   (    (    s)   lib/python2.7/site-packages/zict/sieve.pyR   f   s    (   t   __name__t
   __module__t   __doc__R   R   R   R   R&   R(   R   R   R,   t   __iter__R-   R/   t   __repr__R0   R   (    (    (    s)   lib/python2.7/site-packages/zict/sieve.pyR   
   s    												(   t
   __future__R    R   R   t   collectionsR   t	   itertoolsR   t   syst   commonR   R   R   (    (    (    s)   lib/python2.7/site-packages/zict/sieve.pyt   <module>   s
   