???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \O                 @   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dddddd	d
ddddddgZ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_IterationGuardNr   r   r   r   WeakKeyDictionaryr   r   r   
ProxyTypesWeakValueDictionaryr
   
WeakMethodfinalizec                   s@   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                s~   y|j }|j}W n( tk
r8   tdjt|d Y nX  fdd}tj| ||}t|||_t||_	d|_
t||S )Nz)argument should be a bound method, not {}c                s&    }|j r"d|_  d k	r" | d S )NF)r   )argself)callbackself_wr /usr/lib64/python3.6/weakref.py_cb3   s
    zWeakMethod.__new__.<locals>._cbT)__self____func__AttributeError	TypeErrorformattyper   __new__r   r   r   )clsmethr   objfuncr   r   r   )r   r   r   r"   ,   s    

zWeakMethod.__new__c                s2   t  j }| j }|d ks"|d kr&d S | j||S )N)super__call__r   r   )r   r%   r&   )	__class__r   r   r(   B   s
    
zWeakMethod.__call__c             C   s>   t |tr:| j s|j r"| |kS tj| |o8| j|jkS dS )NF)
isinstancer   r   r   __eq__r   )r   otherr   r   r   r+   I   s
    
zWeakMethod.__eq__c             C   s>   t |tr:| j s|j r"| |k	S tj| |p8| j|jkS dS )NT)r*   r   r   r   __ne__r   )r   r,   r   r   r   r-   P   s
    
zWeakMethod.__ne__)r   r   r   r   )N)__name__
__module____qualname__	__slots__r"   r(   r+   r-   r   __hash____classcell__r   r   )r)   r   r   $   s   
c               @   s   e Z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
dd ZeZdd Zd*ddZdd Zdd ZeZdd Zdd Zd d! Zd"d# Zd+d$d%Zd&d' Zd(d) ZdS ),r   c                 st   | st d| ^}} t| dkr0t dt|  t|tf fdd	}||_g |_t |_i  |_ |j	| | d S )NzGdescriptor '__init__' of 'WeakValueDictionary' object needs an argument   z$expected at most 1 arguments, got %dc                s4   | }|d k	r0|j r$|jj| j n| | j d S )N)
_iterating_pending_removalsappendkey)wrselfref_atomic_removalr   )dr   r   removem   s
    z,WeakValueDictionary.__init__.<locals>.remove)
r   lenr   r	   _remover6   setr5   dataupdate)argskwr   r=   r   )r<   r   __init__f   s    	
zWeakValueDictionary.__init__c             C   s,   | j }| j}x|r&|j }t|| qW d S )N)r6   rA   popr	   )r   lr<   r8   r   r   r   _commit_removals}   s
    z$WeakValueDictionary._commit_removalsc             C   s4   | j r| j  | j|  }|d kr,t|n|S d S )N)r6   rH   rA   KeyError)r   r8   or   r   r   __getitem__   s    
zWeakValueDictionary.__getitem__c             C   s   | j r| j  | j|= d S )N)r6   rH   rA   )r   r8   r   r   r   __delitem__   s    zWeakValueDictionary.__delitem__c             C   s   | j r| j  t| jS )N)r6   rH   r>   rA   )r   r   r   r   __len__   s    zWeakValueDictionary.__len__c             C   s<   | j r| j  y| j|  }W n tk
r2   dS X |d k	S )NF)r6   rH   rA   rI   )r   r8   rJ   r   r   r   __contains__   s    z WeakValueDictionary.__contains__c             C   s   d| j jt| f S )Nz<%s at %#x>)r)   r.   id)r   r   r   r   __repr__   s    zWeakValueDictionary.__repr__c             C   s&   | j r| j  t|| j|| j|< d S )N)r6   rH   KeyedRefr?   rA   )r   r8   valuer   r   r   __setitem__   s    zWeakValueDictionary.__setitem__c             C   sF   | j r| j  t }x,| jj D ]\}}| }|d k	r |||< q W |S )N)r6   rH   r   rA   items)r   newr8   r9   rJ   r   r   r   copy   s    zWeakValueDictionary.copyc             C   sZ   ddl m} | jr| j  | j }x2| jj D ]$\}}| }|d k	r.|||||< q.W |S )Nr   )deepcopy)rV   rW   r6   rH   r)   rA   rT   )r   memorW   rU   r8   r9   rJ   r   r   r   __deepcopy__   s    z WeakValueDictionary.__deepcopy__Nc             C   sL   | j r| j  y| j| }W n tk
r0   |S X | }|d krD|S |S d S )N)r6   rH   rA   rI   )r   r8   defaultr9   rJ   r   r   r   get   s    zWeakValueDictionary.getc          
   c   sV   | j r| j  t| 6 x.| jj D ] \}}| }|d k	r$||fV  q$W W d Q R X d S )N)r6   rH   r   rA   rT   )r   kr9   vr   r   r   rT      s    
zWeakValueDictionary.itemsc          
   c   sN   | j r| j  t| . x&| jj D ]\}}| d k	r$|V  q$W W d Q R X d S )N)r6   rH   r   rA   rT   )r   r\   r9   r   r   r   keys   s    

zWeakValueDictionary.keysc          	   c   s6   | j r| j  t|  | jj E d H  W d Q R X d S )N)r6   rH   r   rA   values)r   r   r   r   itervaluerefs   s    

z!WeakValueDictionary.itervaluerefsc          
   c   sN   | j r| j  t| . x&| jj D ]}| }|d k	r$|V  q$W W d Q R X d S )N)r6   rH   r   rA   r_   )r   r9   r%   r   r   r   r_      s    
zWeakValueDictionary.valuesc             C   s<   | j r| j  x(| jj \}}| }|d k	r||fS qW d S )N)r6   rH   rA   popitem)r   r8   r9   rJ   r   r   r   ra      s    zWeakValueDictionary.popitemc             G   s`   | j r| j  y| jj| }W n tk
r8   d }Y nX |d krX|rN|d S t|n|S d S )Nr   )r6   rH   rA   rF   rI   )r   r8   rC   rJ   r   r   r   rF     s    

zWeakValueDictionary.popc             C   s`   y| j |  }W n tk
r(   d }Y nX |d krX| jr@| j  t|| j|| j |< |S |S d S )N)rA   rI   r6   rH   rQ   r?   )r   r8   rZ   rJ   r   r   r   
setdefault  s    
zWeakValueDictionary.setdefaultc              O   s   | st d| ^}} t| dkr0t dt|  | r<| d nd }|jrN|j  |j}|d k	rt|dsrti |}x&|j D ]\}}t||j	|||< q|W t|r|j
| d S )NzEdescriptor 'update' of 'WeakValueDictionary' object needs an argumentr4   z$expected at most 1 arguments, got %dr   rT   )r   r>   r6   rH   rA   hasattrr!   rT   rQ   r?   rB   )rC   kwargsr   dictr<   r8   rJ   r   r   r   rB      s     
zWeakValueDictionary.updatec             C   s   | j r| j  t| jj S )N)r6   rH   listrA   r_   )r   r   r   r   	valuerefs3  s    
zWeakValueDictionary.valuerefs)N)N)r.   r/   r0   rE   rH   rK   rL   rM   rN   rP   rS   rV   __copy__rY   r[   rT   r^   __iter__r`   r_   ra   rF   rb   rB   rg   r   r   r   r   r   Z   s,   			

			
c                   s(   e Zd ZdZdd Z fddZ  ZS )rQ   r8   c             C   s   t j| ||}||_|S )N)r   r"   r8   )r!   obr   r8   r   r   r   r   r"   N  s    zKeyedRef.__new__c                s   t  j|| d S )N)r'   rE   )r   rj   r   r8   )r)   r   r   rE   S  s    zKeyedRef.__init__)r8   )r.   r/   r0   r1   r"   rE   r3   r   r   )r)   r   rQ   B  s   
rQ   c               @   s   e Zd Zd*d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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d,d&d'Zd-d(d)ZdS ).r   Nc             C   sF   i | _ t| fdd}|| _g | _t | _d| _|d k	rB| j| d S )Nc             S   s.   | }|d k	r*|j r"|jj|  n|j| = d S )N)r5   r6   r7   rA   )r\   r:   r   r   r   r   r=   d  s
    z*WeakKeyDictionary.__init__.<locals>.removeF)rA   r   r?   r6   r@   r5   
_dirty_lenrB   )r   re   r=   r   r   r   rE   b  s    zWeakKeyDictionary.__init__c             C   s>   | j }| j}x,|r8y||j = W q tk
r4   Y qX qW d S )N)r6   rA   rF   rI   )r   rG   r<   r   r   r   rH   s  s    z"WeakKeyDictionary._commit_removalsc                s&   | j   fdd| jD | _d| _d S )Nc                s   g | ]}| kr|qS r   r   ).0r\   )r<   r   r   
<listcomp>  s    z5WeakKeyDictionary._scrub_removals.<locals>.<listcomp>F)rA   r6   rk   )r   r   )r<   r   _scrub_removals  s    z!WeakKeyDictionary._scrub_removalsc             C   s   d| _ | jt|= d S )NT)rk   rA   r   )r   r8   r   r   r   rL     s    zWeakKeyDictionary.__delitem__c             C   s   | j t| S )N)rA   r   )r   r8   r   r   r   rK     s    zWeakKeyDictionary.__getitem__c             C   s(   | j r| jr| j  t| jt| j S )N)rk   r6   rn   r>   rA   )r   r   r   r   rM     s    zWeakKeyDictionary.__len__c             C   s   d| j jt| f S )Nz<%s at %#x>)r)   r.   rO   )r   r   r   r   rP     s    zWeakKeyDictionary.__repr__c             C   s   || j t|| j< d S )N)rA   r   r?   )r   r8   rR   r   r   r   rS     s    zWeakKeyDictionary.__setitem__c             C   s8   t  }x,| jj D ]\}}| }|d k	r|||< qW |S )N)r   rA   rT   )r   rU   r8   rR   rJ   r   r   r   rV     s    zWeakKeyDictionary.copyc             C   sL   ddl m} | j }x2| jj D ]$\}}| }|d k	r |||||< q W |S )Nr   )rW   )rV   rW   r)   rA   rT   )r   rX   rW   rU   r8   rR   rJ   r   r   r   rY     s    zWeakKeyDictionary.__deepcopy__c             C   s   | j jt||S )N)rA   r[   r   )r   r8   rZ   r   r   r   r[     s    zWeakKeyDictionary.getc             C   s,   yt |}W n tk
r    dS X || jkS )NF)r   r   rA   )r   r8   r9   r   r   r   rN     s
    zWeakKeyDictionary.__contains__c          
   c   sH   t | 6 x.| jj D ] \}}| }|d k	r||fV  qW W d Q R X d S )N)r   rA   rT   )r   r9   rR   r8   r   r   r   rT     s
    
zWeakKeyDictionary.itemsc          
   c   s<   t | * x"| jD ]}| }|d k	r|V  qW W d Q R X d S )N)r   rA   )r   r9   r%   r   r   r   r^     s
    
zWeakKeyDictionary.keysc          
   c   s@   t | . x&| jj D ]\}}| d k	r|V  qW W d Q R X d S )N)r   rA   rT   )r   r9   rR   r   r   r   r_     s    

zWeakKeyDictionary.valuesc             C   s
   t | jS )N)rf   rA   )r   r   r   r   keyrefs  s    
zWeakKeyDictionary.keyrefsc             C   s4   d| _ x(| jj \}}| }|d k	r||fS qW d S )NT)rk   rA   ra   )r   r8   rR   rJ   r   r   r   ra     s    zWeakKeyDictionary.popitemc             G   s   d| _ | jjt|f| S )NT)rk   rA   rF   r   )r   r8   rC   r   r   r   rF     s    zWeakKeyDictionary.popc             C   s   | j jt|| j|S )N)rA   rb   r   r?   )r   r8   rZ   r   r   r   rb     s    zWeakKeyDictionary.setdefaultc             K   s`   | j }|d k	rJt|ds$ti |}x$|j D ]\}}||t|| j< q.W t|r\| j| d S )NrT   )rA   rc   r!   rT   r   r?   r>   rB   )r   re   rd   r<   r8   rR   r   r   r   rB     s    
zWeakKeyDictionary.update)N)N)N)N)r.   r/   r0   rE   rH   rn   rL   rK   rM   rP   rS   rV   rh   rY   r[   rN   rT   r^   ri   r_   ro   ra   rF   rb   rB   r   r   r   r   r   W  s,   
	

c               @   s   e Zd Zf Zi ZdZej 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   Fc               @   s   e Zd ZdZdS )	zfinalize._Infoweakrefr&   rC   rd   atexitindexN)rp   r&   rC   rd   rq   rr   )r.   r/   r0   r1   r   r   r   r   _Info  s   rs   c             O   sp   | j s dd l}|j| j dt_ | j }t|| |_||_||_	|pFd |_
d|_t| j|_|| j| < dt_d S )Nr   T)_registered_with_atexitrq   register	_exitfuncr   rs   r   rp   r&   rC   rd   next_index_iterrr   	_registry_dirty)r   r%   r&   rC   rd   rq   infor   r   r   rE     s    

zfinalize.__init__Nc             C   s2   | j j| d }|r.| j r.|j|j|jp*i S d S )N)ry   rF   	_shutdownr&   rC   rd   )r   _r{   r   r   r   r(     s    zfinalize.__call__c             C   sH   | j j| }|o|j }|d k	rD| j j| d rD||j|j|jp@i fS d S )N)ry   r[   rp   rF   r&   rC   rd   )r   r{   r%   r   r   r   detach&  s    zfinalize.detachc             C   s:   | j j| }|o|j }|d k	r6||j|j|jp2i fS d S )N)ry   r[   rp   r&   rC   rd   )r   r{   r%   r   r   r   peek.  s    zfinalize.peekc             C   s
   | | j kS )N)ry   )r   r   r   r   alive6  s    zfinalize.alivec             C   s   | j j| }t|o|jS )N)ry   r[   boolrq   )r   r{   r   r   r   rq   ;  s    zfinalize.atexitc             C   s   | j j| }|rt||_d S )N)ry   r[   r   rq   )r   rR   r{   r   r   r   rq   A  s    c             C   s^   | j j| }|o|j }|d kr6dt| jt| f S dt| jt| t|jt|f S d S )Nz<%s object at %#x; dead>z!<%s object at %#x; for %r at %#x>)ry   r[   rp   r!   r.   rO   )r   r{   r%   r   r   r   rP   G  s    zfinalize.__repr__c             C   s2   dd | j j D }|jdd d dd |D S )Nc             S   s   g | ]\}}|j r||fqS r   )rq   )rl   fir   r   r   rm   S  s    z-finalize._select_for_exit.<locals>.<listcomp>c             S   s
   | d j S )Nr4   )rr   )itemr   r   r   <lambda>T  s    z+finalize._select_for_exit.<locals>.<lambda>)r8   c             S   s   g | ]\}}|qS r   r   )rl   r   r   r   r   r   rm   U  s    )ry   rT   sort)r#   Lr   r   r   _select_for_exitP  s    zfinalize._select_for_exitc             C   s   d}z| j rdd l}|j r(d}|j  d }x\|d ks<tjrJ| j }dt_|sPP |j }y
|  W q. tk
r   t	j
t	j   Y q.X q.W W d dt_|r|j  X d S )NFr   T)ry   gc	isenableddisabler   rz   r   rF   	Exceptionsys
excepthookexc_infor|   enable)r#   reenable_gcr   pendingr   r   r   r   rv   W  s.    
zfinalize._exitfunc)N)r.   r/   r0   r1   ry   r|   	itertoolscountrx   rz   rt   rs   rE   r(   r~   r   propertyr   rq   setterrP   classmethodr   rv   r   r   r   r   r     s"   
	)_weakrefr   r   r   r   r   r   r   r	   _weakrefsetr
   r   collectionsr   r   r   __all__r   MutableMappingr   rQ   r   r   r   r   r   r   <module>   s    (

6 i 