code: def test_checkpoint_dag_recovery_whole(workflow_start_regular_shared):
      utils.unset_global_mark()
  
      start = time.time()
      with pytest.raises(workflow.WorkflowExecutionError):
          workflow.run(
              checkpoint_dag.bind(True),
              workflow_id="checkpoint_whole_recovery",
          )
      run_duration_whole = time.time() - start
  
      utils.set_global_mark()
  
      start = time.time()
      recovered = workflow.resume("checkpoint_whole_recovery")
      recover_duration_whole = time.time() - start
      assert np.isclose(recovered, np.arange(SIZE).mean())
  
      print(
          f"[whole] run_duration = {run_duration_whole}, "
          f"recover_duration = {recover_duration_whole}"
      )
  
file_path: ray/python/ray/workflow/tests/test_checkpoint_2.py
imports: import ray
  import time
  import pytest
  from ray.tests.conftest import *
  import numpy
  from ray import workflow
  from ray.workflow.tests import utils
label_desc: Use image node_id 4 for calling a global function with example usage: test_checkpoint_dag_recovery_whole(workflow_start_regular_shared) without return types