# registry

Python API: `luxonis_ml.utils.registry`

## Classes

### AutoRegisterMeta

Metaclass for automatically registering modules.

Can be set as a metaclass for abstract base classes. All subclasses of that class will be automatically registered.

> **Example**
> ```pycon
>>> REGISTRY = Registry(name="modules")
>>> class Base(
...     metaclass=AutoRegisterMeta,
...     registry=REGISTRY,
...     register=False
... ):
...     pass
>>> class Foo(Base):
...     pass
>>> class Bar(Base, register_name="Baz"):
...     pass
>>> REGISTRY.get("Foo").__name__
'Foo'
>>> Base.REGISTRY.get("Baz").__name__
'Bar'
```

#### Attributes

##### REGISTRY

The internal registry defined on the base class.

### Registry

A registry to store and retrieve modules.

The registry stores a mapping from string keys to module classes. It provides an interface to register modules and later retrieve them by their string names.

#### Methods

##### init

```python
def __init__(name: str):
```

Create a new empty registry.

Parameters

 * `name` (`str`): The name of the registry, used for error messages.

##### get

```python
def get(key: str) -> T:
```

Retrieve the registry record for the key.

Parameters

 * `key` (`str`): The name of the registered item.

Returns

 * `T`: The registered item corresponding to the key.

Raises

 * `KeyError`: If the key is not found in the registry.

##### register

```python
def register(module: T | None = None, *, name: str | None = None, force: bool = False) -> Callable[[T], T] | None:
```

Register a module.

Can be used as a decorator or as a normal method:

> **Example**
> ```pycon
>>> registry = Registry(name="modules")
>>> @registry.register()
... class Foo:
...     pass
>>> registry.get("Foo").__name__
'Foo'
>>> class Bar:
...     pass
>>> registry.register(module=Bar)
>>> registry.get("Bar").__name__
'Bar'
```

Parameters

 * `module` (`T | None`): The module class to be registered.
 * `name` (`str | None`): The name of the module. If `None`, then use class name.
 * `force` (`bool`): Whether to override an existing class with the same name.

Returns

 * `Callable[[T], T] | None`: `None` if used as a normal method, or a decorator function if used as a decorator.

Raises

 * `KeyError`: If a module with the same name already exists and `force` is `False`.

##### register_module

```python
def register_module(name: str | None = None, module: T | None = None, force: bool = False) -> T | Callable[[T], T]:
```

Register a module. Deprecated, use
[register](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/luxonis-ml/luxonis-ml-api-reference/utils/registry.md)
instead.

> **Deprecated**
> Deprecated since version 0.6.0:Use [register](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/luxonis-ml/luxonis-ml-api-reference/utils/registry.md) instead.

Parameters

 * `name` (`str | None`): Name of the module. If `None`, the class name is used.
 * `module` (`T | None`): Module class to be registered.
 * `force` (`bool`): Whether to override an existing class with the same name.

Returns

 * `T | Callable[[T], T]`: Registered module or decorator returned by
   [register](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/luxonis-ml/luxonis-ml-api-reference/utils/registry.md).

Raises

 * `KeyError`: If a module with the same name already exists and `force` is `False`.

#### Attributes

##### name

The name of the registry.

## Attributes

### T
