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   Zdeepcopyr   )r   Z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-   r0   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   idr2   __self__r3   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%   r1   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   callbackZannotationsZweakr   r   r   r   r   	reference   s   
r?   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.r6   N)targetZ	on_deleter5   )r   r6   r   r5   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   )	_deferredr1   )r   Zdeferredr   r   r   r      s   zlazy_property.__init__c                 C   s*   |d u r| S |  |}t|| j j| |S r   )rB   r=   r#   )r   r9   r/   r   r   r   r   __get__   s
   
zlazy_property.__get__N)r#   r$   r%   r1   r   rC   r   r   r   r   rA      s    rA   r   )weakrefr   Zblinker._saferefr   r	   	NameErrorcollectionsr
   r   
contextlibr&   ImportErrorr   r*   r#   r,   strZunicoder8   r:   Z	WeakTypesr;   r?   r<   rA   r   r   r   r   <module>   s<    ,

	