code: def get_config_names(
      decorator_name: str,
      function_name: str,
      config_names: Union[
          str, "ConfigItem", List["ConfigItem"], List[str]
      ],
      *,
      is_check_string_names: bool = True,
  ):
      from labml.internal.configs.config_item import ConfigItem
  
      if config_names is None:
          warnings.warn(
              f"Decorate your function with @{decorator_name}(Config.{function_name})",
              FutureWarning,
              4,
          )
          return function_name
      elif isinstance(config_names, str):
          if is_check_string_names:
              warnings.warn(
                  f"Use Config.{config_names} instead of '{config_names}'.",
                  FutureWarning,
                  4,
              )
          return config_names
      elif isinstance(config_names, ConfigItem):
          return config_names.key
      else:
          assert (
              isinstance(config_names, list) and len(config_names) > 0
          )
          keys = []
          for c in config_names:
              if isinstance(c, str):
                  warnings.warn(
                      f"Use Config.{c} instead of '{c}'",
                      FutureWarning,
                      4,
                  )
                  keys.append(c)
              elif isinstance(c, ConfigItem):
                  keys.append(c.key)
              else:
                  raise ValueError("Cannot determine config item", c)
          return keys
  
file_path: labml/client/labml/internal/configs/utils.py
imports: import warnings
  from typing import Tuple, Union, List, TYPE_CHECKING
label_desc: Use image node_id 1 for calling a global function with example usage: get_config_names(decorator_name, function_name, config_names) and returns: function_name, config_names, config_names, keys