code: def check_training_runway(
      config: "ModelConfig",
  ) -> None:  # noqa: F821
      """Checks that checkpoints_per_epoch and steps_per_checkpoint aren't simultaneously defined."""
      if config.model_type == MODEL_ECD:
          if (
              config.trainer.checkpoints_per_epoch != 0
              and config.trainer.steps_per_checkpoint != 0
          ):
              raise ConfigValidationError(
                  "It is invalid to specify both trainer.checkpoints_per_epoch AND "
                  "trainer.steps_per_checkpoint. Please specify one or the other, or specify neither to "
                  "checkpoint/eval the model every epoch."
              )
  
imports: from abc import ABC, abstractmethod
  from re import findall
  from typing import Callable, TYPE_CHECKING
  from transformers import AutoConfig
  from ludwig.api_annotations import DeveloperAPI
  from ludwig.constants import AUDIO, BINARY, CATEGORY, IMAGE, IN_MEMORY, MIN_QUANTIZATION_BITS_FOR_MERGE_AND_UNLOAD, MODEL_ECD, MODEL_GBM, MODEL_LLM, NUMBER, SEQUENCE, SET, TEXT, TIMESERIES, VECTOR
  from ludwig.error import ConfigValidationError
  from ludwig.utils.metric_utils import get_feature_to_metric_names_map_from_feature_collection
  from ludwig.utils.misc_utils import merge_dict
label_desc: Use image node_id 5 for calling a global function with example usage: check_training_runway(config) without return types