code: def _print_times(self, eval_time, iter_time, n_iter):
      opt_time = iter_time - eval_time
      iterPerSec = n_iter / iter_time
  
      print(
          indent,
          "Evaluation time   :",
          eval_time,
          "sec",
          indent,
          "[{} %]".format(round(eval_time / iter_time * 100, 2)),
      )
      print(
          indent,
          "Optimization time :",
          opt_time,
          "sec",
          indent,
          "[{} %]".format(round(opt_time / iter_time * 100, 2)),
      )
      if iterPerSec >= 1:
          print(
              indent,
              "Iteration time    :",
              iter_time,
              "sec",
              indent,
              "[{} iter/sec]".format(round(iterPerSec, 2)),
          )
      else:
          secPerIter = iter_time / n_iter
          print(
              indent,
              "Iteration time    :",
              iter_time,
              "sec",
              indent,
              "[{} sec/iter]".format(round(secPerIter, 2)),
          )
      print(" ")
  
file_path: Hyperactive/hyperactive/print_results.py
imports: import logging
  import numpy
label_desc: Use image node_id 2 for calling the PrintResults obj's underlying member method code with example usage: obj._print_times(eval_time, iter_time, n_iter) without return types