common.registry

Registry is central source of truth in Pythia. Inspired from Redux’s concept of global store, Registry maintains mappings of various information to unique keys. Special functions in registry can be used as decorators to register different kind of classes.

Import the global registry object using

from pythia.common.registry import registry

Various decorators for registry different kind of classes with unique keys

  • Register a task: @registry.register_task
  • Register a trainer: @registry.register_trainer
  • Register a dataset builder: @registry.register_builder
  • Register a metric: @registry.register_metric
  • Register a loss: @registry.register_loss
  • Register a model: @registry.register_model
  • Register a processor: @registry.register_processor
  • Register a optimizer: @registry.register_optimizer
  • Register a scheduler: @registry.register_scheduler
class pythia.common.registry.Registry[source]

Class for registry object which acts as central source of truth for Pythia

classmethod get(name, default=None, no_warning=False)[source]

Get an item from registry with key ‘name’

Parameters:
  • name (string) – Key whose value needs to be retreived.
  • default – If passed and key is not in registry, default value will be returned with a warning. Default: None
  • no_warning (bool) – If passed as True, warning when key doesn’t exist will not be generated. Useful for Pythia’s internal operations. Default: False

Usage:

from pythia.common.registry import registry

config = registry.get("config")
classmethod register(name, obj)[source]

Register an item to registry with key ‘name’

Parameters:name – Key with which the item will be registered.

Usage:

from pythia.common.registry import registry

registry.register("config", {})
classmethod register_builder(name)[source]

Register a dataset builder to registry with key ‘name’

Parameters:name – Key with which the metric will be registered.

Usage:

from pythia.common.registry import registry
from pythia.tasks.base_dataset_builder import BaseDatasetBuilder


@registry.register_builder("vqa2")
class VQA2Builder(BaseDatasetBuilder):
    ...
classmethod register_loss(name)[source]

Register a loss to registry with key ‘name’

Parameters:name – Key with which the loss will be registered.

Usage:

from pythia.common.registry import registry
from torch import nn

@registry.register_task("logit_bce")
class LogitBCE(nn.Module):
    ...
classmethod register_metric(name)[source]

Register a metric to registry with key ‘name’

Parameters:name – Key with which the metric will be registered.

Usage:

from pythia.common.registry import registry
from pythia.modules.metrics import BaseMetric


@registry.register_metric("r@1")
class RecallAt1(BaseMetric):
    ...
classmethod register_model(name)[source]

Register a model to registry with key ‘name’

Parameters:name – Key with which the model will be registered.

Usage:

from pythia.common.registry import registry
from pythia.models.base_model import BaseModel

@registry.register_task("pythia")
class Pythia(BaseModel):
    ...
classmethod register_processor(name)[source]

Register a processor to registry with key ‘name’

Parameters:name – Key with which the processor will be registered.

Usage:

from pythia.common.registry import registry
from pythia.tasks.processors import BaseProcessor

@registry.register_task("glove")
class GloVe(BaseProcessor):
    ...
classmethod register_task(name)[source]

Register a task to registry with key ‘name’

Parameters:name – Key with which the task will be registered.

Usage:

from pythia.common.registry import registry
from pythia.tasks.base_task import BaseTask


@registry.register_task("vqa")
class VQATask(BaseTask):
    ...
classmethod register_trainer(name)[source]

Register a trainer to registry with key ‘name’

Parameters:name – Key with which the trainer will be registered.

Usage:

from pythia.common.registry import registry
from pythia.trainers.custom_trainer import CustomTrainer


@registry.register_trainer("custom_trainer")
class CustomTrainer():
    ...
classmethod unregister(name)[source]

Remove an item from registry with key ‘name’

Parameters:name – Key which needs to be removed.

Usage:

from pythia.common.registry import registry

config = registry.unregister("config")