Source code for hydraclick.display_config

import hashlib
import json
import logging
from typing import Any

from omegaconf import DictConfig, OmegaConf

_logger = logging.getLogger(__name__)


[docs] def hash_dict(data: dict[str, Any]) -> str: """Return a hash of a dictionary.""" string = json.dumps(data, indent=True, sort_keys=True, ensure_ascii=True) return hashlib.sha256(string.encode()).hexdigest()
[docs] def hash_config(cfg: DictConfig) -> str: """Compute a unique identifier that summarizes the provided config.""" if isinstance(cfg, DictConfig): config_dict: dict = OmegaConf.to_container(cfg, resolve=True) # type: ignore else: config_dict = dict(cfg) return hash_dict(config_dict)
[docs] def display_config(config: DictConfig = None, logger=None, **kwargs) -> int: """Display the configuration.""" try: config_uuid = hash_config(config) except Exception as e: if logger: logger.error(f"Error hashing config {config}: {e}") config_uuid = None if logger: logger.info(f"Loaded config with uuid {config_uuid}") if kwargs: logger.warning("The configuration is a dictionary, not a DictConfig object.") if config is not None: kwargs["config"] = config to_print = json.dumps(kwargs, indent=4) if logger: logger.info(f"Config values:\n{to_print}") return 0 try: to_print = json.dumps(OmegaConf.to_container(config, resolve=True), indent=4) if logger: logger.info(f"Config values:\n{to_print}") except Exception as e: if logger: logger.error(f"Error resolving config: {e}") try: to_print = json.dumps(OmegaConf.to_container(config), indent=4) if logger: logger.info(f"Config values:\n{to_print}") except Exception as e: if logger: logger.error(f"Error printing config: {e}") logger.info(f"Config values:\n{config}") return 1 return 0