class_docstr: MC-based batch Multi-Step Look-Ahead (one-shot optimization).
docstr: Get the split shapes from X.
  
  Args:
      X: A `batch_shape x q_aug x d`-dim tensor including fantasy points.
  
  Returns:
      A 3-tuple `(batch_shape, shapes, sizes)`, where
      `shape[i] = f_i x .... x f_1 x batch_shape x q_i x d` and
      `size[i] = f_i * ... f_1 * q_i`.
code: def get_split_shapes(
      self, X: Tensor
  ) -> Tuple[Size, List[Size], List[int]]:
      r"""Get the split shapes from X.
  
      Args:
          X: A `batch_shape x q_aug x d`-dim tensor including fantasy points.
  
      Returns:
          A 3-tuple `(batch_shape, shapes, sizes)`, where
          `shape[i] = f_i x .... x f_1 x batch_shape x q_i x d` and
          `size[i] = f_i * ... f_1 * q_i`.
      """
      batch_shape, (q_aug, d) = X.shape[:-2], X.shape[-2:]
      q = q_aug - self._num_auxiliary
      batch_sizes = [q] + self.batch_sizes
      # X_i needs to have shape f_i x .... x f_1 x batch_shape x q_i x d
      shapes = [
          torch.Size(
              self.num_fantasies[:i][::-1] + [*batch_shape, q_i, d]
          )
          for i, q_i in enumerate(batch_sizes)
      ]
      # Each X_i in the split X has shape batch_shape x qtilde x d with
      # qtilde = f_i * ... * f_1 * q_i
      sizes = [
          s[: (-2 - len(batch_shape))].numel() * s[-2] for s in shapes
      ]
      return batch_shape, shapes, sizes
  
imports: from __future__ import annotations
  import math
  import warnings
  from typing import Any, Callable, Dict, List, Optional, Tuple, Type
  import numpy
  import torch
  from botorch.acquisition import AcquisitionFunction, OneShotAcquisitionFunction
  from botorch.acquisition.analytic import AnalyticAcquisitionFunction, PosteriorMean
  from botorch.acquisition.monte_carlo import MCAcquisitionFunction
  from botorch.acquisition.objective import MCAcquisitionObjective, PosteriorTransform
  from botorch.exceptions.errors import UnsupportedError
  from botorch.exceptions.warnings import BotorchWarning
  from botorch.models.model import Model
  from botorch.optim.initializers import initialize_q_batch
  from botorch.sampling.base import MCSampler
  from botorch.sampling.normal import SobolQMCNormalSampler
  from botorch.utils.transforms import match_batch_shape, t_batch_mode_transform, unnormalize
  from torch import Size, Tensor
  from torch.distributions import Beta
  from torch.nn import ModuleList
label_desc: Use image node_id 6 for calling the qMultiStepLookahead obj's underlying member method code with example usage: obj.get_split_shapes(X) and returns: batch_shape,  shapes,  sizes