
    Be              	          d dl mZ d dl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  e	d      Z G d deeef   eeeef         Zd
dZy	)    )annotations)CallableIterableIteratorMutableMapping)GenericTypeVar)KTVTZictBasecloseflushWTc                       e Zd ZU dZded<   ded<   ded<   	 	 	 	 	 	 d fdZdd	Zdd
ZddZ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 )Funca  Buffer a MutableMapping with a pair of input/output functions

    Parameters
    ----------
    dump: callable
        Function to call on value as we set it into the mapping
    load: callable
        Function to call on value as we pull it from the mapping
    d: MutableMapping

    Examples
    --------
    >>> def double(x):
    ...     return x * 2

    >>> def halve(x):
    ...     return x / 2

    >>> d = {}
    >>> f = Func(double, halve, d)
    >>> f['x'] = 10
    >>> d
    {'x': 20}
    >>> f['x']
    10.0
    Callable[[VT], WT]dumpCallable[[WT], VT]loadMutableMapping[KT, WT]dc                L    t         |           || _        || _        || _        y N)super__init__r   r   r   )selfr   r   r   	__class__s       )lib/python3.12/site-packages/zict/func.pyr   zFunc.__init__+   s%     			    c                >    | j                  | j                  |         S r   )r   r   r   keys     r   __getitem__zFunc.__getitem__6   s    yy%%r   c                @    | j                  |      | j                  |<   y r   )r   r   )r   r"   values      r   __setitem__zFunc.__setitem__9   s    ii&sr   c                    || j                   v S r   r   r!   s     r   __contains__zFunc.__contains__<   s    dff}r   c                    | j                   |= y r   r(   r!   s     r   __delitem__zFunc.__delitem__?   s    FF3Kr   c                R      fd|D        } j                   j                  |       y )Nc              3  J   K   | ]  \  }}|j                  |      f  y wr   )r   ).0kvr   s      r   	<genexpr>z"Func._do_update.<locals>.<genexpr>C   s"     2DAqq$))A,2s    #)r   update)r   itemsits   `  r   
_do_updatezFunc._do_updateB   s    2E2br   c                ,    t        | j                        S r   )iterr   r   s    r   __iter__zFunc.__iter__F   s    DFF|r   c                ,    t        | j                        S r   )lenr   r8   s    r   __len__zFunc.__len__I   s    466{r   c                z    dt        | j                         dt        | j                         d| j                   dS )Nz<Func: z<-> >)funcnamer   r   r   r8   s    r   __str__zFunc.__str__L   s5    $)),-S$))1D0EQtvvhaPPr   c                .    t        | j                         y r   )r   r   r8   s    r   r   z
Func.flushQ       dffr   c                .    t        | j                         y r   )r   r   r8   s    r   r   z
Func.closeT   rC   r   )r   r   r   r   r   r   )r"   r
   returnr   )r"   r
   r%   r   rE   None)r"   objectrE   bool)r"   r
   rE   rF   )r3   zIterable[tuple[KT, VT]]rE   rF   )rE   zIterator[KT])rE   int)rE   str)rE   rF   )__name__
__module____qualname____doc____annotations__r   r#   r&   r)   r+   r5   r9   r<   rA   __repr__r   r   __classcell__)r   s   @r   r   r      sw    6 
	 	 !	 "		&'Q Hr   r   c                    t        | d      r| j                  } t        | d      r	 | j                  S # t        $ r t	        |       cY S w xY w)zGet the name of a function.func)hasattrrS   rK   	ExceptionrJ   )rS   s    r   r@   r@   X   sI    
$
yy $
}} 4ys   3 A
	A
N)rS   r   rE   rJ   )
__future__r   collections.abcr   r   r   r   typingr   r	   zict.commonr
   r   r   r   r   r   r   r@    r   r   <module>r[      sJ    " H H # 6 6T]J8BFWRRZ0 JZr   