code: def setUp(self) -> None:
      self.X = torch.tensor(
          [[1.0, 0.0], [1.0, 1.0], [1.0, 3.0], [2.0, 2.0], [3.0, 1.0]]
      )
      self.Y = torch.tensor(
          [
              [1.0, 0.0, 0.0],
              [1.0, 1.0, 1.0],
              [1.0, 3.0, 3.0],
              [2.0, 2.0, 4.0],
              [3.0, 1.0, 3.0],
          ]
      )
      self.Yvar = torch.zeros(5, 3)
      self.outcome_constraints = (
          torch.tensor([[0.0, 0.0, 1.0]]),
          torch.tensor([[3.5]]),
      )
      self.objective_thresholds = torch.tensor([0.5, 1.5])
      self.objective_weights = torch.tensor([1.0, 1.0])
      bounds = [(0.0, 4.0), (0.0, 4.0)]
      self.model = MultiObjectiveBotorchModel(
          model_predictor=dummy_predict
      )
      with mock.patch(FIT_MODEL_MO_PATH) as _mock_fit_model:
          self.model.fit(
              datasets=[
                  SupervisedDataset(
                      X=self.X,
                      Y=self.Y,
                      Yvar=self.Yvar,
                      feature_names=["x1", "x2"],
                      outcome_names=["a", "b", "c"],
                  )
              ],
              metric_names=["a", "b", "c"],
              search_space_digest=SearchSpaceDigest(
                  feature_names=["x1", "x2"],
                  bounds=bounds,
              ),
          )
          _mock_fit_model.assert_called_once()
  
imports: from contextlib import ExitStack
  from typing import Any, cast, Dict, Tuple
  from unittest import mock
  import numpy
  import torch
  from ax.core.search_space import SearchSpaceDigest
  from ax.models.torch.botorch_moo import MultiObjectiveBotorchModel
  from ax.models.torch.botorch_moo_defaults import get_outcome_constraint_transforms, get_qLogEHVI, get_qLogNEHVI, get_weighted_mc_objective_and_objective_thresholds, infer_objective_thresholds, pareto_frontier_evaluator
  from ax.models.torch.utils import _get_X_pending_and_observed
  from ax.utils.common.testutils import TestCase
  from botorch.utils.datasets import SupervisedDataset
  from botorch.utils.multi_objective.hypervolume import infer_reference_point
  from botorch.utils.sampling import manual_seed
  from botorch.utils.testing import MockModel, MockPosterior
  from torch._tensor import Tensor
label_desc: Use image node_id 1 for calling the FrontierEvaluatorTest obj's underlying member method code with example usage: obj.setUp() without return types