Repository navigation
Conversation
NumPy 2 removed ndarray.ptp, so np.ptp no longer calls Quantity.ptp and returned a dimensionless result. Route np.ptp to Quantity.ptp via __array_function__ and accept keepdims there.
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.
With NumPy 2,
np.ptpdrops the units of a Quantity:On NumPy 1.26 this returned
m, becausenp.ptpcalleda.ptp(). NumPy 2 removedndarray.ptp, sonp.ptpnow runsmaximum.reduce/minimum.reducedirectly. Those reductions reach__array_wrap__withcontext=None, so the result comes back dimensionless.Fix: add a small
__array_function__that sendsnp.ptpto the existingQuantity.ptpwhen the first argument is a Quantity. Every other function still goes throughndarray.__array_function__.Quantity.ptpnow also acceptskeepdims, sonp.ptp(q, axis=..., keepdims=True)works.Tests: I added
test_np_ptptotest_methods.py. It covers the whole array,axisgiven as a keyword and positionally, andkeepdims.I also added an entry to
CHANGES.txt.Separately,
np.maximum.reduce(q),np.add.reduce(q)andnp.add.accumulate(q)return dimensionless results on both NumPy 1 and 2. This PR doesn't change them. Fixing them would need ufunc-method-aware handling, for example in__array_ufunc__. I'm happy to look at that in a follow-up if it's wanted.AI-assisted (Claude): I used it to help read the code and draft the test. I reviewed and ran everything myself.