docstr: Converter for parsed create function statement
  
  Arguments:
      statement {CreateFunctionStatement} - - CreateFunctionStatement
code: def visit_create_function(self, statement: CreateFunctionStatement):
      """Converter for parsed create function statement
  
      Arguments:
          statement {CreateFunctionStatement} - - CreateFunctionStatement
      """
      annotated_inputs = column_definition_to_function_io(
          statement.inputs, True
      )
      annotated_outputs = column_definition_to_function_io(
          statement.outputs, False
      )
      annotated_metadata = metadata_definition_to_function_metadata(
          statement.metadata
      )
  
      create_function_opr = LogicalCreateFunction(
          statement.name,
          statement.or_replace,
          statement.if_not_exists,
          annotated_inputs,
          annotated_outputs,
          statement.impl_path,
          statement.function_type,
          annotated_metadata,
      )
  
      if statement.query is not None:
          self.visit_select(statement.query)
          create_function_opr.append_child(self._plan)
  
      self._plan = create_function_opr
  
imports: from evadb.binder.binder_utils import get_bound_func_expr_outputs_as_tuple_value_expr
  from evadb.expression.abstract_expression import AbstractExpression
  from evadb.expression.function_expression import FunctionExpression
  from evadb.optimizer.operators import LogicalCreate, LogicalCreateFunction, LogicalCreateIndex, LogicalDelete, LogicalDropObject, LogicalExplain, LogicalExtractObject, LogicalFilter, LogicalFunctionScan, LogicalGet, LogicalGroupBy, LogicalInsert, LogicalJoin, LogicalLimit, LogicalLoadData, LogicalOrderBy, LogicalProject, LogicalQueryDerivedGet, LogicalRename, LogicalSample, LogicalShow, LogicalUnion
  from evadb.optimizer.optimizer_utils import column_definition_to_function_io, metadata_definition_to_function_metadata
  from evadb.parser.create_function_statement import CreateFunctionStatement
  from evadb.parser.create_index_statement import CreateIndexStatement
  from evadb.parser.create_statement import CreateTableStatement
  from evadb.parser.delete_statement import DeleteTableStatement
  from evadb.parser.drop_object_statement import DropObjectStatement
  from evadb.parser.explain_statement import ExplainStatement
  from evadb.parser.insert_statement import InsertTableStatement
  from evadb.parser.load_statement import LoadDataStatement
  from evadb.parser.rename_statement import RenameTableStatement
  from evadb.parser.select_statement import SelectStatement
  from evadb.parser.show_statement import ShowStatement
  from evadb.parser.statement import AbstractStatement
  from evadb.parser.table_ref import JoinNode, TableRef, TableValuedExpression
  from evadb.parser.types import FunctionType, JoinType
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 14 for calling the StatementToPlanConverter obj's underlying member method code with example usage: obj.visit_create_function(statement) without return types