class_docstr: Base class for Gaussian processes. 
class_docstr_tok: ["Base","class","for","Gaussian","processes","."]
docstr: Draws num_samples samples at returns their values at X_test. 
docstr_tok: ["Draws","num_samples","samples","at","returns","their","values","at","X_test","."]
code: def draw_samples(
      self, num_samples, X_test=None, mean_vals=None, covar=None
  ):
      """Draws num_samples samples at returns their values at X_test."""
      if X_test is not None:
          mean_vals, covar = self.eval(X_test, "covar")
      return draw_gaussian_samples(num_samples, mean_vals, covar)
  
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 15 for calling the GP obj's underlying member method code with example usage: obj.draw_samples(num_samples, X_test, mean_vals, covar) and returns: draw_gaussian_samples