class_docstr: The acquisition function for the multi-objective joint entropy search, where
  the batches `q > 1` are supported through the lower bound formulation.
  
  This acquisition function computes the mutual information between the observation
  at a candidate point `X` and the Pareto optimal input-output pairs.
  
  See [Tu2022]_ for a discussion on the estimation procedure.
  
  NOTES:
  (i) The estimated acquisition value could be negative.
  
  (ii) The lower bound batch acquisition function might not be monotone in the
  sense that adding more elements to the batch does not necessarily increase the
  acquisition value. Specifically, the acquisition value can become smaller when
  more inputs are added.
class_docstr_tok: ["The","acquisition","function","for","the","multi-objective","joint","entropy","search",",","where","the","batches","`","q",">","1","`","are","supported","through","the","lower","bound","formulation",".","This","acquisition","function","computes","the","mutual","information","between","the","observation","at","a","candidate","point","`","X","`","and","the","Pareto","optimal","input-output","pairs",".","See","[","Tu2022","]","_","for","a","discussion","on","the","estimation","procedure",".","NOTES",":","(","i",")","The","estimated","acquisition","value","could","be","negative",".","(","ii",")","The","lower","bound","batch","acquisition","function","might","not","be","monotone","in","the","sense","that","adding","more","elements","to","the","batch","does","not","necessarily","increase","the","acquisition","value",".","Specifically",",","the","acquisition","value","can","become","smaller","when","more","inputs","are","added","."]
docstr: Evaluates qLowerBoundMultiObjectiveJointEntropySearch at the design
  points `X`.
  
  Args:
      X: A `batch_shape x q x d`-dim Tensor of `batch_shape` t-batches with `q`
      `d`-dim design points each.
  
  Returns:
      A `batch_shape`-dim Tensor of acquisition values at the given design
      points `X`.
docstr_tok: ["Evaluates","qLowerBoundMultiObjectiveJointEntropySearch","at","the","design","points","`","X","`",".","Args",":","X",":","A","`","batch_shape","x","q","x","d","`","-dim","Tensor","of","`","batch_shape","`","t-batches","with","`","q","`","`","d","`","-dim","design","points","each",".","Returns",":","A","`","batch_shape","`","-dim","Tensor","of","acquisition","values","at","the","given","design","points","`","X","`","."]
code: def forward(self, X: Tensor) -> Tensor:
      r"""Evaluates qLowerBoundMultiObjectiveJointEntropySearch at the design
      points `X`.
  
      Args:
          X: A `batch_shape x q x d`-dim Tensor of `batch_shape` t-batches with `q`
          `d`-dim design points each.
  
      Returns:
          A `batch_shape`-dim Tensor of acquisition values at the given design
          points `X`.
      """
      return self._compute_lower_bound_information_gain(X)
  
imports: from __future__ import annotations
  from abc import abstractmethod
  from math import pi
  from typing import Any, Optional, Tuple, Union
  import torch
  from botorch import settings
  from botorch.acquisition.acquisition import AcquisitionFunction, MCSamplerMixin
  from botorch.exceptions.errors import UnsupportedError
  from botorch.models.model import Model
  from botorch.models.model_list_gp_regression import ModelListGP
  from botorch.models.utils import fantasize
  from botorch.posteriors.gpytorch import GPyTorchPosterior
  from botorch.sampling.normal import SobolQMCNormalSampler
  from botorch.utils.transforms import concatenate_pending_points, t_batch_mode_transform
  from torch import Tensor
  from torch.distributions import Normal
label_desc: Use image node_id 4 for calling the qLowerBoundMultiObjectiveJointEntropySearch obj's underlying member method code with example usage: obj.forward(X) and returns: self