Skip to content

Promote integer samples before finite-difference arithmetic - #239

Open
antonsoo wants to merge 1 commit into
florisvb:masterfrom
antonsoo:fix/integer-finite-differences
Open

antonsoo wants to merge 1 commit into
florisvb:masterfrom
antonsoo:fix/integer-finite-differences

Conversation

@antonsoo

Copy link
Copy Markdown

finitediff allocates a floating derivative buffer but evaluates its subtraction and weighted sums in the input integer dtype first. Those intermediate values can wrap, or raise on negative coefficients with unsigned inputs. For example:

import numpy as np
from pynumdiff import finitediff

x = np.array([100, 90, 80, 70, 60], dtype=np.uint8)
print(finitediff(x, 1.0, order=1)[1])

Before: [246. 246. 246. 246. 246.]. After: [-10. -10. -10. -10. -10.].

Convert integer samples to a floating working buffer before stencil arithmetic. Existing floating inputs retain their current dtype and path; the caller's array is preserved. Add analytic quadratic and signed/unsigned regressions across stencil orders, repeated smoothing and a non-leading time axis.

Validation: all 258 tests pass. Pylint was run against both sources; existing diagnostics remain. Across 360 recorded-PCM configurations, 48 exceptions and 96 incorrect derivative runs become zero; 76 incorrect strongest-derivative selections are corrected. Direct Python-integer stencil sums independently check one-pass derivatives. All 36 float32/float64 control hashes remain exact. The existing convex-solver accuracy warning remains unchanged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant