code: def setUp(self) -> None:
      self.botorch_model_class = SingleTaskGP
      self.surrogate = Surrogate(
          botorch_model_class=self.botorch_model_class
      )
      self.X = torch.tensor([[1.0, 2.0, 3.0], [2.0, 3.0, 4.0]])
      self.Y = torch.tensor([[3.0], [4.0]])
      self.Yvar = torch.tensor([[0.0], [2.0]])
      self.feature_names = ["a", "b", "c"]
      self.metric_names = ["metric"]
      self.training_data = [
          SupervisedDataset(
              X=self.X,
              Y=self.Y,
              feature_names=self.feature_names,
              outcome_names=self.metric_names,
          )
      ]
      self.fidelity_features = [2]
      self.search_space_digest = SearchSpaceDigest(
          feature_names=self.feature_names,
          bounds=[(0.0, 10.0), (0.0, 10.0), (0.0, 10.0)],
          target_values={2: 1.0},
          fidelity_features=self.fidelity_features,
      )
      self.surrogate.fit(
          datasets=self.training_data,
          metric_names=self.metric_names,
          search_space_digest=self.search_space_digest,
      )
      self.acquisition_options = {Keys.NUM_FANTASIES: 64}
  
      self.objective_weights = torch.tensor([1.0])
      self.pending_observations = [
          torch.tensor([[1.0, 3.0, 4.0]]),
          torch.tensor([[2.0, 6.0, 8.0]]),
      ]
      self.outcome_constraints = (
          torch.tensor([[1.0]]),
          torch.tensor([[0.5]]),
      )
      self.linear_constraints = None
      self.fixed_features = {1: 2.0}
      self.options = {
          Keys.FIDELITY_WEIGHTS: {2: 1.0},
          Keys.COST_INTERCEPT: 1.0,
          Keys.NUM_TRACE_OBSERVATIONS: 0,
      }
      self.torch_opt_config = TorchOptConfig(
          objective_weights=self.objective_weights,
          pending_observations=self.pending_observations,
          outcome_constraints=self.outcome_constraints,
          linear_constraints=self.linear_constraints,
          fixed_features=self.fixed_features,
      )
  
file_path: Ax/ax/models/torch/tests/test_multi_fidelity.py
imports: import dataclasses
  from unittest.mock import Mock, patch
  import torch
  from ax.core.search_space import SearchSpaceDigest
  from ax.models.torch.botorch_modular.acquisition import Acquisition
  from ax.models.torch.botorch_modular.multi_fidelity import MultiFidelityAcquisition
  from ax.models.torch.botorch_modular.surrogate import Surrogate
  from ax.models.torch_base import TorchOptConfig
  from ax.utils.common.constants import Keys
  from ax.utils.common.testutils import TestCase
  from ax.utils.testing.mock import fast_botorch_optimize
  from botorch.acquisition.knowledge_gradient import qMultiFidelityKnowledgeGradient
  from botorch.models.gp_regression import SingleTaskGP
  from botorch.utils.datasets import SupervisedDataset
label_desc: Use image node_id 1 for calling the MultiFidelityAcquisitionTest obj's underlying member method code with example usage: obj.setUp() without return types