code: def enumerate_discrete_combinations(
      discrete_choices: Dict[int, List[Union[int, float]]],
  ) -> List[Dict[int, Union[float, int]]]:
      n_combos = np.prod([len(v) for v in discrete_choices.values()])
      if n_combos > 50:
          warnings.warn(
              f"Enumerating {n_combos} combinations of discrete parameter values "
              "while optimizing over a mixed search space. This can be very slow.",
              stacklevel=2,
          )
      fixed_features_list = [
          dict(zip(discrete_choices.keys(), c))
          for c in itertools.product(*discrete_choices.values())
      ]
      return fixed_features_list
  
imports: from __future__ import annotations
  import itertools
  import warnings
  from typing import Callable, Dict, List, Optional, Protocol, Set, Tuple, Union
  import numpy
  import torch
  from ax.core.search_space import SearchSpaceDigest
  from ax.exceptions.core import SearchSpaceExhausted, UnsupportedError
  from ax.models.types import TConfig
  from ax.utils.common.typeutils import checked_cast
  from botorch.acquisition.risk_measures import RiskMeasureMCObjective
  from torch import Tensor
label_desc: Use image node_id 13 for calling a global function with example usage: enumerate_discrete_combinations(discrete_choices) and returns: fixed_features_list