code: def test_MkDiscreteChoices(self) -> None:
      ssd1 = SearchSpaceDigest(
          feature_names=["a", "b"],
          bounds=[(0, 1), (0, 2)],
          ordinal_features=[1],
          discrete_choices={1: [0, 1, 2]},
      )
      dc1 = mk_discrete_choices(ssd1)
      self.assertEqual(dc1, {1: [0, 1, 2]})
      dc1_ff = mk_discrete_choices(ssd1, fixed_features={1: 0})
      self.assertEqual(dc1_ff, {1: [0]})
      ssd2 = SearchSpaceDigest(
          feature_names=["a", "b", "c"],
          bounds=[(0, 1), (0, 2), (3, 4)],
          ordinal_features=[1],
          categorical_features=[2],
          discrete_choices={1: [0, 1, 2], 2: [3, 4]},
      )
      dc2_ff = mk_discrete_choices(ssd2, fixed_features={1: 0})
      self.assertEqual(dc2_ff, {1: [0], 2: [3, 4]})
  
file_path: Ax/ax/models/tests/test_model_utils.py
imports: from itertools import product
  from unittest.mock import MagicMock
  import numpy
  from ax.core.search_space import SearchSpaceDigest
  from ax.models.model_utils import best_observed_point, check_duplicate, enumerate_discrete_combinations, mk_discrete_choices
  from ax.utils.common.testutils import TestCase
label_desc: Use image node_id 4 for calling the ModelUtilsTest obj's underlying member method code with example usage: obj.test_MkDiscreteChoices() without return types