o
    Ø ÔQi  ã                   @   s$  d dl mZ d dlmZ ze W n ey   dd„ ZY nw zd dlmZ W n   G dd„ deƒZY zd dl	m
Z
 W n eyH   d	d
„ Z
Y nw G dd„ deƒZde_G dd„ deƒZzeefZW n eym   eZY nw dd„ ZeefZG dd„ deƒZddd„Zddd„ZG dd„ deƒZdS )é    )Úref)ÚBoundMethodWeakrefc                 C   s
   t | dƒS )NÚ__call__)Úhasattr)Úobject© r   ú4/usr/lib/python3/dist-packages/blinker/_utilities.pyÚcallable	   s   
r	   )Údefaultdictc                   @   sN   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S )r
   Nc                 O   s<   |d urt |dƒstdƒ‚tj| g|¢R i |¤Ž || _d S )Nr   zfirst argument must be callable)r   Ú	TypeErrorÚdictÚ__init__Údefault_factory)Úselfr   ÚaÚkwr   r   r   r      s   ÿ
zdefaultdict.__init__c                 C   s,   zt  | |¡W S  ty   |  |¡ Y S w ©N)r   Ú__getitem__ÚKeyErrorÚ__missing__)r   Úkeyr   r   r   r      s
   ÿzdefaultdict.__getitem__c                 C   s&   | j d u r	t|ƒ‚|   ¡  | |< }|S r   )r   r   )r   r   Úvaluer   r   r   r      s   
zdefaultdict.__missing__c                 C   s0   | j d u r	tƒ }n| j f}t| ƒ|d d |  ¡ fS r   )r   ÚtupleÚtypeÚitems)r   Úargsr   r   r   Ú
__reduce__%   s   
zdefaultdict.__reduce__c                 C   s   |   ¡ S r   )Ú__copy__©r   r   r   r   Úcopy,   ó   zdefaultdict.copyc                 C   s   t | ƒ| j| ƒS r   )r   r   r   r   r   r   r   /   s   zdefaultdict.__copy__c                 C   s"   dd l }t| ƒ| j| |  ¡ ¡ƒS )Nr   )r   r   r   Údeepcopyr   )r   Úmemor   r   r   r   Ú__deepcopy__2   s   
ÿzdefaultdict.__deepcopy__c                 C   s   d| j t | ¡f S )Nzdefaultdict(%s, %s))r   r   Ú__repr__r   r   r   r   r$   7   s   ÿzdefaultdict.__repr__r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r#   r$   r   r   r   r   r
      s    
r
   )Úcontextmanagerc                 C   s   dd„ }| j |_ |S )Nc                  _   s   t dƒ‚)Nz8Python 2.5 or above is required to use context managers.)ÚRuntimeError)r   r   r   r   r   Úoops@   r    zcontextmanager.<locals>.oops)r%   )Úfnr*   r   r   r   r(   ?   s   r(   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_symbolc                 C   s   | | _ | _dS )zConstruct a new named symbol.N)r%   Úname)r   r-   r   r   r   r   H   s   z_symbol.__init__c                 C   s   t | jffS r   )Úsymbolr-   r   r   r   r   r   L   s   z_symbol.__reduce__c                 C   s   | j S r   )r-   r   r   r   r   r$   O   s   z_symbol.__repr__N)r%   r&   r'   r   r   r$   r   r   r   r   r,   F   s    r,   r.   c                   @   s   e Zd ZdZi Zdd„ ZdS )r.   a?  A constant symbol.

    >>> symbol('foo') is symbol('foo')
    True
    >>> symbol('foo')
    foo

    A slight refinement of the MAGICCOOKIE=object() pattern.  The primary
    advantage of symbol() is its repr().  They are also singletons.

    Repeated calls of symbol('name') will all return the same instance.

    c                 C   s2   z| j | W S  ty   | j  |t|ƒ¡ Y S w r   )Úsymbolsr   Ú
setdefaultr,   )Úclsr-   r   r   r   Ú__new__d   s
   ÿzsymbol.__new__N)r%   r&   r'   Ú__doc__r/   r2   r   r   r   r   r.   T   s    c                 C   sR   t | dƒrt| jƒt| jƒfS t | dƒrt| jƒt| jƒfS t| tƒr%| S t| ƒS )NÚ__func__Úim_func)r   Úidr4   Ú__self__r5   Úim_selfÚ
isinstanceÚtext)Úobjr   r   r   Úhashable_identityq   s   


r<   c                   @   s   e Zd ZdZdS )Úannotatable_weakrefz7A weakref.ref that supports custom instance attributes.N)r%   r&   r'   r3   r   r   r   r   r=      s    r=   Nc                 K   s@   t | ƒr
t| |ƒ}nt| |ƒ}| ¡ D ]
\}}t|||ƒ q|S )zReturn an annotated weak ref.)r	   Úcallable_referencer=   r   Úsetattr)r   ÚcallbackÚannotationsÚweakr   r   r   r   r   Ú	referenceƒ   s   
rC   c                 C   sJ   t | dƒr| jdurt| |dS t | dƒr | jdur t| |dS t| |ƒS )z@Return an annotated weak ref, supporting bound instance methods.r8   N)ÚtargetÚ	on_deleter7   )r   r8   r   r7   r=   )r   r@   r   r   r   r>   Ž   s
   
r>   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Úlazy_propertyz(A @property that is only evaluated once.c                 C   s   || _ |j| _d S r   )Ú	_deferredr3   )r   Údeferredr   r   r   r   š   s   zlazy_property.__init__c                 C   s*   |d u r| S |   |¡}t|| j j|ƒ |S r   )rG   r?   r%   )r   r;   r1   r   r   r   r   Ú__get__ž   s
   
zlazy_property.__get__N)r%   r&   r'   r3   r   rI   r   r   r   r   rF   —   s    rF   r   )Úweakrefr   Úblinker._saferefr   r	   Ú	NameErrorÚcollectionsr
   r   Ú
contextlibr(   ÚImportErrorr   r,   r%   r.   ÚstrÚunicoder:   r<   Ú	WeakTypesr=   rC   r>   rF   r   r   r   r   Ú<module>   s<    ÿ,ÿÿ

	