Skip to content

APE 18: Adopt NEP 29 - #63

Merged
eteq merged 17 commits into
astropy:masterfrom
Cadair:NEP29
Feb 25, 2021
Merged

eteq merged 17 commits into
astropy:masterfrom
Cadair:NEP29

Conversation

@Cadair

@Cadair Cadair commented Oct 16, 2020 •

Copy link
Copy Markdown
Member

The future is now.

Fixes #62

Rendered Version


The following table shows the next few releases of the astropy core package and the versions of CPython and Numpy it will support under this proposal:

Astropy Release Release Date CPython Version Numpy Version
4.2 November 2020 3.7+ 1.17+ (Historical)
4.3 April 2021 3.7+ 1.17+
5.0 (LTS) November 2021 3.7+ 1.18+
5.1 April 2022 3.8+ 1.19+
5.2 November 2022 3.8+ 1.20+
5.3 April 2023 3.9+ 1.20+

@pllim

This comment has been minimized.

@pllim

This comment has been minimized.

@Cadair

This comment has been minimized.

@pllim

This comment has been minimized.

@Cadair

Cadair commented Oct 16, 2020 •

Copy link
Copy Markdown
Member Author

Does this mean we also have to retire APE 10 when this is accepted?

I state that this APE has precedence over 10 but I don't know what the rules are on retiring APEs.

5.0 and 6.0 are LTS, right? If so, it should be stated as such in your APE.

Added

@pllim

pllim commented Oct 16, 2020

Copy link
Copy Markdown
Member

I don't know what the rules are on retiring APEs.

Hopefully @astropy/coordinators and/or @perrygreenfield know...

@pllim

This comment has been minimized.

@Cadair

This comment has been minimized.

@saimn

saimn commented Oct 16, 2020 •

Copy link
Copy Markdown

👍 to this, just two comments:

@astrofrog astrofrog 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.

Just some small comments!

Comment thread APE18.rst Outdated
Comment thread APE18.rst Outdated
Comment thread APE18.rst Outdated

While this APE will not replicate the whole of NEP 29, and NEP 29 should be considered the canonical source for the support policy, the core scheme to be adopted is as follows:

astropy will support:

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.

The core astropy package as well as other coordinated and infrastructure packages will support

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.

This is perhaps something different from APE 10, that this would be project wide

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.

I would not force infra and coordinated to follow this, e.g. they currently usually support more, especially the infra packages.

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.

So I would just go that they can't drop more than what is suggested in NEP29, but they could still support older versions of they want to

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.

Yeah, not sure how we can enforce this project-wide in a realistic manner. We barely have enough people to maintain the core as it is.

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.

Maybe we should say the "rule" applies to core, but coordinated&infrastructure packages will "aim" to follow this unless there's a reason not to? I.e. just say for everything else it's a guideline.

I think the virtue of that is that it gives some guidance for packages that are sort of like "we don't have a rule because we haven't really thought that deeply about it". Or alternatively/additionally, it provides an excuse to ask institutional players to help us bring things "up to standard" (I'm thinking here about how the py 3.x transition provided some people at institutions a way to fund additional work by existing Astropy devs)

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.

many of the infra packages didn't really have a reason to drop old versions for a while, and I fail to see why it would be different in the future. As I said above, in many cases dropping a version is more work than keeping it, thus the "aim" is problematic in practice. And frankly, what is important for the ecosystem is that all coordinated and infra support at least the NEP29, that there is no situation when something gets dropped sooner than this schedule.

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.

Agree we can make it a rule for core and recommendation for other parts of the project?

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.

if they have a reason to still support 3.4, then why not

Just thinking about #10888 that I just put in, which would require 3.7+ for astropy to work properly. If a coordinated package tries to force using Python 3.4 + astropy 4.2 then there will be problems. Not sure if that is credible.

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.

I'm not sure what you mean credible here, it's always up to the package manager to resolve the version requirements, I don't see any force being involved here.

E.g. on 3.4, it could be possible to install the latest version of a coordinated package, and naturally, it would come with an older astropy version. It's down to the CI of the coordinated package to make sure they are compatible with their minimum supported version combination, after all the user should know best why they are stuck on an older python/numpy combo.

(3.4 is probably a bad example, but a real life example, with astroquery we had to stay python2.7 compatible much much longer than astropy core as it took long for casa to move off it. We, the astroquery maintainers decided that it's something we were willing to do, and it was totally independent of the version support policy of core that was decided separately. )

Comment thread APE18.rst Outdated
Comment thread APE18.rst Outdated
Comment thread APE18.rst Outdated
Comment thread APE18.rst
@Cadair

Cadair commented Oct 16, 2020

Copy link
Copy Markdown
Member Author

I think Python adopted the PEP for yearly releases, and I'm not sure how it affects NEP 29.

I think NEP 29 saw this coming hence they decided on a time based scheme, rather than one tied to the CPython release schedule. So I think the answer is it doesn't.

From the alternatives section of NEP 29:

Given the current release cadence of the Python, the proposed time (42 months) is roughly equivalent to “the last two” Python minor versions. However, if Python changes their release cadence substantially, any rule based solely on the number of minor releases may need to be changed to remain sensible.

@eteq eteq 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.

I'm happy with the spirit of this, but have a few clarifying questions/suggestions. (Also this is definitely the record for time-to-APE since the discussion prompting this started earlier today ⭐ !)

Comment thread APE18.rst
--------

APE 10 previously determined supported CPython versions, and provided a list up to the 4.0 release.
Since APE 10 was written the wider scientific Python community have written and largely adopted `NEP 29`_ as a policy for supported versions of both CPython and Numpy.

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.

While I'm fine with this, I think it might be good to give at least one concrete example of a way the more "accelerated" schedule will help things. Like what py3.7 features would we want to implement sooner rather than later? (manylinux2010 might be the answer! Or data classes?)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I added a small justification in the backwards compatibility section, I don't really want to do a "let's adopt 3.7 because new features things" because I would rather this stand the test of time. I am happy to pull the justification section up here if you think it's a better place for it?

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.

I see your point on "stand the test of time", but I was thinking the point of this is to give a couple of concrete examples to what is currently a very abstract phrasing. So just meant something like "For example, at the time of the py3.7 release infrastructure maitainers found their life would be easier if manylinux2010 was an option". Or similar.

But if you really want it to be timeless, I'm ok with either pulling it up here or leaving as-is 🤷.

Comment thread APE18.rst
Comment thread APE18.rst Outdated
Comment thread APE18.rst
Comment thread APE18.rst

* All minor versions of Python released 42 months prior to the project, and at minimum the two latest minor versions.
* All minor versions of numpy released in the 24 months prior to the project, and at minimum the last three minor versions.

@eteq eteq Oct 16, 2020 •

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.

Suggested change
Note that, as stated in `NEP 29`_, these timelines all apply for the versions
set at the time of the non-bugfix release. This means that the full
support timelines for LTS versions of astropy are 66 and 48 months for Python
and numpy, respectively.

this is the change I was asking for clarification of in https://github.com/astropy/astropy-APEs/pull/63/files#r506624591

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.

Maybe worth saying since these are currently supported for two years (in case we change that some day)

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.

I find this phrasing very confusing.

What about rewording to say the 42 and 24 are for the start of a release "family", and support won't be dropped in a bugfix release, neither on LTS nor on normal feature release bugfix?

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.

(also, I promised Stu a blurb about the exceptation, e.g. the latest LTS dropped a numpy version the release, as it would have been dropped based on NEP29 very soon after the release)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

What about rewording to say the 42 and 24 are for the start of a release "family", and support won't be dropped in a bugfix release, neither on LTS nor on normal feature release bugfix?

👍 This is in NEP 29, but I am happy to call it out here in terms of the LTS if people feel it needs more clarity.

@eteq eteq Oct 26, 2020 •

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.

I disagree that it's very clear in NEP 29 for the casual reader. That is it's very specific and when I read very carefully I understand the above, and really anyone in this conversation is clearly interested enough to dig deeply on this. But I do not think the typical reader who comes upon this via google and just wants to know "how long will an astropy support this Python version" will take the time to click through to NEP 29, map it onto our Astropy-specific release candence, etc.

That said, if y'all think this wording is not clearer, maybe the better thing is to just give a few concrete examples and let the reader extrapolate? Something like:

Suggested change
set at the time of the non-bugfix release. So for example the v4.0 release, an
LTS, would support Python 3.6 (released 23 mo earlier), and would continue to
support it until the end of the LTS window (24 mo after the 4.0 release).
Whereas 4.2, planned for late 2020, would unambiguously only support 3.7 (as
its full lifetime falls within the 3.7 window).

Or @cadirS wording from https://github.com/astropy/astropy-APEs/pull/63/files#r506678119 makes sense to me too.

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.

See my extra sentence about the bugfix lifetimes.

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.

(I don't find these concrete examples any useful, try to swap it out with e.g 1.3 and it will all read obsolete for the casual reader who you say would not bother to read/try to understand the tables and figures in NEP29)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

There is a line now stating that the versions are supported for the lifetime of the bugfixes, so hopefully that resolves the core of your comment @eteq in a way people are happy with?

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.

Reads well to me.

@bsipocz

bsipocz commented Oct 16, 2020 •

Copy link
Copy Markdown
Member

There has been also some starting momentum for setting maximum versions of dependencies, but it hasn't yet formalized in a formal document. If there will be any, I'm happy to put in a separate APE for it.

@astrofrog

Copy link
Copy Markdown
Member

@Cadair - maybe you can add #10900 under implementation?

Comment thread APE18.rst Outdated

@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 all very good to me. I would put it in as is.

@Cadair
Cadair requested a review from astrofrog October 21, 2020 09:58

@astrofrog astrofrog 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.

Some very minor wording improvements (hopefully) below

Comment thread APE18.rst Outdated
Comment thread APE18.rst Outdated
Comment thread APE18.rst Outdated
Comment thread APE18.rst Outdated
Comment thread APE18.rst Outdated
Co-authored-by: Thomas Robitaille <[email protected]>
Comment thread APE18.rst Outdated
@Cadair

Cadair commented Oct 27, 2020

Copy link
Copy Markdown
Member Author

I have adopted @bsipocz's suggestion regarding all the other versions, and edited the text to make it clear we are extending the numpy policy in NEP 29 by doing that. I think given we merged astropy/astropy#10900 there is unlikely to be strong disagreement to this proposal, we should probably move to getting it merged?

@Cadair
Cadair requested a review from astrofrog October 27, 2020 10:09

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

Re-approving; just one omitted word.

Comment thread APE18.rst Outdated
Comment thread APE18.rst

* All minor versions of Python released 42 months prior to the project, and at minimum the two latest minor versions.
* All minor versions of numpy released in the 24 months prior to the project, and at minimum the last three minor versions.

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.

Reads well to me.

@mhvk

mhvk commented Jan 5, 2021

Copy link
Copy Markdown
Contributor

I cannot merge this, but maybe someone who can can do the honour? Thanks, @Cadair!

Comment thread APE18.rst Outdated
Decision rationale
------------------

<To be filled in by the coordinating committee when the APE is accepted or rejected>

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 line does need to be changed.

@Cadair

Cadair commented Jan 27, 2021

Copy link
Copy Markdown
Member Author

@astropy/coordinators Can this get wrapped up?

Comment thread APE18.rst
@eteq
eteq merged commit f004bde into astropy:master Feb 25, 2021
@eteq

eteq commented Feb 25, 2021

Copy link
Copy Markdown
Member

With the change above, the CoCo was happy to approve this APE, so I am merging now.

@Cadair
Cadair deleted the NEP29 branch March 9, 2021 11:23
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.

APE 10: What is Python support beyond 4.0?

8 participants