docstr: Print a row containing the results of an Experiment just executed
  
  Parameters
  ----------
  hyperparameters: List
      List of hyperparameter values in the same order as :attr:`parameter_names`
  evaluation: Float
      An evaluation of the performance of `hyperparameters`
  experiment_id: Str, or None, default=None
      If not None, should be a string that is the UUID of the Experiment
docstr_tok: ["Print","a","row","containing","the","results","of","an","Experiment","just","executed","Parameters","--","--","--","--","--","hyperparameters",":","List","List","of","hyperparameter","values","in","the","same","order","as",":","attr",":","`","parameter_names","`","evaluation",":","Float","An","evaluation","of","the","performance","of","`","hyperparameters","`","experiment_id",":","Str",",","or","None",",","default=None","If","not","None",",","should","be","a","string","that","is","the","UUID","of","the","Experiment"]
code: def print_result(
      self, hyperparameters, evaluation, experiment_id=None
  ):
      """Print a row containing the results of an Experiment just executed
  
      Parameters
      ----------
      hyperparameters: List
          List of hyperparameter values in the same order as :attr:`parameter_names`
      evaluation: Float
          An evaluation of the performance of `hyperparameters`
      experiment_id: Str, or None, default=None
          If not None, should be a string that is the UUID of the Experiment
      """
      if not self.verbose:
          return
      print("{:>3d}".format(self.iteration), end=self.end)
  
      #################### Experiment ID ####################
      if self.show_experiment_id:
          if experiment_id is not None:
              print(
                  "{}".format(experiment_id[: self.show_experiment_id]),
                  end=self.end,
              )
          else:
              print(" " * self.show_experiment_id, end=self.end)
  
      #################### Time Elapsed ####################
      minutes, seconds = divmod(
          (datetime.now() - self.last_round).total_seconds(), 60
      )
      print(expand_mins_secs(minutes, seconds), end=self.end)
  
      #################### Evaluation Result ####################
      if (
          (self.y_max is None)  # First evaluation
          or (
              self.do_maximize and self.y_max < evaluation
          )  # Found new max (best)
          or (
              not self.do_maximize and self.y_max > evaluation
          )  # Found new min (best)
      ):
          self.y_max, self.x_max = evaluation, hyperparameters
          self._print_target_value(
              evaluation, pre=_Color.MAGENTA, post=_Color.STOP
          )
          self._print_input_values(
              hyperparameters, pre=_Color.GREEN, post=_Color.STOP
          )
      else:
          self._print_target_value(evaluation)
          self._print_input_values(hyperparameters)
  
      print("")
      self.last_round = datetime.now()
      self.iteration += 1
  
imports: from hyperparameter_hunter.i_o import exceptions
  from hyperparameter_hunter.space.dimensions import Categorical
  from hyperparameter_hunter.settings import G
  from hyperparameter_hunter.utils.general_utils import now_time, expand_mins_secs
  from contextlib import suppress
  from datetime import datetime
  import inspect
  import logging
  import os.path
  import sys
  from typing import List
label_desc: Use image node_id 7 for calling the OptimizationReporter obj's underlying member method code with example usage: obj.print_result(hyperparameters, evaluation, experiment_id) without return types