# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved import logging.config import os from pathlib import Path from typing import Any, Callable import hydra._internal.instantiate._instantiate2 import hydra.types from hydra._internal.utils import _locate from hydra.core.hydra_config import HydraConfig log = logging.getLogger(__name__) # Instantiation related symbols instantiate = hydra._internal.instantiate._instantiate2.instantiate call = instantiate ConvertMode = hydra.types.ConvertMode def get_class(path: str) -> type: """ Look up a class based on a dotpath. Fails if the path does not point to a class. >>> import my_module >>> from hydra.utils import get_class >>> assert get_class("my_module.MyClass") is my_module.MyClass """ try: cls = _locate(path) if not isinstance(cls, type): raise ValueError( f"Located non-class of type '{type(cls).__name__}'" + f" while loading '{path}'" ) return cls except Exception as e: log.error(f"Error getting class at {path}: {e}") raise e def get_method(path: str) -> Callable[..., Any]: """ Look up a callable based on a dotpath. Fails if the path does not point to a callable object. >>> import my_module >>> from hydra.utils import get_method >>> assert get_method("my_module.my_function") is my_module.my_function """ try: obj = _locate(path) if not callable(obj): raise ValueError( f"Located non-callable of type '{type(obj).__name__}'" + f" while loading '{path}'" ) cl: Callable[..., Any] = obj return cl except Exception as e: log.error(f"Error getting callable at {path} : {e}") raise e # Alias for get_method get_static_method = get_method def get_object(path: str) -> Any: """ Look up an entity based on the dotpath. Does not perform any type checks on the entity. >>> import my_module >>> from hydra.utils import get_object >>> assert get_object("my_module.my_object") is my_module.my_object """ try: obj = _locate(path) return obj except Exception as e: log.error(f"Error getting object at {path} : {e}") raise e def get_original_cwd() -> str: """ :return: the original working directory the Hydra application was launched from """ if not HydraConfig.initialized(): raise ValueError( "get_original_cwd() must only be used after HydraConfig is initialized" ) ret = HydraConfig.get().runtime.cwd assert ret is not None and isinstance(ret, str) return ret def to_absolute_path(path: str) -> str: """ converts the specified path to be absolute path. if the input path is relative, it's interpreted as relative to the original working directory if it's absolute, it's returned as is :param path: path to convert :return: """ p = Path(path) if not HydraConfig.initialized(): base = Path(os.getcwd()) else: base = Path(get_original_cwd()) if p.is_absolute(): ret = p else: ret = base / p return str(ret)
Memory