
    [e                    h   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#dS )#    )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dS )	NoDefaultN)__name__
__module____qualname__	nodefault     +lib/python3.11/site-packages/zict/common.pyr   r      s        IIIr   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d S )+ZictBasezBase class for zict mappingszthreading.RLocklockreturnNonec                6    t          j                    | _        d S N)	threadingRLockr#   selfs    r    __init__zZictBase.__init__$   s    O%%			r   dict[str, Any]c                >    | j                                         }|d= |S )Nr#   )__dict__copyr+   states     r    __getstate__zZictBase.__getstate__'   s!    ""$$&Mr   r2   c                D    || _         t          j                    | _        d S r'   )r/   r(   r)   r#   r1   s     r    __setstate__zZictBase.__setstate__,   s    O%%			r   r   other)Mapping[KT, VT] | Iterable[tuple[KT, VT]]kwargsr   c                   t          |d          r|                                }t          ||                                          }|                     |           d S )Nitems)hasattrr:   r   
_do_update)r+   r6   r8   s      r    updatezZictBase.update0   sR     5'"" 	"KKMMEeV\\^^,,r   r:   Iterable[tuple[KT, VT]]c                     |D ]
\  }}|| |<   d S r'   r   )r+   r:   kvs       r    r<   zZictBase._do_update;   s*     	 	DAqDGG	 	r   keyr   c                &    t          | |           dS )zvFlush *key* if possible.
        Not the same as ``m.pop(key, None)``, as it doesn't trigger ``__getitem__``.
        N)discard)r+   rB   s     r    rD   zZictBase.discard@   s     	cr   c                    dS )z0Release any system resources held by this objectNr   r*   s    r    closezZictBase.closeF   s      r   r   c                    | S r'   r   r*   s    r    	__enter__zZictBase.__enter__I   s    r   argsr   c                .    |                                   d S r'   rF   )r+   rI   s     r    __exit__zZictBase.__exit__L       

r   c                .    |                                   d S r'   rK   r*   s    r    __del__zZictBase.__del__O   rM   r   Iterator[None]c              #     K   | j                                          	 dV  | j                                          dS # | j                                          w xY 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^      
 			 EEEIDIs	   < AN)r$   r%   )r$   r-   )r2   r-   r$   r%   )r   )r6   r7   r8   r   r$   r%   )r:   r>   r$   r%   )rB   r   r$   r%   )r$   r   )rI   r   r$   r%   )r$   rP   )r   r   r   __doc____annotations__r,   r3   r5   r=   r<   rD   rF   rH   rL   rO   r   rT   r   r   r    r"   r"      s        &&& & & &   
& & & & <>	 	 	 	 	   
   ? ? ? ?                ^     r   r"   zr   r$   r%   c                 X    | D ]&}t          |d          r|                                 'dS )zClose *z* if possible.rF   N)r;   rF   rW   zis     r    rF   rF   ^   ;      2w 	HHJJJ r   c                 X    | D ]&}t          |d          r|                                 'dS )zFlush *z* if possible.flushN)r;   r]   rY   s     r    r]   r]   e   r[   r   mMutableMapping[KT, VT]rB   c                0    	 | |= dS # t           $ r Y dS w xY w)znFlush *key* if possible.
    Not the same as ``m.pop(key, None)``, as it doesn't trigger ``__getitem__``.
    N)KeyError)r^   rB   s     r    rD   rD   l   s4    cFFF   s    
funcCallable[P, VT]c                >     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.
    rI   P.argsr8   P.kwargsr$   r   c                     t          t          | d                   }|j        5   | i |cd d d            S # 1 swxY w Y   d S )Nr   )r   r"   r#   )rI   r8   r+   rb   s      r    wrapperzlocked.<locals>.wrapper{   s    Hd1g&&Y 	) 	)4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   9= =)rI   re   r8   rf   r$   r   r
   )rb   rh   s   ` r    lockedri   v   s:    
 4[[) ) ) ) ) [)
 Nr   )rW   r   r$   r%   )r^   r_   rB   r   r$   r%   )rb   rc   r$   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"   rF   r]   rD   ri   r   r   r    <module>rr      s   " " " " " "     A A A A A A A A A A A A % % % % % %                   ! ! ! ! ! ! 4 4 4 4 4 4 4 4 4 4 4 4GCLLWT]]WT]]  21111111	#A        	<  <  <  <  < ~b"f% <  <  < ~              r   