o
    ϯi	                     @   sH   d dl mZmZmZmZmZ d dlmZ G dd deeeef  ZdS )    )AnyDictIterableIteratorTuple)tabulatec                   @   s   e Zd ZdZdeddfddZdededdfdd	Zddedefd
dZdedefddZ	dede
fddZdefddZdeeeef  fddZe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)
    namereturnNc                 C   s   || _ i | _dS )zI
        Args:
            name (str): the name of this registry
        N)_name_obj_mapselfr	    r   J/home/ubuntu/.local/lib/python3.10/site-packages/fvcore/common/registry.py__init__"   s   
zRegistry.__init__objc                 C   s*   || j vsJ d|| j|| j |< d S )Nz=An object named '{}' was already registered in '{}' registry!)r   formatr   )r   r	   r   r   r   r   _do_register*   s   zRegistry._do_registerc                    s8   |du rdt dt f 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.
        Nfunc_or_classr
   c                    s   | j } ||  | S N)__name__r   )r   r	   r   r   r   deco9   s   zRegistry.register.<locals>.deco)r   r   r   )r   r   r   r	   r   r   r   register2   s
   zRegistry.registerc                 C   s*   | j |}|d u rtd|| j|S )Nz,No object named '{}' found in '{}' registry!)r   getKeyErrorr   r   )r   r	   retr   r   r   r   D   s   zRegistry.getc                 C   s
   || j v S r   )r   r   r   r   r   __contains__L   s   
zRegistry.__contains__c                 C   s,   ddg}t | j |dd}d| j| S )NNamesObjects
fancy_grid)headerstablefmtzRegistry of {}:
)r   r   itemsr   r   )r   table_headerstabler   r   r   __repr__O   s
   zRegistry.__repr__c                 C   s   t | j S r   )iterr   r$   r   r   r   r   __iter__V   s   zRegistry.__iter__r   )r   
__module____qualname____doc__strr   r   r   r   r   boolr   r'   r   r   r)   __str__r   r   r   r   r      s    r   N)	typingr   r   r   r   r   r   r-   r   r   r   r   r   <module>   s    