class_docstr: Implementation that contains the main Bayesian optimization loop.
  
  Parameters
  ----------
  scenario : Scenario
      The scenario object, holding all environmental information.
  runner : AbstractRunner
      The runner (containing the target function) is called internally to judge a trial's performance.
  runhistory : Runhistory
      The runhistory stores all trials.
  intensifier : AbstractIntensifier
      The intensifier decides which trial (combination of configuration, seed, budget and instance) should be run
      next.
  overwrite: bool, defaults to False
      When True, overwrites the run results if a previous run is found that is
      inconsistent in the meta data with the current setup. If ``overwrite`` is set to False, the user is asked
      for the exact behaviour (overwrite completely, save old run, or use old results).
  
  Warning
  -------
  This model should be initialized by a facade only.
class_docstr_tok: ["Implementation","that","contains","the","main","Bayesian","optimization","loop",".","Parameters","--","--","--","--","--","scenario",":","Scenario","The","scenario","object",",","holding","all","environmental","information",".","runner",":","AbstractRunner","The","runner","(","containing","the","target","function",")","is","called","internally","to","judge","a","trial","'s","performance",".","runhistory",":","Runhistory","The","runhistory","stores","all","trials",".","intensifier",":","AbstractIntensifier","The","intensifier","decides","which","trial","(","combination","of","configuration",",","seed",",","budget","and","instance",")","should","be","run","next",".","overwrite",":","bool",",","defaults","to","False","When","True",",","overwrites","the","run","results","if","a","previous","run","is","found","that","is","inconsistent","in","the","meta","data","with","the","current","setup",".","If","``","overwrite","``","is","set","to","False",",","the","user","is","asked","for","the","exact","behaviour","(","overwrite","completely",",","save","old","run",",","or","use","old","results",")",".","Warning","--","--","--","-","This","model","should","be","initialized","by","a","facade","only","."]
docstr: Adds the result of a trial to the runhistory and updates the stats object.
  
  Parameters
  ----------
  info : TrialInfo
      Describes the trial from which to process the results.
  value : TrialValue
      Contains relevant information regarding the execution of a trial.
  save : bool, optional to True
      Whether the runhistory should be saved.
code: def tell(
      self,
      info: TrialInfo,
      value: TrialValue,
      save: bool = True,
  ) -> None:
      """Adds the result of a trial to the runhistory and updates the stats object.
  
      Parameters
      ----------
      info : TrialInfo
          Describes the trial from which to process the results.
      value : TrialValue
          Contains relevant information regarding the execution of a trial.
      save : bool, optional to True
          Whether the runhistory should be saved.
      """
      if info.config.origin is None:
          info.config.origin = "Custom"
  
      for callback in self._callbacks:
          response = callback.on_tell_start(self, info, value)
  
          # If a callback returns False, the optimization loop should be interrupted
          # the other callbacks are still being called.
          if response is False:
              logger.info(
                  "A callback returned False. Abort is requested."
              )
              self._stop = True
  
      # Some sanity checks here
      if self._intensifier.uses_instances and info.instance is None:
          raise ValueError(
              "Passed instance is None but intensifier requires instances."
          )
  
      if self._intensifier.uses_budgets and info.budget is None:
          raise ValueError(
              "Passed budget is None but intensifier requires budgets."
          )
  
      self._runhistory.add(
          config=info.config,
          cost=value.cost,
          time=value.time,
          status=value.status,
          instance=info.instance,
          seed=info.seed,
          budget=info.budget,
          starttime=value.starttime,
          endtime=value.endtime,
          additional_info=value.additional_info,
          force_update=True,  # Important to overwrite the status RUNNING
      )
  
      logger.debug(
          f"Tell method was called with cost {value.cost} ({StatusType(value.status).name})."
      )
  
      for callback in self._callbacks:
          response = callback.on_tell_end(self, info, value)
  
          # If a callback returns False, the optimization loop should be interrupted
          # the other callbacks are still being called.
          if response is False:
              logger.info(
                  "A callback returned False. Abort is requested."
              )
              self._stop = True
  
      if save:
          self.save()
  
imports: from __future__ import annotations
  from typing import Any
  import json
  import time
  from pathlib import Path
  import numpy
  from ConfigSpace import Configuration
  from numpy import ndarray
  from smac.acquisition.function.abstract_acquisition_function import AbstractAcquisitionFunction
  from smac.callback.callback import Callback
  from smac.intensifier.abstract_intensifier import AbstractIntensifier
  from smac.model.abstract_model import AbstractModel
  from smac.runhistory import StatusType, TrialInfo, TrialValue
  from smac.runhistory.runhistory import RunHistory
  from smac.runner import FirstRunCrashedException
  from smac.runner.abstract_runner import AbstractRunner
  from smac.runner.dask_runner import DaskParallelRunner
  from smac.scenario import Scenario
  from smac.utils.data_structures import recursively_compare_dicts
  from smac.utils.logging import get_logger
label_desc: Use image node_id 11 for calling the SMBO obj's underlying member method code with example usage: obj.tell(info, value, save) without return types