code: def extract_pushdown_predicate_for_alias(
      predicate: AbstractExpression, aliases: List[Alias]
  ):
      """Extract predicate that can be pushed down based on the input aliases.
  
      Atomic predicates on the table columns that are the subset of the input aliases are
      considered as candidates for pushdown.
  
      Args:
          predicate (AbstractExpression): input predicate
          aliases (List[str]): aliases for which predicate can be pushed
      """
      if predicate is None:
          return None, None
  
      pred_list = to_conjunction_list(predicate)
      pushdown_preds = []
      rem_pred = []
      aliases = [alias.alias_name for alias in aliases]
      for pred in pred_list:
          column_aliases = get_columns_in_predicate(pred)
          table_aliases = set(
              [col.split(".")[0] for col in column_aliases]
          )
          if table_aliases.issubset(set(aliases)):
              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 5 for calling a global function with example usage: extract_pushdown_predicate_for_alias(predicate, aliases) and returns: conjunction_list_to_expression_tree,  conjunction_list_to_expression_tree, None,  None