class_docstr: Utility to make new experiments using the same storage object.
  
  Parameters
  ----------
  storage: dict or BaseStorageProtocol, optional
      Storage object or storage configuration.
  debug: bool, optional.
      If True, force using EphemeralDB for the storage. Default: False
class_docstr_tok: ["Utility","to","make","new","experiments","using","the","same","storage","object",".","Parameters","--","--","--","--","--","storage",":","dict","or","BaseStorageProtocol",",","optional","Storage","object","or","storage","configuration",".","debug",":","bool",",","optional",".","If","True",",","force","using","EphemeralDB","for","the","storage",".","Default",":","False"]
docstr: Merge together given configuration with db configuration matching
  for experiment (``name``, ``version``)
code: def consolidate_config(
      self, name: str, version: int | None, config: dict
  ):
      """Merge together given configuration with db configuration matching
      for experiment (``name``, ``version``)
      """
      db_config = self.fetch_config_from_db(name, version)
  
      # Do not merge spaces, the new definition overrides it.
      if "space" in config:
          db_config.pop("space", None)
  
      log.debug("Merging user and db configs:")
      log.debug("    config from user:\n%s", pprint.pformat(config))
      log.debug("    config from DB:\n%s", pprint.pformat(db_config))
  
      new_config = config
      config = resolve_config.merge_configs(db_config, config)
  
      config.setdefault("metadata", {})
      resolve_config.update_metadata(config["metadata"])
  
      merge_algorithm_config(config, new_config)
      # TODO: Remove for v0.4
      merge_producer_config(config, new_config)
  
      config.setdefault("name", name)
      config.setdefault("version", version)
  
      log.debug("    Merged config:\n%s", pprint.pformat(config))
  
      return config
  
imports: from __future__ import annotations
  import copy
  import datetime
  import getpass
  import logging
  import pprint
  import sys
  import typing
  from typing import Any, TypeVar
  import orion.core
  from orion.algo.base import BaseAlgorithm, algo_factory
  from orion.algo.space import Space
  from orion.core.evc.adapters import BaseAdapter
  from orion.core.evc.conflicts import ExperimentNameConflict, detect_conflicts
  from orion.core.io import resolve_config
  from orion.core.io.config import ConfigurationError
  from orion.core.io.database import DuplicateKeyError
  from orion.core.io.experiment_branch_builder import ExperimentBranchBuilder
  from orion.core.io.interactive_commands.branching_prompt import BranchingPrompt
  from orion.core.io.space_builder import SpaceBuilder
  from orion.core.utils import backward
  from orion.core.utils.exceptions import BranchingEvent, NoConfigurationError, NoNameError, RaceCondition
  from orion.core.worker.experiment import Experiment, Mode
  from orion.core.worker.experiment_config import ExperimentConfig
  from orion.core.worker.primary_algo import create_algo
  from orion.core.worker.warm_start import KnowledgeBase
  from orion.storage.base import setup_storage
label_desc: Use image node_id 9 for calling the ExperimentBuilder obj's underlying member method code with example usage: obj.consolidate_config(name, version, config) and returns: config