code: def test_multiple_revisions() -> None:
      processing_graph = PROCESSING_GRAPH_ONE_STEP
  
      dataset_backfill_plan = get_dataset_backfill_plan(
          processing_graph=processing_graph, revision=REVISION_NAME
      )
      assert_dataset_backfill_plan(
          dataset_backfill_plan=dataset_backfill_plan,
          config_names=[],
          split_names_in_first_config=[],
          cache_status={
              "cache_has_different_git_revision": [],
              "cache_is_outdated_by_parent": [],
              "cache_is_empty": [ARTIFACT_DA],
              "cache_is_error_to_retry": [],
              "cache_is_job_runner_obsolete": [],
              "up_to_date": [],
          },
          queue_status={"in_process": []},
          tasks=["CreateJobs,1"],
      )
  
      # create the job for the first revision
      dataset_backfill_plan.run()
  
      # the job is in process, no other job is created for the same revision
      dataset_backfill_plan = get_dataset_backfill_plan(
          processing_graph=processing_graph, revision=REVISION_NAME
      )
      assert_dataset_backfill_plan(
          dataset_backfill_plan=dataset_backfill_plan,
          config_names=[],
          split_names_in_first_config=[],
          cache_status={
              "cache_has_different_git_revision": [],
              "cache_is_outdated_by_parent": [],
              "cache_is_empty": [ARTIFACT_DA],
              "cache_is_error_to_retry": [],
              "cache_is_job_runner_obsolete": [],
              "up_to_date": [],
          },
          queue_status={"in_process": [ARTIFACT_DA]},
          tasks=[],
      )
  
      # create the job for the second revision: the first job is deleted
      dataset_backfill_plan = get_dataset_backfill_plan(
          processing_graph=processing_graph,
          revision=OTHER_REVISION_NAME,
      )
      assert_dataset_backfill_plan(
          dataset_backfill_plan=dataset_backfill_plan,
          config_names=[],
          split_names_in_first_config=[],
          cache_status={
              "cache_has_different_git_revision": [],
              "cache_is_outdated_by_parent": [],
              "cache_is_empty": [ARTIFACT_DA_OTHER_REVISION],
              "cache_is_error_to_retry": [],
              "cache_is_job_runner_obsolete": [],
              "up_to_date": [],
          },
          queue_status={"in_process": []},
          tasks=["DeleteJobs,1", "CreateJobs,1"],
      )
      dataset_backfill_plan.run()
  
      dataset_backfill_plan = get_dataset_backfill_plan(
          processing_graph=processing_graph,
          revision=OTHER_REVISION_NAME,
      )
      assert_dataset_backfill_plan(
          dataset_backfill_plan=dataset_backfill_plan,
          config_names=[],
          split_names_in_first_config=[],
          cache_status={
              "cache_has_different_git_revision": [],
              "cache_is_outdated_by_parent": [],
              "cache_is_empty": [ARTIFACT_DA_OTHER_REVISION],
              "cache_is_error_to_retry": [],
              "cache_is_job_runner_obsolete": [],
              "up_to_date": [],
          },
          queue_status={"in_process": [ARTIFACT_DA_OTHER_REVISION]},
          tasks=[],
      )
      pending_jobs_df = Queue().get_pending_jobs_df(
          dataset=DATASET_NAME
      )
      assert len(pending_jobs_df) == 1
      assert not (pending_jobs_df["revision"] == REVISION_NAME).any()
      assert (pending_jobs_df["revision"] == OTHER_REVISION_NAME).all()
  
imports: from datetime import datetime
  from typing import Optional
  from unittest.mock import patch
  import pytest
  from libcommon.constants import ERROR_CODES_TO_RETRY
  from libcommon.processing_graph import ProcessingGraph
  from libcommon.queue import Queue
  from libcommon.resources import CacheMongoResource, QueueMongoResource
  from libcommon.utils import Priority, Status
  from .utils import ARTIFACT_CA_1, ARTIFACT_CA_2, ARTIFACT_CB_1, ARTIFACT_CB_2, ARTIFACT_DA, ARTIFACT_DA_OTHER_REVISION, ARTIFACT_DB, ARTIFACT_DC, ARTIFACT_DD, ARTIFACT_DE, ARTIFACT_DF, ARTIFACT_DG, ARTIFACT_DH, ARTIFACT_DI, ARTIFACT_SA_1_1, ARTIFACT_SA_1_2, ARTIFACT_SA_2_1, ARTIFACT_SA_2_2, CONFIG_NAME_1, CONFIG_NAMES, DATASET_NAME, DIFFICULTY, OTHER_REVISION_NAME, PROCESSING_GRAPH_FAN_IN_OUT, PROCESSING_GRAPH_GENEALOGY, PROCESSING_GRAPH_ONE_STEP, PROCESSING_GRAPH_PARALLEL, REVISION_NAME, SPLIT_NAME_1, SPLIT_NAMES, STEP_CA, STEP_DA, STEP_DD, STEP_DI, STEP_SA, assert_dataset_backfill_plan, compute_all, get_dataset_backfill_plan, process_all_jobs, process_next_job, put_cache
label_desc: Use image node_id 17 for calling a global function with example usage: test_multiple_revisions() without return types