code: def _ensure_not_full_run(
      from_nodes: Optional[Collection[str]] = None,
      to_nodes: Optional[Collection[str]] = None,
  ):
      """Raises ValueError if both from_nodes and to_nodes are falsy."""
      if not (from_nodes or to_nodes):
          raise ValueError("Both from_nodes and to_nodes are empty.")
  
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 9 for calling a global function with example usage: _ensure_not_full_run(from_nodes, to_nodes) without return types