code: def test_convolution_inference_without_weight_transform():
      BATCH = 6
      IH = 48
      IW = 48
      IC = 16
      OC = 16
      K = 3
      PAD = 1
      STRIDE = 1
  
      OH = (IH + 2 * PAD - K) + 1
      OW = (IW + 2 * PAD - K) + 1
      dshape = (BATCH, IC, IH, IW)
      kshape = (OC, IC, K, K)
      bshape = (OC,)
      oshape = (BATCH, OC, OH, OW)
  
      data = te.placeholder(dshape, name="data")
      kernel = te.placeholder(kshape, name="kernel")
      bias = te.placeholder(bshape, name="bias")
  
      def verify(
          target="llvm",
          algorithm=nnpack.ConvolutionAlgorithm.AUTO,
          with_bias=True,
      ):
          if not tvm.get_global_func(
              "tvm.contrib.nnpack.fully_connected_inference", True
          ):
              pytest.skip("extern function is not available")
          if not nnpack.is_available():
              pytest.skip("nnpack is not available")
  
          dev = tvm.cpu(0)
          transformed_kernel = (
              nnpack.convolution_inference_weight_transform(
                  kernel, algorithm=algorithm
              )
          )
          output = (
              nnpack.convolution_inference_without_weight_transform(
                  data,
                  transformed_kernel,
                  bias if with_bias else None,
                  [PAD, PAD, PAD, PAD],
                  [STRIDE, STRIDE],
                  algorithm=algorithm,
              )
          )
  
          s = te.create_schedule(output.op)
  
          f = tvm.build(s, [data, kernel, bias, output], target)
  
          na = np.random.uniform(size=dshape).astype(data.dtype)
          nb = np.random.uniform(size=kshape).astype(kernel.dtype)
          nc = (
              np.random.uniform(size=bshape).astype(bias.dtype)
              if with_bias
              else np.zeros(bshape, dtype=bias.dtype)
          )
          ta = tvm.nd.array(na, dev)
          tb = tvm.nd.array(nb, dev)
          tc = tvm.nd.array(nc, dev)
          td = tvm.nd.array(np.zeros(oshape, dtype=output.dtype), dev)
          f(ta, tb, tc, td)
          nd = np_conv(
              np.reshape(na, (BATCH, IC, IH, IW)), nb, PAD, STRIDE
          ) + nc.reshape(1, bshape[0], 1, 1)
          tvm.testing.assert_allclose(
              td.numpy(), nd.reshape(BATCH, IC, IH, IW), rtol=1e-5
          )
  
      for algorithm in [nnpack.ConvolutionAlgorithm.WT_8x8]:
          for with_bias in [True, False]:
              verify(algorithm=algorithm, with_bias=with_bias)
  
file_path: tvm/tests/python/contrib/test_nnpack.py
imports: import tvm
  import tvm.testing
  from tvm import te
  import numpy
  import scipy.signal
  from tvm.topi.nn.utils import get_pad_tuple
  from tvm.contrib import nnpack
  import pytest
label_desc: Use image node_id 4 for calling a global function with example usage: test_convolution_inference_without_weight_transform() without return types