code: def on_run_end(self):
      #################### Initialize Evaluations Aggregator ####################
      if (
          len(self.stat_aggregates.setdefault("evaluations", {}).keys())
          == 0
      ):
          for (
              dataset_key,
              metric_results,
          ) in self.last_evaluation_results.items():
              if metric_results is not None:
                  self.stat_aggregates["evaluations"].update(
                      {
                          "{}_{}".format(dataset_key, metric_key): dict(
                              runs=[], folds=[], reps=[], final=None
                          )
                          for metric_key in metric_results.keys()
                      }
                  )
  
      #################### Update Evaluations for Run ####################
      for agg_key, agg_val in self.stat_aggregates[
          "evaluations"
      ].items():
          agg_val["runs"].append(self.__loop_helper(agg_key))
  
      super().on_run_end()
  
imports: from hyperparameter_hunter.callbacks.bases import BaseAggregatorCallback
  from datetime import datetime
  import numpy
label_desc: Use image node_id 1 for calling the AggregatorEvaluations obj's underlying member method code with example usage: obj.on_run_end() without return types