U
    ǆ^i                     @   s.  d dl mZ d dlmZ ze W n ek
r<   dd ZY nX zd dlmZ W n   G dd deZY nX zd dl	m
Z
 W n ek
r   d	d
 Z
Y nX G dd deZde_G dd deZzeefZW n ek
r   eZY nX 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   7/tmp/pip-install-bw96x17f/blinker/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   s6   |d k	rt |dstdtj| f|| || _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   s2   zt | |W S  tk
r,   | | Y S X d S N)r   __getitem__KeyError__missing__)r   keyr   r   r   r      s    zdefaultdict.__getitem__c                 C   s&   | j d krt||    | |< }|S r   )r   r   )r   r   valuer   r   r   r      s    
zdefaultdict.__missing__c                 C   s0   | j d k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,   s    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__)N)__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d S )Nz8Python 2.5 or above is required to use context managers.)RuntimeError)r   r   r   r   r   oops@   s    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   s8   z| j | W S  tk
r2   | j |t| Y S X d S r   )symbolsr   
setdefaultr+   )clsr,   r   r   r   __new__d   s    zsymbol.__new__N)r$   r%   r&   __doc__r.   r1   r   r   r   r   r-   T   s   c                 C   sV   t | drt| jt| jfS t | dr<t| jt| jfS t| trJ| S t| S d S )N__func__im_func)r   idr3   __self__r4   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&   r2   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annotationsZweakr   r   r   r   r   	reference   s    
rA   c                 C   sJ   t | dr | jdk	r t| |dS t | dr@| jdk	r@t| |dS t| |S )z@Return an annotated weak ref, supporting bound instance methods.r7   N)targetZ	on_deleter6   )r   r7   r   r6   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   )	_deferredr2   )r   deferredr   r   r   r      s    zlazy_property.__init__c                 C   s*   |d kr| S |  |}t|| j j| |S r   )rD   r>   r$   )r   r:   r0   r   r   r   r   __get__   s
    
zlazy_property.__get__N)r$   r%   r&   r2   r   rF   r   r   r   r   rC      s   rC   )N)N)weakrefr   Zblinker._saferefr   r	   	NameErrorcollectionsr
   r   
contextlibr'   ImportErrorr   r+   r$   r-   strunicoder9   r;   Z	WeakTypesr<   rA   r=   rC   r   r   r   r   <module>   s4   ,


	