
    [e              	          d dl mZ d dlmZ d dlmZmZmZmZm	Z	 d dl
mZmZ d dlmZmZmZmZmZmZmZ  ed          Z G d deeef         eeeef                   Zd	S )
    )annotations)defaultdict)CallableIterableIteratorMappingMutableMapping)GenericTypeVar)KTVTZictBaseclosediscardflushlockedMKTc                       e Zd ZU dZded<   ded<   ded<   ded	<   d! fd
Zd"dZed#d            Zed$d            Z	ed%d            Z
d&dZd'dZd(dZd)dZeZd*dZd*d Z xZS )+Sievea/  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

    Notes
    -----
    If you call methods of this class from multiple threads, access will be fast as long
    as the ``__contains__`` and ``__delitem__`` methods of all underlying mappins are
    fast. ``__getitem__`` and ``__setitem__`` methods of the underlying mappings are not
    protected by locks.

    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   # doctest: +SKIP
    >>> d = Sieve(mappings, is_small)             # doctest: +SKIP
    $Mapping[MKT, MutableMapping[KT, VT]]mappingsCallable[[KT, VT], MKT]selectorz dict[KT, MutableMapping[KT, VT]]key_to_mappingintgenc                    t                                                       || _        || _        i | _        d| _        d S )Nr   )super__init__r   r   r   r   )selfr   r   	__class__s      *lib/python3.11/site-packages/zict/sieve.pyr   zSieve.__init__/   s<    
 	       keyr   returnr   c                (    | j         |         |         S Nr   r    r$   s     r"   __getitem__zSieve.__getitem__:   s     "3',,r#   valueNonec                   t          | |           |                     ||          }| j        |         }|| j        |<   | xj        dz  c_        | j        }|                                 5  |||<   d d d            n# 1 swxY w Y   || j        k    r.| j                            |          |urt          ||           d S d S d S N   )r   r   r   r   r   unlockget)r    r$   r+   mkeymappingr   s         r"   __setitem__zSieve.__setitem__?   s   c}}S%((-%#*C Ah[[]] 	! 	! GCL	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! $(??t266s;;7JJGS!!!!! ?JJs   )A;;A?A?c                z    | j                             |          }| xj        dz  c_        t          ||           d S r.   )r   popr   r   )r    r$   r3   s      r"   __delitem__zSieve.__delitem__O   s=    %))#..Ar#   itemsIterable[tuple[KT, VT]]c                   t          t                    }| xj        dz  c_        | j        }|D ]|\  }}| j                            |d           }|t          ||           |                     ||          }| j        |         }||                             ||f           || j        |<   }| 	                                5  |
                                D ]'\  }}	| j        |         }|                    |	           (	 d d d            n# 1 swxY w Y   || j        k    r[|
                                D ]H\  }}	| j        |         }|	D ]1\  }}
| j                            |          |urt          ||           2Gd S d S r.   )r   listr   r   r6   r   r   r   appendr0   r8   updater1   )r    r8   updatesr   r$   r+   old_mappingr2   r3   mitems_s              r"   
_do_updatezSieve._do_updateU   s    d##Ah 	/ 	/JC-11#t<<K&S)))==e,,DmD)GDM  #u...'.D$$[[]] 	' 	' ' ' 'f--v&&&&'	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'
 $(?? ' . .f--$ . .FC*..s337BB---.	 ?. .s   ?=D		DDc                *    t          | j                  S r'   )lenr   r    s    r"   __len__zSieve.__len__s   s    4&'''r#   Iterator[KT]c                *    t          | j                  S r'   )iterr   rE   s    r"   __iter__zSieve.__iter__v   s    D'(((r#   objectboolc                    || j         v S r'   r(   r)   s     r"   __contains__zSieve.__contains__y   s    d)))r#   strc                    d| j          dS )NzSieve<>)r   rE   s    r"   __str__zSieve.__str__|   s    (((((r#   c                F    t          | j                                          d S r'   )r   r   valuesrE   s    r"   r   zSieve.flush   !    t}##%%&&&&r#   c                F    t          | j                                          d S r'   )r   r   rT   rE   s    r"   r   zSieve.close   rU   r#   )r   r   r   r   )r$   r   r%   r   )r$   r   r+   r   r%   r,   )r$   r   r%   r,   )r8   r9   r%   r,   )r%   r   )r%   rG   )r$   rK   r%   rL   )r%   rO   )r%   r,   )__name__
__module____qualname____doc____annotations__r   r*   r   r4   r7   rB   rF   rJ   rN   rR   __repr__r   r   __classcell__)r!   s   @r"   r   r      sk         : 3222%%%%4444HHH	 	 	 	 	 	- - - -
 " " " V"    V
 . . . V.:( ( ( () ) ) )* * * *) ) ) ) H' ' ' '' ' ' ' ' ' ' 'r#   r   N)
__future__r   collectionsr   collections.abcr   r   r   r   r	   typingr
   r   zict.commonr   r   r   r   r   r   r   r   r    r#   r"   <module>rd      s   " " " " " " # # # # # # Q Q Q Q Q Q Q Q Q Q Q Q Q Q # # # # # # # # G G G G G G G G G G G G G G G G G Ggenny' y' y' y' y'HRVgb"ck2 y' y' y' y' y'r#   