U
    ॡc4                     @   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 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   6/tmp/pip-unpacked-wheel-6t07qzen/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   s.   | j d krd}n| j f}t| |d d |  fS )Nr   )r   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| S )Nzdefaultdict({}, {}))formatr   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
   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   >   s    z_symbol.__init__c                 C   s   t | jffS r   )symbolr(   r   r   r   r   r   B   s    z_symbol.__reduce__c                 C   s   | j S r   )r(   r   r   r   r   r#   E   s    z_symbol.__repr__N)r$   r%   r&   r   r   r#   r   r   r   r   r'   <   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__Z   s    zsymbol.__new__N)r$   r%   r&   __doc__r*   r-   r   r   r   r   r)   J   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   idr/   __self__r0   im_self
isinstancetext)objr   r   r   hashable_identityg   s    


r7   c                   @   s   e Zd ZdZdS )annotatable_weakrefz7A weakref.ref that supports custom instance attributes.N)r$   r%   r&   r.   r   r   r   r   r8   u   s   r8   Nc                 K   s@   t | rt| |}n
t| |}| D ]\}}t||| q&|S )zReturn an annotated weak ref.)r	   callable_referencer8   r   setattr)r   callbackannotationsZweakr   r   r   r   r   	referencey   s    
r=   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.r3   N)targetZ	on_deleter2   )r   r3   r   r2   r8   )r   r;   r   r   r   r9      s
    r9   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   )	_deferredr.   )r   deferredr   r   r   r      s    zlazy_property.__init__c                 C   s*   |d kr| S |  |}t|| j j| |S r   )r@   r:   r$   )r   r6   r,   r   r   r   r   __get__   s
    
zlazy_property.__get__N)r$   r%   r&   r.   r   rB   r   r   r   r   r?      s   r?   )N)N)weakrefr   Zblinker._saferefr   r	   	NameErrorcollectionsr
   r   r   r'   r$   r)   strunicoder5   r7   Z	WeakTypesr8   r=   r9   r?   r   r   r   r   <module>   s,   ,


	