
    Be                    F   d dl mZ d dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZ  ed
      Z ed      Z ed      Zerd dlmZmZ  ed      Z G d de      Zej<                  Z G d deeef         ZddZ ddZ!ddZ"ddZ#y)    )annotationsN)CallableIterableIteratorMapping)contextmanager)Enumwraps)chain)MutableMapping)TYPE_CHECKINGAnyTypeVarcastTKTVT)	ParamSpecSelfPc                      e Zd ZdZy)	NoDefaultN)__name__
__module____qualname__	nodefault     +lib/python3.12/site-packages/zict/common.pyr   r      s    Ir   r   c                      e Zd ZU dZded<   ddZddZddZ	 d	 	 	 	 	 ddZddZ	dd	Z
dd
ZddZddZddZedd       Zy)ZictBasezBase class for zict mappingszthreading.RLocklockc                6    t        j                         | _        y N)	threadingRLockr#   selfs    r    __init__zZictBase.__init__$   s    OO%	r   c                @    | j                   j                         }|d= |S )Nr#   )__dict__copyr)   states     r    __getstate__zZictBase.__getstate__'   s     ""$&Mr   c                D    || _         t        j                         | _        y r%   )r,   r&   r'   r#   r.   s     r    __setstate__zZictBase.__setstate__,   s    OO%	r   c                   t        |d      r|j                         }t        ||j                               }| j                  |       y )Nitems)hasattrr4   r   
_do_update)r)   otherkwargss      r    updatezZictBase.update0   s7     5'"KKMEeV\\^,r   c                "    |D ]
  \  }}|| |<    y r%   r   )r)   r4   kvs       r    r6   zZictBase._do_update;   s     	DAqDG	r   c                    t        | |       y)zvFlush *key* if possible.
        Not the same as ``m.pop(key, None)``, as it doesn't trigger ``__getitem__``.
        N)discard)r)   keys     r    r>   zZictBase.discard@   s     	cr   c                     y)z0Release any system resources held by this objectNr   r(   s    r    closezZictBase.closeF   s    r   c                    | S r%   r   r(   s    r    	__enter__zZictBase.__enter__I   s    r   c                $    | j                          y r%   rA   )r)   argss     r    __exit__zZictBase.__exit__L       

r   c                $    | j                          y r%   rE   r(   s    r    __del__zZictBase.__del__O   rH   r   c              #     K   | j                   j                          	 d | j                   j                          y# | j                   j                          w xY ww)zkTo be used in a method decorated by ``@locked``.
        Temporarily releases the mapping's RLock.
        N)r#   releaseacquirer(   s    r    unlockzZictBase.unlockR   s@     
 				 IIDIIs   A= AAAN)returnNone)rO   dict[str, Any])r/   rQ   rO   rP   )r   )r7   z)Mapping[KT, VT] | Iterable[tuple[KT, VT]]r8   r   rO   rP   )r4   zIterable[tuple[KT, VT]]rO   rP   )r?   r   rO   rP   )rO   r   )rF   r   rO   rP   )rO   zIterator[None])r   r   r   __doc____annotations__r*   r0   r2   r9   r6   r>   rA   rC   rG   rJ   r   rN   r   r   r    r"   r"      sr    &
&
& <>	8	 		
 
	
?    r   r"   c                 L    | D ]  }t        |d      s|j                          ! y)zClose *z* if possible.rA   N)r5   rA   zzis     r    rA   rA   ^   $     2wHHJr   c                 L    | D ]  }t        |d      s|j                          ! y)zFlush *z* if possible.flushN)r5   rZ   rU   s     r    rZ   rZ   e   rX   r   c                *    	 | |= y# t         $ r Y yw xY w)znFlush *key* if possible.
    Not the same as ``m.pop(key, None)``, as it doesn't trigger ``__getitem__``.
    N)KeyError)mr?   s     r    r>   r>   l   s     cF s    	c                0     t               d fd       }|S )z~Decorator for a method of ZictBase, which wraps the whole method in a
    instance-specific (but not key-specific) rlock.
    c                 ~    t        t        | d         }|j                  5   | i |cd d d        S # 1 sw Y   y xY w)Nr   )r   r"   r#   )rF   r8   r)   funcs      r    wrapperzlocked.<locals>.wrapper{   s<    Hd1g&YY 	)((	) 	) 	)s   3<)rF   zP.argsr8   zP.kwargsrO   r   r
   )r`   ra   s   ` r    lockedrb   v   s"    
 4[) )
 Nr   )rV   r   rO   rP   )r]   zMutableMapping[KT, VT]r?   r   rO   rP   )r`   Callable[P, VT]rO   rc   )$
__future__r   r&   collections.abcr   r   r   r   
contextlibr   enumr	   	functoolsr   	itertoolsr   typingr   r   r   r   r   r   r   r   typing_extensionsr   r   r   r   r   r"   rA   rZ   r>   rb   r   r   r    <module>rl      s    "  A A %    ! 4 4CLT]T] 2#A  	< ~b"f% < ~r   