class_docstr: General class for handling a Gaussian Process in GPyOpt.
  
  :param kernel: GPy kernel to use in the GP model.
  :param noise_var: value of the noise variance if known.
  :param exact_feval: whether noiseless evaluations are available. IMPORTANT to make the optimization work well in noiseless scenarios (default, False).
  :param optimizer: optimizer of the model. Check GPy for details.
  :param max_iters: maximum number of iterations used to optimize the parameters of the model.
  :param optimize_restarts: number of restarts in the optimization.
  :param sparse: whether to use a sparse GP (default, False). This is useful when many observations are available.
  :param num_inducing: number of inducing points if a sparse GP is used.
  :param verbose: print out the model messages (default, False).
  :param ARD: whether ARD is used in the kernel (default, False).
  :param mean_function: GPy Mapping to use as the mean function for the GP model (default, None).
  
  .. Note:: This model does Maximum likelihood estimation of the hyper-parameters.
code: def _predict(self, X, full_cov, include_likelihood):
      if X.ndim == 1:
          X = X[None, :]
      m, v = self.model.predict(
          X, full_cov=full_cov, include_likelihood=include_likelihood
      )
      v = np.clip(v, 1e-10, np.inf)
      return m, v
  
imports: import numpy
  import GPy
  from .base import BOModel
label_desc: Use image node_id 5 for calling the GPModel obj's underlying member method code with example usage: obj._predict(X, full_cov, include_likelihood) and returns: m,  v