code: def on_iteration_end(self, logs, predictions):
      self.iterations_count += 1
      iteration_elapsed_time = np.round(
          time.time() - self.iter_start_time, 2
      )
      learner_elapsed_time = np.round(
          time.time() - self.train_start_time, 2
      )
      log.debug(
          "Iteration {0} took {1} seconds, learner training time {2} seconds".format(
              self.iterations_count,
              iteration_elapsed_time,
              learner_elapsed_time,
          )
      )
  
      if self.min_steps is not None:
          if self.iterations_count < self.min_steps:
              # self.learner.stop_training = False
              # return before checking other conditions
              return
  
      if self.learner_time_limit is not None:
          if learner_elapsed_time >= self.learner_time_limit:
              self.learner.stop_training = True
              log.info("Terminating learning, time limit reached")
  
file_path: mljar-supervised/supervised/callbacks/learner_time_constraint.py
imports: import logging
  import time
  import numpy
  from supervised.callbacks.callback import Callback
  from supervised.utils.config import LOG_LEVEL
label_desc: Use image node_id 4 for calling the LearnerTimeConstraint obj's underlying member method code with example usage: obj.on_iteration_end(logs, predictions) without return types