class_docstr: A fully Bayesian single-task GP model with the SAAS prior.
  
  This model assumes that the inputs have been normalized to [0, 1]^d and that
  the output has been standardized to have zero mean and unit variance. You can
  either normalize and standardize the data before constructing the model or use
  an `input_transform` and `outcome_transform`. The SAAS model [Eriksson2021saasbo]_
  with a Matern-5/2 kernel is used by default.
  
  You are expected to use `fit_fully_bayesian_model_nuts` to fit this model as it
  isn't compatible with `fit_gpytorch_model`.
  
  Example:
      >>> saas_gp = SaasFullyBayesianSingleTaskGP(train_X, train_Y)
      >>> fit_fully_bayesian_model_nuts(saas_gp)
      >>> posterior = saas_gp.posterior(test_X)
class_docstr_tok: ["A","fully","Bayesian","single-task","GP","model","with","the","SAAS","prior",".","This","model","assumes","that","the","inputs","have","been","normalized","to","[","0",",","1","]","^d","and","that","the","output","has","been","standardized","to","have","zero","mean","and","unit","variance",".","You","can","either","normalize","and","standardize","the","data","before","constructing","the","model","or","use","an","`","input_transform","`","and","`","outcome_transform","`",".","The","SAAS","model","[","Eriksson2021saasbo","]","_","with","a","Matern-5\/2","kernel","is","used","by","default",".","You","are","expected","to","use","`","fit_fully_bayesian_model_nuts","`","to","fit","this","model","as","it","is","n't","compatible","with","`","fit_gpytorch_model","`",".","Example",":",">",">",">","saas_gp","=","SaasFullyBayesianSingleTaskGP","(","train_X",",","train_Y",")",">",">",">","fit_fully_bayesian_model_nuts","(","saas_gp",")",">",">",">","posterior","=","saas_gp.posterior","(","test_X",")"]
docstr: Computes the posterior over model outputs at the provided points.
  
  Args:
      X: A `(batch_shape) x q x d`-dim Tensor, where `d` is the dimension
          of the feature space and `q` is the number of points considered
          jointly.
      output_indices: A list of indices, corresponding to the outputs over
          which to compute the posterior (if the model is multi-output).
          Can be used to speed up computation if only a subset of the
          model's outputs are required for optimization. If omitted,
          computes the posterior over all model outputs.
      observation_noise: If True, add the observation noise from the
          likelihood to the posterior. If a Tensor, use it directly as the
          observation noise (must be of shape `(batch_shape) x q x m`).
      posterior_transform: An optional PosteriorTransform.
  
  Returns:
      A `GaussianMixturePosterior` object. Includes observation noise
          if specified.
docstr_tok: ["Computes","the","posterior","over","model","outputs","at","the","provided","points",".","Args",":","X",":","A","`","(","batch_shape",")","x","q","x","d","`","-dim","Tensor",",","where","`","d","`","is","the","dimension","of","the","feature","space","and","`","q","`","is","the","number","of","points","considered","jointly",".","output_indices",":","A","list","of","indices",",","corresponding","to","the","outputs","over","which","to","compute","the","posterior","(","if","the","model","is","multi-output",")",".","Can","be","used","to","speed","up","computation","if","only","a","subset","of","the","model","'s","outputs","are","required","for","optimization",".","If","omitted",",","computes","the","posterior","over","all","model","outputs",".","observation_noise",":","If","True",",","add","the","observation","noise","from","the","likelihood","to","the","posterior",".","If","a","Tensor",",","use","it","directly","as","the","observation","noise","(","must","be","of","shape","`","(","batch_shape",")","x","q","x","m","`",")",".","posterior_transform",":","An","optional","PosteriorTransform",".","Returns",":","A","`","GaussianMixturePosterior","`","object",".","Includes","observation","noise","if","specified","."]
code: def posterior(
      self,
      X: Tensor,
      output_indices: Optional[List[int]] = None,
      observation_noise: bool = False,
      posterior_transform: Optional[PosteriorTransform] = None,
      **kwargs: Any,
  ) -> GaussianMixturePosterior:
      r"""Computes the posterior over model outputs at the provided points.
  
      Args:
          X: A `(batch_shape) x q x d`-dim Tensor, where `d` is the dimension
              of the feature space and `q` is the number of points considered
              jointly.
          output_indices: A list of indices, corresponding to the outputs over
              which to compute the posterior (if the model is multi-output).
              Can be used to speed up computation if only a subset of the
              model's outputs are required for optimization. If omitted,
              computes the posterior over all model outputs.
          observation_noise: If True, add the observation noise from the
              likelihood to the posterior. If a Tensor, use it directly as the
              observation noise (must be of shape `(batch_shape) x q x m`).
          posterior_transform: An optional PosteriorTransform.
  
      Returns:
          A `GaussianMixturePosterior` object. Includes observation noise
              if specified.
      """
      self._check_if_fitted()
      posterior = super().posterior(
          X=X.unsqueeze(MCMC_DIM),
          output_indices=output_indices,
          observation_noise=observation_noise,
          posterior_transform=posterior_transform,
          **kwargs,
      )
      posterior = GaussianMixturePosterior(
          distribution=posterior.distribution
      )
      return posterior
  
imports: import math
  from abc import abstractmethod
  from typing import Any, Dict, List, Mapping, Optional, Tuple
  import pyro
  import torch
  from botorch.acquisition.objective import PosteriorTransform
  from botorch.models.gpytorch import BatchedMultiOutputGPyTorchModel
  from botorch.models.transforms.input import InputTransform
  from botorch.models.transforms.outcome import OutcomeTransform
  from botorch.models.utils import validate_input_scaling
  from botorch.models.utils.gpytorch_modules import MIN_INFERRED_NOISE_LEVEL
  from botorch.posteriors.fully_bayesian import GaussianMixturePosterior, MCMC_DIM
  from gpytorch.constraints import GreaterThan
  from gpytorch.distributions.multivariate_normal import MultivariateNormal
  from gpytorch.kernels import MaternKernel, ScaleKernel
  from gpytorch.kernels.kernel import dist, Kernel
  from gpytorch.likelihoods.gaussian_likelihood import FixedNoiseGaussianLikelihood, GaussianLikelihood
  from gpytorch.likelihoods.likelihood import Likelihood
  from gpytorch.means.constant_mean import ConstantMean
  from gpytorch.means.mean import Mean
  from gpytorch.models.exact_gp import ExactGP
  from pyro.ops.integrator import register_exception_handler
  from torch import Tensor
label_desc: Use image node_id 11 for calling the SaasFullyBayesianSingleTaskGP obj's underlying member method code with example usage: obj.posterior(X, output_indices, observation_noise, posterior_transform) and returns: posterior