a
    ai                     @  s   d dl mZ d dlmZ d dlZd dlZd dlm	Z	 d dlm
Z
 edZG dd dZdd	d
ddZdddddddZdS )    )annotationsN)ref)
WeakMethodTc                      sb   e Zd ZU dZi Zded< dd d fddZdddd	d
ZddddZddddZ	  Z
S )SymbolzA constant symbol, nicer than ``object()``. Repeated calls return the
    same instance.

    >>> Symbol('foo') is Symbol('foo')
    True
    >>> Symbol('foo')
    foo
    zt.ClassVar[dict[str, Symbol]]symbolsstr)namereturnc                   s.   || j v r| j | S t | }|| j |< |S N)r   super__new__)clsr	   obj	__class__ L/var/www/html/SiteWeb/venv/lib/python3.9/site-packages/blinker/_utilities.pyr      s
    


zSymbol.__new__Nonec                 C  s
   || _ d S r   r	   )selfr	   r   r   r   __init__    s    zSymbol.__init__)r
   c                 C  s   | j S r   r   r   r   r   r   __repr__#   s    zSymbol.__repr__ztuple[t.Any, ...]c                 C  s   | j fS r   r   r   r   r   r   __getnewargs__&   s    zSymbol.__getnewargs__)__name__
__module____qualname____doc__r   __annotations__r   r   r   r   __classcell__r   r   r   r   r      s   
	r   objectz
c.Hashable)r   r
   c                 C  s8   t | rt| jt| jfS t| ttfr0| S t| S )z`Get a stable identifier for a receiver or sender, to be used as a dict
    key or in a set.
    )inspectismethodid__func____self__
isinstancer   int)r   r   r   r   make_id*   s
    
r)   z!c.Callable[[ref[T]], None] | Nonezref[T])r   callbackr
   c                 C  s   t | rt| |S t| |S r   )r"   r#   r   r   )r   r*   r   r   r   make_ref<   s    

r+   )N)
__future__r   collections.abcabccr"   typingtweakrefr   r   TypeVarr   r   r)   r+   r   r   r   r   <module>   s   
