code: def test_SobolGeneratorWithLinearConstraints(self) -> None:
      # Enforce dim_0 <= dim_1 <= dim_2 <= dim_3.
      # Enforce both fixed and tunable constraints.
      generator = SobolGenerator(seed=0)
      n_tunable = fixed_param_index = 3
      bounds = self._create_bounds(n_tunable=n_tunable, n_fixed=1)
      A = np.array([[1, 1, 0, 0], [0, 1, 1, 0]])
      b = np.array([1, 1])
  
      generated_points, weights = generator.gen(
          n=3,
          bounds=bounds,
          linear_constraints=(
              A,
              b,
          ),
          fixed_features={fixed_param_index: 1},
          rounding_func=lambda x: x,
      )
      self.assertTrue(np.shape(generated_points) == (3, 4))
      self.assertTrue(np.alltrue(generated_points[..., -1] == 1))
      self.assertTrue(np.alltrue(generated_points @ A.transpose() <= b))
  
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 8 for calling the SobolGeneratorTest obj's underlying member method code with example usage: obj.test_SobolGeneratorWithLinearConstraints() without return types