code: def setUp(self) -> None:
      tkwargs: Dict[str, Any] = {"dtype": torch.double}
      self.botorch_model_class = SingleTaskGP
      self.surrogates = Surrogate(
          botorch_model_class=self.botorch_model_class
      )
      self.X = torch.tensor(
          [[1.0, 2.0, 3.0], [2.0, 3.0, 4.0]], **tkwargs
      )
      self.target_point = torch.tensor([1.0, 1.0, 1.0], **tkwargs)
      self.Y = torch.tensor([[3.0], [4.0]], **tkwargs)
      self.Yvar = torch.tensor([[0.0], [2.0]], **tkwargs)
      self.training_data = [
          SupervisedDataset(
              X=self.X,
              Y=self.Y,
              feature_names=["a", "b", "c"],
              outcome_names=["m1"],
          )
      ]
      self.search_space_digest = SearchSpaceDigest(
          feature_names=["a", "b", "c"],
          bounds=[(0.0, 10.0), (0.0, 10.0), (0.0, 10.0)],
          target_values={2: 1.0},
      )
      self.surrogates.fit(
          datasets=self.training_data,
          metric_names=["m1"],
          search_space_digest=self.search_space_digest,
      )
      self.surrogates._outcomes = ["m1"]
  
      self.botorch_acqf_class = qNoisyExpectedHypervolumeImprovement
      self.objective_weights = torch.tensor([1.0], **tkwargs)
      # new transformed objective weights
      self.objective_weights_sebo = torch.tensor([1.0, -1.0], **tkwargs)
      self.objective_thresholds = torch.tensor([1.0], **tkwargs)
      self.objective_thresholds_sebo = torch.tensor(
          [1.0, 3.0], **tkwargs
      )
  
      self.pending_observations = [
          torch.tensor([[1.0, 3.0, 4.0]], **tkwargs)
      ]
      self.outcome_constraints = (
          torch.tensor([[1.0]], **tkwargs),
          torch.tensor([[0.5]], **tkwargs),
      )
      self.outcome_constraints_sebo = (
          torch.tensor([[1.0, 0.0]], **tkwargs),
          torch.tensor([[0.5]], **tkwargs),
      )
      self.linear_constraints = None
      self.fixed_features = {1: 2.0}
      self.options = {"best_f": 0.0, "target_point": self.target_point}
      self.inequality_constraints = [
          (
              torch.tensor([0, 1], **tkwargs),
              torch.tensor([-1.0, 1.0], **tkwargs),
              1,
          )
      ]
      self.rounding_func = lambda x: x
      self.optimizer_options = {
          Keys.NUM_RESTARTS: 40,
          Keys.RAW_SAMPLES: 1024,
      }
      self.tkwargs = tkwargs
      self.torch_opt_config = TorchOptConfig(
          objective_weights=self.objective_weights,
          objective_thresholds=self.objective_thresholds,
          pending_observations=self.pending_observations,
          outcome_constraints=self.outcome_constraints,
          linear_constraints=self.linear_constraints,
          fixed_features=self.fixed_features,
      )
  
imports: from __future__ import annotations
  import dataclasses
  import functools
  from typing import Any, Dict, Optional, Union
  from unittest import mock
  from unittest.mock import Mock
  import torch
  from ax.core.search_space import SearchSpaceDigest
  from ax.models.torch.botorch_modular.acquisition import Acquisition
  from ax.models.torch.botorch_modular.sebo import L1_norm_func, SEBOAcquisition
  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.common.typeutils import not_none
  from ax.utils.testing.mock import fast_botorch_optimize
  from botorch.acquisition import PosteriorMean
  from botorch.acquisition.monte_carlo import qNoisyExpectedImprovement
  from botorch.acquisition.multi_objective.monte_carlo import qNoisyExpectedHypervolumeImprovement
  from botorch.acquisition.penalized import L0Approximation
  from botorch.models.deterministic import GenericDeterministicModel
  from botorch.models.gp_regression import SingleTaskGP
  from botorch.models.model import ModelList
  from botorch.optim import Homotopy, HomotopyParameter, LinearHomotopySchedule
  from botorch.utils.datasets import SupervisedDataset
  from torch.nn import Parameter
label_desc: Use image node_id 1 for calling the TestSebo obj's underlying member method code with example usage: obj.setUp() without return types