code: def enable_cache_init(
      context: "OptimizerContext", func_expr: FunctionExpression
  ) -> FunctionExpressionCache:
      optimized_key = optimize_cache_key(context, func_expr)
      if optimized_key == func_expr.children:
          optimized_key = [None]
  
      catalog = context.db.catalog()
      name = func_expr.signature()
      cache_entry = catalog.get_function_cache_catalog_entry_by_name(
          name
      )
      if not cache_entry:
          cache_entry = catalog.insert_function_cache_catalog_entry(
              func_expr
          )
  
      cache = FunctionExpressionCache(
          key=tuple(optimized_key),
          store=DiskKVCache(cache_entry.cache_path),
      )
      return cache
  
imports: import typing
  from typing import List, Tuple
  from evadb.catalog.catalog_utils import get_table_primary_columns
  from evadb.catalog.models.column_catalog import ColumnCatalogEntry
  from evadb.catalog.models.function_io_catalog import FunctionIOCatalogEntry
  from evadb.catalog.models.function_metadata_catalog import FunctionMetadataCatalogEntry
  from evadb.constants import CACHEABLE_FUNCTIONS, DEFAULT_FUNCTION_EXPRESSION_COST
  from evadb.expression.abstract_expression import AbstractExpression, ExpressionType
  from evadb.expression.constant_value_expression import ConstantValueExpression
  from evadb.expression.expression_utils import conjunction_list_to_expression_tree, contains_single_column, get_columns_in_predicate, is_simple_predicate, to_conjunction_list
  from evadb.expression.function_expression import FunctionExpression, FunctionExpressionCache
  from evadb.expression.tuple_value_expression import TupleValueExpression
  from evadb.parser.alias import Alias
  from evadb.parser.create_statement import ColumnDefinition
  from evadb.utils.kv_cache import DiskKVCache
label_desc: Use image node_id 9 for calling a global function with example usage: enable_cache_init(context, func_expr) and returns: cache