code: def test_SobolGeneratorFixedSpace(self) -> None:
      generator = SobolGenerator(seed=0, deduplicate=False)
      bounds = self._create_bounds(n_tunable=0, n_fixed=2)
      generated_points, _ = generator.gen(
          n=3,
          bounds=bounds,
          fixed_features={0: 1, 1: 2},
          rounding_func=lambda x: x,
      )
      self.assertEqual(np.shape(generated_points), (3, 2))
      np_bounds = np.array(bounds)
      self.assertTrue(np.alltrue(generated_points >= np_bounds[:, 0]))
      self.assertTrue(np.alltrue(generated_points <= np_bounds[:, 1]))
      # Should error out if deduplicating since there's only one feasible point.
      generator = SobolGenerator(seed=0, deduplicate=True)
      with self.assertRaisesRegex(
          SearchSpaceExhausted, "Rejection sampling"
      ):
          generated_points, _ = generator.gen(
              n=3,
              bounds=bounds,
              fixed_features={0: 1, 1: 2},
              rounding_func=lambda x: x,
          )
      # But we can generate 1 point.
      generated_points, _ = generator.gen(
          n=1,
          bounds=bounds,
          fixed_features={0: 1, 1: 2},
          rounding_func=lambda x: x,
      )
      self.assertEqual(np.shape(generated_points), (1, 2))
  
imports: from typing import List, Tuple
  from unittest import mock
  import numpy
  from ax.exceptions.core import SearchSpaceExhausted
  from ax.models.random.sobol import SobolGenerator
  from ax.utils.common.testutils import TestCase
  from botorch.utils.sampling import sample_polytope
label_desc: Use image node_id 4 for calling the SobolGeneratorTest obj's underlying member method code with example usage: obj.test_SobolGeneratorFixedSpace() without return types