code: def split_merged_df(merged_df: pd.DataFrame) -> DFDict:
      """Separate a multi-indexed DataFrame into a dict mapping primary indexes in `merged_df` to
      DataFrames containing one fewer dimension than `merged_df`. This is the opposite of `merge_dfs`
  
      Parameters
      ----------
      merged_df: pd.DataFrame
          Multi-indexed DataFrame of the form returned by :func:`merge_dfs` to split into the separate
          DataFrames named by the primary indexes of `merged_df`
  
      Returns
      -------
      dfs: Dict
          Mapping of dataset names to their DataFrame values. Keys in `dfs` will be a subset of
          {"train_data", "train_inputs", "train_targets", "validation_data", "validation_inputs",
          "validation_targets", "holdout_data", "holdout_inputs", "holdout_targets", "test_inputs"}
          containing only those values that are also primary indexes in `merged_df`
      """
      dfs = dict()
      for df_index in merged_df.index.levels[0]:
          dfs[df_index] = merged_df.loc[df_index, :].copy()
      return dfs
  
imports: from hyperparameter_hunter.keys.hashing import make_hash_sha256
  from hyperparameter_hunter.space.dimensions import Categorical, RejectedOptional
  from hyperparameter_hunter.utils.boltons_utils import remap, default_visit, default_enter
  from hyperparameter_hunter.utils.general_utils import subdict
  import ast
  from contextlib import suppress
  from inspect import getsource
  import numpy
  import pandas
  from typing import List, Callable, Dict, Union, Tuple
label_desc: Use image node_id 3 for calling a global function with example usage: split_merged_df(merged_df) and returns: dfs