class_docstr: Base class for batched multi-output GPyTorch models with independent outputs.
  
  This model should be used when the same training data is used for all outputs.
  Outputs are modeled independently by using a different batch for each output.
  
  :meta private:
class_docstr_tok: ["Base","class","for","batched","multi-output","GPyTorch","models","with","independent","outputs",".","This","model","should","be","used","when","the","same","training","data","is","used","for","all","outputs",".","Outputs","are","modeled","independently","by","using","a","different","batch","for","each","output",".",":","meta","private",":"]
docstr: Store the number of outputs and the batch shape.
  
  Args:
      train_X: A `n x d` or `batch_shape x n x d` (batch mode) tensor of training
          features.
      train_Y: A `n x m` or `batch_shape x n x m` (batch mode) tensor of
          training observations.
docstr_tok: ["Store","the","number","of","outputs","and","the","batch","shape",".","Args",":","train_X",":","A","`","n","x","d","`","or","`","batch_shape","x","n","x","d","`","(","batch","mode",")","tensor","of","training","features",".","train_Y",":","A","`","n","x","m","`","or","`","batch_shape","x","n","x","m","`","(","batch","mode",")","tensor","of","training","observations","."]
code: def _set_dimensions(self, train_X: Tensor, train_Y: Tensor) -> None:
      r"""Store the number of outputs and the batch shape.
  
      Args:
          train_X: A `n x d` or `batch_shape x n x d` (batch mode) tensor of training
              features.
          train_Y: A `n x m` or `batch_shape x n x m` (batch mode) tensor of
              training observations.
      """
      self._num_outputs = train_Y.shape[-1]
      (
          self._input_batch_shape,
          self._aug_batch_shape,
      ) = self.get_batch_dimensions(train_X=train_X, train_Y=train_Y)
  
imports: from __future__ import annotations
  import itertools
  import warnings
  from abc import ABC
  from copy import deepcopy
  from typing import Any, List, Optional, Tuple, TYPE_CHECKING, Union
  import torch
  from botorch.acquisition.objective import PosteriorTransform
  from botorch.exceptions.errors import BotorchTensorDimensionError, InputDataError
  from botorch.exceptions.warnings import _get_single_precision_warning, BotorchTensorDimensionWarning
  from botorch.models.model import Model, ModelList
  from botorch.models.utils import _make_X_full, add_output_dim, gpt_posterior_settings, mod_batch_shape, multioutput_to_batch_mode_transform
  from botorch.posteriors.fully_bayesian import GaussianMixturePosterior
  from botorch.posteriors.gpytorch import GPyTorchPosterior
  from botorch.utils.multitask import separate_mtmvn
  from botorch.utils.transforms import is_ensemble
  from gpytorch.distributions import MultitaskMultivariateNormal, MultivariateNormal
  from gpytorch.likelihoods.gaussian_likelihood import FixedNoiseGaussianLikelihood
  from linear_operator.operators import BlockDiagLinearOperator, CatLinearOperator
  from torch import Tensor
label_desc: Use image node_id 2 for calling the BatchedMultiOutputGPyTorchModel obj's underlying member method code with example usage: obj._set_dimensions(train_X, train_Y) without return types