code: def test_rewrite_qdistilbert():
      """Test case for rewrite_qdistilbert"""
      A = relay.var("A", shape=(12, 128, 64), dtype="int8")
      B = relay.var("B", shape=(12, 64, 128), dtype="int8")
  
      z = tvm.tir.IntImm("int64", 0)
      s1 = tvm.tir.IntImm("int64", 1)
      tx = tvm.tir.IntImm("int64", 128)
      ty = tvm.tir.IntImm("int64", 64)
      expand_dims = []
      for i in range(12):
          d1 = relay.const(13, dtype="int32")
          d2 = relay.const(1, dtype="int32")
          d3 = relay.const(0.0541715, dtype="float32")
          d4 = relay.const(0.0489368, dtype="float32")
  
          q1 = relay.const(0.00265098, dtype="float32")
          q2 = relay.const(0, dtype="int32")
          q3 = relay.const(0.728874, dtype="float32")
          q4 = relay.const(-14, dtype="int32")
  
          x = tvm.tir.IntImm("int64", i)
          y = tvm.tir.IntImm("int64", i + 1)
  
          SA = relay.op.strided_slice(
              A,
              begin=[x, z, z],
              end=[y, tx, ty],
              strides=[s1, s1, s1],
              axes=None,
          )
          RA = relay.op.reshape(SA, [128, 64])
          SB = relay.op.strided_slice(
              B,
              begin=[x, z, z],
              end=[y, ty, tx],
              strides=[s1, s1, s1],
              axes=None,
          )
          RB = relay.op.reshape(SB, [64, 128])
          TB = relay.op.transpose(RB, [1, 0])
          dense = relay.qnn.op.dense(
              RA, TB, d1, d2, d3, d4, units=None, out_dtype="int32"
          )
          requantize = relay.qnn.op.requantize(dense, q1, q2, q3, q4)
          expand_dims.append(relay.op.expand_dims(requantize, axis=0))
  
      t = relay.expr.Tuple(expand_dims)
      graph = relay.op.concatenate(t, axis=0)
  
      func = relay.Function(relay.analysis.free_vars(graph), graph)
      mod = tvm.IRModule.from_expr(func)
      mod = rewrite_qdistilbert(mod)
  
      d1 = relay.const(13, dtype="int32")
      d2 = relay.const(1, dtype="int32")
      d3 = relay.const(0.0541715, dtype="float32")
      d4 = relay.const(0.0489368, dtype="float32")
  
      q1 = relay.const(0.00265098, dtype="float32")
      q2 = relay.const(0, dtype="int32")
      q3 = relay.const(0.728874, dtype="float32")
      q4 = relay.const(-14, dtype="int32")
  
      ref = relay.op.transpose(B, [0, 2, 1])
      ref = relay.qnn.op.batch_matmul(
          A, ref, d1, d2, d3, d4, out_dtype="int32"
      )
      ref = relay.qnn.op.requantize(
          ref, q1, q2, q3, q4, out_dtype="int8"
      )
      ref_func = relay.Function(relay.analysis.free_vars(ref), ref)
      ref_mod = tvm.IRModule.from_expr(ref_func)
  
      assert tvm.ir.structural_equal(mod["main"], ref_mod["main"])
  
      # If the pattern does not match, should return the original.
      func = relay.expr.Tuple(expand_dims)  # omitting concatenate
      mod = tvm.IRModule.from_expr(func)
      out_mod = rewrite_qdistilbert(
          mod
      )  # out does not return ref_mod but the original mod
  
      assert tvm.ir.structural_equal(mod["main"], out_mod["main"])
  
imports: import tvm
  from tvm import relay
  from tvm.contrib.hexagon.transform import rewrite_qdistilbert, remove_empty_pad
  from tvm import testing
label_desc: Use image node_id 1 for calling a global function with example usage: test_rewrite_qdistilbert() without return types