docstr: Private method that resolves the input/output definitions for a given function.
  It first searches for the input/outputs in the CREATE statement. If not found, it resolves them using decorators. If not found there as well, it raises an error.
  
  Args:
      function (FunctionCatalogEntry): The function for which to resolve input and output definitions.
  
  Returns:
      A List of FunctionIOCatalogEntry objects that represent the resolved input and
      output definitions for the function.
  
  Raises:
      RuntimeError: If an error occurs while resolving the function input/output
      definitions.
docstr_tok: ["Private","method","that","resolves","the","input\/output","definitions","for","a","given","function",".","It","first","searches","for","the","input\/outputs","in","the","CREATE","statement",".","If","not","found",",","it","resolves","them","using","decorators",".","If","not","found","there","as","well",",","it","raises","an","error",".","Args",":","function","(","FunctionCatalogEntry",")",":","The","function","for","which","to","resolve","input","and","output","definitions",".","Returns",":","A","List","of","FunctionIOCatalogEntry","objects","that","represent","the","resolved","input","and","output","definitions","for","the","function",".","Raises",":","RuntimeError",":","If","an","error","occurs","while","resolving","the","function","input\/output","definitions","."]
code: def _resolve_function_io(
      self, function: FunctionCatalogEntry
  ) -> List[FunctionIOCatalogEntry]:
      """Private method that resolves the input/output definitions for a given function.
      It first searches for the input/outputs in the CREATE statement. If not found, it resolves them using decorators. If not found there as well, it raises an error.
  
      Args:
          function (FunctionCatalogEntry): The function for which to resolve input and output definitions.
  
      Returns:
          A List of FunctionIOCatalogEntry objects that represent the resolved input and
          output definitions for the function.
  
      Raises:
          RuntimeError: If an error occurs while resolving the function input/output
          definitions.
      """
      io_list = []
      try:
          if self.node.inputs:
              io_list.extend(self.node.inputs)
          else:
              # try to load the inputs from decorators, the inputs from CREATE statement take precedence
              io_list.extend(
                  load_io_from_function_decorators(
                      function, is_input=True
                  )
              )
  
          if self.node.outputs:
              io_list.extend(self.node.outputs)
          else:
              # try to load the outputs from decorators, the outputs from CREATE statement take precedence
              io_list.extend(
                  load_io_from_function_decorators(
                      function, is_input=False
                  )
              )
  
      except FunctionIODefinitionError as e:
          err_msg = f"Error creating function, input/output definition incorrect: {str(e)}"
          logger.error(err_msg)
          raise RuntimeError(err_msg)
  
      return io_list
  
imports: import contextlib
  import hashlib
  import locale
  import os
  import pickle
  import re
  import time
  from pathlib import Path
  from typing import Dict, List
  import numpy
  import pandas
  from evadb.catalog.catalog_utils import get_metadata_properties
  from evadb.catalog.models.function_catalog import FunctionCatalogEntry
  from evadb.catalog.models.function_io_catalog import FunctionIOCatalogEntry
  from evadb.catalog.models.function_metadata_catalog import FunctionMetadataCatalogEntry
  from evadb.configuration.constants import DEFAULT_SKLEARN_TRAIN_MODEL, DEFAULT_TRAIN_REGRESSION_METRIC, DEFAULT_TRAIN_TIME_LIMIT, DEFAULT_XGBOOST_TASK, SKLEARN_SUPPORTED_MODELS, EvaDB_INSTALLATION_DIR
  from evadb.database import EvaDBDatabase
  from evadb.executor.abstract_executor import AbstractExecutor
  from evadb.functions.decorators.utils import load_io_from_function_decorators
  from evadb.models.storage.batch import Batch
  from evadb.plan_nodes.create_function_plan import CreateFunctionPlan
  from evadb.third_party.huggingface.create import gen_hf_io_catalog_entries
  from evadb.utils.errors import FunctionIODefinitionError
  from evadb.utils.generic_utils import load_function_class_from_file, string_comparison_case_insensitive, try_to_import_flaml_automl, try_to_import_ludwig, try_to_import_neuralforecast, try_to_import_statsforecast, try_to_import_torch, try_to_import_ultralytics
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 12 for calling the CreateFunctionExecutor obj's underlying member method code with example usage: obj._resolve_function_io(function) and returns: io_list