class_docstr: The base class for any Gaussian process latent function to be used in conjunction
  with exact inference.
  
  :param torch.Tensor train_inputs: (size n x d) The training features :math:`\mathbf X`.
  :param torch.Tensor train_targets: (size n) The training targets :math:`\mathbf y`.
  :param ~gpytorch.likelihoods.GaussianLikelihood likelihood: The Gaussian likelihood that defines
      the observational distribution. Since we're using exact inference, the likelihood must be Gaussian.
  
  The :meth:`forward` function should describe how to compute the prior latent distribution
  on a given input. Typically, this will involve a mean and kernel function.
  The result must be a :obj:`~gpytorch.distributions.MultivariateNormal`.
  
  Calling this model will return the posterior of the latent Gaussian process when conditioned
  on the training data. The output will be a :obj:`~gpytorch.distributions.MultivariateNormal`.
  
  Example:
      >>> class MyGP(gpytorch.models.ExactGP):
      >>>     def __init__(self, train_x, train_y, likelihood):
      >>>         super().__init__(train_x, train_y, likelihood)
      >>>         self.mean_module = gpytorch.means.ZeroMean()
      >>>         self.covar_module = gpytorch.kernels.ScaleKernel(gpytorch.kernels.RBFKernel())
      >>>
      >>>     def forward(self, x):
      >>>         mean = self.mean_module(x)
      >>>         covar = self.covar_module(x)
      >>>         return gpytorch.distributions.MultivariateNormal(mean, covar)
      >>>
      >>> # train_x = ...; train_y = ...
      >>> likelihood = gpytorch.likelihoods.GaussianLikelihood()
      >>> model = MyGP(train_x, train_y, likelihood)
      >>>
      >>> # test_x = ...;
      >>> model(test_x)  # Returns the GP latent function at test_x
      >>> likelihood(model(test_x))  # Returns the (approximate) predictive posterior distribution at test_x
class_docstr_tok: ["The","base","class","for","any","Gaussian","process","latent","function","to","be","used","in","conjunction","with","exact","inference",".",":","param","torch.Tensor","train_inputs",":","(","size","n","x","d",")","The","training","features",":","math",":","`","\\mathbf","X","`",".",":","param","torch.Tensor","train_targets",":","(","size","n",")","The","training","targets",":","math",":","`","\\mathbf","y","`",".",":","param","~gpytorch.likelihoods.GaussianLikelihood","likelihood",":","The","Gaussian","likelihood","that","defines","the","observational","distribution",".","Since","we","'re","using","exact","inference",",","the","likelihood","must","be","Gaussian",".","The",":","meth",":","`","forward","`","function","should","describe","how","to","compute","the","prior","latent","distribution","on","a","given","input",".","Typically",",","this","will","involve","a","mean","and","kernel","function",".","The","result","must","be","a",":","obj",":","`","~gpytorch.distributions.MultivariateNormal","`",".","Calling","this","model","will","return","the","posterior","of","the","latent","Gaussian","process","when","conditioned","on","the","training","data",".","The","output","will","be","a",":","obj",":","`","~gpytorch.distributions.MultivariateNormal","`",".","Example",":",">",">",">","class","MyGP","(","gpytorch.models.ExactGP",")",":",">",">",">","def","__init__","(","self",",","train_x",",","train_y",",","likelihood",")",":",">",">",">","super","(",")",".__init__","(","train_x",",","train_y",",","likelihood",")",">",">",">","self.mean_module","=","gpytorch.means.ZeroMean","(",")",">",">",">","self.covar_module","=","gpytorch.kernels.ScaleKernel","(","gpytorch.kernels.RBFKernel","(",")",")",">",">",">",">",">",">","def","forward","(","self",",","x",")",":",">",">",">","mean","=","self.mean_module","(","x",")",">",">",">","covar","=","self.covar_module","(","x",")",">",">",">","return","gpytorch.distributions.MultivariateNormal","(","mean",",","covar",")",">",">",">",">",">",">","#","train_x","=","...",";","train_y","=","...",">",">",">","likelihood","=","gpytorch.likelihoods.GaussianLikelihood","(",")",">",">",">","model","=","MyGP","(","train_x",",","train_y",",","likelihood",")",">",">",">",">",">",">","#","test_x","=","...",";",">",">",">","model","(","test_x",")","#","Returns","the","GP","latent","function","at","test_x",">",">",">","likelihood","(","model","(","test_x",")",")","#","Returns","the","(","approximate",")","predictive","posterior","distribution","at","test_x"]
code: def train_targets(self):
      return self._train_targets
  
imports: import warnings
  from copy import deepcopy
  import torch
  from ..None import settings
  from ..distributions import MultitaskMultivariateNormal, MultivariateNormal
  from ..likelihoods import _GaussianLikelihoodBase
  from ..utils.generic import length_safe_zip
  from ..utils.warnings import GPInputWarning
  from .exact_prediction_strategies import prediction_strategy
  from .gp import GP
label_desc: Use image node_id 2 for calling the ExactGP obj's underlying member method code with example usage: obj.train_targets() and returns: self