Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NEP29/pandas/numpy #431

Closed
graingert opened this issue Oct 1, 2021 · 6 comments
Closed

NEP29/pandas/numpy #431

graingert opened this issue Oct 1, 2021 · 6 comments
Labels
product-updates Product content updates that are not fixes nor releases updates

Comments

@graingert
Copy link

graingert commented Oct 1, 2021

Is your feature request related to a problem? Please describe.
determining the EOL date of scientific python involves a little bit of 4D chess https://numpy.org/neps/nep-0029-deprecation_policy.html

Describe the solution you'd like
include the nep29/pandas/numpy release schedule in a nice color coded chart

Describe alternatives you've considered
paste the NEP29 doc directly into https://endoflife.date/nep29 and redirect https://endoflife.date/numpy and https://endoflife.date/pandas to there

Additional context
Add any other context or screenshots about the feature request here.

@welcome
Copy link

welcome bot commented Oct 1, 2021

Thanks for opening your first issue here! Be sure to follow the issue template!

@graingert
Copy link
Author

there's even a python script for it

from datetime import datetime, timedelta

data = """Jan 15, 2017: NumPy 1.12
Sep 13, 2015: Python 3.5
Dec 23, 2016: Python 3.6
Jun 27, 2018: Python 3.7
Jun 07, 2017: NumPy 1.13
Jan 06, 2018: NumPy 1.14
Jul 23, 2018: NumPy 1.15
Jan 13, 2019: NumPy 1.16
Jul 26, 2019: NumPy 1.17
Oct 14, 2019: Python 3.8
Dec 22, 2019: NumPy 1.18
Jun 20, 2020: NumPy 1.19
"""

releases = []

plus42 = timedelta(days=int(365*3.5 + 1))
plus24 = timedelta(days=int(365*2 + 1))

for line in data.splitlines():
    date, project_version = line.split(':')
    project, version = project_version.strip().split(' ')
    release = datetime.strptime(date, '%b %d, %Y')
    if project.lower() == 'numpy':
        drop = release + plus24
    else:
        drop = release + plus42
    releases.append((drop, project, version, release))

releases = sorted(releases, key=lambda x: x[0])


py_major,py_minor = sorted([int(x) for x in r[2].split('.')] for r in releases if r[1] == 'Python')[-1]
minpy = f"{py_major}.{py_minor+1}+"

num_major,num_minor = sorted([int(x) for x in r[2].split('.')] for r in releases if r[1] == 'NumPy')[-1]
minnum = f"{num_major}.{num_minor+1}+"

toprint_drop_dates = ['']
toprint_support_table = []
for d, p, v, r in releases[::-1]:
    df = d.strftime('%b %d, %Y')
    toprint_drop_dates.append(
        f'On {df} drop support for {p} {v} '
        f'(initially released on {r.strftime("%b %d, %Y")})')
    toprint_support_table.append(f'{df} {minpy:<6} {minnum:<5}')
    if p.lower() == 'numpy':
        minnum = v+'+'
    else:
        minpy = v+'+'
print("On next release, drop support for Python 3.5 (initially released on Sep 13, 2015)")
for e in toprint_drop_dates[-4::-1]:
    print(e)

print('============ ====== =====')
print('Date         Python NumPy')
print('------------ ------ -----')
for e in toprint_support_table[-4::-1]:
    print(e)
print('============ ====== =====')

@hugovk
Copy link
Member

hugovk commented Oct 1, 2021

This sounds useful!

I think this should be at https://endoflife.date/nep29 rather than /numpy or /pandas because NumPy and Pandas and other Scientific Python are free to vary a bit from the actual NEP 29 policy, which defines a minimum to support and allows projects to freely drop the older ones at will (even if they're technically still supported upstream).

So would we have a table something like this?

Version Released NEP29 EOL
NumPy 1.14 Jan 06, 2018 Jan 07, 2020
Python 3.6 Dec 23, 2016 Jun 23, 2020
NumPy 1.15 Jul 23, 2018 Jul 23, 2020
NumPy 1.16 Jan 13, 2019 Jan 13, 2021
NumPy 1.17 Jul 26, 2019 Jul 26, 2021
NumPy 1.18 Dec 22, 2019 Dec 22, 2021
Python 3.7 Jun 27, 2018 Dec 26, 2021
NumPy 1.19 Jun 20, 2020 Jun 21, 2022
Python 3.8 Oct 14, 2019 Apr 14, 2023

@captn3m0
Copy link
Member

Now that #1692 is merged, this is partially solved. I think it's better if we document each product individually (and be sure to mention NEP29, as in the current version.

The "4D-chess" is something we should be doing, and making it simple for end-users on a per-product basis.

@BiNZGi
Copy link
Member

BiNZGi commented Dec 22, 2023

Closing this for inactivity.

@BiNZGi BiNZGi closed this as completed Dec 22, 2023
@BiNZGi BiNZGi added the product-updates Product content updates that are not fixes nor releases updates label Dec 22, 2023
@hugovk
Copy link
Member

hugovk commented Dec 22, 2023

btw NEP 29 has been "superseded by the scientific python ecosystem coordination guideline SPEC 0 — Minimum Supported Versions".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
product-updates Product content updates that are not fixes nor releases updates
Projects
None yet
Development

No branches or pull requests

4 participants