class_docstr: A single task multi-fidelity GP model.
  
  A SingleTaskGP model using a DownsamplingKernel for the data fidelity
  parameter (if present) and an ExponentialDecayKernel for the iteration
  fidelity parameter (if present).
  
  This kernel is described in [Wu2019mf]_.
  
  Example:
      >>> train_X = torch.rand(20, 4)
      >>> train_Y = train_X.pow(2).sum(dim=-1, keepdim=True)
      >>> model = SingleTaskMultiFidelityGP(train_X, train_Y, data_fidelities=[3])
class_docstr_tok: ["A","single","task","multi-fidelity","GP","model",".","A","SingleTaskGP","model","using","a","DownsamplingKernel","for","the","data","fidelity","parameter","(","if","present",")","and","an","ExponentialDecayKernel","for","the","iteration","fidelity","parameter","(","if","present",")",".","This","kernel","is","described","in","[","Wu2019mf","]","_",".","Example",":",">",">",">","train_X","=","torch.rand","(","20",",","4",")",">",">",">","train_Y","=","train_X.pow","(","2",")",".sum","(","dim=-1",",","keepdim=True",")",">",">",">","model","=","SingleTaskMultiFidelityGP","(","train_X",",","train_Y",",","data_fidelities=","[","3","]",")"]
docstr: Construct `Model` keyword arguments from a dict of `SupervisedDataset`.
  
  Args:
      training_data: Dictionary of `SupervisedDataset`.
      fidelity_features: Index of fidelity parameter as input columns.
docstr_tok: ["Construct","`","Model","`","keyword","arguments","from","a","dict","of","`","SupervisedDataset","`",".","Args",":","training_data",":","Dictionary","of","`","SupervisedDataset","`",".","fidelity_features",":","Index","of","fidelity","parameter","as","input","columns","."]
code: def construct_inputs(
      cls,
      training_data: SupervisedDataset,
      fidelity_features: List[int],
      **kwargs,
  ) -> Dict[str, Any]:
      r"""Construct `Model` keyword arguments from a dict of `SupervisedDataset`.
  
      Args:
          training_data: Dictionary of `SupervisedDataset`.
          fidelity_features: Index of fidelity parameter as input columns.
      """
      inputs = super().construct_inputs(
          training_data=training_data, **kwargs
      )
      inputs["data_fidelities"] = fidelity_features
      return inputs
  
imports: from __future__ import annotations
  import warnings
  from typing import Any, Dict, List, Optional, Tuple, Union
  import torch
  from botorch.exceptions.errors import UnsupportedError
  from botorch.models.gp_regression import SingleTaskGP
  from botorch.models.kernels.downsampling import DownsamplingKernel
  from botorch.models.kernels.exponential_decay import ExponentialDecayKernel
  from botorch.models.kernels.linear_truncated_fidelity import LinearTruncatedFidelityKernel
  from botorch.models.transforms.input import InputTransform
  from botorch.models.transforms.outcome import OutcomeTransform
  from botorch.utils.datasets import SupervisedDataset
  from gpytorch.kernels.kernel import ProductKernel
  from gpytorch.kernels.rbf_kernel import RBFKernel
  from gpytorch.kernels.scale_kernel import ScaleKernel
  from gpytorch.likelihoods.likelihood import Likelihood
  from gpytorch.priors.torch_priors import GammaPrior
  from torch import Tensor
label_desc: Use image node_id 2 for calling the SingleTaskMultiFidelityGP obj's underlying member method code with example usage: obj.construct_inputs(cls, training_data, fidelity_features) and returns: inputs