U
    ®[Öei  ã                   @   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   úT/var/www/html/services/stratfitenv/lib/python3.8/site-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   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   ,


	