Skip to content

Allow structured data types in Distribution - #15296

Closed
mhvk wants to merge 6 commits into
astropy:mainfrom
mhvk:distribution-override-dtype-structured
Closed

mhvk wants to merge 6 commits into
astropy:mainfrom
mhvk:distribution-override-dtype-structured

Conversation

@mhvk

@mhvk mhvk commented Sep 8, 2023 •

Copy link
Copy Markdown
Contributor

Description

This pull request is to allow structured data types for Distribution, so that classes like EarthLocation can be made into Distribution as well (though that will need some changes in EarthLocation itself).

To make this possible, an API change was necessary, where the .dtype exposed by the distribution now equals the .dtype of the samples (rather than the structured dtype used internally). I could not get QuantityDistribution to work without changes to Quantity and StructuredUnit that I felt were not warranted. And arguably, it is more logical for the distribution to look as much as possible like a regular array, so to expose the regular dtype.

Note that this builds on #15295; it may be best to get that in first. Otherwise, reviewing by commit may be helpful.

  • 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.

mhvk added 3 commits September 8, 2023 16:24
As part of this, define _get_distribution_cls in analogy
to what is done in Masked._get_masked_cls. This is used
both in the initializer and in .view().
Arguably, this is more logical, since we want the array
to look like a regular array as much as possible.  It is
also required to get structured dtypes to work with Quantity.
@mhvk mhvk added Enhancement uncertainty API change PRs and issues that change an existing API, possibly requiring a deprecation period labels Sep 8, 2023
@mhvk mhvk added this to the v6.0 milestone Sep 8, 2023
@mhvk
mhvk requested a review from eteq September 8, 2023 15:18
@github-actions

github-actions Bot commented Sep 8, 2023

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?
  • Is a milestone set? Milestone must be set but we cannot check for it on Actions; do not let the green checkmark fool you.
  • 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 Sep 8, 2023

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?

@mhvk
mhvk force-pushed the distribution-override-dtype-structured branch from 80f3060 to 4f576c4 Compare September 8, 2023 15:19

@nstarman nstarman left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

There's some deep numpy foo, so this is not a full review. I just glanced through. From the tests, everything looks good

Comment thread astropy/uncertainty/core.py Resolved
Comment thread astropy/uncertainty/core.py Resolved
Comment thread docs/changes/uncertainty/15296.api.rst Resolved
@mhvk
mhvk force-pushed the distribution-override-dtype-structured branch from 4f576c4 to cfec396 Compare September 11, 2023 08:40
This involves a second indirection in the actual dtype
of the array, which now has a "samples" entry that itself
consists of a n_samples "sample" entries. This is required
to ensure we can get specific fields out of a distribution
with a structured dtype.
@mhvk
mhvk force-pushed the distribution-override-dtype-structured branch 2 times, most recently from 0797aa1 to 1b353ac Compare September 11, 2023 09:59
With the new sample indirection, it becomes possible, by
using stride trickery to ensure that, e.g., viewing a complex
number as two floats will give the correct new shape.
@mhvk
mhvk force-pushed the distribution-override-dtype-structured branch from 1b353ac to 8cb8452 Compare September 11, 2023 10:05
@mhvk

mhvk commented Sep 16, 2023

Copy link
Copy Markdown
Contributor Author

#15304, which includes this, was reviewed as a whole and will get merged, so am closing this one.

@mhvk mhvk closed this Sep 16, 2023
@mhvk
mhvk deleted the distribution-override-dtype-structured branch February 17, 2025 17:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

API change PRs and issues that change an existing API, possibly requiring a deprecation period Enhancement uncertainty

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants