code: def __iter__(self):
      time_since_last_batch = timeit.default_timer()
      for step, data in _get_step_iterator(
          self.steps_per_epoch, self.generator
      ):
          self.on_batch_begin(step, {})
  
          step_data = Step(step)
          yield step_data, data
  
          batch_end_time = timeit.default_timer()
          batch_total_time = batch_end_time - time_since_last_batch
          time_since_last_batch = batch_end_time
  
          metrics_log = dict(
              zip(self.batch_metrics_names, step_data.batch_metrics)
          )
          batch_logs = {
              "batch": step,
              "size": step_data.size,
              "time": batch_total_time,
              f"{self.prefix}loss": step_data.loss,
              **metrics_log,
          }
  
          self.on_batch_end(step, batch_logs)
  
file_path: poutyne/poutyne/framework/iterators.py
imports: import itertools
  import timeit
label_desc: Use image node_id 3 for calling the StepIterator obj's underlying member method code with example usage: obj.__iter__() without return types