code: def test_q_log_expected_hypervolume_improvement(self):
      for dtype, fat in itertools.product(
          (torch.float, torch.double), (True, False)
      ):
          with self.subTest(dtype=dtype, fat=fat):
              self._qLogEHVI_test(dtype, fat)
  
file_path: botorch/test/acquisition/multi_objective/test_logei.py
imports: import itertools
  import torch
  from botorch.acquisition.multi_objective.logei import qLogExpectedHypervolumeImprovement
  from botorch.acquisition.multi_objective.monte_carlo import MultiObjectiveMCAcquisitionFunction
  from botorch.acquisition.multi_objective.objective import MCMultiOutputObjective
  from botorch.sampling.normal import IIDNormalSampler, SobolQMCNormalSampler
  from botorch.utils.multi_objective.box_decompositions.non_dominated import NondominatedPartitioning
  from botorch.utils.testing import BotorchTestCase, MockModel, MockPosterior
label_desc: Use image node_id 1 for calling the TestLogQExpectedHypervolumeImprovement obj's underlying member method code with example usage: obj.test_q_log_expected_hypervolume_improvement() without return types