Skip to content

Fix Quantity.__array_ufunc__ to return NotImplemented for unknown classes and Time instances - #20398

Open
hsynylmz-umhg wants to merge 2 commits into
astropy:mainfrom
hsynylmz-umhg:fix/quantity-ufunc-notimplemented
Open

hsynylmz-umhg wants to merge 2 commits into
astropy:mainfrom
hsynylmz-umhg:fix/quantity-ufunc-notimplemented

Conversation

@hsynylmz-umhg

Copy link
Copy Markdown

Fixes #10776

Description

When encountering unknown classes, instances with __array_ufunc__ = None, or astropy.time.Time/TimeDelta instances, Quantity.__array_ufunc__ previously raised premature exceptions (such as TypeError) instead of returning NotImplemented. This broke NumPy's binary ufunc dispatch protocol.

Summary of Changes

  • Updated Quantity.__array_ufunc__ to return NotImplemented for unrecognized types and opt-out classes without introducing hardcoded subpackage dependencies.
  • Added unit tests in astropy/units/tests/test_quantity_ufuncs.py covering unknown classes, custom __array_ufunc__ classes, and Time/TimeDelta objects.
  • Added towncrier changelog entry under docs/changes/units/10776.bugfix.rst.

@github-actions github-actions Bot added the units label Sep 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thank you for your contribution to Astropy! 🌌 This checklist is meant to remind the package maintainers who will review this pull request of some common things to look for.

  • Do the proposed changes actually accomplish desired goals?
  • Do the proposed changes follow the Astropy coding guidelines?
  • Are tests added/updated as required? If so, do they follow the Astropy testing guidelines?
  • Are docs added/updated as required? If so, do they follow the Astropy documentation guidelines?
  • Is rebase and/or squash necessary? If so, please provide the author with appropriate instructions. Also see instructions for rebase and squash.
  • Did the CI pass? If no, are the failures related? If you need to run daily and weekly cron jobs as part of the PR, please apply the "Extra CI" label. Codestyle issues can be fixed by the bot.
  • Is a change log needed? If yes, did the change log check pass? If no, add the "no-changelog-entry-needed" label. If this is a manual backport, use the "skip-changelog-checks" label unless special changelog handling is necessary.
  • Is this a big PR that makes a "What's new?" entry worthwhile and if so, is (1) a "what's new" entry included in this PR and (2) the "whatsnew-needed" label applied?
  • At the time of adding the milestone, if the milestone set requires a backport to release branch(es), apply the appropriate "backport-X.Y.x" label(s) before merge.

@hsynylmz-umhg

Copy link
Copy Markdown
Author

pre-commit.ci autofix

@pllim pllim added this to the v8.1.0 milestone Sep 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Quantity.__array_ufunc__ should return NotImplemented for Time instances (and other classes that it does not know about)

2 participants