From 58b536f6b25f5f7e897bbbb6eb65debf28f83b0e Mon Sep 17 00:00:00 2001 From: HugoMVale <57530119+HugoMVale@users.noreply.github.com> Date: Sun, 18 Oct 2026 11:09:44 +0200 Subject: [PATCH 1/3] feat: add Python 3.15 support - Add 3.15 classifier and CI test matrix entry (lowest-direct excluded, as for 3.12-3.14) - Bump cibuildwheel to v4.3.1, which builds CPython 3.15 wheels by default --- .github/workflows/build-wheels.yml | 2 +- .github/workflows/test-linux.yml | 6 ++++-- pyproject.toml | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index 99c9231..05a2b49 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -44,7 +44,7 @@ jobs: echo "PKG_CONFIG_PATH=C:/mingw64/lib/pkgconfig" >> $GITHUB_ENV - name: Build wheels - uses: pypa/cibuildwheel@v3.4.1 + uses: pypa/cibuildwheel@v4.3.1 env: # All cibuildwheel options are here (nothing "hidden" in pyproject.toml) CIBW_SKIP: "*-win32 *i686 cp3??t-*" diff --git a/.github/workflows/test-linux.yml b/.github/workflows/test-linux.yml index ed9fe2d..beca64a 100644 --- a/.github/workflows/test-linux.yml +++ b/.github/workflows/test-linux.yml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] resolution: ["lowest-direct", "highest"] exclude: - python-version: "3.12" @@ -21,7 +21,9 @@ jobs: - python-version: "3.13" resolution: "lowest-direct" - python-version: "3.14" - resolution: "lowest-direct" + resolution: "lowest-direct" + - python-version: "3.15" + resolution: "lowest-direct" steps: - name: Checkout code uses: actions/checkout@v5 diff --git a/pyproject.toml b/pyproject.toml index cf88c1c..8bdc960 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,6 +23,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Topic :: Scientific/Engineering", ] From 0407fa4c7f07fb13c7beed6b76442cd81256d1a4 Mon Sep 17 00:00:00 2001 From: HugoMVale <57530119+HugoMVale@users.noreply.github.com> Date: Sun, 18 Oct 2026 11:41:04 +0200 Subject: [PATCH 2/3] fix: update scipy version constraint to <1.19 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 8bdc960..eb0f4b9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ dev = [ "meson-python>=0.18.0", "pytest>=8.4.1", "pytest-cov>=6.2.1", - "scipy>=1.10,<1.17", + "scipy>=1.10,<1.19", "build>=1.5.0", ] docs = [ From 6466e5146aa5f877ed8a7cfe46237e529e78bee3 Mon Sep 17 00:00:00 2001 From: HugoMVale <57530119+HugoMVale@users.noreply.github.com> Date: Sun, 18 Oct 2026 11:41:11 +0200 Subject: [PATCH 3/3] fix: import scipy.odr and scipy.optimize conditionally in tests --- tests/test_odr_fit.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/test_odr_fit.py b/tests/test_odr_fit.py index a56c23a..e26a94c 100644 --- a/tests/test_odr_fit.py +++ b/tests/test_odr_fit.py @@ -3,8 +3,6 @@ import numpy as np import pytest -from scipy.odr import odr as odrscipy -from scipy.optimize import curve_fit from odrpack import OdrStop, odr_fit from odrpack.__odrpack import loc_rwork @@ -677,6 +675,9 @@ def f(x: np.ndarray, beta: np.ndarray) -> np.ndarray: @pytest.mark.xfail(reason="Fails in conda-forge::linux_aarch64") def test_compare_scipy(case1, case2, case3): + odrscipy = pytest.importorskip("scipy.odr").odr + curve_fit = pytest.importorskip("scipy.optimize").curve_fit + # case1 // scipy.optimize.curve_fit sol1 = odr_fit(**case1, task='OLS') sol2 = curve_fit(lambda x, *b: case1['f'](x, np.array(b)),