class_docstr: Base class for Gaussian processes. 
class_docstr_tok: ["Base","class","for","Gaussian","processes","."]
docstr: Builds the posterior GP by computing the mean and covariance. 
docstr_tok: ["Builds","the","posterior","GP","by","computing","the","mean","and","covariance","."]
code: def build_posterior(self):
      """Builds the posterior GP by computing the mean and covariance."""
      K_trtr_wo_noise = self._get_training_kernel_matrix()
      self.K_trtr_wo_noise = K_trtr_wo_noise
      self.L = _get_cholesky_decomp(
          K_trtr_wo_noise, self.noise_var, self.handle_non_psd_kernels
      )
      Y_centred = self.Y - self.mean_func(self.X)
      self.alpha = solve_upper_triangular(
          self.L.T, solve_lower_triangular(self.L, Y_centred)
      )
  
imports: from __future__ import division
  from argparse import Namespace
  from itertools import product
  import sys
  import numpy
  from ..distributions.model import Model
  from ..distributions import continuous
  from ..distributions import discrete
  from ..utils.general_utils import stable_cholesky, draw_gaussian_samples, project_symmetric_to_psd_cone, solve_lower_triangular, solve_upper_triangular
  from ..utils.oper_utils import direct_ft_maximise, pdoo_maximise, random_maximise, random_sample_cts_dscr
  from ..utils.option_handler import get_option_specs, load_options
  from ..utils.reporters import get_reporter
label_desc: Use image node_id 8 for calling the GP obj's underlying member method code with example usage: obj.build_posterior() without return types