From 8645d56ab88409458da5a2c77fd7dfca1920d0f1 Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Wed, 9 Sep 2026 11:46:27 +0200 Subject: [PATCH 1/6] Enable support of Python 3.15 Add Python 3.15 to the CI matrices and package metadata: - pyproject.toml: add the 3.15 classifier and bump requires-python to <3.16 - clang smoke builds: add 3.15 and allow-prereleases in setup-python - build_pip: add 3.15 and the conda-forge/label/python_rc RC channel - conda-package(-cf): add 3.15 rows (numpy 2.5) and the python_rc channel --- .github/workflows/build-with-clang.yml | 4 +++- .github/workflows/build-with-standard-clang.yml | 4 +++- .github/workflows/build_pip.yml | 5 +++-- .github/workflows/conda-package-cf.yml | 16 ++++++++++------ .github/workflows/conda-package.yml | 16 ++++++++++------ CHANGELOG.md | 1 + pyproject.toml | 3 ++- 7 files changed, 32 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build-with-clang.yml b/.github/workflows/build-with-clang.yml index df64833e..b3392520 100644 --- a/.github/workflows/build-with-clang.yml +++ b/.github/workflows/build-with-clang.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] numpy_version: ["'numpy>=2'"] env: @@ -47,6 +47,8 @@ jobs: uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python }} + # allow the 3.15 release candidate until 3.15 is final + allow-prereleases: true architecture: x64 - name: Checkout repo diff --git a/.github/workflows/build-with-standard-clang.yml b/.github/workflows/build-with-standard-clang.yml index 86dd81a5..bc6a4928 100644 --- a/.github/workflows/build-with-standard-clang.yml +++ b/.github/workflows/build-with-standard-clang.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] numpy_version: ["'numpy>=2'"] env: @@ -39,6 +39,8 @@ jobs: uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python }} + # allow the 3.15 release candidate until 3.15 is final + allow-prereleases: true architecture: x64 - name: Checkout repo diff --git a/.github/workflows/build_pip.yml b/.github/workflows/build_pip.yml index 501e6fb8..15a14b3e 100644 --- a/.github/workflows/build_pip.yml +++ b/.github/workflows/build_pip.yml @@ -18,7 +18,7 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] use_pre: ["", "--pre"] steps: @@ -30,7 +30,8 @@ jobs: - uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1 with: miniforge-version: latest - channels: conda-forge + # conda-forge/label/python_rc carries the 3.15 release candidate + channels: conda-forge,conda-forge/label/python_rc activate-environment: test python-version: ${{ matrix.python }} diff --git a/.github/workflows/conda-package-cf.yml b/.github/workflows/conda-package-cf.yml index 5703c05a..7a71670e 100644 --- a/.github/workflows/conda-package-cf.yml +++ b/.github/workflows/conda-package-cf.yml @@ -32,6 +32,8 @@ jobs: numpy: "2.3" - python: "3.14" numpy: "2.3" + - python: "3.15" + numpy: "2.5" steps: - name: Cancel Previous Runs @@ -68,7 +70,7 @@ jobs: - name: Build conda package with NumPy 2.x run: | - CHANNELS=(-c conda-forge --override-channels) + CHANNELS=(-c conda-forge -c conda-forge/label/python_rc --override-channels) VERSIONS=(--python "${{ matrix.python }}" --numpy "${{ matrix.numpy }}") TEST=(--no-test) @@ -90,13 +92,13 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] numpy: ['numpy">=2"'] experimental: [false] runner: [ubuntu-latest] continue-on-error: ${{ matrix.experimental }} env: - CHANNELS: -c conda-forge --override-channels + CHANNELS: -c conda-forge -c conda-forge/label/python_rc --override-channels steps: - name: Download artifact @@ -173,6 +175,8 @@ jobs: numpy: "2.3" - python: "3.14" numpy: "2.3" + - python: "3.15" + numpy: "2.5" steps: - name: Cancel Previous Runs @@ -211,7 +215,7 @@ jobs: - name: Build conda package with NumPy 2.x run: | - conda build --no-test --python ${{ matrix.python }} --numpy ${{ matrix.numpy }} -c conda-forge --override-channels conda-recipe-cf + conda build --no-test --python ${{ matrix.python }} --numpy ${{ matrix.numpy }} -c conda-forge -c conda-forge/label/python_rc --override-channels conda-recipe-cf - name: Store conda paths as envs shell: bash -l {0} @@ -233,14 +237,14 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] numpy: ['numpy">=2"'] experimental: [false] runner: [windows-latest] continue-on-error: ${{ matrix.experimental }} env: workdir: '${{ github.workspace }}' - CHANNELS: -c conda-forge --override-channels + CHANNELS: -c conda-forge -c conda-forge/label/python_rc --override-channels steps: - name: Download artifact diff --git a/.github/workflows/conda-package.yml b/.github/workflows/conda-package.yml index ee962c7e..cb989f84 100644 --- a/.github/workflows/conda-package.yml +++ b/.github/workflows/conda-package.yml @@ -33,6 +33,8 @@ jobs: numpy: "2.3" - python: "3.14" numpy: "2.3" + - python: "3.15" + numpy: "2.5" steps: - name: Cancel Previous Runs uses: styfle/cancel-workflow-action@d07a454dad7609a92316b57b23c9ccfd4f59af66 # 0.13.1 @@ -85,7 +87,7 @@ jobs: - name: Build conda package run: | - CHANNELS=(-c https://software.repos.intel.com/python/conda -c conda-forge --override-channels) + CHANNELS=(-c https://software.repos.intel.com/python/conda -c conda-forge -c conda-forge/label/python_rc --override-channels) VERSIONS=(--python "${{ matrix.python }}" --numpy "${{ matrix.numpy }}") TEST=(--no-test) @@ -113,13 +115,13 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] numpy: ['numpy">=2"'] experimental: [false] runner: [ubuntu-latest] continue-on-error: ${{ matrix.experimental }} env: - CHANNELS: -c https://software.repos.intel.com/python/conda -c conda-forge --override-channels + CHANNELS: -c https://software.repos.intel.com/python/conda -c conda-forge -c conda-forge/label/python_rc --override-channels steps: - name: Download artifact @@ -217,6 +219,8 @@ jobs: numpy: "2.3" - python: "3.14" numpy: "2.3" + - python: "3.15" + numpy: "2.5" steps: - name: Cancel Previous Runs uses: styfle/cancel-workflow-action@d07a454dad7609a92316b57b23c9ccfd4f59af66 # 0.13.1 @@ -265,7 +269,7 @@ jobs: - name: Build conda package run: | - conda build --no-test --python ${{ matrix.python }} --numpy ${{ matrix.numpy }} -c https://software.repos.intel.com/python/conda -c conda-forge --override-channels conda-recipe + conda build --no-test --python ${{ matrix.python }} --numpy ${{ matrix.numpy }} -c https://software.repos.intel.com/python/conda -c conda-forge -c conda-forge/label/python_rc --override-channels conda-recipe - name: Upload artifact uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 @@ -288,14 +292,14 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] numpy: ['numpy">=2"'] experimental: [false] runner: [windows-latest] continue-on-error: ${{ matrix.experimental }} env: workdir: '${{ github.workspace }}' - CHANNELS: -c https://software.repos.intel.com/python/conda -c conda-forge --override-channels + CHANNELS: -c https://software.repos.intel.com/python/conda -c conda-forge -c conda-forge/label/python_rc --override-channels steps: - name: Download artifact diff --git a/CHANGELOG.md b/CHANGELOG.md index c6c69070..e3dc2ee2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [dev] - YYYY-MM-DD ### Added +* Enabled support of Python 3.15 [gh-378](https://github.com/IntelPython/mkl_fft/pull/378) ### Changed * Multi-iterator constructors now return a status corresponding to allocation success or failure, and raise `MemoryError` instead of `ValueError` [gh-373](https://github.com/IntelPython/mkl_fft/pull/373) diff --git a/pyproject.toml b/pyproject.toml index 3f34aee8..777363f8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,6 +48,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development", "Topic :: Scientific/Engineering", @@ -62,7 +63,7 @@ keywords = ["DFTI", "FFT", "Fourier", "MKL"] license = "BSD-3-Clause" name = "mkl_fft" readme = {file = "README.md", content-type = "text/markdown"} -requires-python = ">=3.10,<3.15" +requires-python = ">=3.10,<3.16" [project.optional-dependencies] benchmark = ["asv>=0.6", "psutil", "scipy>=1.10"] From f82af8c2127a064f546725b04c70e45372e1b622 Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Wed, 9 Sep 2026 11:51:48 +0200 Subject: [PATCH 2/6] Add python_rc channel to Windows setup-miniconda steps setup-miniconda creates the environment with python=3.15 using only its own 'channels' input, so the release candidate must be available there too - the channel added to the later conda build/CHANNELS steps is not enough. --- .github/workflows/conda-package-cf.yml | 4 ++-- .github/workflows/conda-package.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/conda-package-cf.yml b/.github/workflows/conda-package-cf.yml index 7a71670e..de686088 100644 --- a/.github/workflows/conda-package-cf.yml +++ b/.github/workflows/conda-package-cf.yml @@ -193,7 +193,7 @@ jobs: with: miniforge-version: latest activate-environment: build - channels: conda-forge + channels: conda-forge,conda-forge/label/python_rc python-version: ${{ matrix.python }} - name: Install conda-build @@ -255,7 +255,7 @@ jobs: - uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1 with: miniforge-version: latest - channels: conda-forge + channels: conda-forge,conda-forge/label/python_rc activate-environment: ${{ env.TEST_ENV_NAME }} python-version: ${{ matrix.python }} diff --git a/.github/workflows/conda-package.yml b/.github/workflows/conda-package.yml index cb989f84..274b8968 100644 --- a/.github/workflows/conda-package.yml +++ b/.github/workflows/conda-package.yml @@ -237,7 +237,7 @@ jobs: auto-update-conda: true miniforge-version: latest activate-environment: build - channels: conda-forge + channels: conda-forge,conda-forge/label/python_rc python-version: ${{ matrix.python }} conda-build-version: ${{ env.CONDA_BUILD_VERSION }} @@ -311,7 +311,7 @@ jobs: with: auto-update-conda: true miniforge-version: latest - channels: conda-forge + channels: conda-forge,conda-forge/label/python_rc activate-environment: ${{ env.TEST_ENV_NAME }} python-version: ${{ matrix.python }} From 758c8e96ad8a3c3c5ba506acfb132919d3f626ec Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Mon, 5 Oct 2026 22:08:34 +0200 Subject: [PATCH 3/6] Temporarily exclude Python 3.15 from pip-based workflows mkl-service has no Python 3.15 wheel on PyPI yet, so the jobs that install it through pip cannot run on 3.15. Drop 3.15 from the build_pip and clang workflow matrices until the wheel is published. Conda workflows still cover 3.15. --- .github/workflows/build-with-clang.yml | 3 ++- .github/workflows/build-with-standard-clang.yml | 3 ++- .github/workflows/build_pip.yml | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-with-clang.yml b/.github/workflows/build-with-clang.yml index b3392520..e5024576 100644 --- a/.github/workflows/build-with-clang.yml +++ b/.github/workflows/build-with-clang.yml @@ -14,7 +14,8 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] + # TODO: add "3.15" back once mkl-service publishes a Python 3.15 wheel on PyPI + python: ["3.10", "3.11", "3.12", "3.13", "3.14"] numpy_version: ["'numpy>=2'"] env: diff --git a/.github/workflows/build-with-standard-clang.yml b/.github/workflows/build-with-standard-clang.yml index bc6a4928..7828bed2 100644 --- a/.github/workflows/build-with-standard-clang.yml +++ b/.github/workflows/build-with-standard-clang.yml @@ -14,7 +14,8 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] + # TODO: add "3.15" back once mkl-service publishes a Python 3.15 wheel on PyPI + python: ["3.10", "3.11", "3.12", "3.13", "3.14"] numpy_version: ["'numpy>=2'"] env: diff --git a/.github/workflows/build_pip.yml b/.github/workflows/build_pip.yml index 1ae169f4..9a17ea3c 100644 --- a/.github/workflows/build_pip.yml +++ b/.github/workflows/build_pip.yml @@ -18,7 +18,8 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] + # TODO: add "3.15" back once mkl-service publishes a Python 3.15 wheel on PyPI + python: ["3.10", "3.11", "3.12", "3.13", "3.14"] use_pre: ["", "--pre"] steps: From c168cffe19514b2eb76908a84533a2b4db2cb9a1 Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Tue, 6 Oct 2026 20:22:23 +0200 Subject: [PATCH 4/6] Disable the cp314t build_pip job until mkl-service has a free-threaded wheel The merge of master left the cp314t include row (use_pre: "") active. It overwrote the python_spec of the plain 3.14 job, so that job ran the free-threaded interpreter and failed to install mkl-service from PyPI. Comment the row out, matching the --pre row and master. --- .github/workflows/build_pip.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_pip.yml b/.github/workflows/build_pip.yml index eff1e86b..49fb4d3b 100644 --- a/.github/workflows/build_pip.yml +++ b/.github/workflows/build_pip.yml @@ -28,9 +28,9 @@ jobs: - python: "3.14" python_spec: "3.14.* *_cp314" use_pre: "--pre" - - python: "3.14" - python_spec: "3.14.* *_cp314t" - use_pre: "" + # - python: "3.14" + # python_spec: "3.14.* *_cp314t" + # use_pre: "" # - python: "3.14" # python_spec: "3.14.* *_cp314t" # use_pre: "--pre" From 07ae64f998138693555825f836036fc716a4c24c Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Tue, 13 Oct 2026 20:40:30 +0200 Subject: [PATCH 5/6] Drop Python 3.15 release candidate workarounds Python 3.15.0 is released: conda-forge publishes it on the main label (numpy 2.5 py315 builds included) and actions/setup-python lists it as stable. Remove the conda-forge/label/python_rc channel and the allow-prereleases setting that were only needed for the RC. --- .github/workflows/build-with-clang.yml | 2 -- .github/workflows/build-with-standard-clang.yml | 2 -- .github/workflows/build_pip.yml | 3 +-- .github/workflows/conda-package-cf.yml | 12 ++++++------ .github/workflows/conda-package.yml | 12 ++++++------ 5 files changed, 13 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build-with-clang.yml b/.github/workflows/build-with-clang.yml index 367b0cd4..55c5a0dc 100644 --- a/.github/workflows/build-with-clang.yml +++ b/.github/workflows/build-with-clang.yml @@ -48,8 +48,6 @@ jobs: uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python }} - # allow the 3.15 release candidate until 3.15 is final - allow-prereleases: true architecture: x64 - name: Checkout repo diff --git a/.github/workflows/build-with-standard-clang.yml b/.github/workflows/build-with-standard-clang.yml index 60fbc04e..18f79293 100644 --- a/.github/workflows/build-with-standard-clang.yml +++ b/.github/workflows/build-with-standard-clang.yml @@ -40,8 +40,6 @@ jobs: uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python }} - # allow the 3.15 release candidate until 3.15 is final - allow-prereleases: true architecture: x64 - name: Checkout repo diff --git a/.github/workflows/build_pip.yml b/.github/workflows/build_pip.yml index 49fb4d3b..aac96915 100644 --- a/.github/workflows/build_pip.yml +++ b/.github/workflows/build_pip.yml @@ -44,8 +44,7 @@ jobs: - uses: conda-incubator/setup-miniconda@be893c923ea9cf1cf7cd510fbdde27c7e18cbdcb # v4.1.0 with: miniforge-version: latest - # conda-forge/label/python_rc carries the 3.15 release candidate - channels: conda-forge,conda-forge/label/python_rc + channels: conda-forge activate-environment: test python-version: ${{ matrix.python }} diff --git a/.github/workflows/conda-package-cf.yml b/.github/workflows/conda-package-cf.yml index 67c77a4a..b12baa26 100644 --- a/.github/workflows/conda-package-cf.yml +++ b/.github/workflows/conda-package-cf.yml @@ -76,7 +76,7 @@ jobs: - name: Build conda package with NumPy 2.x run: | - CHANNELS=(-c conda-forge -c conda-forge/label/python_rc --override-channels) + CHANNELS=(-c conda-forge --override-channels) VERSIONS=(--python "${{ matrix.python_spec || matrix.python }}" --numpy "${{ matrix.numpy }}") TEST=(--no-test) @@ -117,7 +117,7 @@ jobs: # runner: ubuntu-latest continue-on-error: ${{ matrix.experimental }} env: - CHANNELS: -c conda-forge -c conda-forge/label/python_rc --override-channels + CHANNELS: -c conda-forge --override-channels steps: - name: Download artifact @@ -218,7 +218,7 @@ jobs: with: miniforge-version: latest activate-environment: build - channels: conda-forge,conda-forge/label/python_rc + channels: conda-forge python-version: ${{ matrix.python }} - name: Install conda-build @@ -240,7 +240,7 @@ jobs: - name: Build conda package with NumPy 2.x run: | - conda build --no-test --python "${{ matrix.python_spec || matrix.python }}" --numpy ${{ matrix.numpy }} -c conda-forge -c conda-forge/label/python_rc --override-channels conda-recipe-cf + conda build --no-test --python "${{ matrix.python_spec || matrix.python }}" --numpy ${{ matrix.numpy }} -c conda-forge --override-channels conda-recipe-cf - name: Store conda paths as envs shell: bash -l {0} @@ -282,7 +282,7 @@ jobs: continue-on-error: ${{ matrix.experimental }} env: workdir: '${{ github.workspace }}' - CHANNELS: -c conda-forge -c conda-forge/label/python_rc --override-channels + CHANNELS: -c conda-forge --override-channels steps: - name: Download artifact @@ -293,7 +293,7 @@ jobs: - uses: conda-incubator/setup-miniconda@be893c923ea9cf1cf7cd510fbdde27c7e18cbdcb # v4.1.0 with: miniforge-version: latest - channels: conda-forge,conda-forge/label/python_rc + channels: conda-forge activate-environment: ${{ env.TEST_ENV_NAME }} python-version: ${{ matrix.python }} diff --git a/.github/workflows/conda-package.yml b/.github/workflows/conda-package.yml index 7253ca48..71f1e329 100644 --- a/.github/workflows/conda-package.yml +++ b/.github/workflows/conda-package.yml @@ -94,7 +94,7 @@ jobs: - name: Build conda package run: | - CHANNELS=(-c https://software.repos.intel.com/python/conda -c conda-forge -c conda-forge/label/python_rc --override-channels) + CHANNELS=(-c https://software.repos.intel.com/python/conda -c conda-forge --override-channels) VERSIONS=(--python "${{ matrix.python_spec || matrix.python }}" --numpy "${{ matrix.numpy }}") TEST=(--no-test) @@ -141,7 +141,7 @@ jobs: # runner: ubuntu-latest continue-on-error: ${{ matrix.experimental }} env: - CHANNELS: -c https://software.repos.intel.com/python/conda -c conda-forge -c conda-forge/label/python_rc --override-channels + CHANNELS: -c https://software.repos.intel.com/python/conda -c conda-forge --override-channels steps: - name: Download artifact @@ -264,7 +264,7 @@ jobs: auto-update-conda: true miniforge-version: latest activate-environment: build - channels: conda-forge,conda-forge/label/python_rc + channels: conda-forge python-version: ${{ matrix.python }} conda-build-version: ${{ env.CONDA_BUILD_VERSION }} @@ -296,7 +296,7 @@ jobs: - name: Build conda package run: | - conda build --no-test --python "${{ matrix.python_spec || matrix.python }}" --numpy ${{ matrix.numpy }} -c https://software.repos.intel.com/python/conda -c conda-forge -c conda-forge/label/python_rc --override-channels conda-recipe + conda build --no-test --python "${{ matrix.python_spec || matrix.python }}" --numpy ${{ matrix.numpy }} -c https://software.repos.intel.com/python/conda -c conda-forge --override-channels conda-recipe - name: Upload artifact uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 @@ -339,7 +339,7 @@ jobs: continue-on-error: ${{ matrix.experimental }} env: workdir: '${{ github.workspace }}' - CHANNELS: -c https://software.repos.intel.com/python/conda -c conda-forge -c conda-forge/label/python_rc --override-channels + CHANNELS: -c https://software.repos.intel.com/python/conda -c conda-forge --override-channels steps: - name: Download artifact @@ -351,7 +351,7 @@ jobs: with: auto-update-conda: true miniforge-version: latest - channels: conda-forge,conda-forge/label/python_rc + channels: conda-forge activate-environment: ${{ env.TEST_ENV_NAME }} python-version: ${{ matrix.python }} From 50202351842c19206233f737c0b153f2571fb892 Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Thu, 15 Oct 2026 13:48:23 +0200 Subject: [PATCH 6/6] Add Python 3.15 as pinned include rows in CI matrices Having "3.14" in the base python list folded the cp314 and cp314t include rows into one job, and the cp314t row won: build_pip and the conda test jobs only exercised the free-threaded 3.14 build. Restore master's base lists and add 3.15 as its own include rows pinned to the GIL build (*_cp315), like the 3.14 rows. build_pip installs mkl-service from conda-forge, which has py315 builds, so 3.15 is enabled there too. --- .github/workflows/build_pip.yml | 9 +++++++-- .github/workflows/conda-package-cf.yml | 20 ++++++++++++++++++-- .github/workflows/conda-package.yml | 22 ++++++++++++++++++---- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build_pip.yml b/.github/workflows/build_pip.yml index e6af88c8..d971e43f 100644 --- a/.github/workflows/build_pip.yml +++ b/.github/workflows/build_pip.yml @@ -18,8 +18,7 @@ jobs: strategy: matrix: - # TODO: add "3.15" back once mkl-service publishes a Python 3.15 wheel on PyPI - python: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python: ["3.10", "3.11", "3.12", "3.13"] use_pre: ["", "--pre"] include: - python: "3.14" @@ -34,6 +33,12 @@ jobs: - python: "3.14" python_spec: "3.14.* *_cp314t" use_pre: "--pre" + - python: "3.15" + python_spec: "3.15.* *_cp315" + use_pre: "" + - python: "3.15" + python_spec: "3.15.* *_cp315" + use_pre: "--pre" steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 diff --git a/.github/workflows/conda-package-cf.yml b/.github/workflows/conda-package-cf.yml index 66afbcf7..85bdb717 100644 --- a/.github/workflows/conda-package-cf.yml +++ b/.github/workflows/conda-package-cf.yml @@ -40,6 +40,8 @@ jobs: python_tag: "3.14t" - python: "3.15" numpy: "2.5" + python_spec: "3.15.* *_cp315" + python_tag: "3.15" steps: - name: Cancel Previous Runs @@ -98,7 +100,7 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] + python: ["3.10", "3.11", "3.12", "3.13"] numpy: ['numpy">=2"'] experimental: [false] runner: [ubuntu-latest] @@ -115,6 +117,12 @@ jobs: numpy: 'numpy">=2"' experimental: false runner: ubuntu-latest + - python: "3.15" + python_spec: "3.15.* *_cp315" + python_tag: "3.15" + numpy: 'numpy">=2"' + experimental: false + runner: ubuntu-latest continue-on-error: ${{ matrix.experimental }} env: CHANNELS: -c conda-forge --override-channels @@ -202,6 +210,8 @@ jobs: python_tag: "3.14t" - python: "3.15" numpy: "2.5" + python_spec: "3.15.* *_cp315" + python_tag: "3.15" steps: - name: Cancel Previous Runs @@ -262,7 +272,7 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] + python: ["3.10", "3.11", "3.12", "3.13"] numpy: ['numpy">=2"'] experimental: [false] runner: [windows-latest] @@ -279,6 +289,12 @@ jobs: numpy: 'numpy">=2"' experimental: false runner: windows-latest + - python: "3.15" + python_spec: "3.15.* *_cp315" + python_tag: "3.15" + numpy: 'numpy">=2"' + experimental: false + runner: windows-latest continue-on-error: ${{ matrix.experimental }} env: workdir: '${{ github.workspace }}' diff --git a/.github/workflows/conda-package.yml b/.github/workflows/conda-package.yml index d9fd1af1..26eda2f8 100644 --- a/.github/workflows/conda-package.yml +++ b/.github/workflows/conda-package.yml @@ -41,7 +41,8 @@ jobs: python_tag: "3.14t" - python: "3.15" numpy: "2.5" - + python_spec: "3.15.* *_cp315" + python_tag: "3.15" steps: - name: Cancel Previous Runs uses: styfle/cancel-workflow-action@d07a454dad7609a92316b57b23c9ccfd4f59af66 # 0.13.1 @@ -122,7 +123,7 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] + python: ["3.10", "3.11", "3.12", "3.13"] numpy: ['numpy">=2"'] experimental: [false] runner: [ubuntu-latest] @@ -139,6 +140,12 @@ jobs: numpy: 'numpy">=2"' experimental: false runner: ubuntu-latest + - python: "3.15" + python_spec: "3.15.* *_cp315" + python_tag: "3.15" + numpy: 'numpy">=2"' + experimental: false + runner: ubuntu-latest continue-on-error: ${{ matrix.experimental }} env: CHANNELS: -c https://software.repos.intel.com/python/conda -c conda-forge --override-channels @@ -247,7 +254,8 @@ jobs: python_tag: "3.14t" - python: "3.15" numpy: "2.5" - + python_spec: "3.15.* *_cp315" + python_tag: "3.15" steps: - name: Cancel Previous Runs uses: styfle/cancel-workflow-action@d07a454dad7609a92316b57b23c9ccfd4f59af66 # 0.13.1 @@ -319,7 +327,7 @@ jobs: strategy: matrix: - python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"] + python: ["3.10", "3.11", "3.12", "3.13"] numpy: ['numpy">=2"'] experimental: [false] runner: [windows-latest] @@ -336,6 +344,12 @@ jobs: numpy: 'numpy">=2"' experimental: false runner: windows-latest + - python: "3.15" + python_spec: "3.15.* *_cp315" + python_tag: "3.15" + numpy: 'numpy">=2"' + experimental: false + runner: windows-latest continue-on-error: ${{ matrix.experimental }} env: workdir: '${{ github.workspace }}'