code: def extract_pushdown_predicate(
      predicate: AbstractExpression, column_alias: str
  ) -> Tuple[AbstractExpression, AbstractExpression]:
      """Decompose the predicate into pushdown predicate and remaining predicate
  
      Args:
          predicate (AbstractExpression): predicate that needs to be decomposed
          column (str): column_alias to extract predicate
      Returns:
          Tuple[AbstractExpression, AbstractExpression]: (pushdown predicate,
          remaining predicate)
      """
      if predicate is None:
          return None, None
  
      if contains_single_column(predicate, column_alias):
          if is_simple_predicate(predicate):
              return predicate, None
  
      pushdown_preds = []
      rem_pred = []
      pred_list = to_conjunction_list(predicate)
      for pred in pred_list:
          if contains_single_column(
              pred, column_alias
          ) and is_simple_predicate(pred):
              pushdown_preds.append(pred)
          else:
              rem_pred.append(pred)
  
      return (
          conjunction_list_to_expression_tree(pushdown_preds),
          conjunction_list_to_expression_tree(rem_pred),
      )
  
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 4 for calling a global function with example usage: extract_pushdown_predicate(predicate, column_alias) and returns: conjunction_list_to_expression_tree,  conjunction_list_to_expression_tree, None,  None, predicate,  None