o
    >c8T                     @   s   	 d dl mZmZmZmZmZmZmZmZ d dl	m
Z
mZ d dlZd dlZd dlZeefZg dZeje
 eje
 G dd deZG dd dejZG d	d
 d
eZG dd dejZG dd dZdS )    )getweakrefcountgetweakrefsrefproxyCallableProxyType	ProxyTypeReferenceType_remove_dead_weakref)WeakSet_IterationGuardN)r   r   r   r   WeakKeyDictionaryr   r   r   
ProxyTypesWeakValueDictionaryr
   
WeakMethodfinalizec                       sB   e Zd Z	 dZdddZ fddZdd Zd	d
 Zej	Z	  Z
S )r   )	_func_ref
_meth_type_alive__weakref__Nc                    sx   z|j }|j}W n ty   tdt|d w  fdd}t| ||}t|||_t||_	d|_
t||S )Nz)argument should be a bound method, not {}c                    s.    }|j rd|_  d ur | d S d S d S NF)r   )argselfcallbackZself_wr [/Volumes/Data/workspace/med-macos-weekly/build/ExtProjs/pyncpp/python/source/Lib/weakref.py_cb6   s   zWeakMethod.__new__.<locals>._cbT)__self____func__AttributeError	TypeErrorformattyper   __new__r   r   r   )clsZmethr   objfuncr   r   r   r   r   r#   /   s"   


zWeakMethod.__new__c                    s2   t   }|  }|d u s|d u rd S | ||S N)super__call__r   r   )r   r%   r&   	__class__r   r   r)   E   s
   
zWeakMethod.__call__c                 C   s:   t |tr| jr|js| |u S t| |o| j|jkS tS r'   )
isinstancer   r   r   __eq__r   NotImplementedr   otherr   r   r   r-   L   
   
zWeakMethod.__eq__c                 C   s:   t |tr| jr|js| |uS t| |p| j|jkS tS r'   )r,   r   r   r   __ne__r   r.   r/   r   r   r   r2   S   r1   zWeakMethod.__ne__r'   )__name__
__module____qualname__	__slots__r#   r)   r-   r2   r   __hash____classcell__r   r   r*   r   r   '   s    
r   c                   @   s   e Zd Z	 d1ddZef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d2ddZdd Zdd ZeZdd Zdd  Zd!d" Zd#d$ Zd2d%d&Zd2d'd(Zd)d* Zd+d, Zd-d. Zd/d0 ZdS )3r   r   c                K   sB   t | tfdd}|| _g | _t | _i | _| j|fi | d S )Nc                 S   s<   | }|d ur|j r|j| j d S ||j| j d S d S r'   )
_iterating_pending_removalsappendkeydata)wrselfref_atomic_removalr   r   r   r   removej   s   z,WeakValueDictionary.__init__.<locals>.remove)r   r	   _remover:   setr9   r=   update)r   r0   kwrA   r   r   r   __init__i   s   	zWeakValueDictionary.__init__c                 C   s<   | j j}| j}	 z| }W n
 ty   Y d S w ||| qr'   )r:   popr=   
IndexError)r   r@   rG   dr<   r   r   r   _commit_removalsz   s   

z$WeakValueDictionary._commit_removalsc                 C   s.   | j r|   | j|  }|d u rt||S r'   r:   rJ   r=   KeyErrorr   r<   or   r   r   __getitem__   s   zWeakValueDictionary.__getitem__c                 C   s   | j r|   | j|= d S r'   )r:   rJ   r=   r   r<   r   r   r   __delitem__   s   zWeakValueDictionary.__delitem__c                 C   s   | j r|   t| jS r'   )r:   rJ   lenr=   r   r   r   r   __len__   s   
zWeakValueDictionary.__len__c                 C   s:   | j r|   z| j|  }W |d uS  ty   Y dS w r   rK   rM   r   r   r   __contains__   s   z WeakValueDictionary.__contains__c                 C      d| j jt| f S Nz<%s at %#x>r+   r3   idrS   r   r   r   __repr__      zWeakValueDictionary.__repr__c                 C   s&   | j r|   t|| j|| j|< d S r'   )r:   rJ   KeyedRefrB   r=   r   r<   valuer   r   r   __setitem__   s   zWeakValueDictionary.__setitem__c                 C   sl   | j r|   t }t|  | j D ]\}}| }|d ur#|||< qW d    |S 1 s/w   Y  |S r'   )r:   rJ   r   r   r=   items)r   newr<   r>   rN   r   r   r   copy   s   

zWeakValueDictionary.copyc                 C   s   ddl m} | jr|   |  }t| ! | j D ]\}}| }|d ur-|||||< qW d    |S 1 s9w   Y  |S Nr   )deepcopy)rb   rd   r:   rJ   r+   r   r=   r`   )r   memord   ra   r<   r>   rN   r   r   r   __deepcopy__   s   

z WeakValueDictionary.__deepcopy__Nc                 C   sJ   | j r|   z| j| }W n ty   | Y S w | }|d u r#|S |S r'   rK   )r   r<   defaultr>   rN   r   r   r   get   s   zWeakValueDictionary.getc                 c   sj    | j r|   t|  | j D ]\}}| }|d ur"||fV  qW d    d S 1 s.w   Y  d S r'   r:   rJ   r   r=   r`   )r   kr>   vr   r   r   r`      s   

"zWeakValueDictionary.itemsc                 c   sb    | j r|   t|  | j D ]\}}| d ur|V  qW d    d S 1 s*w   Y  d S r'   ri   )r   rj   r>   r   r   r   keys   s   

"zWeakValueDictionary.keysc                 c   sP    	 | j r	|   t|  | j E d H  W d    d S 1 s!w   Y  d S r'   r:   rJ   r   r=   valuesrS   r   r   r   itervaluerefs   s   	
"z!WeakValueDictionary.itervaluerefsc                 c   sb    | j r|   t|  | j D ]}| }|d ur|V  qW d    d S 1 s*w   Y  d S r'   rm   r   r>   r%   r   r   r   rn      s   
"zWeakValueDictionary.valuesc                 C   s6   | j r|   	 | j \}}| }|d ur||fS qr'   )r:   rJ   r=   popitem)r   r<   r>   rN   r   r   r   rq      s   zWeakValueDictionary.popitemc                 G   sX   | j r|   z	| j| }W n ty   d }Y nw |d u r*|r&|d S t||S )Nr   )r:   rJ   r=   rG   rL   )r   r<   argsrN   r   r   r   rG     s   zWeakValueDictionary.popc                 C   sZ   z| j |  }W n ty   d }Y nw |d u r+| jr|   t|| j|| j |< |S |S r'   )r=   rL   r:   rJ   r\   rB   )r   r<   rg   rN   r   r   r   
setdefault  s   zWeakValueDictionary.setdefaultc                K   sz   | j r|   | j}|d ur)t|dst|}| D ]\}}t|| j|||< q| D ]\}}t|| j|||< q-d S Nr`   )r:   rJ   r=   hasattrdictr`   r\   rB   )r   r0   kwargsrI   r<   rN   r   r   r   rD   "  s   
zWeakValueDictionary.updatec                 C   s   	 | j r|   t| j S r'   )r:   rJ   listr=   rn   rS   r   r   r   	valuerefs.  s   	zWeakValueDictionary.valuerefsc                 C      |  | | S r'   rD   r/   r   r   r   __ior__<     
zWeakValueDictionary.__ior__c                 C   &   t |tjr|  }|| |S tS r'   r,   _collections_abcMappingrb   rD   r.   r   r0   cr   r   r   __or__@  
   
zWeakValueDictionary.__or__c                 C   0   t |tjr|  }|| ||  |S tS r'   r,   r   r   r+   rD   r.   r   r   r   r   __ror__G     

zWeakValueDictionary.__ror__)r   r'   )r3   r4   r5   rF   r	   rJ   rO   rQ   rT   rU   rZ   r_   rb   __copy__rf   rh   r`   rl   __iter__ro   rn   rq   rG   rs   rD   ry   r|   r   r   r   r   r   r   r   ]   s6    
		
			

r   c                       s*   e Zd Z	 dZdd Z fddZ  ZS )r\   r<   c                 C   s   t | ||}||_|S r'   )r   r#   r<   )r"   obr   r<   r   r   r   r   r#   \  s   zKeyedRef.__new__c                    s   t  || d S r'   )r(   rF   )r   r   r   r<   r*   r   r   rF   a     zKeyedRef.__init__)r3   r4   r5   r6   r#   rF   r8   r   r   r*   r   r\   P  s
    	r\   c                   @   s   e Zd Z	 d0d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d0ddZdd Zdd Zdd ZeZdd Zd d! Zd"d# Zd$d% Zd0d&d'Zd0d(d)Zd*d+ Zd,d- Zd.d/ ZdS )1r   Nc                 C   sJ   i | _ t| fdd}|| _g | _t | _d| _|d ur#| | d S d S )Nc                 S   sL   | }|d ur$|j r|j|  d S z|j| = W d S  ty#   Y d S w d S r'   )r9   r:   r;   r=   rL   )rj   r?   r   r   r   r   rA   r  s   z*WeakKeyDictionary.__init__.<locals>.removeF)r=   r   rB   r:   rC   r9   
_dirty_lenrD   )r   rv   rA   r   r   r   rF   p  s   
zWeakKeyDictionary.__init__c                 C   sP   | j j}| j}	 z| }W n
 ty   Y d S w z||= W n	 ty&   Y nw qr'   )r:   rG   r=   rH   rL   )r   rG   rI   r<   r   r   r   rJ     s   

z"WeakKeyDictionary._commit_removalsc                    s&   | j   fdd| jD | _d| _d S )Nc                    s   g | ]}| v r|qS r   r   ).0rj   rI   r   r   
<listcomp>  s    z5WeakKeyDictionary._scrub_removals.<locals>.<listcomp>F)r=   r:   r   rS   r   r   r   _scrub_removals  s   
z!WeakKeyDictionary._scrub_removalsc                 C   s   d| _ | jt|= d S NT)r   r=   r   rP   r   r   r   rQ     s   zWeakKeyDictionary.__delitem__c                 C   s   | j t| S r'   )r=   r   rP   r   r   r   rO     s   zWeakKeyDictionary.__getitem__c                 C   s(   | j r
| jr
|   t| jt| j S r'   )r   r:   r   rR   r=   rS   r   r   r   rT     s   zWeakKeyDictionary.__len__c                 C   rV   rW   rX   rS   r   r   r   rZ     r[   zWeakKeyDictionary.__repr__c                 C   s   || j t|| j< d S r'   )r=   r   rB   r]   r   r   r   r_        zWeakKeyDictionary.__setitem__c                 C   s^   t  }t|  | j D ]\}}| }|d ur|||< qW d    |S 1 s(w   Y  |S r'   )r   r   r=   r`   )r   ra   r<   r^   rN   r   r   r   rb     s   

zWeakKeyDictionary.copyc                 C   sr   ddl m} |  }t| ! | j D ]\}}| }|d ur&|||||< qW d    |S 1 s2w   Y  |S rc   )rb   rd   r+   r   r=   r`   )r   re   rd   ra   r<   r^   rN   r   r   r   rf     s   

zWeakKeyDictionary.__deepcopy__c                 C   s   | j t||S r'   )r=   rh   r   r   r<   rg   r   r   r   rh     r   zWeakKeyDictionary.getc                 C   s,   zt |}W n
 ty   Y dS w || jv S r   )r   r    r=   )r   r<   r>   r   r   r   rU     s   
zWeakKeyDictionary.__contains__c                 c   s\    t |  | j D ]\}}| }|d ur||fV  qW d    d S 1 s'w   Y  d S r'   r   r=   r`   )r   r>   r^   r<   r   r   r   r`     s   

"zWeakKeyDictionary.itemsc                 c   sP    t |  | jD ]}| }|d ur|V  q	W d    d S 1 s!w   Y  d S r'   )r   r=   rp   r   r   r   rl     s   

"zWeakKeyDictionary.keysc                 c   sT    t |  | j D ]\}}| d ur|V  qW d    d S 1 s#w   Y  d S r'   r   )r   r>   r^   r   r   r   rn     s   

"zWeakKeyDictionary.valuesc                 C   s   	 t | jS r'   )rx   r=   rS   r   r   r   keyrefs  s   
	zWeakKeyDictionary.keyrefsc                 C   s.   d| _ 	 | j \}}| }|d ur||fS qr   )r   r=   rq   )r   r<   r^   rN   r   r   r   rq     s   zWeakKeyDictionary.popitemc                 G   s   d| _ | jjt|g|R  S r   )r   r=   rG   r   )r   r<   rr   r   r   r   rG     s   zWeakKeyDictionary.popc                 C   s   | j t|| j|S r'   )r=   rs   r   rB   r   r   r   r   rs     r   zWeakKeyDictionary.setdefaultc                K   s`   | j }|d ur#t|dsti |}| D ]\}}||t|| j< qt|r.| | d S d S rt   )r=   ru   r"   r`   r   rB   rR   rD   )r   rv   rw   rI   r<   r^   r   r   r   rD     s   
zWeakKeyDictionary.updatec                 C   rz   r'   r{   r/   r   r   r   r|   	  r}   zWeakKeyDictionary.__ior__c                 C   r~   r'   r   r   r   r   r   r     r   zWeakKeyDictionary.__or__c                 C   r   r'   r   r   r   r   r   r     r   zWeakKeyDictionary.__ror__r'   )r3   r4   r5   rF   rJ   r   rQ   rO   rT   rZ   r_   rb   r   rf   rh   rU   r`   rl   r   rn   r   rq   rG   rs   rD   r|   r   r   r   r   r   r   r   e  s6    

	




r   c                   @   s   e Zd Z	 dZi ZdZe ZdZ	dZ
G dd dZdd Zddd	Zd
d Zdd Zedd Zedd Zejdd Zdd Zedd Zedd ZdS )r   r   Fc                   @   s   e Zd ZdZdS )zfinalize._Info)weakrefr&   rr   rw   atexitindexN)r3   r4   r5   r6   r   r   r   r   _Info6  s    r   c                O   sp   | j sdd l}|| j dt_ |  }t|| |_||_||_	|p#d |_
d|_t| j|_|| j| < dt_d S )Nr   T)_registered_with_atexitr   register	_exitfuncr   r   r   r   r&   rr   rw   next_index_iterr   	_registry_dirty)r   r%   r&   rr   rw   r   infor   r   r   rF   9  s   


zfinalize.__init__Nc                 C   s:   	 | j | d }|r| js|j|ji |jpi S d S d S r'   )r   rG   	_shutdownr&   rr   rw   )r   _r   r   r   r   r)   J  s
   
zfinalize.__call__c                 C   sN   	 | j | }|o| }|d ur#| j | d r%||j|j|jp!i fS d S d S r'   )r   rh   r   rG   r&   rr   rw   r   r   r%   r   r   r   detachQ  s   zfinalize.detachc                 C   s<   	 | j | }|o| }|d ur||j|j|jpi fS d S r'   )r   rh   r   r&   rr   rw   r   r   r   r   peekY  s   zfinalize.peekc                 C   s   	 | | j v S r'   )r   rS   r   r   r   alivea  s   
zfinalize.alivec                 C   s   	 | j | }t|o|jS r'   r   rh   boolr   )r   r   r   r   r   r   f  s   zfinalize.atexitc                 C   s"   | j | }|rt||_d S d S r'   r   )r   r^   r   r   r   r   r   l  s   c                 C   sZ   | j | }|o| }|d u rdt| jt| f S dt| jt| t|jt|f S )Nz<%s object at %#x; dead>z!<%s object at %#x; for %r at %#x>)r   rh   r   r"   r3   rY   r   r   r   r   rZ   r  s   zfinalize.__repr__c                 C   s2   dd | j  D }|jdd d dd |D S )Nc                 S   s   g | ]\}}|j r||fqS r   )r   r   fir   r   r   r   ~  s    z-finalize._select_for_exit.<locals>.<listcomp>c                 S   s
   | d j S )N   )r   )itemr   r   r   <lambda>  s   
 z+finalize._select_for_exit.<locals>.<lambda>r   c                 S   s   g | ]\}}|qS r   r   r   r   r   r   r     s    )r   r`   sort)r$   Lr   r   r   _select_for_exit{  s   zfinalize._select_for_exitc                 C   s   d}zN| j rCdd l}| rd}|  d }	 |d u stjr%|  }dt_|s(n| }z|  W n tyA   t	j
t	   Y nw qW dt_|rO|  d S d S dt_|r[|  w w )NFr   T)r   gcZ	isenabledZdisabler   r   r   rG   	Exceptionsys
excepthookexc_infor   Zenable)r$   Zreenable_gcr   Zpendingr   r   r   r   r     s<   

zfinalize._exitfuncr'   )r3   r4   r5   r6   r   r   	itertoolscountr   r   r   r   rF   r)   r   r   propertyr   r   setterrZ   classmethodr   r   r   r   r   r   r     s0    



	
r   )_weakrefr   r   r   r   r   r   r   r	   _weakrefsetr
   r   r   r   r   r   __all__Setr   
MutableSetr   MutableMappingr   r\   r   r   r   r   r   r   <module>   s"    (
6 t 9