class_docstr: Single-outcome acquisition function regularized by the given penalty.
  
  The usage is similar to:
      raw_acqf = NoisyExpectedImprovement(...)
      penalty = GroupLassoPenalty(...)
      acqf = PenalizedAcquisitionFunction(raw_acqf, penalty)
code: def forward(self, X: Tensor) -> Tensor:
      raw_value = self.raw_acqf(X=X)
      penalty_term = self.penalty_func(X)
      return raw_value - self.regularization_parameter * penalty_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 PenalizedAcquisitionFunction obj's underlying member method code with example usage: obj.forward(X) and returns: unknown