class_docstr: The `FunctionIOCatalog` catalog stores information about the input and output
  attributes of user-defined functions (Functions). It maintains the following information
  for each attribute:
  `_row_id:` an autogenerated identifier
  `_name: ` name of the input/output argument
  `_type:` the type of the argument, refer `ColumnType`
  `_is_nullable:` which indicates whether it is nullable
  `_array_type:` the type of array, as specified in `NdArrayType` (or `None` if the attribute is a primitive type)
  `_array_dimensions:` the dimensions of the array (if `_array_type` is not `None`)
  `_function_id:` the `_row_id` of the `FunctionCatalog` entry to which the attribute belongs
class_docstr_tok: ["The","`","FunctionIOCatalog","`","catalog","stores","information","about","the","input","and","output","attributes","of","user-defined","functions","(","Functions",")",".","It","maintains","the","following","information","for","each","attribute",":","`","_row_id",":","`","an","autogenerated","identifier","`","_name",":","`","name","of","the","input\/output","argument","`","_type",":","`","the","type","of","the","argument",",","refer","`","ColumnType","`","`","_is_nullable",":","`","which","indicates","whether","it","is","nullable","`","_array_type",":","`","the","type","of","array",",","as","specified","in","`","NdArrayType","`","(","or","`","None","`","if","the","attribute","is","a","primitive","type",")","`","_array_dimensions",":","`","the","dimensions","of","the","array","(","if","`","_array_type","`","is","not","`","None","`",")","`","_function_id",":","`","the","`","_row_id","`","of","the","`","FunctionCatalog","`","entry","to","which","the","attribute","belongs"]
code: def __init__(
      self,
      name: str,
      type: ColumnType,
      is_nullable: bool = False,
      array_type: NdArrayType = None,
      array_dimensions: Tuple[int] = None,
      is_input: bool = True,
      function_id: int = None,
  ):
      self._name = name
      self._type = type
      self._is_nullable = is_nullable
      self._array_type = array_type
      self.array_dimensions = array_dimensions or str(())
      self._is_input = is_input
      self._function_id = function_id
  
file_path: evadb/evadb/catalog/models/function_io_catalog.py
imports: from ast import literal_eval
  from typing import Tuple
  from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, UniqueConstraint
  from sqlalchemy.orm import relationship
  from sqlalchemy.types import Enum
  from evadb.catalog.catalog_type import ColumnType, Dimension, NdArrayType
  from evadb.catalog.models.base_model import BaseModel
  from evadb.catalog.models.utils import FunctionIOCatalogEntry
label_desc: Use image node_id 1 to create a new FunctionIOCatalog object from inherited base classes: BaseModel with example: obj = FunctionIOCatalog(name, type, is_nullable, array_type, array_dimensions, is_input, function_id)