From 1219611058c2ba263cd5f6b4c8e72afb0cae81ca Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Tue, 10 Oct 2023 01:47:24 +0200 Subject: [PATCH] SPEC 0: Soften explicit drop schedule. (#273) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This does only change the presenting of the drop information: - reduplicate when the same package was released twice in the same quarter. - Remove the day of month. I don't think it helps conveying the flexibility that the spec -- This also regenerate the files --------- Co-authored-by: Brigitta Sipőcz Co-authored-by: Jarrod Millman --- spec-0000/SPEC0_versions.py | 99 ++++++++++++---- spec-0000/chart.md | 16 +++ spec-0000/schedule.md | 226 ++++++++++++++++++++---------------- 3 files changed, 220 insertions(+), 121 deletions(-) diff --git a/spec-0000/SPEC0_versions.py b/spec-0000/SPEC0_versions.py index f86ac9ad..0d796803 100644 --- a/spec-0000/SPEC0_versions.py +++ b/spec-0000/SPEC0_versions.py @@ -28,10 +28,12 @@ ] plus36 = timedelta(days=int(365 * 3)) plus24 = timedelta(days=int(365 * 2)) +delta6month = timedelta(days=int(365 // 2)) # Release data now = datetime.now() +cutoff = now - delta6month def get_release_dates(package, support_time=plus24): @@ -71,7 +73,7 @@ def get_release_dates(package, support_time=plus24): for ver, release_date in sorted(release_date.items()): drop_date = release_date + support_time - if drop_date >= datetime.now(): + if drop_date >= cutoff: releases[ver] = { "release_date": release_date, "drop_date": drop_date, @@ -97,7 +99,7 @@ def get_release_dates(package, support_time=plus24): package: { version: dates for version, dates in releases.items() - if dates["drop_date"] > now + if dates["drop_date"] > cutoff } for package, releases in package_releases.items() } @@ -124,31 +126,82 @@ def get_release_dates(package, support_time=plus24): # Print drop schedule -rel = {} -for name, releases in package_releases.items(): - rel |= { - " ".join([name, str(ver)]): [dates["release_date"], dates["drop_date"]] - for ver, dates in releases.items() - } +data = [] +for k, versions in package_releases.items(): + for v, dates in versions.items(): + data.append( + ( + k, + v, + pd.to_datetime(dates["release_date"]), + pd.to_datetime(dates["drop_date"]), + ) + ) +df = pd.DataFrame(data, columns=["package", "version", "release", "drop"]) -print("Saving drop schedule to schedule.md") -with open("schedule.md", "w") as fh: - current_quarter = None +df["quarter"] = df["drop"].dt.to_period("Q") + +dq = df.set_index(["quarter", "package"]).sort_index() - # Sort by drop date - rel = dict(sorted(rel.items(), key=lambda item: item[1][1])) - for package, dates in rel.items(): - qt = pd.to_datetime(dates[1]).to_period("Q") +print("Saving drop schedule to schedule.md") - # If drop date is in a new quarter, write out a heading - if qt != current_quarter: - if current_quarter != None: - fh.write("\n") - fh.write(f'{str(qt).replace("Q", " – Quarter ")}:\n\n') - current_quarter = qt - fh.write( - f"- {dates[1].strftime('%d %b %Y')}: drop {package} (initially released on {dates[0].strftime('%b %d, %Y')})\n" +def pad_table(table): + rows = [[el.strip() for el in row.split("|")] for row in table] + col_widths = [max(map(len, column)) for column in zip(*rows)] + rows[1] = [ + el if el != "----" else "-" * col_widths[i] for i, el in enumerate(rows[1]) + ] + padded_table = [] + for row in rows: + line = "" + for entry, width in zip(row, col_widths): + if not width: + continue + line += f"| {str.ljust(entry, width)} " + line += f"|" + padded_table.append(line) + + return padded_table + + +def make_table(sub): + table = [] + table.append("| | | |") + table.append("|----|----|----|") + for package in sorted(set(sub.index.get_level_values(0))): + vers = sub.loc[[package]]["version"] + minv, maxv = min(vers), max(vers) + rels = sub.loc[[package]]["release"] + rel_min, rel_max = min(rels), max(rels) + version_range = str(minv) if minv == maxv else f"{minv} to {maxv}" + rel_range = ( + str(rel_min.strftime("%b %Y")) + if rel_min == rel_max + else f"{rel_min.strftime('%b %Y')} and {rel_max.strftime('%b %Y')}" ) + table.append(f"|{package:<15}|{version_range:<19}|released {rel_range}|") + + return pad_table(table) + + +def make_quarter(quarter, dq): + table = ["#### " + str(quarter).replace("Q", " - Quarter ") + ":\n"] + table.append("###### Recommend drop support for:\n") + sub = dq.loc[quarter] + table.extend(make_table(sub)) + return "\n".join(table) + + +with open("schedule.md", "w") as fh: + # we collect package 6 month in the past, and drop the first quarter + # as we might have filtered some of the packages out depending on + # when we ran the script. + tb = [] + for quarter in list(sorted(set(dq.index.get_level_values(0))))[1:]: + tb.append(make_quarter(quarter, dq)) + + fh.write("\n\n".join(tb)) + fh.write("\n") diff --git a/spec-0000/chart.md b/spec-0000/chart.md index c5907438..5bc6d05e 100644 --- a/spec-0000/chart.md +++ b/spec-0000/chart.md @@ -10,12 +10,15 @@ section python 3.12 : 2023-10-02,2026-10-01 section numpy +1.21.0 : 2021-06-22,2023-06-22 1.22.0 : 2021-12-31,2023-12-31 1.23.0 : 2022-06-22,2024-06-21 1.24.0 : 2022-12-18,2024-12-17 1.25.0 : 2023-06-17,2025-06-16 +1.26.0 : 2023-09-16,2025-09-15 section scipy +1.7.0 : 2021-06-20,2023-06-20 1.8.0 : 2022-02-05,2024-02-05 1.9.0 : 2022-07-29,2024-07-28 1.10.0 : 2023-01-03,2025-01-02 @@ -25,17 +28,20 @@ section matplotlib 3.5.0 : 2021-11-16,2023-11-16 3.6.0 : 2022-09-16,2024-09-15 3.7.0 : 2023-02-13,2025-02-12 +3.8.0 : 2023-09-15,2025-09-14 section pandas 1.3.0 : 2021-07-02,2023-07-02 1.4.0 : 2022-01-22,2024-01-22 1.5.0 : 2022-09-19,2024-09-18 2.0.0 : 2023-04-03,2025-04-02 +2.1.0 : 2023-08-30,2025-08-29 section scikit-image 0.19.0 : 2021-12-03,2023-12-03 0.20.0 : 2023-02-28,2025-02-27 0.21.0 : 2023-06-02,2025-06-01 +0.22.0 : 2023-10-03,2025-10-02 section networkx 2.6 : 2021-07-08,2023-07-08 @@ -48,8 +54,10 @@ section scikit-learn 1.0 : 2021-09-24,2023-09-24 1.1.0 : 2022-05-12,2024-05-11 1.2.0 : 2022-12-08,2024-12-07 +1.3.0 : 2023-06-30,2025-06-29 section xarray +0.18.0 : 2021-05-06,2023-05-06 0.19.0 : 2021-07-23,2023-07-23 0.20.0 : 2021-11-02,2023-11-02 0.21.0 : 2022-01-28,2024-01-28 @@ -65,8 +73,14 @@ section xarray 2023.4.0 : 2023-04-14,2025-04-13 2023.5.0 : 2023-05-19,2025-05-18 2023.6.0 : 2023-06-23,2025-06-22 +2023.7.0 : 2023-07-17,2025-07-16 +2023.8.0 : 2023-08-20,2025-08-19 +2023.9.0 : 2023-09-26,2025-09-25 section ipython +7.23.0 : 2021-04-30,2023-04-30 +7.24.0 : 2021-05-28,2023-05-28 +7.25.0 : 2021-06-25,2023-06-25 7.26.0 : 2021-08-01,2023-08-01 7.27.0 : 2021-08-27,2023-08-27 7.28.0 : 2021-09-25,2023-09-25 @@ -91,3 +105,5 @@ section ipython 8.12.0 : 2023-03-30,2025-03-29 8.13.0 : 2023-04-28,2025-04-27 8.14.0 : 2023-06-02,2025-06-01 +8.15.0 : 2023-09-01,2025-08-31 +8.16.0 : 2023-09-29,2025-09-28 diff --git a/spec-0000/schedule.md b/spec-0000/schedule.md index 98a00791..f585820a 100644 --- a/spec-0000/schedule.md +++ b/spec-0000/schedule.md @@ -1,98 +1,128 @@ -2023 – Quarter 3: - -- 02 Jul 2023: drop pandas 1.3.0 (initially released on Jul 02, 2021) -- 08 Jul 2023: drop networkx 2.6 (initially released on Jul 08, 2021) -- 23 Jul 2023: drop xarray 0.19.0 (initially released on Jul 23, 2021) -- 01 Aug 2023: drop ipython 7.26.0 (initially released on Aug 01, 2021) -- 27 Aug 2023: drop ipython 7.27.0 (initially released on Aug 27, 2021) -- 24 Sep 2023: drop scikit-learn 1.0 (initially released on Sep 24, 2021) -- 25 Sep 2023: drop ipython 7.28.0 (initially released on Sep 25, 2021) - -2023 – Quarter 4: - -- 05 Oct 2023: drop python 3.9 (initially released on Oct 05, 2020) -- 30 Oct 2023: drop ipython 7.29.0 (initially released on Oct 30, 2021) -- 02 Nov 2023: drop xarray 0.20.0 (initially released on Nov 02, 2021) -- 16 Nov 2023: drop matplotlib 3.5.0 (initially released on Nov 16, 2021) -- 26 Nov 2023: drop ipython 7.30.0 (initially released on Nov 26, 2021) -- 03 Dec 2023: drop scikit-image 0.19.0 (initially released on Dec 03, 2021) -- 31 Dec 2023: drop numpy 1.22.0 (initially released on Dec 31, 2021) - -2024 – Quarter 1: - -- 05 Jan 2024: drop ipython 7.31.0 (initially released on Jan 05, 2022) -- 12 Jan 2024: drop ipython 8.0.0 (initially released on Jan 12, 2022) -- 22 Jan 2024: drop pandas 1.4.0 (initially released on Jan 22, 2022) -- 28 Jan 2024: drop xarray 0.21.0 (initially released on Jan 28, 2022) -- 05 Feb 2024: drop scipy 1.8.0 (initially released on Feb 05, 2022) -- 25 Feb 2024: drop ipython 7.32.0 (initially released on Feb 25, 2022) -- 25 Feb 2024: drop ipython 8.1.0 (initially released on Feb 25, 2022) -- 28 Feb 2024: drop networkx 2.7 (initially released on Feb 28, 2022) -- 01 Mar 2024: drop xarray 2022.3.0 (initially released on Mar 02, 2022) -- 26 Mar 2024: drop ipython 8.2.0 (initially released on Mar 27, 2022) - -2024 – Quarter 2: - -- 08 Apr 2024: drop networkx 2.8 (initially released on Apr 09, 2022) -- 28 Apr 2024: drop ipython 7.33.0 (initially released on Apr 29, 2022) -- 28 Apr 2024: drop ipython 8.3.0 (initially released on Apr 29, 2022) -- 11 May 2024: drop scikit-learn 1.1.0 (initially released on May 12, 2022) -- 27 May 2024: drop ipython 7.34.0 (initially released on May 28, 2022) -- 27 May 2024: drop ipython 8.4.0 (initially released on May 28, 2022) -- 21 Jun 2024: drop numpy 1.23.0 (initially released on Jun 22, 2022) - -2024 – Quarter 3: - -- 21 Jul 2024: drop xarray 2022.6.0 (initially released on Jul 22, 2022) -- 28 Jul 2024: drop scipy 1.9.0 (initially released on Jul 29, 2022) -- 05 Sep 2024: drop ipython 8.5.0 (initially released on Sep 06, 2022) -- 15 Sep 2024: drop matplotlib 3.6.0 (initially released on Sep 16, 2022) -- 18 Sep 2024: drop pandas 1.5.0 (initially released on Sep 19, 2022) -- 28 Sep 2024: drop xarray 2022.9.0 (initially released on Sep 29, 2022) - -2024 – Quarter 4: - -- 03 Oct 2024: drop python 3.10 (initially released on Oct 04, 2021) -- 12 Oct 2024: drop xarray 2022.10.0 (initially released on Oct 13, 2022) -- 29 Oct 2024: drop ipython 8.6.0 (initially released on Oct 30, 2022) -- 03 Nov 2024: drop xarray 2022.11.0 (initially released on Nov 04, 2022) -- 27 Nov 2024: drop ipython 8.7.0 (initially released on Nov 28, 2022) -- 01 Dec 2024: drop xarray 2022.12.0 (initially released on Dec 02, 2022) -- 07 Dec 2024: drop scikit-learn 1.2.0 (initially released on Dec 08, 2022) -- 17 Dec 2024: drop numpy 1.24.0 (initially released on Dec 18, 2022) - -2025 – Quarter 1: - -- 02 Jan 2025: drop ipython 8.8.0 (initially released on Jan 03, 2023) -- 02 Jan 2025: drop scipy 1.10.0 (initially released on Jan 03, 2023) -- 07 Jan 2025: drop networkx 3.0 (initially released on Jan 08, 2023) -- 17 Jan 2025: drop xarray 2023.1.0 (initially released on Jan 18, 2023) -- 26 Jan 2025: drop ipython 8.9.0 (initially released on Jan 27, 2023) -- 06 Feb 2025: drop xarray 2023.2.0 (initially released on Feb 07, 2023) -- 09 Feb 2025: drop ipython 8.10.0 (initially released on Feb 10, 2023) -- 12 Feb 2025: drop matplotlib 3.7.0 (initially released on Feb 13, 2023) -- 27 Feb 2025: drop ipython 8.11.0 (initially released on Feb 28, 2023) -- 27 Feb 2025: drop scikit-image 0.20.0 (initially released on Feb 28, 2023) -- 21 Mar 2025: drop xarray 2023.3.0 (initially released on Mar 22, 2023) -- 29 Mar 2025: drop ipython 8.12.0 (initially released on Mar 30, 2023) - -2025 – Quarter 2: - -- 02 Apr 2025: drop pandas 2.0.0 (initially released on Apr 03, 2023) -- 03 Apr 2025: drop networkx 3.1 (initially released on Apr 04, 2023) -- 13 Apr 2025: drop xarray 2023.4.0 (initially released on Apr 14, 2023) -- 27 Apr 2025: drop ipython 8.13.0 (initially released on Apr 28, 2023) -- 18 May 2025: drop xarray 2023.5.0 (initially released on May 19, 2023) -- 01 Jun 2025: drop scikit-image 0.21.0 (initially released on Jun 02, 2023) -- 01 Jun 2025: drop ipython 8.14.0 (initially released on Jun 02, 2023) -- 16 Jun 2025: drop numpy 1.25.0 (initially released on Jun 17, 2023) -- 22 Jun 2025: drop xarray 2023.6.0 (initially released on Jun 23, 2023) -- 24 Jun 2025: drop scipy 1.11.0 (initially released on Jun 25, 2023) - -2025 – Quarter 4: - -- 23 Oct 2025: drop python 3.11 (initially released on Oct 24, 2022) - -2026 – Quarter 4: - -- 01 Oct 2026: drop python 3.12 (initially released on Oct 02, 2023) +#### 2023 - Quarter 3: + +###### Recommend drop support for: + +| | | | +| ------------ | ---------------- | ------------------------------ | +| ipython | 7.26.0 to 7.28.0 | released Aug 2021 and Sep 2021 | +| networkx | 2.6 | released Jul 2021 | +| pandas | 1.3.0 | released Jul 2021 | +| scikit-learn | 1.0 | released Sep 2021 | +| xarray | 0.19.0 | released Jul 2021 | + +#### 2023 - Quarter 4: + +###### Recommend drop support for: + +| | | | +| ------------ | ---------------- | ------------------------------ | +| ipython | 7.29.0 to 7.30.0 | released Oct 2021 and Nov 2021 | +| matplotlib | 3.5.0 | released Nov 2021 | +| numpy | 1.22.0 | released Dec 2021 | +| python | 3.9 | released Oct 2020 | +| scikit-image | 0.19.0 | released Dec 2021 | +| xarray | 0.20.0 | released Nov 2021 | + +#### 2024 - Quarter 1: + +###### Recommend drop support for: + +| | | | +| -------- | ------------------ | ------------------------------ | +| ipython | 7.31.0 to 8.2.0 | released Jan 2022 and Mar 2022 | +| networkx | 2.7 | released Feb 2022 | +| pandas | 1.4.0 | released Jan 2022 | +| scipy | 1.8.0 | released Feb 2022 | +| xarray | 0.21.0 to 2022.3.0 | released Jan 2022 and Mar 2022 | + +#### 2024 - Quarter 2: + +###### Recommend drop support for: + +| | | | +| ------------ | --------------- | ------------------------------ | +| ipython | 7.33.0 to 8.4.0 | released Apr 2022 and May 2022 | +| networkx | 2.8 | released Apr 2022 | +| numpy | 1.23.0 | released Jun 2022 | +| scikit-learn | 1.1.0 | released May 2022 | + +#### 2024 - Quarter 3: + +###### Recommend drop support for: + +| | | | +| ---------- | -------------------- | ------------------------------ | +| ipython | 8.5.0 | released Sep 2022 | +| matplotlib | 3.6.0 | released Sep 2022 | +| pandas | 1.5.0 | released Sep 2022 | +| scipy | 1.9.0 | released Jul 2022 | +| xarray | 2022.6.0 to 2022.9.0 | released Jul 2022 and Sep 2022 | + +#### 2024 - Quarter 4: + +###### Recommend drop support for: + +| | | | +| ------------ | ---------------------- | ------------------------------ | +| ipython | 8.6.0 to 8.7.0 | released Oct 2022 and Nov 2022 | +| numpy | 1.24.0 | released Dec 2022 | +| python | 3.10 | released Oct 2021 | +| scikit-learn | 1.2.0 | released Dec 2022 | +| xarray | 2022.10.0 to 2022.12.0 | released Oct 2022 and Dec 2022 | + +#### 2025 - Quarter 1: + +###### Recommend drop support for: + +| | | | +| ------------ | -------------------- | ------------------------------ | +| ipython | 8.8.0 to 8.12.0 | released Jan 2023 and Mar 2023 | +| matplotlib | 3.7.0 | released Feb 2023 | +| networkx | 3.0 | released Jan 2023 | +| scikit-image | 0.20.0 | released Feb 2023 | +| scipy | 1.10.0 | released Jan 2023 | +| xarray | 2023.1.0 to 2023.3.0 | released Jan 2023 and Mar 2023 | + +#### 2025 - Quarter 2: + +###### Recommend drop support for: + +| | | | +| ------------ | -------------------- | ------------------------------ | +| ipython | 8.13.0 to 8.14.0 | released Apr 2023 and Jun 2023 | +| networkx | 3.1 | released Apr 2023 | +| numpy | 1.25.0 | released Jun 2023 | +| pandas | 2.0.0 | released Apr 2023 | +| scikit-image | 0.21.0 | released Jun 2023 | +| scikit-learn | 1.3.0 | released Jun 2023 | +| scipy | 1.11.0 | released Jun 2023 | +| xarray | 2023.4.0 to 2023.6.0 | released Apr 2023 and Jun 2023 | + +#### 2025 - Quarter 3: + +###### Recommend drop support for: + +| | | | +| ---------- | -------------------- | ------------------------------ | +| ipython | 8.15.0 to 8.16.0 | released Sep 2023 and Sep 2023 | +| matplotlib | 3.8.0 | released Sep 2023 | +| numpy | 1.26.0 | released Sep 2023 | +| pandas | 2.1.0 | released Aug 2023 | +| xarray | 2023.7.0 to 2023.9.0 | released Jul 2023 and Sep 2023 | + +#### 2025 - Quarter 4: + +###### Recommend drop support for: + +| | | | +| ------------ | ------ | ----------------- | +| python | 3.11 | released Oct 2022 | +| scikit-image | 0.22.0 | released Oct 2023 | + +#### 2026 - Quarter 4: + +###### Recommend drop support for: + +| | | | +| ------ | ---- | ----------------- | +| python | 3.12 | released Oct 2023 |