o
    ˷e4                     @   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 G dd	 d	e	Z
d
e
_G dd
 d
e	ZzeefZW n eyW   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   I/var/www/ideatree/venv/lib/python3.10/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   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   s.   | j d u 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__r   )__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   s2   z| j | W S  ty   | j |t| Y S w 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   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   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annotationsweakr   r   r   r   r   	referencey   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.r3   N)target	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 u r| S |  |}t|| j j| |S r   )rB   r:   r$   )r   r6   r,   r   r   r   r   __get__   s
   
zlazy_property.__get__N)r$   r%   r&   r.   r   rD   r   r   r   r   rA      s    rA   r   )weakrefr   blinker._saferefr   r	   	NameErrorcollectionsr
   r   r   r'   r$   r)   strunicoder5   r7   	WeakTypesr8   r>   r9   rA   r   r   r   r   <module>   s2    ,

	