code: def test_bound_scan():
      m = te.var("m")
      n = te.var("n")
      X = te.compute(
          (m, n), lambda i, j: tvm.tir.const(1, "float32"), name="x"
      )
      s_state = te.placeholder((m, n))
      s_init = te.compute((1, n), lambda _, i: X[0, i])
      s_update = te.compute(
          (m, n), lambda t, i: s_state[t - 1, i] + X[t, i]
      )
      s_scan = tvm.te.scan(s_init, s_update, s_state)
  
      assert tuple(s_scan.shape) == (m, n)
      s = te.create_schedule(s_scan.op)
      XX = s.cache_read(X, "local", s_update)
      xo, xi = s[s_update].split(s_update.op.axis[1], factor=4)
      s[XX].compute_at(s[s_update], xo)
      s = s.normalize()
      bounds = tvm.te.schedule.InferBound(s)
      stmt = tvm.te.schedule.ScheduleOps(s, bounds)
      assert bounds[XX.op.axis[1]].extent.value == 4
  
imports: import tvm
  import tvm.testing
  from tvm import te
label_desc: Use image node_id 11 for calling a global function with example usage: test_bound_scan() without return types