class_docstr: The acquisition function for MESMO.
  
  This acquisition function computes the mutual information of
  Pareto frontier and a candidate point. See [Belakaria2019]_ for
  a detailed discussion.
  
  q > 1 is supported through cyclic optimization and fantasies.
  
  Noisy observations are support by computing information gain with
  observation noise as in Appendix C in [Takeno2020mfmves]_.
  
  Note: this only supports maximization.
  
  Attributes:
      _default_sample_shape: The `sample_shape` for the default sampler.
  
  Example:
      >>> model = SingleTaskGP(train_X, train_Y)
      >>> MESMO = qMultiObjectiveMaxValueEntropy(model, sample_pfs)
      >>> mesmo = MESMO(test_X)
class_docstr_tok: ["The","acquisition","function","for","MESMO",".","This","acquisition","function","computes","the","mutual","information","of","Pareto","frontier","and","a","candidate","point",".","See","[","Belakaria2019","]","_","for","a","detailed","discussion",".","q",">","1","is","supported","through","cyclic","optimization","and","fantasies",".","Noisy","observations","are","support","by","computing","information","gain","with","observation","noise","as","in","Appendix","C","in","[","Takeno2020mfmves","]","_",".","Note",":","this","only","supports","maximization",".","Attributes",":","_default_sample_shape",":","The","`","sample_shape","`","for","the","default","sampler",".","Example",":",">",">",">","model","=","SingleTaskGP","(","train_X",",","train_Y",")",">",">",">","MESMO","=","qMultiObjectiveMaxValueEntropy","(","model",",","sample_pfs",")",">",">",">","mesmo","=","MESMO","(","test_X",")"]
docstr: Compute max-value entropy at the design points `X`.
  
  Args:
      X: A `batch_shape x 1 x d`-dim Tensor of `batch_shape` t-batches
          with `1` `d`-dim design points each.
  
  Returns:
      A `batch_shape`-dim Tensor of MVE values at the given design points `X`.
docstr_tok: ["Compute","max-value","entropy","at","the","design","points","`","X","`",".","Args",":","X",":","A","`","batch_shape","x","1","x","d","`","-dim","Tensor","of","`","batch_shape","`","t-batches","with","`","1","`","`","d","`","-dim","design","points","each",".","Returns",":","A","`","batch_shape","`","-dim","Tensor","of","MVE","values","at","the","given","design","points","`","X","`","."]
code: def forward(self, X: Tensor) -> Tensor:
      r"""Compute max-value entropy at the design points `X`.
  
      Args:
          X: A `batch_shape x 1 x d`-dim Tensor of `batch_shape` t-batches
              with `1` `d`-dim design points each.
  
      Returns:
          A `batch_shape`-dim Tensor of MVE values at the given design points `X`.
      """
      # `m` dim tensor of information gains
      # unsqueeze X to add a batch-dim for the batched model
      igs = qMaxValueEntropy.forward(self, X=X.unsqueeze(-3))
      # sum over objectives
      return igs.sum(dim=-1)
  
imports: from __future__ import annotations
  from math import pi
  from typing import Any, Callable, Optional, Tuple, Union
  import torch
  from botorch.acquisition.max_value_entropy_search import qMaxValueEntropy
  from botorch.acquisition.multi_objective.joint_entropy_search import LowerBoundMultiObjectiveEntropySearch
  from botorch.acquisition.multi_objective.monte_carlo import MultiObjectiveMCAcquisitionFunction
  from botorch.models.converter import batched_multi_output_to_single_output, model_list_to_batched
  from botorch.models.model import Model
  from botorch.models.model_list_gp_regression import ModelListGP
  from botorch.posteriors.gpytorch import GPyTorchPosterior
  from botorch.sampling.base import MCSampler
  from botorch.sampling.normal import SobolQMCNormalSampler
  from botorch.utils.transforms import concatenate_pending_points, t_batch_mode_transform
  from torch import Tensor
label_desc: Use image node_id 4 for calling the qMultiObjectiveMaxValueEntropy obj's underlying member method code with example usage: obj.forward(X) and returns: igs