o
    i}                     @   s4   d dl mZ G dd deZG dd deedZdS )    )TypeVarc                       s`   e Zd Zedd dZi Z fddZdee deddfd	d
Zdee def fddZ	  Z
S )SingletonMetaclassT)boundc                    s0   | | j vrtt| j|i || j | < | j |  S N)
_instancessuperr   __call__clsargskwargs	__class__ :/mnt/c/Users/fbmor/ComfyUI/comfy_api/internal/singleton.pyr	      s   


zSingletonMetaclass.__call__r   instancereturnNc                 C   s    | t jvs	J d|t j| < d S )Nz0Cannot inject instance after first instantiation)r   r   )r   r   r   r   r   inject_instance   s   z"SingletonMetaclass.inject_instancec                    s0   | t jvrtt | j|i |t j| < | j|  S )z\
        Gets the singleton instance of the class, creating it if it doesn't exist.
        )r   r   r   r	   r
   r   r   r   get_instance   s   

zSingletonMetaclass.get_instance)__name__
__module____qualname__r   r   r   r	   typer   r   __classcell__r   r   r   r   r      s    "r   c                       s   e Zd Z fddZ  ZS )ProxiedSingletonc                    s   t    d S r   )r   __init__)selfr   r   r   r       s   zProxiedSingleton.__init__)r   r   r   r   r   r   r   r   r   r      s    r   )	metaclassN)typingr   r   r   objectr   r   r   r   r   <module>   s    