code: def evaluate(hexagon_session, operations, expected, sch):
      """Evalute schedule."""
      shape = operations
      dtype = "float64"
  
      func_tir = tvm.build(
          sch.mod["main"], target=get_hexagon_target("v68")
      )
      module = hexagon_session.load_module(func_tir)
  
      # np.random.random returns float64 by default, but make the cast explicit
      # to make it easier to switch when necessary.
      a = np.random.random(shape).astype(dtype)
      b = np.random.random(shape).astype(dtype)
      c = np.zeros(shape, dtype=dtype)
  
      a_hexagon = tvm.runtime.ndarray.array(
          a, device=hexagon_session.device
      )
      b_hexagon = tvm.runtime.ndarray.array(
          b, device=hexagon_session.device
      )
      c_hexagon = tvm.runtime.ndarray.array(
          c, device=hexagon_session.device
      )
  
      # These are reduced for CI but number=100 and repeat=10 does a good job of removing noise.
      number = 1
      repeat = 1
  
      timer = module.time_evaluator(
          "__tvm_main__",
          hexagon_session.device,
          number=number,
          repeat=repeat,
      )
      runtime = timer(a_hexagon, b_hexagon, c_hexagon)
  
      tvm.testing.assert_allclose(c_hexagon.asnumpy(), expected(a, b))
  
      return round(runtime.mean * 1000, 6)
  
file_path: tvm/tests/python/contrib/test_hexagon/test_parallel_scalar.py
imports: import numpy
  import tvm
  from tvm.script import tir
  from .infrastructure import get_hexagon_target
label_desc: Use image node_id 4 for calling a global function with example usage: evaluate(hexagon_session, operations, expected, sch) and returns: round