class_docstr: Objective that unstandardizes the samples.
  
  TODO: remove this when MultiTask models support outcome transforms.
  
  Example:
      >>> unstd_objective = UnstandardizeMCMultiOutputObjective(Y_mean, Y_std)
      >>> samples = sampler(posterior)
      >>> objective = unstd_objective(samples)
docstr: Initialize objective.
  
  Args:
      Y_mean: `m`-dim tensor of outcome means.
      Y_std: `m`-dim tensor of outcome standard deviations.
      outcomes: A list of `m' <= m` indices that specifies which of the `m` model
          outputs should be considered as the outcomes for MOO. If omitted, use
          all model outcomes. Typically used for constrained optimization.
docstr_tok: ["Initialize","objective",".","Args",":","Y_mean",":","`","m","`","-dim","tensor","of","outcome","means",".","Y_std",":","`","m","`","-dim","tensor","of","outcome","standard","deviations",".","outcomes",":","A","list","of","`","m","'","<","=","m","`","indices","that","specifies","which","of","the","`","m","`","model","outputs","should","be","considered","as","the","outcomes","for","MOO",".","If","omitted",",","use","all","model","outcomes",".","Typically","used","for","constrained","optimization","."]
code: def __init__(
      self,
      Y_mean: Tensor,
      Y_std: Tensor,
      outcomes: Optional[List[int]] = None,
  ) -> None:
      r"""Initialize objective.
  
      Args:
          Y_mean: `m`-dim tensor of outcome means.
          Y_std: `m`-dim tensor of outcome standard deviations.
          outcomes: A list of `m' <= m` indices that specifies which of the `m` model
              outputs should be considered as the outcomes for MOO. If omitted, use
              all model outcomes. Typically used for constrained optimization.
      """
      if Y_mean.ndim > 1 or Y_std.ndim > 1:
          raise BotorchTensorDimensionError(
              "Y_mean and Y_std must both be 1-dimensional, but got "
              f"{Y_mean.ndim} and {Y_std.ndim}"
          )
      elif outcomes is not None and len(outcomes) > Y_mean.shape[-1]:
          raise BotorchTensorDimensionError(
              f"Cannot specify more ({len(outcomes)}) outcomes than are present in "
              f"the normalization inputs ({Y_mean.shape[-1]})."
          )
      super().__init__(outcomes=outcomes, num_outcomes=Y_mean.shape[-1])
      if outcomes is not None:
          Y_mean = Y_mean.index_select(
              -1, self.outcomes.to(Y_mean.device)
          )
          Y_std = Y_std.index_select(
              -1, self.outcomes.to(Y_mean.device)
          )
  
      self.register_buffer("Y_mean", Y_mean)
      self.register_buffer("Y_std", Y_std)
  
imports: from __future__ import annotations
  import warnings
  from abc import abstractmethod
  from typing import List, Optional
  import torch
  from botorch.acquisition.objective import GenericMCObjective, MCAcquisitionObjective
  from botorch.exceptions.errors import BotorchError, BotorchTensorDimensionError
  from botorch.models.model import Model
  from botorch.posteriors import GPyTorchPosterior
  from botorch.utils import apply_constraints
  from botorch.utils.transforms import normalize_indices
  from torch import Tensor
label_desc: Use image node_id 1 to create a new UnstandardizeMCMultiOutputObjective object from inherited base classes: IdentityMCMultiOutputObjective with example: obj = UnstandardizeMCMultiOutputObjective(Y_mean, Y_std, outcomes)