code: def test_abstract_raises(self):
      torch.manual_seed(1)
      tkwargs = {"device": self.device}
      estimation_types = ("0", "LB", "LB2", "MC", "Dummy")
      for (
          dtype,
          num_objectives,
          estimation_type,
          use_model_list,
          standardize_model,
      ) in product(
          (torch.float, torch.double),
          (1, 2, 3),
          estimation_types,
          (False, True),
          (False, True),
      ):
          tkwargs["dtype"] = dtype
          # test batched model
          train_X = torch.rand(4, 3, 2, **tkwargs)
          train_Y = torch.rand(4, 3, num_objectives, **tkwargs)
          model = SingleTaskGP(train_X, train_Y)
          num_pareto_samples = 3
          num_pareto_points = 1 if num_objectives == 1 else 4
  
          pareto_sets = dummy_sample_pareto_sets(
              model, num_pareto_samples, num_pareto_points
          )
          pareto_fronts = dummy_sample_pareto_fronts(
              model, num_pareto_samples, num_pareto_points
          )
          hypercell_bounds = torch.rand(
              num_pareto_samples, 2, 4, num_objectives, **tkwargs
          )
  
          with self.assertRaises(NotImplementedError):
              DummyLowerBoundMultiObjectiveEntropySearch(
                  model=model,
                  pareto_sets=pareto_sets,
                  pareto_fronts=pareto_fronts,
                  hypercell_bounds=hypercell_bounds,
                  estimation_type=estimation_type,
                  num_samples=64,
              )
  
          # test wrong Pareto shape and hypercell bounds
          train_X = torch.rand(1, 2, **tkwargs)
          train_Y = torch.rand(1, num_objectives, **tkwargs)
          model = get_model(
              train_X, train_Y, use_model_list, standardize_model
          )
  
          num_pareto_samples = 3
          num_pareto_points = 4
  
          pareto_sets = dummy_sample_pareto_sets(
              model, num_pareto_samples, num_pareto_points
          )
          pareto_fronts = dummy_sample_pareto_fronts(
              model, num_pareto_samples, num_pareto_points
          )
          hypercell_bounds = torch.rand(
              num_pareto_samples, 2, 4, num_objectives, **tkwargs
          )
  
          with self.assertRaises(UnsupportedError):
              DummyLowerBoundMultiObjectiveEntropySearch(
                  model=model,
                  pareto_sets=pareto_sets.unsqueeze(0),
                  pareto_fronts=pareto_fronts,
                  hypercell_bounds=hypercell_bounds,
                  estimation_type=estimation_type,
                  num_samples=64,
              )
          with self.assertRaises(UnsupportedError):
              DummyLowerBoundMultiObjectiveEntropySearch(
                  model=model,
                  pareto_sets=pareto_sets,
                  pareto_fronts=pareto_fronts.unsqueeze(0),
                  hypercell_bounds=hypercell_bounds,
                  estimation_type=estimation_type,
                  num_samples=64,
              )
          with self.assertRaises(UnsupportedError):
              DummyLowerBoundMultiObjectiveEntropySearch(
                  model=model,
                  pareto_sets=pareto_sets,
                  pareto_fronts=pareto_fronts,
                  hypercell_bounds=hypercell_bounds.unsqueeze(0),
                  estimation_type=estimation_type,
                  num_samples=64,
              )
  
          if estimation_type == "Dummy":
              with self.assertRaises(NotImplementedError):
                  DummyLowerBoundMultiObjectiveEntropySearch(
                      model=model,
                      pareto_sets=pareto_sets,
                      pareto_fronts=pareto_fronts,
                      hypercell_bounds=hypercell_bounds,
                      estimation_type=estimation_type,
                      num_samples=64,
                  )
          else:
              DummyLowerBoundMultiObjectiveEntropySearch(
                  model=model,
                  pareto_sets=pareto_sets,
                  pareto_fronts=pareto_fronts,
                  hypercell_bounds=hypercell_bounds,
                  estimation_type=estimation_type,
                  num_samples=64,
              )
  
imports: from itertools import product
  import torch
  from botorch.acquisition.multi_objective.joint_entropy_search import LowerBoundMultiObjectiveEntropySearch, qLowerBoundMultiObjectiveJointEntropySearch
  from botorch.acquisition.multi_objective.utils import compute_sample_box_decomposition
  from botorch.exceptions import UnsupportedError
  from botorch.models.gp_regression import SingleTaskGP
  from botorch.models.model_list_gp_regression import ModelListGP
  from botorch.models.transforms.outcome import Standardize
  from botorch.sampling.normal import SobolQMCNormalSampler
  from botorch.utils.testing import BotorchTestCase
label_desc: Use image node_id 1 for calling the TestLowerBoundMultiObjectiveEntropySearch obj's underlying member method code with example usage: obj.test_abstract_raises() without return types