docstr: Base class for SKOpt-based Optimization Protocols
  
  There are two important methods for all :class:`SKOptPro` descendants that should be
  invoked after initialization:
  
  1. :meth:`~hyperparameter_hunter.optimization.protocol_core.BaseOptPro.forge_experiment`
  2. :meth:`~hyperparameter_hunter.optimization.protocol_core.BaseOptPro.go`
  
  Parameters
  ----------
  target_metric: Tuple, default=("oof", <:attr:`environment.Environment.metrics`[0]>)
      Rarely necessary to explicitly provide this, as the default is usually sufficient. Path
      denoting the metric to be used to compare Experiment performance. The first value
      should be one of ["oof", "holdout", "in_fold"]. The second value should be the name of
      a metric being recorded according to :attr:`environment.Environment.metrics_params`.
      See the documentation for :func:`metrics.get_formatted_target_metric` for more info.
      Any values returned by, or given as the `target_metric` input to,
      :func:`~hyperparameter_hunter.metrics.get_formatted_target_metric` are acceptable
      values for :attr:`BaseOptPro.target_metric`
  iterations: Int, default=1
      Number of Experiments to conduct during optimization upon invoking :meth:`BaseOptPro.go`
  verbose: {0, 1, 2}, default=1
      Verbosity mode for console logging. 0: Silent. 1: Show only logs from the Optimization
      Protocol. 2: In addition to logs shown when verbose=1, also show the logs from
      individual Experiments
  read_experiments: Boolean, default=True
      If True, all Experiment records that fit in the current :attr:`space` and guidelines,
      and match :attr:`algorithm_name`, will be read in and used to fit any optimizers
  reporter_parameters: Dict, or None, default=None
      Additional parameters passed to :meth:`reporting.OptimizationReporter.__init__`. Note:
      Unless provided explicitly, the key "do_maximize" will be added by default to
      `reporter_params`, with a value inferred from the `direction` of :attr:`target_metric`
      in `G.Env.metrics`. In nearly all cases, the "do_maximize" key should be ignored,
      as there are very few reasons to explicitly include it
  warn_on_re_ask: Boolean, default=False
      If True, and the internal `optimizer` recommends a point that has already been evaluated
      on invocation of `ask`, a warning is logged before recommending a random point. Either
      way, a random point is used instead of already-evaluated recommendations. However,
      logging the fact that this has taken place can be useful to indicate that the optimizer
      may be stalling, especially if it repeatedly recommends the same point. In these cases,
      if the suggested point is not optimal, it can be helpful to switch a different OptPro
      (especially `DummyOptPro`), which will suggest points using different criteria
  
  Other Parameters
  ----------------
  base_estimator: {SKLearn Regressor, "GP", "RF", "ET", "GBRT", "DUMMY"}, default="GP"
      If not string, should inherit from `sklearn.base.RegressorMixin`. In addition, the
      `predict` method should have an optional `return_std` argument, which returns
      `std(Y | x)`, along with `E[Y | x]`.
  
      If `base_estimator` is a string in {"GP", "RF", "ET", "GBRT", "DUMMY"}, a surrogate
      model corresponding to the relevant `X_minimize` function is created
  n_initial_points: Int, default=10
      Number of complete evaluation points necessary before allowing Experiments to be
      approximated with `base_estimator`. Any valid Experiment records found will count as
      initialization points. If enough Experiment records are not found, additional points
      will be randomly sampled
  acquisition_function:{"LCB", "EI", "PI", "gp_hedge"}, default="gp_hedge"
      Function to minimize over the posterior distribution. Can be any of the following:
  
      * "LCB": Lower confidence bound
      * "EI": Negative expected improvement
      * "PI": Negative probability of improvement
      * "gp_hedge": Probabilistically choose one of the above three acquisition functions at
        every iteration
  
          * The gains `g_i` are initialized to zero
          * At every iteration,
  
              * Each acquisition function is optimised independently to propose a candidate
                point `X_i`
              * Out of all these candidate points, the next point `X_best` is chosen by
                `softmax(eta g_i)`
              * After fitting the surrogate model with `(X_best, y_best)`, the gains are
                updated such that `g_i -= mu(X_i)`
  acquisition_optimizer: {"sampling", "lbfgs", "auto"}, default="auto"
      Method to minimize the acquisition function. The fit model is updated with the optimal
      value obtained by optimizing `acq_func` with `acq_optimizer`
  
      * "sampling": `acq_func` is optimized by computing `acq_func` at `n_initial_points`
        randomly sampled points.
      * "lbfgs": `acq_func` is optimized by
  
            * Randomly sampling `n_restarts_optimizer` (from `acq_optimizer_kwargs`) points
            * "lbfgs" is run for 20 iterations with these initial points to find local minima
            * The optimal of these local minima is used to update the prior
  
      * "auto": `acq_optimizer` is configured on the basis of the `base_estimator` and the
        search space. If the space is `Categorical` or if the provided estimator is based on
        tree-models, then this is set to "sampling"
  random_state: Int, `RandomState` instance, or None, default=None
      Set to something other than None for reproducible results
  acquisition_function_kwargs: Dict, or None, default=dict(xi=0.01, kappa=1.96)
      Additional arguments passed to the acquisition function
  acquisition_optimizer_kwargs: Dict, or None, default=dict(n_points=10000, n_restarts_optimizer=5, n_jobs=1)
      Additional arguments passed to the acquisition optimizer
  n_random_starts: ...
      .. deprecated:: 3.0.0
          Use `n_initial_points`, instead. Will be removed in 3.2.0
  callbacks: Callable, list of callables, or None, default=[]
      If callable, then `callbacks(self.optimizer_result)` is called after each update to
      :attr:`optimizer`. If list, then each callable is called
  base_estimator_kwargs: Dict, or None, default={}
      Additional arguments passed to `base_estimator` when it is initialized
  
  Methods
  -------
  forge_experiment
      Define constraints on Experiments conducted by OptPro (like hyperparameter search space)
  go
      Start optimization
  
  Notes
  -----
  To provide initial input points for evaluation, individual Experiments can be executed prior
  to instantiating an Optimization Protocol. The results of these Experiments will
  automatically be detected and cherished by the optimizer.
  
  :class:`.SKOptPro` and its children in :mod:`.optimization` rely heavily
  on the utilities provided by the `Scikit-Optimize` library, so thank you to the creators and
  contributors for their excellent work.
docstr_tok: ["Base","class","for","SKOpt-based","Optimization","Protocols","There","are","two","important","methods","for","all",":","class",":","`","SKOptPro","`","descendants","that","should","be","invoked","after","initialization",":","1.",":","meth",":","`","~hyperparameter_hunter.optimization.protocol_core.BaseOptPro.forge_experiment","`","2.",":","meth",":","`","~hyperparameter_hunter.optimization.protocol_core.BaseOptPro.go","`","Parameters","--","--","--","--","--","target_metric",":","Tuple",",","default=","(","``","oof","''",",","<",":","attr",":","`","environment.Environment.metrics","`","[","0","]",">",")","Rarely","necessary","to","explicitly","provide","this",",","as","the","default","is","usually","sufficient",".","Path","denoting","the","metric","to","be","used","to","compare","Experiment","performance",".","The","first","value","should","be","one","of","[","``","oof","''",",","``","holdout","''",",","``","in_fold","''","]",".","The","second","value","should","be","the","name","of","a","metric","being","recorded","according","to",":","attr",":","`","environment.Environment.metrics_params","`",".","See","the","documentation","for",":","func",":","`","metrics.get_formatted_target_metric","`","for","more","info",".","Any","values","returned","by",",","or","given","as","the","`","target_metric","`","input","to",",",":","func",":","`","~hyperparameter_hunter.metrics.get_formatted_target_metric","`","are","acceptable","values","for",":","attr",":","`","BaseOptPro.target_metric","`","iterations",":","Int",",","default=1","Number","of","Experiments","to","conduct","during","optimization","upon","invoking",":","meth",":","`","BaseOptPro.go","`","verbose",":","{","0",",","1",",","2","}",",","default=1","Verbosity","mode","for","console","logging",".","0",":","Silent",".","1",":","Show","only","logs","from","the","Optimization","Protocol",".","2",":","In","addition","to","logs","shown","when","verbose=1",",","also","show","the","logs","from","individual","Experiments","read_experiments",":","Boolean",",","default=True","If","True",",","all","Experiment","records","that","fit","in","the","current",":","attr",":","`","space","`","and","guidelines",",","and","match",":","attr",":","`","algorithm_name","`",",","will","be","read","in","and","used","to","fit","any","optimizers","reporter_parameters",":","Dict",",","or","None",",","default=None","Additional","parameters","passed","to",":","meth",":","`","reporting.OptimizationReporter.__init__","`",".","Note",":","Unless","provided","explicitly",",","the","key","``","do_maximize","''","will","be","added","by","default","to","`","reporter_params","`",",","with","a","value","inferred","from","the","`","direction","`","of",":","attr",":","`","target_metric","`","in","`","G.Env.metrics","`",".","In","nearly","all","cases",",","the","``","do_maximize","''","key","should","be","ignored",",","as","there","are","very","few","reasons","to","explicitly","include","it","warn_on_re_ask",":","Boolean",",","default=False","If","True",",","and","the","internal","`","optimizer","`","recommends","a","point","that","has","already","been","evaluated","on","invocation","of","`","ask","`",",","a","warning","is","logged","before","recommending","a","random","point",".","Either","way",",","a","random","point","is","used","instead","of","already-evaluated","recommendations",".","However",",","logging","the","fact","that","this","has","taken","place","can","be","useful","to","indicate","that","the","optimizer","may","be","stalling",",","especially","if","it","repeatedly","recommends","the","same","point",".","In","these","cases",",","if","the","suggested","point","is","not","optimal",",","it","can","be","helpful","to","switch","a","different","OptPro","(","especially","`","DummyOptPro","`",")",",","which","will","suggest","points","using","different","criteria","Other","Parameters","--","--","--","--","--","--","--","--","base_estimator",":","{","SKLearn","Regressor",",","``","GP","''",",","``","RF","''",",","``","ET","''",",","``","GBRT","''",",","``","DUMMY","''","}",",","default=","''","GP","''","If","not","string",",","should","inherit","from","`","sklearn.base.RegressorMixin","`",".","In","addition",",","the","`","predict","`","method","should","have","an","optional","`","return_std","`","argument",",","which","returns","`","std","(","Y","|","x",")","`",",","along","with","`","E","[","Y","|","x","]","`",".","If","`","base_estimator","`","is","a","string","in","{","``","GP","''",",","``","RF","''",",","``","ET","''",",","``","GBRT","''",",","``","DUMMY","''","}",",","a","surrogate","model","corresponding","to","the","relevant","`","X_minimize","`","function","is","created","n_initial_points",":","Int",",","default=10","Number","of","complete","evaluation","points","necessary","before","allowing","Experiments","to","be","approximated","with","`","base_estimator","`",".","Any","valid","Experiment","records","found","will","count","as","initialization","points",".","If","enough","Experiment","records","are","not","found",",","additional","points","will","be","randomly","sampled","acquisition_function",":","{","``","LCB","''",",","``","EI","''",",","``","PI","''",",","``","gp_hedge","''","}",",","default=","''","gp_hedge","''","Function","to","minimize","over","the","posterior","distribution",".","Can","be","any","of","the","following",":","*","``","LCB","''",":","Lower","confidence","bound","*","``","EI","''",":","Negative","expected","improvement","*","``","PI","''",":","Negative","probability","of","improvement","*","``","gp_hedge","''",":","Probabilistically","choose","one","of","the","above","three","acquisition","functions","at","every","iteration","*","The","gains","`","g_i","`","are","initialized","to","zero","*","At","every","iteration",",","*","Each","acquisition","function","is","optimised","independently","to","propose","a","candidate","point","`","X_i","`","*","Out","of","all","these","candidate","points",",","the","next","point","`","X_best","`","is","chosen","by","`","softmax","(","eta","g_i",")","`","*","After","fitting","the","surrogate","model","with","`","(","X_best",",","y_best",")","`",",","the","gains","are","updated","such","that","`","g_i","-=","mu","(","X_i",")","`","acquisition_optimizer",":","{","``","sampling","''",",","``","lbfgs","''",",","``","auto","''","}",",","default=","''","auto","''","Method","to","minimize","the","acquisition","function",".","The","fit","model","is","updated","with","the","optimal","value","obtained","by","optimizing","`","acq_func","`","with","`","acq_optimizer","`","*","``","sampling","''",":","`","acq_func","`","is","optimized","by","computing","`","acq_func","`","at","`","n_initial_points","`","randomly","sampled","points",".","*","``","lbfgs","''",":","`","acq_func","`","is","optimized","by","*","Randomly","sampling","`","n_restarts_optimizer","`","(","from","`","acq_optimizer_kwargs","`",")","points","*","``","lbfgs","''","is","run","for","20","iterations","with","these","initial","points","to","find","local","minima","*","The","optimal","of","these","local","minima","is","used","to","update","the","prior","*","``","auto","''",":","`","acq_optimizer","`","is","configured","on","the","basis","of","the","`","base_estimator","`","and","the","search","space",".","If","the","space","is","`","Categorical","`","or","if","the","provided","estimator","is","based","on","tree-models",",","then","this","is","set","to","``","sampling","''","random_state",":","Int",",","`","RandomState","`","instance",",","or","None",",","default=None","Set","to","something","other","than","None","for","reproducible","results","acquisition_function_kwargs",":","Dict",",","or","None",",","default=dict","(","xi=0.01",",","kappa=1.96",")","Additional","arguments","passed","to","the","acquisition","function","acquisition_optimizer_kwargs",":","Dict",",","or","None",",","default=dict","(","n_points=10000",",","n_restarts_optimizer=5",",","n_jobs=1",")","Additional","arguments","passed","to","the","acquisition","optimizer","n_random_starts",":","...","..","deprecated",":",":","3.0.0","Use","`","n_initial_points","`",",","instead",".","Will","be","removed","in","3.2.0","callbacks",":","Callable",",","list","of","callables",",","or","None",",","default=","[","]","If","callable",",","then","`","callbacks","(","self.optimizer_result",")","`","is","called","after","each","update","to",":","attr",":","`","optimizer","`",".","If","list",",","then","each","callable","is","called","base_estimator_kwargs",":","Dict",",","or","None",",","default=","{","}","Additional","arguments","passed","to","`","base_estimator","`","when","it","is","initialized","Methods","--","--","--","-","forge_experiment","Define","constraints","on","Experiments","conducted","by","OptPro","(","like","hyperparameter","search","space",")","go","Start","optimization","Notes","--","--","-","To","provide","initial","input","points","for","evaluation",",","individual","Experiments","can","be","executed","prior","to","instantiating","an","Optimization","Protocol",".","The","results","of","these","Experiments","will","automatically","be","detected","and","cherished","by","the","optimizer",".",":","class",":","`",".SKOptPro","`","and","its","children","in",":","mod",":","`",".optimization","`","rely","heavily","on","the","utilities","provided","by","the","`","Scikit-Optimize","`","library",",","so","thank","you","to","the","creators","and","contributors","for","their","excellent","work","."]
code: def __init__(
      self,
      target_metric=None,
      iterations=1,
      verbose=1,
      read_experiments=True,
      reporter_parameters=None,
      warn_on_re_ask=False,
      #################### Optimizer Class Parameters ####################
      base_estimator="GP",
      n_initial_points=10,
      acquisition_function="gp_hedge",
      acquisition_optimizer="auto",
      random_state=32,
      acquisition_function_kwargs=None,
      acquisition_optimizer_kwargs=None,
      #################### Minimizer Parameters ####################
      n_random_starts="DEPRECATED",
      callbacks=None,
      #################### Other Parameters ####################
      base_estimator_kwargs=None,
  ):
      """Base class for SKOpt-based Optimization Protocols
  
      There are two important methods for all :class:`SKOptPro` descendants that should be
      invoked after initialization:
  
      1. :meth:`~hyperparameter_hunter.optimization.protocol_core.BaseOptPro.forge_experiment`
      2. :meth:`~hyperparameter_hunter.optimization.protocol_core.BaseOptPro.go`
  
      Parameters
      ----------
      target_metric: Tuple, default=("oof", <:attr:`environment.Environment.metrics`[0]>)
          Rarely necessary to explicitly provide this, as the default is usually sufficient. Path
          denoting the metric to be used to compare Experiment performance. The first value
          should be one of ["oof", "holdout", "in_fold"]. The second value should be the name of
          a metric being recorded according to :attr:`environment.Environment.metrics_params`.
          See the documentation for :func:`metrics.get_formatted_target_metric` for more info.
          Any values returned by, or given as the `target_metric` input to,
          :func:`~hyperparameter_hunter.metrics.get_formatted_target_metric` are acceptable
          values for :attr:`BaseOptPro.target_metric`
      iterations: Int, default=1
          Number of Experiments to conduct during optimization upon invoking :meth:`BaseOptPro.go`
      verbose: {0, 1, 2}, default=1
          Verbosity mode for console logging. 0: Silent. 1: Show only logs from the Optimization
          Protocol. 2: In addition to logs shown when verbose=1, also show the logs from
          individual Experiments
      read_experiments: Boolean, default=True
          If True, all Experiment records that fit in the current :attr:`space` and guidelines,
          and match :attr:`algorithm_name`, will be read in and used to fit any optimizers
      reporter_parameters: Dict, or None, default=None
          Additional parameters passed to :meth:`reporting.OptimizationReporter.__init__`. Note:
          Unless provided explicitly, the key "do_maximize" will be added by default to
          `reporter_params`, with a value inferred from the `direction` of :attr:`target_metric`
          in `G.Env.metrics`. In nearly all cases, the "do_maximize" key should be ignored,
          as there are very few reasons to explicitly include it
      warn_on_re_ask: Boolean, default=False
          If True, and the internal `optimizer` recommends a point that has already been evaluated
          on invocation of `ask`, a warning is logged before recommending a random point. Either
          way, a random point is used instead of already-evaluated recommendations. However,
          logging the fact that this has taken place can be useful to indicate that the optimizer
          may be stalling, especially if it repeatedly recommends the same point. In these cases,
          if the suggested point is not optimal, it can be helpful to switch a different OptPro
          (especially `DummyOptPro`), which will suggest points using different criteria
  
      Other Parameters
      ----------------
      base_estimator: {SKLearn Regressor, "GP", "RF", "ET", "GBRT", "DUMMY"}, default="GP"
          If not string, should inherit from `sklearn.base.RegressorMixin`. In addition, the
          `predict` method should have an optional `return_std` argument, which returns
          `std(Y | x)`, along with `E[Y | x]`.
  
          If `base_estimator` is a string in {"GP", "RF", "ET", "GBRT", "DUMMY"}, a surrogate
          model corresponding to the relevant `X_minimize` function is created
      n_initial_points: Int, default=10
          Number of complete evaluation points necessary before allowing Experiments to be
          approximated with `base_estimator`. Any valid Experiment records found will count as
          initialization points. If enough Experiment records are not found, additional points
          will be randomly sampled
      acquisition_function:{"LCB", "EI", "PI", "gp_hedge"}, default="gp_hedge"
          Function to minimize over the posterior distribution. Can be any of the following:
  
          * "LCB": Lower confidence bound
          * "EI": Negative expected improvement
          * "PI": Negative probability of improvement
          * "gp_hedge": Probabilistically choose one of the above three acquisition functions at
            every iteration
  
              * The gains `g_i` are initialized to zero
              * At every iteration,
  
                  * Each acquisition function is optimised independently to propose a candidate
                    point `X_i`
                  * Out of all these candidate points, the next point `X_best` is chosen by
                    `softmax(eta g_i)`
                  * After fitting the surrogate model with `(X_best, y_best)`, the gains are
                    updated such that `g_i -= mu(X_i)`
      acquisition_optimizer: {"sampling", "lbfgs", "auto"}, default="auto"
          Method to minimize the acquisition function. The fit model is updated with the optimal
          value obtained by optimizing `acq_func` with `acq_optimizer`
  
          * "sampling": `acq_func` is optimized by computing `acq_func` at `n_initial_points`
            randomly sampled points.
          * "lbfgs": `acq_func` is optimized by
  
                * Randomly sampling `n_restarts_optimizer` (from `acq_optimizer_kwargs`) points
                * "lbfgs" is run for 20 iterations with these initial points to find local minima
                * The optimal of these local minima is used to update the prior
  
          * "auto": `acq_optimizer` is configured on the basis of the `base_estimator` and the
            search space. If the space is `Categorical` or if the provided estimator is based on
            tree-models, then this is set to "sampling"
      random_state: Int, `RandomState` instance, or None, default=None
          Set to something other than None for reproducible results
      acquisition_function_kwargs: Dict, or None, default=dict(xi=0.01, kappa=1.96)
          Additional arguments passed to the acquisition function
      acquisition_optimizer_kwargs: Dict, or None, default=dict(n_points=10000, n_restarts_optimizer=5, n_jobs=1)
          Additional arguments passed to the acquisition optimizer
      n_random_starts: ...
          .. deprecated:: 3.0.0
              Use `n_initial_points`, instead. Will be removed in 3.2.0
      callbacks: Callable, list of callables, or None, default=[]
          If callable, then `callbacks(self.optimizer_result)` is called after each update to
          :attr:`optimizer`. If list, then each callable is called
      base_estimator_kwargs: Dict, or None, default={}
          Additional arguments passed to `base_estimator` when it is initialized
  
      Methods
      -------
      forge_experiment
          Define constraints on Experiments conducted by OptPro (like hyperparameter search space)
      go
          Start optimization
  
      Notes
      -----
      To provide initial input points for evaluation, individual Experiments can be executed prior
      to instantiating an Optimization Protocol. The results of these Experiments will
      automatically be detected and cherished by the optimizer.
  
      :class:`.SKOptPro` and its children in :mod:`.optimization` rely heavily
      on the utilities provided by the `Scikit-Optimize` library, so thank you to the creators and
      contributors for their excellent work."""
      # TODO: Add 'EIps', and 'PIps' to the allowable `acquisition_function` values - Will need to return execution times
  
      #################### Optimizer Parameters ####################
      self.base_estimator = base_estimator
      self.n_initial_points = n_initial_points
      self.acquisition_function = acquisition_function
      self.acquisition_optimizer = acquisition_optimizer
      self.random_state = random_state
  
      self.acquisition_function_kwargs = dict(xi=0.01, kappa=1.96)
      self.acquisition_function_kwargs.update(
          acquisition_function_kwargs or {}
      )
      self.acquisition_optimizer_kwargs = dict(
          n_points=10000, n_restarts_optimizer=5, n_jobs=1
      )
      self.acquisition_optimizer_kwargs.update(
          acquisition_optimizer_kwargs or {}
      )
  
      self.callbacks = callbacks or []
  
      if n_random_starts != "DEPRECATED":
          self.n_initial_points = n_random_starts
          warn(
              DeprecatedWarning(
                  "n_random_starts",
                  "3.0.0",
                  "3.2.0",
                  "Use `n_initial_points`",
              )
          )
  
      #################### Other Parameters ####################
      self.base_estimator_kwargs = base_estimator_kwargs or {}
  
      #################### Placeholder Attributes ####################
      self.optimizer = None
      self.optimizer_result = None
      self.current_hyperparameters_list = None
  
      super().__init__(
          target_metric=target_metric,
          iterations=iterations,
          verbose=verbose,
          read_experiments=read_experiments,
          reporter_parameters=reporter_parameters,
          warn_on_re_ask=warn_on_re_ask,
      )
  
imports: from hyperparameter_hunter import __version__
  from hyperparameter_hunter.algorithm_handlers import identify_algorithm, identify_algorithm_hyperparameters
  from hyperparameter_hunter.experiments import CVExperiment
  from hyperparameter_hunter.feature_engineering import FeatureEngineer
  from hyperparameter_hunter.i_o.exceptions import EnvironmentInactiveError, EnvironmentInvalidError, RepeatedExperimentError, DeprecatedWarning
  from hyperparameter_hunter.i_o.reporting import OptimizationReporter
  from hyperparameter_hunter.i_o.result_reader import finder_selector
  from hyperparameter_hunter.compat.keras_helper import reinitialize_callbacks
  from hyperparameter_hunter.compat.keras_optimization_helper import keras_prep_workflow, link_choice_ids
  from hyperparameter_hunter.metrics import get_formatted_target_metric
  from hyperparameter_hunter.optimization.backends.skopt.engine import Optimizer, cook_estimator
  from hyperparameter_hunter.settings import G, TEMP_MODULES_DIR_PATH
  from hyperparameter_hunter.space.dimensions import RejectedOptional
  from hyperparameter_hunter.space.space_core import Space
  from hyperparameter_hunter.utils.boltons_utils import get_path
  from hyperparameter_hunter.utils.general_utils import deep_restricted_update, subdict
  from hyperparameter_hunter.utils.optimization_utils import get_choice_dimensions, dimension_subset
  from hyperparameter_hunter.utils.version_utils import Deprecated
  from abc import ABCMeta, abstractmethod
  from datetime import datetime
  from inspect import currentframe, getframeinfo
  from os import walk, remove, rmdir
  from os.path import abspath
  from typing import Any, Dict
  from warnings import warn
  from skopt.callbacks import check_callback
  from skopt.utils import eval_callbacks
label_desc: Use image node_id 1 to create a new SKOptPro object from inherited base classes: BaseOptPro with example: obj = SKOptPro(target_metric, iterations, verbose, read_experiments, reporter_parameters, warn_on_re_ask, base_estimator, n_initial_points, acquisition_function, acquisition_optimizer, random_state, acquisition_function_kwargs, acquisition_optimizer_kwargs, n_random_starts, callbacks, base_estimator_kwargs)