[Frontend][ONNX] Add MatMulInteger support to Relax ONNX frontend by OmarAzizi · Pull Request #18951 · apache/tvm

@OmarAzizi

…er, add per-channel zp tests

Changes based on reviewer feedback:

- Replace dim.value shape extraction with relax.op.expand_dims for zero-point
  reshaping, which is safe for symbolic/dynamic shapes unlike extracting
  concrete dimension values via struct_info.shape

- Fix _make_matmulinteger_model helper: zero-points were incorrectly added to
  both graph_inputs and initializers, causing duplicate Relax variable names
  and malformed IR. Now added as initializers only.

- Fix node_inputs placeholder logic: empty string for absent a_zero_point is
  now only appended when b_zero_point is present, avoiding a spurious 3-input
  node when both zero-points are absent.

- Add test_matmulinteger_per_channel_zp: verifies 1-D per-row a_zero_point
  [M] and per-col b_zero_point [N], exercising the expand_dims path in the
  converter. Runs TVM-only against a NumPy reference since ORT CPU does not
  support per-row a_zero_point despite the ONNX spec allowing it.

- Add test_matmulinteger_per_channel_zp_ort_limitation: xfail test that
  documents the ORT CPU kernel limitation (strict=True so we are alerted
  if ORT ever fixes this).

- Mark int8/uint8 mixed dtype test as xfail(strict=False) since some older
  ORT versions do not implement this combination, but newer versions do.

Signed-off-by: OmarAzizi <oalazizi75@gmail.com>