docstr: Create an entry in the dict contained in the file at :attr:`cross_experiment_key.key`,
  whose key is :attr:`key`, and whose value is an empty list if :attr:`exists` is False
docstr_tok: ["Create","an","entry","in","the","dict","contained","in","the","file","at",":","attr",":","`","cross_experiment_key.key","`",",","whose","key","is",":","attr",":","`","key","`",",","and","whose","value","is","an","empty","list","if",":","attr",":","`","exists","`","is","False"]
code: def save_key(self):
      """Create an entry in the dict contained in the file at :attr:`cross_experiment_key.key`,
      whose key is :attr:`key`, and whose value is an empty list if :attr:`exists` is False
      """
      if not self.exists:
          if self.cross_experiment_key.exists is False:
              _err = "Cannot save hyperparameter_key: '{}', before cross_experiment_key '{}'"
              raise ValueError(
                  _err.format(self.key, self.cross_experiment_key.key)
              )
  
          key_path = f"{self.tested_keys_dir}/{self.cross_experiment_key.key}.json"
          add_to_json(
              key_path,
              [],
              key=self.key,
              condition=lambda _: self.key not in _.keys(),
          )
  
          self.exists = True
          G.log(f'Saved {self.key_type}_key: "{self.key}"', 4)
      else:
          G.log(
              f'{self.key_type}_key "{self.key}" already exists - Skipped saving',
              4,
          )
  
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 4 for calling the HyperparameterKeyMaker obj's underlying member method code with example usage: obj.save_key() without return types