code: def test_get_qLogEHVI(self, _) -> None:
      weights = torch.tensor([0.0, 1.0, 1.0])
      X_observed = torch.rand(4, 3)
      X_pending = torch.rand(1, 3)
      constraints = (
          torch.tensor([1.0, 0.0, 0.0]),
          torch.tensor([[10.0]]),
      )
      Y = torch.rand(4, 3)
      mm = MockModel(MockPosterior(mean=Y))
      objective_thresholds = torch.arange(3, dtype=torch.float)
      obj_and_obj_t = (
          get_weighted_mc_objective_and_objective_thresholds(
              objective_weights=weights,
              objective_thresholds=objective_thresholds,
          )
      )
      (weighted_obj, new_obj_thresholds) = obj_and_obj_t
      cons_tfs = get_outcome_constraint_transforms(constraints)
      with manual_seed(0):
          seed = torch.randint(1, 10000, (1,)).item()
      with ExitStack() as es:
          mock_get_acqf = es.enter_context(mock.patch(GET_ACQF_PATH))
          es.enter_context(
              mock.patch(
                  MOO_DEFAULTS_PATH + ".checked_cast", wraps=cast
              )
          )
          es.enter_context(
              mock.patch(GET_CONSTRAINT_PATH, return_value=cons_tfs)
          )
          es.enter_context(
              mock.patch(GET_OBJ_PATH, return_value=obj_and_obj_t)
          )
          es.enter_context(manual_seed(0))
          get_qLogEHVI(
              model=mm,
              objective_weights=weights,
              outcome_constraints=constraints,
              objective_thresholds=objective_thresholds,
              X_observed=X_observed,
              X_pending=X_pending,
          )
          mock_get_acqf.assert_called_once_with(
              acquisition_function_name="qLogEHVI",
              model=mm,
              objective=weighted_obj,
              X_observed=X_observed,
              X_pending=X_pending,
              constraints=cons_tfs,
              mc_samples=128,
              alpha=0.0,
              seed=seed,
              ref_point=new_obj_thresholds.tolist(),
              Y=Y,
          )
  
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 4 for calling the BotorchMOODefaultsTest obj's underlying member method code with example usage: obj.test_get_qLogEHVI(_) without return types