docs: def step(self, step, total, label='STEP', speed_label='STEPS/S', size=1):
          """
          Increase the step indicator, which is a sub progress circle of the actual
          main progress circle (epoch, progress() method).
          """
  
          self.lock.acquire()
          try:
              time_diff = time.time() - self.last_step_time
  
              if self.last_step > step:
                  # it restarted
                  self.last_step = 0
  
              made_steps_since_last_call = step - self.last_step
              self.last_step = step
  
              self.made_steps_since_last_sync += made_steps_since_last_call
              self.made_steps_size_since_last_sync += made_steps_since_last_call * size
  
              if time_diff >= 1 or step == total:  # only each second or last batch
                  self.set_system_info('step', step, True)
                  self.set_system_info('steps', total, True)
  
                  steps_per_second = self.made_steps_since_last_sync / time_diff
                  samples_per_second = self.made_steps_size_since_last_sync / time_diff
                  self.last_step_time = time.time()
  
                  if size:
                      self.report_speed(samples_per_second)
  
                  epochs_per_second = steps_per_second / total  # all batches
                  self.set_system_info('epochsPerSecond', epochs_per_second, True)
  
                  current_epochs = self.current_epoch if self.current_epoch else 1
                  total_epochs = self.total_epochs if self.total_epochs else 1
  
                  self.made_steps_since_last_sync = 0
                  self.made_steps_size_since_last_sync = 0
  
                  eta = 0
                  if step < total:
                      # time to end this epoch
                      if steps_per_second != 0:
                          eta = (total - step) / steps_per_second
  
                  # time until all epochs are done
                  if total_epochs - current_epochs > 0:
                      if epochs_per_second != 0:
                          eta += (total_epochs - (current_epochs)) / epochs_per_second
  
                  self.git.store_file('aetros/job/times/eta.json', simplejson.dumps(eta))
  
              if label and self.step_label != label:
                  self.set_system_info('stepLabel', label, True)
                  self.step_label = label
  
              if speed_label and self.step_speed_label != speed_label:
                  self.set_system_info('stepSpeedLabel', speed_label, True)
                  self.step_speed_label = speed_label
          finally:
              self.lock.release()