class_docstr: Gaussian penalty class to be added to any arbitrary acquisition function
  to construct a PenalizedAcquisitionFunction.
docstr: Args:
      X: A "batch_shape x q x dim" representing the points to be evaluated.
  
  Returns:
      A tensor of size "batch_shape" representing the acqfn for each q-batch.
docstr_tok: ["Args",":","X",":","A","``","batch_shape","x","q","x","dim","''","representing","the","points","to","be","evaluated",".","Returns",":","A","tensor","of","size","``","batch_shape","''","representing","the","acqfn","for","each","q-batch","."]
code: def forward(self, X: Tensor) -> Tensor:
      r"""
      Args:
          X: A "batch_shape x q x dim" representing the points to be evaluated.
  
      Returns:
          A tensor of size "batch_shape" representing the acqfn for each q-batch.
      """
      sq_diff = (
          torch.linalg.norm((X - self.init_point), ord=2, dim=-1) ** 2
      )
      pdf = torch.exp(sq_diff / 2 / self.sigma**2)
      regularization_term = pdf.max(dim=-1).values
      return regularization_term
  
imports: from __future__ import annotations
  import math
  from typing import Any, Callable, List, Optional
  import torch
  from botorch.acquisition.acquisition import AcquisitionFunction
  from botorch.acquisition.analytic import AnalyticAcquisitionFunction
  from botorch.acquisition.objective import GenericMCObjective
  from botorch.exceptions import UnsupportedError
  from torch import Tensor
label_desc: Use image node_id 2 for calling the GaussianPenalty obj's underlying member method code with example usage: obj.forward(X) and returns: regularization_term