code: def test_func_dag(shared_ray_instance):
      @ray.remote
      def a(user_input):
          return user_input
  
      @ray.remote
      def b(x):
          return x * 2
  
      @ray.remote
      def c(x):
          return x + 1
  
      @ray.remote
      def d(x, y):
          return x + y
  
      with InputNode() as dag_input:
          a_ref = a.bind(dag_input)
          b_ref = b.bind(a_ref)
          c_ref = c.bind(a_ref)
          d_ref = d.bind(b_ref, c_ref)
          d1_ref = d.bind(d_ref, d_ref)
          d2_ref = d.bind(d1_ref, d_ref)
          dag = d.bind(d2_ref, d_ref)
  
      # [(2*2 + 2+1) + (2*2 + 2+1)] + [(2*2 + 2+1) + (2*2 + 2+1)]
      assert ray.get(dag.execute(2)) == 28
      # [(3*2 + 3+1) + (3*2 + 3+1)] + [(3*2 + 3+1) + (3*2 + 3+1)]
      assert ray.get(dag.execute(3)) == 40
  
file_path: ray/python/ray/dag/tests/test_input_node.py
imports: import pytest
  from ray.dag.dag_node import DAGNode
  from ray.dag.input_node import InputNode
  from typing import Any, TypeVar
  import ray
label_desc: Use image node_id 3 for calling a global function with example usage: test_func_dag(shared_ray_instance) and returns: user_input, unknown, unknown, unknown