code: def mk_discrete_choices(
      ssd: SearchSpaceDigest,
      fixed_features: Optional[Dict[int, float]] = None,
  ) -> Dict[int, List[Union[int, float]]]:
      discrete_choices = ssd.discrete_choices
      # Add in fixed features.
      if fixed_features is not None:
          # Note: if any discrete features are fixed we won't enumerate those.
          discrete_choices = {
              **discrete_choices,
              **{k: [v] for k, v in fixed_features.items()},
          }
      return discrete_choices
  
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 12 for calling a global function with example usage: mk_discrete_choices(ssd, fixed_features) and returns: discrete_choices