code: def learner_time_limit(self, model_type, fit_level, k_folds):
      if self._total_time_limit is None:
          return 7 * 24 * 3600
  
      if self._model_time_limit is not None:
          return self._model_time_limit / k_folds
  
      # just train them ...
      if fit_level == "simple_algorithms":
          return None
      if fit_level == "default_algorithms":
          return None
  
      tune_algorithms = [
          a
          for a in self._algorithms
          if a
          not in [
              "Baseline",
              "Linear",
              "Decision Tree",
              "Nearest Neighbors",
          ]
      ]
      tune_algs_cnt = len(tune_algorithms)
      if tune_algs_cnt == 0:
          return None
  
      time_elapsed = time.time() - self._start_time
      time_left = self._total_time_limit - time_elapsed
  
      if fit_level == "not_so_random":
          tt = self.time_should_use(fit_level)
  
          tt /= tune_algs_cnt  # give time equally for each algorithm
          tt /= k_folds  # time is per learner (per fold)
          return tt
  
      if "hill_climbing" in fit_level:
          tt = self.time_should_use(fit_level)
          tt /= tune_algs_cnt  # give time equally for each algorithm
          tt /= k_folds  # time is per learner (per fold)
          return tt
  
      if self._is_stacking and fit_level == "stack":
          tt = time_left
          tt /= tune_algs_cnt  # give time equally for each algorithm
          tt /= k_folds  # time is per learner (per fold)
          return tt
  
file_path: mljar-supervised/supervised/tuner/time_controller.py
imports: import json
  import logging
  import time
  import numpy
  import pandas
  from supervised.utils.config import LOG_LEVEL
label_desc: Use image node_id 10 for calling the TimeController obj's underlying member method code with example usage: obj.learner_time_limit(model_type, fit_level, k_folds) and returns: unknown, unknown, None, None, None, tt, tt, tt