code: def test_both_data_and_execution_dependency_between_steps():
      @step
      def func_0() -> None:
          pass
  
      @step
      def func_1() -> Tuple:
          return 1, 2, 3
  
      @step
      def func_2(a, b, c, param_1, param_2):
          return a, b, c
  
      func_0_output = func_0()
      func_1_output = func_1()
      func_2_output = func_2(
          a=func_1_output[0],
          b=func_1_output[1],
          c=func_1_output[2],
          param_1=ExecutionVariables.PIPELINE_EXECUTION_ID,
          param_2=ParameterInteger("param_2"),
      )
      get_step(func_2_output).add_depends_on([func_0_output])
  
      assert get_step(func_2_output).depends_on == [
          get_step(func_1_output),
          func_0_output,
      ]
      with pytest.raises(ValueError):
          get_step(func_2_output).depends_on = []
  
imports: from __future__ import absolute_import
  from copy import deepcopy
  import pytest
  import re
  from mock import patch, Mock, ANY
  from typing import List, Tuple
  from mock.mock import MagicMock
  from sagemaker.workflow.parameters import ParameterInteger
  from sagemaker.workflow.execution_variables import ExecutionVariables
  from sagemaker.workflow.functions import Join
  from sagemaker.workflow.step_outputs import get_step
  from sagemaker.workflow.function_step import DelayedReturn, step
  from sagemaker.workflow.retry import StepRetryPolicy, StepExceptionTypeEnum
  from sagemaker.workflow.pipeline_context import _PipelineConfig
  from sagemaker.workflow.pipeline_definition_config import PipelineDefinitionConfig
label_desc: Use image node_id 13 for calling a global function with example usage: test_both_data_and_execution_dependency_between_steps() and returns: int,  int,  int, a,  b,  c