class_docstr: Base class for Gaussian processes. 
class_docstr_tok: ["Base","class","for","Gaussian","processes","."]
docstr: Evaluates the GP with additional hallucinated observations in the
  kernel matrix. 
docstr_tok: ["Evaluates","the","GP","with","additional","hallucinated","observations","in","the","kernel","matrix","."]
code: def eval_with_hallucinated_observations(
      self, X_test, X_halluc, uncert_form="none"
  ):
      """Evaluates the GP with additional hallucinated observations in the
      kernel matrix."""
      pred_mean, _ = self.eval(
          X_test, uncert_form="none"
      )  # Just compute the means.
      if uncert_form == "none":
          uncert = None
      else:
          # Computed the augmented kernel matrix and its cholesky decomposition.
          X_aug = self.X + X_halluc
          K_haha = self.kernel(
              X_halluc, X_halluc
          )  # kernel for hallucinated data
          K_trha = self.kernel(
              self.X, X_halluc
          )  # kernel with training and hallucinated data
          aug_K_trtr_wo_noise = np.vstack(
              (
                  np.hstack((self.K_trtr_wo_noise, K_trha)),
                  np.hstack((K_trha.T, K_haha)),
              )
          )
          aug_L = _get_cholesky_decomp(
              aug_K_trtr_wo_noise,
              self.noise_var,
              self.handle_non_psd_kernels,
          )
          # Augmented kernel matrices for the test data
          aug_K_tete = self.kernel(X_test, X_test)
          aug_K_tetr = self.kernel(X_test, X_aug)
          aug_V = solve_lower_triangular(aug_L, aug_K_tetr.T)
          aug_post_covar = aug_K_tete - aug_V.T.dot(aug_V)
          aug_post_covar = get_post_covar_from_raw_covar(
              aug_post_covar,
              self.noise_var,
              self.kernel.is_guaranteed_psd(),
          )
          if uncert_form == "covar":
              uncert = aug_post_covar
          elif uncert_form == "std":
              uncert = np.sqrt(np.diag(aug_post_covar))
          else:
              raise ValueError(
                  "uncert_form should be none, covar or std."
              )
      return (pred_mean, uncert)
  
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 10 for calling the GP obj's underlying member method code with example usage: obj.eval_with_hallucinated_observations(X_test, X_halluc, uncert_form) and returns: pred_mean,  uncert