code: def construct_inputs_qPI(
      model: Model,
      training_data: MaybeDict[SupervisedDataset],
      objective: Optional[MCAcquisitionObjective] = None,
      posterior_transform: Optional[PosteriorTransform] = None,
      X_pending: Optional[Tensor] = None,
      sampler: Optional[MCSampler] = None,
      tau: float = 1e-3,
      best_f: Optional[Union[float, Tensor]] = None,
      constraints: Optional[List[Callable[[Tensor], Tensor]]] = None,
      eta: Union[Tensor, float] = 1e-3,
  ) -> Dict[str, Any]:
      r"""Construct kwargs for the `qProbabilityOfImprovement` constructor.
  
      Args:
          model: The model to be used in the acquisition function.
          training_data: Dataset(s) used to train the model.
          objective: The objective to be used in the acquisition function.
          posterior_transform: The posterior transform to be used in the
              acquisition function.
          X_pending: A `m x d`-dim Tensor of `m` design points that have been
              submitted for function evaluation but have not yet been evaluated.
              Concatenated into X upon forward call.
          sampler: The sampler used to draw base samples. If omitted, uses
              the acquisition functions's default sampler.
          tau: The temperature parameter used in the sigmoid approximation
              of the step function. Smaller values yield more accurate
              approximations of the function, but result in gradients
              estimates with higher variance.
          best_f: The best objective value observed so far (assumed noiseless). Can
              be a `batch_shape`-shaped tensor, which in case of a batched model
              specifies potentially different values for each element of the batch.
          constraints: A list of constraint callables which map a Tensor of posterior
              samples of dimension `sample_shape x batch-shape x q x m`-dim to a
              `sample_shape x batch-shape x q`-dim Tensor. The associated constraints
              are considered satisfied if the output is less than zero.
          eta: Temperature parameter(s) governing the smoothness of the sigmoid
              approximation to the constraint indicators. For more details, on this
              parameter, see the docs of `compute_smoothed_feasibility_indicator`.
  
      Returns:
          A dict mapping kwarg names of the constructor to values.
      """
      if best_f is None:
          best_f = get_best_f_mc(
              training_data=training_data,
              objective=objective,
              posterior_transform=posterior_transform,
              constraints=constraints,
              model=model,
          )
  
      return {
          "model": model,
          "objective": objective,
          "posterior_transform": posterior_transform,
          "X_pending": X_pending,
          "sampler": sampler,
          "tau": tau,
          "best_f": best_f,
          "constraints": constraints,
          "eta": eta,
      }
  
imports: from __future__ import annotations
  import inspect
  from typing import Any, Callable, Dict, Hashable, Iterable, List, Optional, Sequence, Tuple, Type, TypeVar, Union
  import torch
  from botorch.acquisition.acquisition import AcquisitionFunction
  from botorch.acquisition.analytic import ConstrainedExpectedImprovement, ExpectedImprovement, LogConstrainedExpectedImprovement, LogExpectedImprovement, LogNoisyExpectedImprovement, LogProbabilityOfImprovement, NoisyExpectedImprovement, PosteriorMean, ProbabilityOfImprovement, UpperConfidenceBound
  from botorch.acquisition.cost_aware import InverseCostWeightedUtility
  from botorch.acquisition.fixed_feature import FixedFeatureAcquisitionFunction
  from botorch.acquisition.joint_entropy_search import qJointEntropySearch
  from botorch.acquisition.knowledge_gradient import qKnowledgeGradient, qMultiFidelityKnowledgeGradient
  from botorch.acquisition.logei import qLogExpectedImprovement, qLogNoisyExpectedImprovement, TAU_MAX, TAU_RELU
  from botorch.acquisition.max_value_entropy_search import qMaxValueEntropy, qMultiFidelityMaxValueEntropy
  from botorch.acquisition.monte_carlo import qExpectedImprovement, qNoisyExpectedImprovement, qProbabilityOfImprovement, qSimpleRegret, qUpperConfidenceBound
  from botorch.acquisition.multi_objective import ExpectedHypervolumeImprovement, MCMultiOutputObjective, qExpectedHypervolumeImprovement, qNoisyExpectedHypervolumeImprovement
  from botorch.acquisition.multi_objective.logei import qLogNoisyExpectedHypervolumeImprovement
  from botorch.acquisition.multi_objective.objective import AnalyticMultiOutputObjective, IdentityAnalyticMultiOutputObjective, IdentityMCMultiOutputObjective
  from botorch.acquisition.multi_objective.utils import get_default_partitioning_alpha
  from botorch.acquisition.objective import ConstrainedMCObjective, IdentityMCObjective, MCAcquisitionObjective, PosteriorTransform
  from botorch.acquisition.preference import AnalyticExpectedUtilityOfBestOption
  from botorch.acquisition.risk_measures import RiskMeasureMCObjective
  from botorch.acquisition.utils import compute_best_feasible_objective, expand_trace_observations, get_infeasible_cost, get_optimal_samples, project_to_target_fidelity
  from botorch.exceptions.errors import UnsupportedError
  from botorch.models.cost import AffineFidelityCostModel
  from botorch.models.deterministic import FixedSingleSampleModel
  from botorch.models.gpytorch import GPyTorchModel
  from botorch.models.model import Model
  from botorch.optim.optimize import optimize_acqf
  from botorch.sampling.base import MCSampler
  from botorch.sampling.normal import IIDNormalSampler, SobolQMCNormalSampler
  from botorch.utils.containers import BotorchContainer
  from botorch.utils.datasets import SupervisedDataset
  from botorch.utils.multi_objective.box_decompositions.non_dominated import FastNondominatedPartitioning, NondominatedPartitioning
  from torch import Tensor
label_desc: Use image node_id 17 for calling a global function with example usage: construct_inputs_qPI(model, training_data, objective, posterior_transform, X_pending, sampler, tau, best_f, constraints, eta) and returns: dict