Spaces:
Build error
Build error
# Copyright (c) Facebook, Inc. and its affiliates. | |
from typing import Any | |
import pydoc | |
from fvcore.common.registry import Registry # for backward compatibility. | |
""" | |
``Registry`` and `locate` provide ways to map a string (typically found | |
in config files) to callable objects. | |
""" | |
__all__ = ["Registry", "locate"] | |
def _convert_target_to_string(t: Any) -> Any: | |
""" | |
Inverse of ``locate()``. | |
""" | |
return f"{t.__module__}.{t.__qualname__}" | |
def locate(name: str) -> Any: | |
""" | |
Locate and return an object ``x`` using an input string ``{x.__module__}.{x.__qualname__}``, | |
such as "module.submodule.class_name". | |
Raise Exception if it cannot be found. | |
""" | |
obj = pydoc.locate(name) | |
# Some cases (e.g. torch.optim.sgd.SGD) not handled correctly | |
# by pydoc.locate. Try a private function from hydra. | |
# Should use _locate directly if it's public. | |
if obj is None: | |
try: | |
from hydra.utils import get_method | |
except ImportError as e: | |
raise ImportError(f"Cannot dynamically locate object {name}!") from e | |
else: | |
obj = get_method(name) # it raises if fails | |
return obj | |