from copy import deepcopy import torch.nn as nn from mmengine.registry import Registry def build_module(module, builder, **kwargs): """Build module from config or return the module itself. Args: module (Union[dict, nn.Module]): The module to build. builder (Registry): The registry to build module. *args, **kwargs: Arguments passed to build function. Returns: Any: The built module. """ if isinstance(module, dict): cfg = deepcopy(module) for k, v in kwargs.items(): cfg[k] = v return builder.build(cfg) elif isinstance(module, nn.Module): return module elif module is None: return None else: raise TypeError(f"Only support dict and nn.Module, but got {type(module)}.") MODELS = Registry( "model", locations=["opensora.models"], ) SCHEDULERS = Registry( "scheduler", locations=["opensora.schedulers"], )