code: def _extract_downstream_ids(
      components: List[base_node.BaseNode],
  ) -> Dict[str, List[str]]:
      """Extract downstream component ids from a list of components.
  
      Args:
        components: List of TFX Components.
  
      Returns:
        Mapping from component id to ids of its downstream components for
        each component.
      """
  
      downstream_ids = {}
      for component in components:
          downstream_ids[component.id] = [
              downstream_node.id
              for downstream_node in component.downstream_nodes
          ]
      return downstream_ids
  
file_path: tfx/tfx/orchestration/experimental/kubernetes/kubernetes_remote_runner.py
imports: import datetime
  import json
  import time
  from typing import Dict, List
  from absl import logging
  from kubernetes import client
  from tfx.dsl.components.base import base_node
  from tfx.dsl.context_managers import dsl_context_registry
  from tfx.orchestration import pipeline
  from tfx.orchestration.experimental.kubernetes import node_wrapper
  from tfx.utils import json_utils
  from tfx.utils import kube_utils
  from google.protobuf import json_format
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 2 for calling a global function with example usage: _extract_downstream_ids(components) and returns: downstream_ids