code: def conv2d(expr, type_map):
      """Rewrite a conv2d op"""
      attrs = {**expr.attrs}
      attrs.pop("out_dtype")
      x, weight = expr.args
      x_t = type_map[x]
      w_t = type_map[weight]
      conv_scale = fold_constant(x_t.scale * w_t.scale)
      conv_zp = get_zeros(conv_scale)
      out = relay.qnn.op.conv2d(
          x,
          weight,
          x_t.zero_point,
          w_t.zero_point,
          x_t.scale,
          w_t.scale,
          **attrs,
      )
      out_layout = (
          attrs["out_layout"]
          if attrs["out_layout"] != ""
          else attrs["data_layout"]
      )
      out_axis = bijective_layout(out_layout, "NCHW").backward_index(
          list(range(4))
      )[1]
      return [
          out,
          TensorAffineType(
              conv_scale, conv_zp, out.attrs.out_dtype, out_axis.value
          ),
      ]
  
imports: import numpy
  import tvm
  from tvm import relay
  from tvm.ir import TensorAffineType, TupleAffineType
  from tvm.relay.qnn.op import canonicalizations
  from tvm.tir import bijective_layout
  from ..op import register_fake_quantization_to_integer, register_optional_fake_quantization_to_integer
label_desc: Use image node_id 13 for calling a global function with example usage: conv2d(expr, type_map) and returns: list