o
    ê}”e(  ã                   @  s´   d dl mZ d dlZd dlmZ d dlmZ ejej	e
e
f ee
f ZG dd„ dƒZde_G dd„ dƒZddd„ZeefZG dd„ deƒZ	dddd„Zddd„ZG dd„ dƒZdS )é    )ÚannotationsN)Úref)ÚBoundMethodWeakrefc                   @  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)Ú__name__Úname)Úselfr   © r	   ú[/Users/abhinavbhinder/Documents/map/venv/lib/python3.10/site-packages/blinker/_utilities.pyÚ__init__   s   z_symbol.__init__c                 C  s   t | jffS ©N)Úsymbolr   ©r   r	   r	   r
   Ú
__reduce__   s   z_symbol.__reduce__c                 C  s   | j S r   )r   r   r	   r	   r
   Ú__repr__   s   z_symbol.__repr__N)r   Ú
__module__Ú__qualname__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   )ÚsymbolsÚKeyErrorÚ
setdefaultr   )Úclsr   r	   r	   r
   Ú__new__+   s
   ÿzsymbol.__new__N)r   r   r   Ú__doc__r   r   r	   r	   r	   r
   r      s    ÚobjÚobjectÚreturnÚIdentityTypec                 C  sV   t | dƒrt| jƒt| jƒfS t | dƒrt| jƒt| jƒfS t| ttfƒr'| S t| ƒS )NÚ__func__Úim_func)	ÚhasattrÚidr   Ú__self__r   Úim_selfÚ
isinstanceÚintÚstr)r   r	   r	   r
   Úhashable_identity2   s   

r&   c                   @  s"   e Zd ZU dZded< ded< dS )Úannotatable_weakrefz7A weakref.ref that supports custom instance attributes.zt.Optional[IdentityType]Zreceiver_idZ	sender_idN)r   r   r   r   Ú__annotations__r	   r	   r	   r
   r'   @   s   
 r'   c                 K  s@   t | ƒr
t| |ƒ}nt| |ƒ}| ¡ D ]
\}}t|||ƒ q|S )zReturn an annotated weak ref.)ÚcallableÚcallable_referencer'   ÚitemsÚsetattr)r   Úcallbackr   ZweakÚkeyÚvaluer	   r	   r
   Ú	referenceG   s   
r0   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.r"   N)ÚtargetZ	on_deleter!   )r   r"   r   r!   r'   )r   r-   r	   r	   r
   r*   T   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   )Ú	_deferredr   )r   Údeferredr	   r	   r
   r   `   s   zlazy_property.__init__c                 C  s*   |d u r| S |   |¡}t|| j j|ƒ |S r   )r3   r,   r   )r   r   r   r/   r	   r	   r
   Ú__get__d   s
   
zlazy_property.__get__N)r   r   r   r   r   r5   r	   r	   r	   r
   r2   ]   s    r2   )r   r   r   r   r   )r   r'   )Ú
__future__r   ÚtypingÚtÚweakrefr   Zblinker._saferefr   ÚUnionÚTupler$   r%   r   r   r   r   r&   Z	WeakTypesr'   r0   r*   r2   r	   r	   r	   r
   Ú<module>   s    
ÿ
	