Files
apache--tvm/python
Neo Chien e370fc7374 [Relax][ONNX] Normalize negative indices before the take call for Gather operator (#19525)
Hi Committers,

This PR is trying to fix issues
https://github.com/apache/tvm/issues/19436. Any suggestions would be
appreciated if you are available.

### Root Cause
1. ONNX `Gather` allows negative indices (counting from the end of the
target axis).
2. In the Relax ONNX importer, `Gather` was lowered directly to
`relax.op.take` without normalizing negative indices first.
3. This created semantic mismatch / incorrect behavior in downstream
lowering paths that assume non-negative indices.
4. Test failures were also caused by pytest parametrization issues:
  - using ONNX `TensorProto` enum values directly as NumPy dtypes,
- and tuple-style parametrization triggering fixture interpretation
errors.
  
### Solutions
1. Added conditional negative-index normalization in `Gather._impl_v13`:
  - apply only for signed index dtypes,
  - use: `idx < 0 ? idx + axis_extent : idx`,
- derive `axis_extent` from shape/runtime expression to support dynamic
shapes.
2. Skipped normalization for unsigned index dtypes to avoid redundant
graph ops/checks.

---------

Co-authored-by: cchung100m <cchung100m@users.noreply.github.com>
2026-05-11 20:52:03 +08:00
..