code: def _compute_nodes_requiring_snapshot(
      node_map: Mapping[str, node_proto_view.NodeProtoView],
      nodes_to_run: Set[str],
      nodes_to_reuse: Set[str],
  ) -> Set[str]:
      """Returns the set of nodes to run that depend on a node to reuse."""
      result = set()
      for node_id, node in node_map.items():
          if node_id not in nodes_to_run:
              continue
          for upstream_node_id in node.upstream_nodes:
              if upstream_node_id in nodes_to_reuse:
                  result.add(node_id)
                  break
      return result
  
imports: import collections
  import concurrent.futures
  import enum
  from typing import Collection, Dict, Final, List, Mapping, Optional, OrderedDict, Sequence, Set, Tuple
  import uuid
  from absl import logging
  from tfx.dsl.compiler import compiler_utils
  from tfx.dsl.compiler import constants
  from tfx.orchestration import metadata
  from tfx.orchestration import node_proto_view
  from tfx.orchestration.portable import execution_publish_utils
  from tfx.orchestration.portable.mlmd import context_lib
  from tfx.orchestration.portable.mlmd import execution_lib
  from tfx.proto.orchestration import pipeline_pb2
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 17 for calling a global function with example usage: _compute_nodes_requiring_snapshot(node_map, nodes_to_run, nodes_to_reuse) and returns: result