code: def _calculate_steps(num_steps, num_estimators):
      """Calculate steps (integers between 1 to num_estimators) to work on."""
      if num_steps >= num_estimators:
          return list(range(1, num_estimators + 1))
      if num_steps <= 5:
          steps_percents = np.linspace(0, 1.0, num_steps + 1)[1:]
          steps_numbers = np.ceil(steps_percents * num_estimators)
          steps_set = {int(s) for s in steps_numbers}
      else:
          steps_percents = np.linspace(
              5 / num_estimators, 1.0, num_steps - 4
          )[1:]
          steps_numbers = np.ceil(steps_percents * num_estimators)
          steps_set = {int(s) for s in steps_numbers}
          # We want to forcefully take the first 5 estimators, since they have the largest affect on the model performance
          steps_set.update({1, 2, 3, 4, 5})
  
      return sorted(steps_set)
  
imports: from copy import deepcopy
  from typing import TYPE_CHECKING, Callable, Tuple, Union
  import numpy
  import plotly.graph_objects
  from sklearn.pipeline import Pipeline
  from deepchecks.core import CheckResult, ConditionCategory, ConditionResult
  from deepchecks.core.errors import DeepchecksValueError, ModelValidationError
  from deepchecks.tabular import Context, TrainTestCheck
  from deepchecks.utils.docref import doclink
  from deepchecks.utils.model import get_model_of_pipeline
  from deepchecks.utils.strings import format_percent
label_desc: Use image node_id 2 for calling a global function with example usage: _calculate_steps(num_steps, num_estimators) and returns: sorted, list