docstr: Returns a Gaussian Process surrogate model.
  
  Parameters
  ----------
  scenario : Scenario
  model_type : str | None, defaults to None
      Which Gaussian Process model should be chosen. Choose between `vanilla` and `mcmc`.
  kernel : kernels.Kernel | None, defaults to None
      The kernel used in the surrogate model.
  
  Returns
  -------
  model : GaussianProcess | MCMCGaussianProcess
      The instantiated gaussian process.
docstr_tok: ["Returns","a","Gaussian","Process","surrogate","model",".","Parameters","--","--","--","--","--","scenario",":","Scenario","model_type",":","str","|","None",",","defaults","to","None","Which","Gaussian","Process","model","should","be","chosen",".","Choose","between","`","vanilla","`","and","`","mcmc","`",".","kernel",":","kernels.Kernel","|","None",",","defaults","to","None","The","kernel","used","in","the","surrogate","model",".","Returns","--","--","--","-","model",":","GaussianProcess","|","MCMCGaussianProcess","The","instantiated","gaussian","process","."]
code: def get_model(
      scenario: Scenario,
      *,
      model_type: str | None = None,
      kernel: kernels.Kernel | None = None,
  ) -> AbstractGaussianProcess:
      """Returns a Gaussian Process surrogate model.
  
      Parameters
      ----------
      scenario : Scenario
      model_type : str | None, defaults to None
          Which Gaussian Process model should be chosen. Choose between `vanilla` and `mcmc`.
      kernel : kernels.Kernel | None, defaults to None
          The kernel used in the surrogate model.
  
      Returns
      -------
      model : GaussianProcess | MCMCGaussianProcess
          The instantiated gaussian process.
      """
      available_model_types = [None, "vanilla", "mcmc"]
      if model_type not in available_model_types:
          types = [str(t) for t in available_model_types]
          raise ValueError(
              f"The model_type `{model_type}` is not supported. Choose one of {', '.join(types)}"
          )
  
      if kernel is None:
          kernel = BlackBoxFacade.get_kernel(scenario=scenario)
  
      if model_type is None or model_type == "vanilla":
          return GaussianProcess(
              configspace=scenario.configspace,
              kernel=kernel,
              normalize_y=True,
              seed=scenario.seed,
          )
      elif model_type == "mcmc":
          n_mcmc_walkers = 3 * len(kernel.theta)
          if n_mcmc_walkers % 2 == 1:
              n_mcmc_walkers += 1
  
          return MCMCGaussianProcess(
              configspace=scenario.configspace,
              kernel=kernel,
              n_mcmc_walkers=n_mcmc_walkers,
              chain_length=250,
              burning_steps=250,
              normalize_y=True,
              seed=scenario.seed,
          )
      else:
          raise ValueError("Unknown model type %s" % model_type)
  
imports: from __future__ import annotations
  import numpy
  import sklearn.gaussian_process.kernels
  from ConfigSpace import Configuration
  from smac.acquisition.function.expected_improvement import EI
  from smac.acquisition.maximizer.local_and_random_search import LocalAndSortedRandomSearch
  from smac.facade.abstract_facade import AbstractFacade
  from smac.initial_design.sobol_design import SobolInitialDesign
  from smac.intensifier.intensifier import Intensifier
  from smac.model.gaussian_process.abstract_gaussian_process import AbstractGaussianProcess
  from smac.model.gaussian_process.gaussian_process import GaussianProcess
  from smac.model.gaussian_process.kernels import ConstantKernel, HammingKernel, MaternKernel, WhiteKernel
  from smac.model.gaussian_process.mcmc_gaussian_process import MCMCGaussianProcess
  from smac.model.gaussian_process.priors import HorseshoePrior, LogNormalPrior
  from smac.multi_objective.aggregation_strategy import MeanAggregationStrategy
  from smac.random_design.probability_design import ProbabilityRandomDesign
  from smac.runhistory.encoder.encoder import RunHistoryEncoder
  from smac.scenario import Scenario
  from smac.utils.configspace import get_types
label_desc: Use image node_id 2 for calling the BlackBoxFacade obj's underlying member method code with example usage: obj.get_model(scenario) and returns: GaussianProcess, MCMCGaussianProcess