diff --git a/spec-0000/SPEC0_versions.py b/spec-0000/SPEC0_versions.py index ca2ad5cc..95590a98 100644 --- a/spec-0000/SPEC0_versions.py +++ b/spec-0000/SPEC0_versions.py @@ -129,7 +129,7 @@ def get_release_dates(package, support_time=plus24): fh.write(f"\n\nsection {name}") for version, dates in releases.items(): fh.write( - f"\n{version} : {dates['release_date'].strftime('%Y-%m-%d')},{dates['drop_date'].strftime('%Y-%m-%d')}" + f"\n{version} : {name}-{version},{dates['release_date'].strftime('%Y-%m-%d')},{dates['drop_date'].strftime('%Y-%m-%d')}" ) fh.write("\n") diff --git a/spec-0000/chart.md b/spec-0000/chart.md index 3bb4832e..e91d93d8 100644 --- a/spec-0000/chart.md +++ b/spec-0000/chart.md @@ -4,121 +4,121 @@ axisFormat %m / %Y title Support Window section python -3.12 : 2023-10-02,2026-10-01 -3.13 : 2024-10-07,2027-10-07 -3.14 : 2025-10-07,2028-10-06 -3.15 : 2026-10-09,2029-10-08 +3.12 : python-3.12,2023-10-02,2026-10-01 +3.13 : python-3.13,2024-10-07,2027-10-07 +3.14 : python-3.14,2025-10-07,2028-10-06 +3.15 : python-3.15,2026-10-09,2029-10-08 section numpy -2.0.0 : 2024-06-16,2026-06-16 -2.1.0 : 2024-08-18,2026-08-18 -2.2.0 : 2024-12-08,2026-12-08 -2.3.0 : 2025-06-07,2027-06-07 -2.4.0 : 2025-12-20,2027-12-20 -2.5.0 : 2026-06-21,2028-06-20 +2.0.0 : numpy-2.0.0,2024-06-16,2026-06-16 +2.1.0 : numpy-2.1.0,2024-08-18,2026-08-18 +2.2.0 : numpy-2.2.0,2024-12-08,2026-12-08 +2.3.0 : numpy-2.3.0,2025-06-07,2027-06-07 +2.4.0 : numpy-2.4.0,2025-12-20,2027-12-20 +2.5.0 : numpy-2.5.0,2026-06-21,2028-06-20 section scipy -1.12.0 : 2024-01-20,2026-01-19 -1.13.0 : 2024-04-02,2026-04-02 -1.14.0 : 2024-06-24,2026-06-24 -1.15.0 : 2025-01-03,2027-01-03 -1.16.0 : 2025-06-22,2027-06-22 -1.17.0 : 2026-01-10,2028-01-10 -1.18.0 : 2026-06-19,2028-06-18 +1.12.0 : scipy-1.12.0,2024-01-20,2026-01-19 +1.13.0 : scipy-1.13.0,2024-04-02,2026-04-02 +1.14.0 : scipy-1.14.0,2024-06-24,2026-06-24 +1.15.0 : scipy-1.15.0,2025-01-03,2027-01-03 +1.16.0 : scipy-1.16.0,2025-06-22,2027-06-22 +1.17.0 : scipy-1.17.0,2026-01-10,2028-01-10 +1.18.0 : scipy-1.18.0,2026-06-19,2028-06-18 section matplotlib -3.9.0 : 2024-05-15,2026-05-15 -3.10.0 : 2024-12-14,2026-12-14 -3.11.0 : 2026-06-12,2028-06-11 +3.9.0 : matplotlib-3.9.0,2024-05-15,2026-05-15 +3.10.0 : matplotlib-3.10.0,2024-12-14,2026-12-14 +3.11.0 : matplotlib-3.11.0,2026-06-12,2028-06-11 section pandas -2.2.0 : 2024-01-20,2026-01-19 -2.3.0 : 2025-06-05,2027-06-05 -3.0.0 : 2026-01-21,2028-01-21 +2.2.0 : pandas-2.2.0,2024-01-20,2026-01-19 +2.3.0 : pandas-2.3.0,2025-06-05,2027-06-05 +3.0.0 : pandas-3.0.0,2026-01-21,2028-01-21 section scikit-image -0.23.0 : 2024-04-10,2026-04-10 -0.24.0 : 2024-06-18,2026-06-18 -0.25.0 : 2024-12-13,2026-12-13 -0.26.0 : 2025-12-20,2027-12-20 +0.23.0 : scikit-image-0.23.0,2024-04-10,2026-04-10 +0.24.0 : scikit-image-0.24.0,2024-06-18,2026-06-18 +0.25.0 : scikit-image-0.25.0,2024-12-13,2026-12-13 +0.26.0 : scikit-image-0.26.0,2025-12-20,2027-12-20 section networkx -3.3 : 2024-04-06,2026-04-06 -3.4 : 2024-10-10,2026-10-10 -3.5 : 2025-05-29,2027-05-29 -3.6 : 2025-11-24,2027-11-24 -3.7 : 2026-09-21,2028-09-20 +3.3 : networkx-3.3,2024-04-06,2026-04-06 +3.4 : networkx-3.4,2024-10-10,2026-10-10 +3.5 : networkx-3.5,2025-05-29,2027-05-29 +3.6 : networkx-3.6,2025-11-24,2027-11-24 +3.7 : networkx-3.7,2026-09-21,2028-09-20 section scikit-learn -1.4.0 : 2024-01-18,2026-01-17 -1.5.0 : 2024-05-21,2026-05-21 -1.6.0 : 2024-12-09,2026-12-09 -1.7.0 : 2025-06-05,2027-06-05 -1.8.0 : 2025-12-10,2027-12-10 -1.9.0 : 2026-06-02,2028-06-01 +1.4.0 : scikit-learn-1.4.0,2024-01-18,2026-01-17 +1.5.0 : scikit-learn-1.5.0,2024-05-21,2026-05-21 +1.6.0 : scikit-learn-1.6.0,2024-12-09,2026-12-09 +1.7.0 : scikit-learn-1.7.0,2025-06-05,2027-06-05 +1.8.0 : scikit-learn-1.8.0,2025-12-10,2027-12-10 +1.9.0 : scikit-learn-1.9.0,2026-06-02,2028-06-01 section xarray -2024.1.0 : 2024-01-17,2026-01-16 -2024.2.0 : 2024-02-19,2026-02-18 -2024.3.0 : 2024-03-29,2026-03-29 -2024.5.0 : 2024-05-13,2026-05-13 -2024.6.0 : 2024-06-13,2026-06-13 -2024.7.0 : 2024-07-30,2026-07-30 -2024.9.0 : 2024-09-11,2026-09-11 -2024.10.0 : 2024-10-24,2026-10-24 -2024.11.0 : 2024-11-22,2026-11-22 -2025.1.0 : 2025-01-03,2027-01-03 -2025.3.0 : 2025-03-20,2027-03-20 -2025.4.0 : 2025-04-29,2027-04-29 -2025.6.0 : 2025-06-10,2027-06-10 -2025.7.0 : 2025-07-03,2027-07-03 -2025.8.0 : 2025-08-14,2027-08-14 -2025.9.0 : 2025-09-04,2027-09-04 -2025.10.0 : 2025-10-06,2027-10-06 -2025.11.0 : 2025-11-17,2027-11-17 -2025.12.0 : 2025-12-05,2027-12-05 -2026.1.0 : 2026-01-28,2028-01-28 -2026.2.0 : 2026-02-13,2028-02-13 -2026.4.0 : 2026-04-13,2028-04-12 -2026.7.0 : 2026-07-09,2028-07-08 -2026.9.0 : 2026-09-29,2028-09-28 +2024.1.0 : xarray-2024.1.0,2024-01-17,2026-01-16 +2024.2.0 : xarray-2024.2.0,2024-02-19,2026-02-18 +2024.3.0 : xarray-2024.3.0,2024-03-29,2026-03-29 +2024.5.0 : xarray-2024.5.0,2024-05-13,2026-05-13 +2024.6.0 : xarray-2024.6.0,2024-06-13,2026-06-13 +2024.7.0 : xarray-2024.7.0,2024-07-30,2026-07-30 +2024.9.0 : xarray-2024.9.0,2024-09-11,2026-09-11 +2024.10.0 : xarray-2024.10.0,2024-10-24,2026-10-24 +2024.11.0 : xarray-2024.11.0,2024-11-22,2026-11-22 +2025.1.0 : xarray-2025.1.0,2025-01-03,2027-01-03 +2025.3.0 : xarray-2025.3.0,2025-03-20,2027-03-20 +2025.4.0 : xarray-2025.4.0,2025-04-29,2027-04-29 +2025.6.0 : xarray-2025.6.0,2025-06-10,2027-06-10 +2025.7.0 : xarray-2025.7.0,2025-07-03,2027-07-03 +2025.8.0 : xarray-2025.8.0,2025-08-14,2027-08-14 +2025.9.0 : xarray-2025.9.0,2025-09-04,2027-09-04 +2025.10.0 : xarray-2025.10.0,2025-10-06,2027-10-06 +2025.11.0 : xarray-2025.11.0,2025-11-17,2027-11-17 +2025.12.0 : xarray-2025.12.0,2025-12-05,2027-12-05 +2026.1.0 : xarray-2026.1.0,2026-01-28,2028-01-28 +2026.2.0 : xarray-2026.2.0,2026-02-13,2028-02-13 +2026.4.0 : xarray-2026.4.0,2026-04-13,2028-04-12 +2026.7.0 : xarray-2026.7.0,2026-07-09,2028-07-08 +2026.9.0 : xarray-2026.9.0,2026-09-29,2028-09-28 section ipython -8.20.0 : 2024-01-08,2026-01-07 -8.21.0 : 2024-01-31,2026-01-30 -8.22.0 : 2024-02-22,2026-02-21 -8.23.0 : 2024-03-31,2026-03-31 -8.24.0 : 2024-04-26,2026-04-26 -8.25.0 : 2024-05-31,2026-05-31 -8.26.0 : 2024-06-28,2026-06-28 -8.27.0 : 2024-08-30,2026-08-30 -8.28.0 : 2024-10-02,2026-10-02 -8.29.0 : 2024-10-25,2026-10-25 -8.30.0 : 2024-11-29,2026-11-29 -8.31.0 : 2024-12-20,2026-12-20 -8.32.0 : 2025-01-31,2027-01-31 -8.33.0 : 2025-02-28,2027-02-28 -8.34.0 : 2025-03-08,2027-03-08 -8.35.0 : 2025-04-07,2027-04-07 -8.36.0 : 2025-04-25,2027-04-25 -8.37.0 : 2025-05-31,2027-05-31 -8.38.0 : 2026-01-05,2028-01-05 -8.39.0 : 2026-03-27,2028-03-26 -9.0.0 : 2025-02-28,2027-02-28 -9.1.0 : 2025-04-07,2027-04-07 -9.2.0 : 2025-04-25,2027-04-25 -9.3.0 : 2025-05-31,2027-05-31 -9.4.0 : 2025-07-01,2027-07-01 -9.5.0 : 2025-08-29,2027-08-29 -9.6.0 : 2025-09-29,2027-09-29 -9.7.0 : 2025-11-05,2027-11-05 -9.8.0 : 2025-12-03,2027-12-03 -9.9.0 : 2026-01-05,2028-01-05 -9.10.0 : 2026-02-02,2028-02-02 -9.11.0 : 2026-03-05,2028-03-04 -9.12.0 : 2026-03-27,2028-03-26 -9.13.0 : 2026-04-24,2028-04-23 -9.14.0 : 2026-05-29,2028-05-28 -9.15.0 : 2026-06-26,2028-06-25 -9.16.0 : 2026-07-31,2028-07-30 -9.17.0 : 2026-08-28,2028-08-27 +8.20.0 : ipython-8.20.0,2024-01-08,2026-01-07 +8.21.0 : ipython-8.21.0,2024-01-31,2026-01-30 +8.22.0 : ipython-8.22.0,2024-02-22,2026-02-21 +8.23.0 : ipython-8.23.0,2024-03-31,2026-03-31 +8.24.0 : ipython-8.24.0,2024-04-26,2026-04-26 +8.25.0 : ipython-8.25.0,2024-05-31,2026-05-31 +8.26.0 : ipython-8.26.0,2024-06-28,2026-06-28 +8.27.0 : ipython-8.27.0,2024-08-30,2026-08-30 +8.28.0 : ipython-8.28.0,2024-10-02,2026-10-02 +8.29.0 : ipython-8.29.0,2024-10-25,2026-10-25 +8.30.0 : ipython-8.30.0,2024-11-29,2026-11-29 +8.31.0 : ipython-8.31.0,2024-12-20,2026-12-20 +8.32.0 : ipython-8.32.0,2025-01-31,2027-01-31 +8.33.0 : ipython-8.33.0,2025-02-28,2027-02-28 +8.34.0 : ipython-8.34.0,2025-03-08,2027-03-08 +8.35.0 : ipython-8.35.0,2025-04-07,2027-04-07 +8.36.0 : ipython-8.36.0,2025-04-25,2027-04-25 +8.37.0 : ipython-8.37.0,2025-05-31,2027-05-31 +8.38.0 : ipython-8.38.0,2026-01-05,2028-01-05 +8.39.0 : ipython-8.39.0,2026-03-27,2028-03-26 +9.0.0 : ipython-9.0.0,2025-02-28,2027-02-28 +9.1.0 : ipython-9.1.0,2025-04-07,2027-04-07 +9.2.0 : ipython-9.2.0,2025-04-25,2027-04-25 +9.3.0 : ipython-9.3.0,2025-05-31,2027-05-31 +9.4.0 : ipython-9.4.0,2025-07-01,2027-07-01 +9.5.0 : ipython-9.5.0,2025-08-29,2027-08-29 +9.6.0 : ipython-9.6.0,2025-09-29,2027-09-29 +9.7.0 : ipython-9.7.0,2025-11-05,2027-11-05 +9.8.0 : ipython-9.8.0,2025-12-03,2027-12-03 +9.9.0 : ipython-9.9.0,2026-01-05,2028-01-05 +9.10.0 : ipython-9.10.0,2026-02-02,2028-02-02 +9.11.0 : ipython-9.11.0,2026-03-05,2028-03-04 +9.12.0 : ipython-9.12.0,2026-03-27,2028-03-26 +9.13.0 : ipython-9.13.0,2026-04-24,2028-04-23 +9.14.0 : ipython-9.14.0,2026-05-29,2028-05-28 +9.15.0 : ipython-9.15.0,2026-06-26,2028-06-25 +9.16.0 : ipython-9.16.0,2026-07-31,2028-07-30 +9.17.0 : ipython-9.17.0,2026-08-28,2028-08-27 diff --git a/spec-0000/index.md b/spec-0000/index.md index 0bdf2f53..2c444922 100644 --- a/spec-0000/index.md +++ b/spec-0000/index.md @@ -88,6 +88,12 @@ The situation has since improved due to improved installations via binary wheels {{< include-raw "chart.md" >}} ``` + + +Versions after their drop date show in red. + ### Drop Schedule Below is an auto generated schedule with recommended dates for dropping support. We suggest that the next release in a given quarter is diff --git a/spec-0000/past-versions.js b/spec-0000/past-versions.js new file mode 100644 index 00000000..51970fe9 --- /dev/null +++ b/spec-0000/past-versions.js @@ -0,0 +1,31 @@ +// Style chart versions whose drop date has passed as critical. +// Runs before Mermaid renders, so the chart source is still available. +const taskLine = /^.+ : ([^,]+),\d{4}-\d\d-\d\d,(\d{4}-\d\d-\d\d)$/gm; +const now = new Date(); + +for (const pre of document.querySelectorAll("pre.mermaid")) { + const past = [...pre.textContent.matchAll(taskLine)] + .filter(([, , dropDate]) => new Date(`${dropDate}T00:00`) <= now) + .map(([, id]) => id); + if (!past.length) continue; + + new MutationObserver((_, observer) => { + const svg = pre.querySelector(":scope > svg"); + if (!svg) return; + observer.disconnect(); + for (const id of past) { + const rect = svg.getElementById(`${svg.id}-${id}`); + const section = [...(rect?.classList ?? [])].find((c) => + /^task\d+$/.test(c), + ); + if (!section) continue; + const n = section.slice("task".length); + rect.classList.replace(section, `crit${n}`); + rect.classList.remove("task"); + const text = svg.getElementById(`${rect.id}-text`); + if (text?.classList.contains(`taskText${n}`)) { + text.classList.add(`critText${n}`); + } + } + }).observe(pre, { childList: true }); +}