code: def test_codegen_add_per_channel_quantization(param, param_type):
      if skip_codegen_test():
          return
  
      qnn_params = _qnn_params
      qnn_params[param] = relay.const([1, 2], param_type)
  
      dtype = "int8"
      op_name = "qnn.add"
      op = relay.qnn.op.add
      inputs = {"a", "b"}
  
      for shape in [(1, 3, 3, 2)]:
          func = _get_model(shape, dtype, iter(inputs), op, qnn_params)
          exp_codegen = _get_expected_codegen(
              shape, dtype, op_name, qnn_params
          )
          verify_codegen(
              func, exp_codegen, num_acl_modules=0, tvm_ops=1
          )
  
file_path: tvm/tests/python/contrib/test_arm_compute_lib/test_add.py
imports: import numpy
  import pytest
  import tvm
  import tvm.testing
  from tvm import relay
  from test_arm_compute_lib.infrastructure import skip_runtime_test, skip_codegen_test, build_and_run, verify, verify_codegen
  from test_arm_compute_lib.infrastructure import Device
label_desc: Use image node_id 5 for calling a global function with example usage: test_codegen_add_per_channel_quantization(param, param_type) without return types