Fix swapped conditions in local_sqrt_sqr rewrite#1922
Open
WHOIM1205 wants to merge 1 commit intopymc-devs:v3from
Open
Fix swapped conditions in local_sqrt_sqr rewrite#1922WHOIM1205 wants to merge 1 commit intopymc-devs:v3from
WHOIM1205 wants to merge 1 commit intopymc-devs:v3from
Conversation
Signed-off-by: WHOIM1205 <rathourprateek8@gmail.com>
Contributor
Author
|
hey @ricardoV94 |
Member
|
Can you point to the original PR here in the comments? Want to see what might have failed in the review process |
ricardoV94
reviewed
Mar 4, 2026
| assert equal_computations([out], [expected]) | ||
|
|
||
| def test_sqr_sqrt_integer_upcast(self): | ||
| f = pytensor.function([x], sqr(sqrt(x)), mode=self.mode) |
Member
There was a problem hiding this comment.
I still wouldn't compile and evaluate the functions, the assert_equal_computations shows what the function does already. An independent test would be to compare against the unoptimized function not an expected numerical value
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.
Fix: Correct swapped logic in
local_sqrt_sqrrewriteSummary
Fixes a numerical correctness bug in
pytensor/tensor/rewriting/math.pywhere the rewrite rule
local_sqrt_sqrhad its conditions swapped.The previous implementation incorrectly transformed:
sqrt(sqr(x))→switch(x >= 0, x, nan)(should beabs(x))sqr(sqrt(x))→abs(x)(should beswitch(x >= 0, x, nan))This caused silent wrong numerical results, especially for negative inputs.
Root Cause
prev_op(inner op) andnode_op(outer op) checks were reversed:Sqr(Sqrt(x))returnedabs(x)Sqrt(Sqr(x))returnedswitch(...)The return values were correct — but attached to the wrong condition.
Fix
Swapped the two
isinstanceconditions so that:sqrt(sqr(x))→abs(x)sqr(sqrt(x))→switch(x >= 0, x, nan)This is a minimal two-line logical correction.
Tests Updated
Impact
nanpollution in common patterns likesqrt(x**2).