class_docstr: Implementation of Gaussian process model. The Gaussian process hyperparameters are obtained by optimizing
  the marginal log likelihood.
  
  This code is based on the implementation of RoBO:
  Klein, A. and Falkner, S. and Mansur, N. and Hutter, F.
  RoBO: A Flexible and Robust Bayesian Optimization Framework in Python
  In: NIPS 2017 Bayesian Optimization Workshop
  
  Parameters
  ----------
  configspace : ConfigurationSpace
  kernel : Kernel
      Kernel which is used for the Gaussian process.
  n_restarts : int, defaults to 10
      Number of restarts for the Gaussian process hyperparameter optimization.
  normalize_y : bool, defaults to True
      Zero mean unit variance normalization of the output values.
  instance_features : dict[str, list[int | float]] | None, defaults to None
      Features (list of int or floats) of the instances (str). The features are incorporated into the X data,
      on which the model is trained on.
  pca_components : float, defaults to 7
      Number of components to keep when using PCA to reduce dimensionality of instance features.
  seed : int
class_docstr_tok: ["Implementation","of","Gaussian","process","model",".","The","Gaussian","process","hyperparameters","are","obtained","by","optimizing","the","marginal","log","likelihood",".","This","code","is","based","on","the","implementation","of","RoBO",":","Klein",",","A.","and","Falkner",",","S.","and","Mansur",",","N.","and","Hutter",",","F.","RoBO",":","A","Flexible","and","Robust","Bayesian","Optimization","Framework","in","Python","In",":","NIPS","2017","Bayesian","Optimization","Workshop","Parameters","--","--","--","--","--","configspace",":","ConfigurationSpace","kernel",":","Kernel","Kernel","which","is","used","for","the","Gaussian","process",".","n_restarts",":","int",",","defaults","to","10","Number","of","restarts","for","the","Gaussian","process","hyperparameter","optimization",".","normalize_y",":","bool",",","defaults","to","True","Zero","mean","unit","variance","normalization","of","the","output","values",".","instance_features",":","dict","[","str",",","list","[","int","|","float","]","]","|","None",",","defaults","to","None","Features","(","list","of","int","or","floats",")","of","the","instances","(","str",")",".","The","features","are","incorporated","into","the","X","data",",","on","which","the","model","is","trained","on",".","pca_components",":","float",",","defaults","to","7","Number","of","components","to","keep","when","using","PCA","to","reduce","dimensionality","of","instance","features",".","seed",":","int"]
docstr: Samples F function values from the current posterior at the N specified test points.
  
  Parameters
  ----------
  X : np.ndarray [#samples, #hyperparameters + #features]
      Input data points.
  n_funcs: int
      Number of function values that are drawn at each test point.
  
  Returns
  -------
  function_samples : np.ndarray
      The F function values drawn at the N test points.
docstr_tok: ["Samples","F","function","values","from","the","current","posterior","at","the","N","specified","test","points",".","Parameters","--","--","--","--","--","X",":","np.ndarray","[","#","samples",",","#","hyperparameters","+","#","features","]","Input","data","points",".","n_funcs",":","int","Number","of","function","values","that","are","drawn","at","each","test","point",".","Returns","--","--","--","-","function_samples",":","np.ndarray","The","F","function","values","drawn","at","the","N","test","points","."]
code: def sample_functions(
      self, X_test: np.ndarray, n_funcs: int = 1
  ) -> np.ndarray:
      """Samples F function values from the current posterior at the N specified test points.
  
      Parameters
      ----------
      X : np.ndarray [#samples, #hyperparameters + #features]
          Input data points.
      n_funcs: int
          Number of function values that are drawn at each test point.
  
      Returns
      -------
      function_samples : np.ndarray
          The F function values drawn at the N test points.
      """
      if not self._is_trained:
          raise Exception("Model has to be trained first.")
  
      X_test = self._impute_inactive(X_test)
      funcs = self._gp.sample_y(
          X_test, n_samples=n_funcs, random_state=self._rng
      )
  
      if self._normalize_y:
          funcs = self._untransform_y(funcs)
  
      if len(funcs.shape) == 1:
          return funcs[None, :]
      else:
          return funcs
  
imports: from __future__ import annotations
  from typing import Any, Optional, TypeVar, cast
  import logging
  import numpy
  from ConfigSpace import ConfigurationSpace
  from scipy import optimize
  from sklearn.gaussian_process import GaussianProcessRegressor
  from sklearn.gaussian_process.kernels import Kernel
  from smac.constants import VERY_SMALL_NUMBER
  from smac.model.gaussian_process.abstract_gaussian_process import AbstractGaussianProcess
  from smac.model.gaussian_process.priors.abstract_prior import AbstractPrior
label_desc: Use image node_id 8 for calling the GaussianProcess obj's underlying member method code with example usage: obj.sample_functions(X_test, n_funcs) and returns: funcs, funcs