code: def _test_tuple_argument(mode):
      shape = (2, 3)
      dtype = "float32"
      tensor_type = relay.TensorType(shape, dtype)
      fields = 3
      tuple_type = relay.TupleType([tensor_type] * fields)
      tup = relay.var("tup", type_annotation=tuple_type)
      body = relay.TupleGetItem(tup, 0)
      for i in range(1, fields):
          body = relay.add(body, relay.TupleGetItem(tup, i))
      func = relay.Function([tup], body)
      func = run_infer_type(func)
      back_func = run_infer_type(gradient(func, mode=mode))
      xs = [rand(dtype, *shape) for _ in range(fields)]
      xs_np = np.array([x.numpy() for x in xs])
      expected_forward = np.sum(xs_np, axis=0)
      forward, grad = create_executor().evaluate(back_func)(tuple(xs))
      tvm.testing.assert_allclose(forward.numpy(), expected_forward)
      for field in grad[0]:
          tvm.testing.assert_allclose(
              field.numpy(), np.ones_like(field.numpy())
          )
  
imports: import collections
  import numpy
  import pytest
  import tvm
  from tvm import te
  from tvm import relay
  from tvm.relay import GlobalVar
  from tvm.relay.analysis import free_vars, free_type_vars
  from tvm.relay import create_executor, transform
  from tvm.relay.transform import gradient
  from tvm.relay.prelude import Prelude
  from tvm.relay.testing import make_nat_expr, run_infer_type, check_grad, rand, count_ops
  import tvm.relay.op
label_desc: Use image node_id 11 for calling a global function with example usage: _test_tuple_argument(mode) without return types