code: def concat(expr, type_map):
      """Rewrite a concat op"""
      scales = []
      zps = []
  
      tuple_type = type_map[expr.args[0]]
      for t in tuple_type.types:
          scales.append(t.scale)
          zps.append(t.zero_point)
  
      out_type = type_map[expr]
  
      out = relay.qnn.op.concatenate(
          expr.args[0],
          relay.Tuple(scales),
          relay.Tuple(zps),
          out_type.scale,
          out_type.zero_point,
          **expr.attrs,
      )
      return [out, out_type]
  
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 17 for calling a global function with example usage: concat(expr, type_map) and returns: list