code: def _get_expected_codegen(shape, dtype, op_name, qnn_params):
      input_a = {
          "op": "input",
          "name": "",
          "attrs": {"shape": [[list(shape)]], "dtype": [[dtype]]},
      }
      input_b = {
          "op": "input",
          "name": "",
          "attrs": {"shape": [[list(shape)]], "dtype": [[dtype]]},
      }
      input_qnn = [
          {
              "op": "const",
              "name": "",
              "attrs": {
                  "shape": [[list(qnn_params[_].data.shape)]],
                  "dtype": [[qnn_params[_].data.dtype]],
              },
          }
          for _ in qnn_params
      ]
      inputs = [input_a, input_b, *input_qnn]
      node = {
          "op": "kernel",
          "name": op_name,
          "inputs": [[_, 0, 0] for _ in range(len(inputs))],
          "attrs": {
              "num_inputs": str(len(inputs)),
              "num_outputs": "1",
              "shape": [[list(shape)]],
              "dtype": [[dtype]],
          },
      }
  
      if qnn_params:
          node["attrs"]["lhs_axis"] = [["-1"]]
          node["attrs"]["rhs_axis"] = [["-1"]]
  
      return [*inputs, node]
  
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 2 for calling a global function with example usage: _get_expected_codegen(shape, dtype, op_name, qnn_params) and returns: list