Skip to content

Batch paths do not propagate NaN inputs (8 distributions) #102

Description

@OldCrow

Found by the #46 characterization sweep (PR #101; row-level detail in docs/ACCURACY_CHARACTERIZATION.md, Contract findings appendix).

Behavior: scalar paths propagate NaN inputs correctly; the batch (span/SIMD) paths of uniform, gamma, chi-squared, laplace, pareto, weibull, beta, and von Mises instead return finite, plausible-looking values — 35 sweep rows total. Worst class: uniform batch pdf(NaN) returns the full in-support density (1.0, 500.0, …) because the NaN range-comparison silently takes the in-range branch; pareto batch cdf(NaN) returns 0.9992….

Why it matters: garbage-in-plausible-out is silent data corruption for any consumer feeding unvalidated data through the batch API. Gaussian/lognormal/exponential batch paths propagate correctly, so this is per-kernel mask handling, not a framework limitation.

Fix shape: per-kernel — ensure the range/support masks classify NaN lanes into the NaN-propagating branch (typically: blend the input back for x != x lanes, the pattern used for the sin(±0) fix in #95). Fail-first per the doctrine: regression gates asserting NaN→NaN on every batch path, demonstrated failing against the unfixed kernels first.

Independent of this milestone's new-distributions theme — placed here as the next active milestone; could be pulled into a patch release if one is cut earlier.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions