code: def on_train_epoch_end(self, tez_trainer, **kwargs):
      if self._valid_tqdm is not None:
          return
  
      train_metrics = tez_trainer.metrics["train"]
      epoch = tez_trainer.current_epoch
      steps = tez_trainer._train_step
      train_metrics = self.format_metrics(train_metrics, stage="train")
  
      metrics_string = f"{train_metrics} [e={epoch} steps={steps}]"
      if tez_trainer._driver.is_local_main_process:
          self._train_tqdm.write(metrics_string)
  
      metrics = {}
      metrics["epoch"] = epoch
      metrics["steps"] = steps
      metrics["train"] = {
          k: v
          for k, v in tez_trainer.metrics["train"].items()
          if k not in ("epoch", "steps")
      }
      self.history.append(metrics)
  
file_path: tez/tez/callbacks/progress.py
imports: from tqdm.auto import tqdm
  from tez.callbacks import Callback
label_desc: Use image node_id 8 for calling the Progress obj's underlying member method code with example usage: obj.on_train_epoch_end(tez_trainer) without return types