code: def load_io_from_function_decorators(
      function: Type[AbstractFunction], is_input=False
  ) -> List[Type[FunctionIOCatalogEntry]]:
      """Load the inputs/outputs from the function decorators and return a list of FunctionIOCatalogEntry objects
  
      Args:
          function (Object): Function object
          is_input (bool, optional): True if inputs are to be loaded. Defaults to False.
  
      Returns:
          Type[FunctionIOCatalogEntry]: FunctionIOCatalogEntry object created from the input decorator in setup
      """
      tag_key = "input" if is_input else "output"
      io_signature = None
      if (
          hasattr(function.forward, "tags")
          and tag_key in function.forward.tags
      ):
          io_signature = function.forward.tags[tag_key]
      else:
          # Attempt to populate from the parent class and stop at the first parent class
          # where the required tags are found.
          for base_class in function.__bases__:
              if hasattr(base_class, "forward") and hasattr(
                  base_class.forward, "tags"
              ):
                  if tag_key in base_class.forward.tags:
                      io_signature = base_class.forward.tags[tag_key]
                      break
  
      assert (
          io_signature is not None
      ), f"Cannot infer {tag_key} signature from the decorator for {function}.\n {missing_io_signature_helper()}"
  
      result_list = []
      for io in io_signature:
          result_list.extend(io.generate_catalog_entries(is_input))
      return result_list
  
imports: from typing import List, Type
  from evadb.catalog.models.function_io_catalog import FunctionIOCatalogEntry
  from evadb.functions.abstract.abstract_function import AbstractFunction
label_desc: Use image node_id 2 for calling a global function with example usage: load_io_from_function_decorators(function, is_input) and returns: result_list