code: def test_tuple_passing():
      x = relay.var(
          "x",
          type_annotation=relay.ty.TupleType(
              [
                  relay.ty.TensorType((), "int64"),
                  relay.ty.TensorType((), "int64"),
              ]
          ),
      )
  
      fn = relay.Function([x], relay.expr.TupleGetItem(x, 0))
      mod = tvm.IRModule({})
      gv = relay.GlobalVar("main")
      mod[gv] = fn
      mod = relay.transform.InferType()(mod)
  
      dev = tvm.cpu()
      target = tvm.target.Target("llvm")
      f = relay.create_executor(
          mod=mod, device=dev, target=target
      ).evaluate(gv)
      # First use a Python tuple.
      out = f((10, 8))
      testing.assert_allclose(out.numpy(), np.array(10))
      # Second use a tuple value.
      value_tuple = container.tuple_object(
          [nd.array(np.array(11)), nd.array(np.array(12))]
      )
      out = f(value_tuple)
      testing.assert_allclose(out.numpy(), np.array(11))
  
imports: import numpy
  import pytest
  import tvm
  from tvm import testing
  from tvm import nd
  from tvm import relay
  from tvm.runtime import container
  from tvm.relay.backend.interpreter import RefValue, ConstructorValue
  from tvm.relay.scope_builder import ScopeBuilder
label_desc: Use image node_id 15 for calling a global function with example usage: test_tuple_passing() without return types