Skip to content

ENH: add support for NEP 35 array constructors (frombuffer, fromfile, fromiter, fromstring and fromfunction) with like=Quantity(...)) - #17128

Merged
mhvk merged 3 commits into
astropy:mainfrom
neutrinoceros:units/enh/impl_nep35_from_family
Oct 6, 2024
Merged

mhvk merged 3 commits into
astropy:mainfrom
neutrinoceros:units/enh/impl_nep35_from_family

Conversation

@neutrinoceros

@neutrinoceros neutrinoceros commented Oct 5, 2024 •

Copy link
Copy Markdown
Contributor

Description

Ref #17124

  • By checking this box, the PR author has requested that maintainers do NOT use the "Squash and Merge" button. Maintainers should respect this when possible; however, the final decision is at the discretion of the maintainer that merges the PR.

@github-actions github-actions Bot added the units label Oct 5, 2024
@github-actions

github-actions Bot commented Oct 5, 2024

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.

@github-actions

github-actions Bot commented Oct 5, 2024

Copy link
Copy Markdown
Contributor

👋 Thank you for your draft pull request! Do you know that you can use [ci skip] or [skip ci] in your commit messages to skip running continuous integration tests until you are ready?

…le`, `fromiter`, `fromstring` and `fromfunction`) with `like=Quantity(...))`
@neutrinoceros
neutrinoceros force-pushed the units/enh/impl_nep35_from_family branch from a04daf2 to 38de071 Compare October 5, 2024 14:15
@neutrinoceros neutrinoceros mentioned this pull request Oct 5, 2024
6 of 28 tasks
@neutrinoceros neutrinoceros changed the title ENH: add support for NEP 35 array constructors (frombuffer, fromfile, fromiter, fromstring and fromfunction) with like=Quantity(...)) ENH: add support for NEP 35 array constructors (frombuffer, fromfile, fromiter, fromstring and fromfunction) with like=Quantity(...)) Oct 5, 2024
Comment on lines +582 to +586
zero_arg = (0,) * len(shape)
try:
out_unit = function(*zero_arg).unit
except Exception:
out_unit = UNIT_FROM_LIKE_ARG

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note to reviewers: I initially thought of doing something similar for fromiter but changed my mind after realizing that consuming an iterator could be destructive in some cases (generators).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree not to bother!

@neutrinoceros
neutrinoceros marked this pull request as ready for review October 5, 2024 14:31

@mhvk mhvk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good! One comment just about worth doing, the others optional.


@function_helper
def fromfunction(function, shape, *, dtype=float, **kwargs):
zero_arg = (0,) * len(shape)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is one function where having it dispatched would be easier... But I like your solution, except I think it should be zero_arg = np.zeros(len(shape), dtype), so that the functions gets passed the right dtype (*zero_arg will still work).

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice catch !

Comment on lines +582 to +586
zero_arg = (0,) * len(shape)
try:
out_unit = function(*zero_arg).unit
except Exception:
out_unit = UNIT_FROM_LIKE_ARG

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree not to bother!

assert arr.unit == u.s

def test_fromiter(self):
it = (i * j for i, j in zip(range(3), range(3), strict=True))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why this very complicated iterator with two range - could just be it = (i * i for i in range(3))

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I wanted to write something different originally but didn't catch this because it doesn't really matter to the test. Anyway, no reason to overcomplicate things indeed !

@mhvk mhvk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, looks all good now!

@mhvk mhvk added this to the v7.0.0 milestone Oct 6, 2024
@mhvk
mhvk merged commit 68411b5 into astropy:main Oct 6, 2024
@neutrinoceros
neutrinoceros deleted the units/enh/impl_nep35_from_family branch October 6, 2024 11:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants