fix(stats): propagate NaN through normal CDF and quantile kernels - #258
Open
AminMohamed-3 wants to merge 4 commits into
Open
fix(stats): propagate NaN through normal CDF and quantile kernels#258AminMohamed-3 wants to merge 4 commits into
AminMohamed-3 wants to merge 4 commits 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.
NaN inputs to the normal CDF and inverse-CDF helpers currently match none of their approximation-region masks, leaving those output elements uninitialized. As a result, public calls such as
stats.norm.cdf(np.nan)andstats.norm.ppf(np.nan)can return finite values whose contents depend on previous allocations. The same helpers also affect derived distributions.Initialize both helper output arrays with NaN before filling their valid regions. Add scalar and mixed-array comparisons against SciPy, including lognormal and truncated-normal callers, and verify that NaN inputs retain the same FLOP charge as same-shaped finite inputs. The regression fixture fills otherwise-uninitialized allocations with a finite sentinel so recycled NaN memory cannot hide the defect.
Validation: all 11 original propagation cases failed against the unchanged source; after the fix, 189 focused tests pass (all statistics tests plus dtype-billing tests) on Python 3.12, NumPy 2.4.6, and SciPy 1.18.1. Repository-wide Ruff lint and formatting checks pass, as does the Conventional Commit title check. The full Linux CI matrix has not been run locally.
Developed and tested with AI assistance.