code: def on_iteration_end(self, logs, predictions):
      total_elapsed_time = np.round(
          time.time() - self.total_time_start, 2
      )
  
      if self.total_time_limit is not None:
          log.debug(
              f"Total elapsed time {total_elapsed_time} seconds. "
              + f"Time left {np.round(self.total_time_limit - total_elapsed_time, 2)} seconds."
          )
          # not time left, stop now
          if total_elapsed_time >= self.total_time_limit:
              self.learner.stop_training = True
      else:
          log.debug(f"Total elapsed time {total_elapsed_time} seconds")
  
file_path: mljar-supervised/supervised/callbacks/total_time_constraint.py
imports: import logging
  import time
  import numpy
  from supervised.callbacks.callback import Callback
  from supervised.exceptions import NotTrainedException
  from supervised.utils.config import LOG_LEVEL
label_desc: Use image node_id 4 for calling the TotalTimeConstraint obj's underlying member method code with example usage: obj.on_iteration_end(logs, predictions) without return types