a
    d	                     @   s:   G d d dZ e dZe dZe dZe dZe dZdS )c                   @   sN   e Zd ZdZdd ZdddZdddZdd
dZdd Zdd Z	dd Z
dS )Registrya  
    The registry that provides name -> object mapping, to support third-party
    users' custom modules.

    To create a registry (e.g. a backbone registry):

    .. code-block:: python

        BACKBONE_REGISTRY = Registry('BACKBONE')

    To register an object:

    .. code-block:: python

        @BACKBONE_REGISTRY.register()
        class MyBackbone():
            ...

    Or:

    .. code-block:: python

        BACKBONE_REGISTRY.register(MyBackbone)
    c                 C   s   || _ i | _dS )zI
        Args:
            name (str): the name of this registry
        N)_name_obj_mapselfname r   _/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/basicsr/utils/registry.py__init__   s    zRegistry.__init__Nc                 C   sF   t |tr|d | }|| jvs8J d| d| j d|| j|< d S )N_zAn object named 'z' was already registered in '' registry!)
isinstancestrr   r   )r   r   objsuffixr   r   r   _do_register&   s    

zRegistry._do_registerc                    s2   |du r fdd}|S |j } || dS )z
        Register the given object under the the name `obj.__name__`.
        Can be used as either a decorator or not.
        See docstring of this class for usage.
        Nc                    s   | j } ||  | S N__name__r   )Zfunc_or_classr   r   r   r   r   deco6   s    zRegistry.register.<locals>.decor   )r   r   r   r   r   r   r   r   register.   s
    zRegistry.registerbasicsrc                 C   sh   | j |}|d u rD| j |d | }td| d| d| d |d u rdtd| d| j d|S )Nr
   zName z is not found, use name: !zNo object named 'z' found in 'r   )r   getprintKeyErrorr   )r   r   r   retr   r   r   r   A   s    zRegistry.getc                 C   s
   || j v S r   )r   r   r   r   r   __contains__J   s    zRegistry.__contains__c                 C   s   t | j S r   )iterr   itemsr   r   r   r   __iter__M   s    zRegistry.__iter__c                 C   s
   | j  S r   )r   keysr    r   r   r   r"   P   s    zRegistry.keys)N)NN)r   )r   
__module____qualname____doc__r	   r   r   r   r   r!   r"   r   r   r   r   r      s   


	r   ZdatasetarchmodelZlossZmetricN)r   ZDATASET_REGISTRYZARCH_REGISTRYZMODEL_REGISTRYZLOSS_REGISTRYZMETRIC_REGISTRYr   r   r   r   <module>   s
   P