class_docstr: The acquisition function for Predictive Entropy Search.
  
  This acquisition function approximates the mutual information between the
  observation at a candidate point `X` and the optimal set of inputs using
  expectation propagation (EP).
  
  NOTES:
  (i) The expectation propagation procedure can potentially fail due to the unstable
  EP updates. This is however unlikely to happen in the single-objective setting
  because we have much fewer EP factors. The jitter added in the training phase
  (`ep_jitter`) and testing phase (`test_jitter`) can be increased to prevent
  these failures from happening. More details in the description of
  `qMultiObjectivePredictiveEntropySearch`.
  
  (ii) The estimated acquisition value could be negative.
docstr: Evaluate qPredictiveEntropySearch on the candidate set `X`.
  
  Args:
      X: A `batch_shape x q x d`-dim Tensor of t-batches with `q` `d`-dim
          design points each.
  
  Returns:
      A `batch_shape'`-dim Tensor of Predictive Entropy Search values at the
      given design points `X`.
code: def forward(self, X: Tensor) -> Tensor:
      r"""Evaluate qPredictiveEntropySearch on the candidate set `X`.
  
      Args:
          X: A `batch_shape x q x d`-dim Tensor of t-batches with `q` `d`-dim
              design points each.
  
      Returns:
          A `batch_shape'`-dim Tensor of Predictive Entropy Search values at the
          given design points `X`.
      """
      return self._compute_information_gain(X)
  
file_path: botorch/botorch/acquisition/predictive_entropy_search.py
imports: from __future__ import annotations
  from typing import Any, Optional
  from botorch.acquisition.multi_objective.predictive_entropy_search import qMultiObjectivePredictiveEntropySearch
  from botorch.models.model import Model
  from botorch.utils.transforms import concatenate_pending_points, t_batch_mode_transform
  from torch import Tensor
label_desc: Use image node_id 2 for calling the qPredictiveEntropySearch obj's underlying member method code with example usage: obj.forward(X) and returns: self