code: def test_bind_create_function_should_bind_forecast_with_default_columns(
      self,
  ):
      with patch.object(StatementBinder, "bind"):
          create_function_statement = MagicMock()
          create_function_statement.function_type = "forecasting"
          id_col_obj = ColumnCatalogEntry(
              name="unique_id",
              type=MagicMock(),
              array_type=MagicMock(),
              array_dimensions=MagicMock(),
          )
          ds_col_obj = ColumnCatalogEntry(
              name="ds",
              type=MagicMock(),
              array_type=MagicMock(),
              array_dimensions=MagicMock(),
          )
          y_col_obj = ColumnCatalogEntry(
              name="y",
              type=MagicMock(),
              array_type=MagicMock(),
              array_dimensions=MagicMock(),
          )
          y_lo_col_obj = ColumnCatalogEntry(
              name="y-lo",
              type=ColumnType.FLOAT,
              array_type=None,
          )
          y_hi_col_obj = ColumnCatalogEntry(
              name="y-hi",
              type=ColumnType.FLOAT,
              array_type=None,
          )
          create_function_statement.query.target_list = [
              TupleValueExpression(
                  name=id_col_obj.name,
                  table_alias="a",
                  col_object=id_col_obj,
              ),
              TupleValueExpression(
                  name=ds_col_obj.name,
                  table_alias="a",
                  col_object=ds_col_obj,
              ),
              TupleValueExpression(
                  name=y_col_obj.name,
                  table_alias="a",
                  col_object=y_col_obj,
              ),
          ]
          create_function_statement.metadata = []
          binder = StatementBinder(StatementBinderContext(MagicMock()))
          binder._bind_create_function_statement(
              create_function_statement
          )
  
          expected_inputs = [
              ColumnDefinition(
                  "horizon",
                  ColumnType.INTEGER,
                  None,
                  None,
              )
          ]
          expected_outputs = list(
              [
                  ColumnDefinition(
                      col_obj.name,
                      col_obj.type,
                      col_obj.array_type,
                      col_obj.array_dimensions,
                  )
                  for col_obj in (
                      id_col_obj,
                      ds_col_obj,
                      y_col_obj,
                      y_lo_col_obj,
                      y_hi_col_obj,
                  )
              ]
          )
          self.assertEqual(
              create_function_statement.inputs, expected_inputs
          )
          self.assertEqual(
              create_function_statement.outputs, expected_outputs
          )
  
imports: import unittest
  from unittest.mock import MagicMock, Mock, patch
  from evadb.binder.binder_utils import BinderError
  from evadb.binder.statement_binder import StatementBinder
  from evadb.binder.statement_binder_context import StatementBinderContext
  from evadb.catalog.catalog_type import ColumnType, NdArrayType
  from evadb.catalog.models.utils import ColumnCatalogEntry
  from evadb.catalog.sql_config import IDENTIFIER_COLUMN
  from evadb.expression.function_expression import FunctionExpression
  from evadb.expression.tuple_value_expression import TupleValueExpression
  from evadb.parser.alias import Alias
  from evadb.parser.create_statement import ColumnDefinition
label_desc: Use image node_id 19 for calling the StatementBinderTests obj's underlying member method code with example usage: obj.test_bind_create_function_should_bind_forecast_with_default_columns() without return types