docstr: A KeyMaker class dedicated to creating hyperparameter keys, which determine when
  experiments were executed using identical hyperparameters. Two separate instances of
  :class:`experiments.CVExperiment` should produce identical `hyperparameter_key` s if their
  hyperparameters are the same (or close enough)
  
  Parameters
  ----------
  parameters: Dict
      All the parameters to be included when creating the key hash. Keys should correspond to
      parameter names, and values should be the values of the corresponding keys
  cross_experiment_key: Str
      The key produced by the active Environment via
      :class:`keys.makers.CrossExperimentKeyMaker`, used for determining when a
      hyperparameter key has already been tested under the same cross-experiment parameters
  **kwargs: Dict
      Additional arguments supplied to :meth:`keys.makers.KeyMaker.__init__`
docstr_tok: ["A","KeyMaker","class","dedicated","to","creating","hyperparameter","keys",",","which","determine","when","experiments","were","executed","using","identical","hyperparameters",".","Two","separate","instances","of",":","class",":","`","experiments.CVExperiment","`","should","produce","identical","`","hyperparameter_key","`","s","if","their","hyperparameters","are","the","same","(","or","close","enough",")","Parameters","--","--","--","--","--","parameters",":","Dict","All","the","parameters","to","be","included","when","creating","the","key","hash",".","Keys","should","correspond","to","parameter","names",",","and","values","should","be","the","values","of","the","corresponding","keys","cross_experiment_key",":","Str","The","key","produced","by","the","active","Environment","via",":","class",":","`","keys.makers.CrossExperimentKeyMaker","`",",","used","for","determining","when","a","hyperparameter","key","has","already","been","tested","under","the","same","cross-experiment","parameters","*","*","kwargs",":","Dict","Additional","arguments","supplied","to",":","meth",":","`","keys.makers.KeyMaker.__init__","`"]
code: def __init__(self, parameters, cross_experiment_key, **kwargs):
      """A KeyMaker class dedicated to creating hyperparameter keys, which determine when
      experiments were executed using identical hyperparameters. Two separate instances of
      :class:`experiments.CVExperiment` should produce identical `hyperparameter_key` s if their
      hyperparameters are the same (or close enough)
  
      Parameters
      ----------
      parameters: Dict
          All the parameters to be included when creating the key hash. Keys should correspond to
          parameter names, and values should be the values of the corresponding keys
      cross_experiment_key: Str
          The key produced by the active Environment via
          :class:`keys.makers.CrossExperimentKeyMaker`, used for determining when a
          hyperparameter key has already been tested under the same cross-experiment parameters
      **kwargs: Dict
          Additional arguments supplied to :meth:`keys.makers.KeyMaker.__init__`
      """
      self.cross_experiment_key = cross_experiment_key
      self.is_task_keras = (
          hasattr(G.Env, "current_task")
          and G.Env.current_task
          and G.Env.current_task.module_name == "keras"
      )
  
      if self.is_task_keras:
          parameters = deepcopy(parameters)
  
          #################### Initialize and Parameterize Dummy Model ####################
          temp_model = initialize_dummy_model(
              parameters["model_initializer"],
              parameters["model_init_params"]["build_fn"],
              parameters["model_extra_params"],
          )
  
          (
              temp_layers,
              temp_compile_params,
          ) = parameterize_compiled_keras_model(temp_model)
  
          #################### Process Parameters ####################
          # noinspection PyUnusedLocal
          def _visit(path, key, value):
              """If `key` not in ('input_shape', 'input_dim'), return True. Else, return False"""
              return key not in ("input_shape", "input_dim")
  
          temp_layers = remap(temp_layers, visit=_visit)
  
          parameters["model_init_params"]["layers"] = temp_layers
          parameters["model_init_params"][
              "compile_params"
          ] = temp_compile_params
  
          parameters["model_extra_params"] = subdict(
              parameters["model_extra_params"], drop=["params"]
          )
  
      KeyMaker.__init__(self, parameters, **kwargs)
  
imports: from hyperparameter_hunter.feature_engineering import FeatureEngineer, EngineerStep
  from hyperparameter_hunter.i_o.exceptions import EnvironmentInvalidError, EnvironmentInactiveError
  from hyperparameter_hunter.keys.hashing import make_hash_sha256
  from hyperparameter_hunter.compat.keras_helper import keras_callback_to_dict, keras_initializer_to_dict, parameterize_compiled_keras_model
  from hyperparameter_hunter.compat.keras_optimization_helper import initialize_dummy_model
  from hyperparameter_hunter.metrics import Metric
  from hyperparameter_hunter.sentinels import Sentinel
  from hyperparameter_hunter.settings import G
  from hyperparameter_hunter.utils.file_utils import write_json, read_json, add_to_json, make_dirs
  from hyperparameter_hunter.utils.file_utils import RetryMakeDirs
  from hyperparameter_hunter.utils.general_utils import subdict
  from hyperparameter_hunter.utils.boltons_utils import remap, default_enter
  from abc import ABCMeta, abstractmethod
  from copy import deepcopy
  from functools import partial
  from inspect import isclass, getsource
  from os import listdir
  import os.path
  import pandas
  import shelve
label_desc: Use image node_id 1 to create a new HyperparameterKeyMaker object from inherited base classes: KeyMaker with example: obj = HyperparameterKeyMaker(parameters, cross_experiment_key)