class_docstr: The most basic BenchmarkProblem, with a single objective and a known optimal
  value.
docstr: Create a BenchmarkProblem from a BoTorch BaseTestProblem using specialized
  Metrics and Runners. The test problem's result will be computed on the Runner
  and retrieved by the Metric.
code: def from_botorch_synthetic(
      cls,
      test_problem_class: Type[SyntheticTestFunction],
      test_problem_kwargs: Dict[str, Any],
      num_trials: int,
      infer_noise: bool = True,
  ) -> "SingleObjectiveBenchmarkProblem":
      """Create a BenchmarkProblem from a BoTorch BaseTestProblem using specialized
      Metrics and Runners. The test problem's result will be computed on the Runner
      and retrieved by the Metric.
      """
  
      # pyre-fixme [45]: Invalid class instantiation
      test_problem = test_problem_class(**test_problem_kwargs)
  
      problem = BenchmarkProblem.from_botorch(
          test_problem_class=test_problem_class,
          test_problem_kwargs=test_problem_kwargs,
          num_trials=num_trials,
          infer_noise=infer_noise,
      )
  
      dim = test_problem_kwargs.get("dim", None)
      name = _get_name(test_problem, infer_noise, dim)
  
      return cls(
          name=name,
          search_space=problem.search_space,
          optimization_config=problem.optimization_config,
          runner=problem.runner,
          num_trials=num_trials,
          infer_noise=infer_noise,
          optimal_value=test_problem.optimal_value,
      )
  
imports: import abc
  from typing import Any, Dict, List, Optional, Protocol, runtime_checkable, Type
  from ax.core.metric import Metric
  from ax.core.objective import MultiObjective, Objective
  from ax.core.optimization_config import MultiObjectiveOptimizationConfig, ObjectiveThreshold, OptimizationConfig
  from ax.core.outcome_constraint import OutcomeConstraint
  from ax.core.parameter import ParameterType, RangeParameter
  from ax.core.runner import Runner
  from ax.core.search_space import SearchSpace
  from ax.core.types import ComparisonOp
  from ax.metrics.botorch_test_problem import BotorchTestProblemMetric
  from ax.runners.botorch_test_problem import BotorchTestProblemRunner
  from ax.utils.common.base import Base
  from ax.utils.common.typeutils import checked_cast
  from botorch.test_functions.base import BaseTestProblem, ConstrainedBaseTestProblem
  from botorch.test_functions.multi_objective import MultiObjectiveTestProblem
  from botorch.test_functions.synthetic import SyntheticTestFunction
label_desc: Use image node_id 2 for calling the SingleObjectiveBenchmarkProblem obj's underlying member method code with example usage: obj.from_botorch_synthetic(cls, test_problem_class, test_problem_kwargs, num_trials, infer_noise) and returns: cls