[Relax][ONNX] Preserve bool dtype when folding constant comparisons - #20286
Open
StrongbodyStrongmind wants to merge 1 commit into
Open
[Relax][ONNX] Preserve bool dtype when folding constant comparisons#20286StrongbodyStrongmind wants to merge 1 commit into
StrongbodyStrongmind wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #20282.
The ONNX frontend constant-folds binary operators with NumPy. When both
operands have the same dtype, the result was unconditionally cast back to
the operand dtype to avoid NumPy precision widening.
This is correct for arithmetic operations, but incorrect for comparison
operators such as
Less,LessOrEqual,Greater, andGreaterOrEqual,whose result dtype must be
bool.As a result, constant-folded comparisons produced correct 0/1 values but
returned
int32orfloat32tensors instead ofbool.This patch preserves NumPy boolean results while keeping the existing
no-widening behavior for non-boolean binary operations.
Tests:
int32andfloat32operands.git diff --check upstream/main..HEAD: passed.