code: def get_discrete_hartmann(
      num_trials: int = 50,
      infer_noise: bool = True,
      bounds: Optional[List[Tuple[float, float]]] = None,
  ) -> BenchmarkProblem:
      """6D Hartmann problem where first 4 dimensions are discretized."""
      dim_int = 4
      if bounds is None:
          bounds = [
              (0, 3),
              (0, 3),
              (0, 19),
              (0, 19),
              (0.0, 1.0),
              (0.0, 1.0),
          ]
      return _get_problem_from_common_inputs(
          bounds=bounds,
          dim_int=dim_int,
          metric_name="Hartmann",
          infer_noise=infer_noise,
          test_problem_class=Hartmann,
          benchmark_name="Discrete Hartmann",
          num_trials=num_trials,
      )
  
file_path: Ax/ax/benchmark/problems/synthetic/discretized/mixed_integer.py
imports: from typing import Any, Dict, List, Optional, Tuple, Type
  from ax.benchmark.benchmark_problem import BenchmarkProblem
  from ax.core.objective import Objective
  from ax.core.optimization_config import OptimizationConfig
  from ax.core.parameter import ParameterType, RangeParameter
  from ax.core.search_space import SearchSpace
  from ax.metrics.botorch_test_problem import BotorchTestProblemMetric
  from ax.runners.botorch_test_problem import BotorchTestProblemRunner
  from botorch.test_functions.synthetic import Ackley, Hartmann, Rosenbrock, SyntheticTestFunction
label_desc: Use image node_id 2 for calling a global function with example usage: get_discrete_hartmann(num_trials, infer_noise, bounds) and returns: _get_problem_from_common_inputs