class_docstr: Defines a wrapper around  an `AcquisitionFunction` that incorporates the project
  operator. Typically used to handle value functions in look-ahead methods.
class_docstr_tok: ["Defines","a","wrapper","around","an","`","AcquisitionFunction","`","that","incorporates","the","project","operator",".","Typically","used","to","handle","value","functions","in","look-ahead","methods","."]
docstr: Args:
      base_value_function: The wrapped `AcquisitionFunction`.
      project: A callable mapping a `batch_shape x q x d` tensor of design
          points to a tensor with shape `batch_shape x q_term x d` projected
          to the desired target set (e.g. the target fidelities in case of
          multi-fidelity optimization). For the basic case, `q_term = q`.
docstr_tok: ["Args",":","base_value_function",":","The","wrapped","`","AcquisitionFunction","`",".","project",":","A","callable","mapping","a","`","batch_shape","x","q","x","d","`","tensor","of","design","points","to","a","tensor","with","shape","`","batch_shape","x","q_term","x","d","`","projected","to","the","desired","target","set","(","e.g",".","the","target","fidelities","in","case","of","multi-fidelity","optimization",")",".","For","the","basic","case",",","`","q_term","=","q","`","."]
code: def __init__(
      self,
      base_value_function: AcquisitionFunction,
      project: Callable[[Tensor], Tensor],
  ) -> None:
      r"""
      Args:
          base_value_function: The wrapped `AcquisitionFunction`.
          project: A callable mapping a `batch_shape x q x d` tensor of design
              points to a tensor with shape `batch_shape x q_term x d` projected
              to the desired target set (e.g. the target fidelities in case of
              multi-fidelity optimization). For the basic case, `q_term = q`.
      """
      super().__init__(base_value_function.model)
      self.base_value_function = base_value_function
      self.project = project
      self.objective = getattr(base_value_function, "objective", None)
      self.posterior_transform = base_value_function.posterior_transform
      self.sampler = getattr(base_value_function, "sampler", None)
  
imports: from __future__ import annotations
  from copy import deepcopy
  from typing import Any, Callable, Dict, Optional, Tuple, Type
  import torch
  from botorch import settings
  from botorch.acquisition.acquisition import AcquisitionFunction, MCSamplerMixin, OneShotAcquisitionFunction
  from botorch.acquisition.analytic import PosteriorMean
  from botorch.acquisition.cost_aware import CostAwareUtility
  from botorch.acquisition.monte_carlo import MCAcquisitionFunction, qSimpleRegret
  from botorch.acquisition.objective import MCAcquisitionObjective, PosteriorTransform
  from botorch.exceptions.errors import UnsupportedError
  from botorch.models.model import Model
  from botorch.sampling.base import MCSampler
  from botorch.sampling.normal import SobolQMCNormalSampler
  from botorch.utils.transforms import concatenate_pending_points, match_batch_shape, t_batch_mode_transform
  from torch import Tensor
label_desc: Use image node_id 1 to create a new ProjectedAcquisitionFunction object from inherited base classes: AcquisitionFunction with example: obj = ProjectedAcquisitionFunction(base_value_function, project)