Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/build-with-clang.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:

strategy:
matrix:
python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.14t"]
python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.14t", "3.15"]
numpy_version: ["'numpy>=2'"]

env:
Expand Down Expand Up @@ -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
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/build-with-standard-clang.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:

strategy:
matrix:
python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.14t"]
python: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.14t", "3.15"]
numpy_version: ["'numpy>=2'"]

env:
Expand All @@ -38,6 +38,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
Expand Down
9 changes: 8 additions & 1 deletion .github/workflows/build_pip.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,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:
- name: Checkout repo
Expand All @@ -45,7 +51,8 @@ jobs:
with:
use-mamba: true
miniforge-version: latest
channels: https://software.repos.intel.com/python/conda, conda-forge
# conda-forge/label/python_rc carries the 3.15 release candidate
channels: https://software.repos.intel.com/python/conda, conda-forge, conda-forge/label/python_rc
conda-remove-defaults: true
activate-environment: test
python-version: ${{ matrix.python }}
Expand Down
38 changes: 30 additions & 8 deletions .github/workflows/conda-package-cf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ jobs:
numpy: "2.3"
python_spec: "3.14.* *_cp314t"
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
Expand Down Expand Up @@ -85,7 +89,7 @@ jobs:

- name: Build conda package
run: |
CHANNELS=(-c "conda-forge" --override-channels)
CHANNELS=(-c "conda-forge" -c "conda-forge/label/python_rc" --override-channels)
VERSIONS=(--python "${{ matrix.python_spec || matrix.python }}" --numpy "${{ matrix.numpy }}")
TEST=(--no-test)
echo "CONDA_BLD=${CONDA}/conda-bld/linux-64" >> "$GITHUB_ENV"
Expand Down Expand Up @@ -125,9 +129,15 @@ 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
CHANNELS: -c conda-forge -c conda-forge/label/python_rc --override-channels

steps:
- name: Download artifact
Expand Down Expand Up @@ -161,7 +171,7 @@ jobs:
cat "$GITHUB_WORKSPACE"/ver.json
- name: Collect dependencies
run: |
CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c "conda-forge" --override-channels)
CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c "conda-forge" -c "conda-forge/label/python_rc" --override-channels)
PACKAGE_VERSION="$(python -c "${VER_SCRIPT1} ${VER_SCRIPT2}")"
conda create -n "${{ env.TEST_ENV_NAME }}" "${PACKAGE_NAME}=${PACKAGE_VERSION}" "python=${{ matrix.python_spec || matrix.python }}" ${{ matrix.numpy }} "${CHANNELS[@]}" --only-deps --dry-run > lockfile
- name: Display lockfile
Expand All @@ -185,7 +195,7 @@ jobs:

- name: Install mkl_umath
run: |
CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c "conda-forge" --override-channels)
CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c "conda-forge" -c "conda-forge/label/python_rc" --override-channels)
PACKAGE_VERSION="$(python -c "${VER_SCRIPT1} ${VER_SCRIPT2}")"
conda create -n "${{ env.TEST_ENV_NAME }}" "python=${{ matrix.python_spec || matrix.python }}" ${{ matrix.numpy }} "$PACKAGE_NAME=${PACKAGE_VERSION}" pytest "${CHANNELS[@]}"
# Test installed packages
Expand Down Expand Up @@ -225,6 +235,10 @@ jobs:
numpy: "2.3"
python_spec: "3.14.* *_cp314t"
python_tag: "3.14t"
- python: "3.15"
numpy: "2.5"
python_spec: "3.15.* *_cp315"
python_tag: "3.15"
env:
conda-bld: C:\Miniconda\conda-bld\win-64\
steps:
Expand All @@ -242,7 +256,8 @@ jobs:
auto-update-conda: true
miniforge-version: latest
activate-environment: build
channels: conda-forge
# conda-forge/label/python_rc carries the 3.15 release candidate
channels: conda-forge,conda-forge/label/python_rc
python-version: ${{ matrix.python }}
conda-build-version: ${{ env.CONDA_BUILD_VERSION }}

Expand Down Expand Up @@ -272,7 +287,7 @@ jobs:
- name: Build conda package
run: |
conda activate
conda build --no-test --python "${{ matrix.python_spec || matrix.python }}" --numpy ${{ matrix.numpy }} -c conda-forge --override-channels conda-recipe-cf
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

- name: Upload artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
Expand Down Expand Up @@ -305,10 +320,16 @@ 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 }}'
CHANNELS: -c conda-forge --override-channels
CHANNELS: -c conda-forge -c conda-forge/label/python_rc --override-channels

steps:
- name: Download artifact
Expand All @@ -321,7 +342,8 @@ jobs:
auto-update-conda: true
miniforge-version: latest
activate-environment: ${{ env.TEST_ENV_NAME }}
channels: conda-forge
# conda-forge/label/python_rc carries the 3.15 release candidate
channels: conda-forge,conda-forge/label/python_rc
conda-remove-defaults: "true"
python-version: ${{ matrix.python }}

Expand Down
38 changes: 30 additions & 8 deletions .github/workflows/conda-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ jobs:
numpy: "2.3"
python_spec: "3.14.* *_cp314t"
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
Expand Down Expand Up @@ -90,7 +94,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_spec || matrix.python }}" --numpy "${{ matrix.numpy }}")
TEST=(--no-test)

Expand Down Expand Up @@ -135,9 +139,15 @@ 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
CHANNELS: -c https://software.repos.intel.com/python/conda -c conda-forge -c conda-forge/label/python_rc --override-channels

steps:
- name: Download artifact
Expand Down Expand Up @@ -171,7 +181,7 @@ jobs:
cat "$GITHUB_WORKSPACE"/ver.json
- name: Collect dependencies
run: |
CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c "https://software.repos.intel.com/python/conda" -c "conda-forge" --override-channels)
CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c "https://software.repos.intel.com/python/conda" -c "conda-forge" -c "conda-forge/label/python_rc" --override-channels)
PACKAGE_VERSION="$(python -c "${VER_SCRIPT1} ${VER_SCRIPT2}")"
conda create -n "${{ env.TEST_ENV_NAME }}" "${PACKAGE_NAME}=${PACKAGE_VERSION}" "python=${{ matrix.python_spec || matrix.python }}" ${{ matrix.numpy }} "${CHANNELS[@]}" --only-deps --dry-run > lockfile
- name: Display lockfile
Expand All @@ -195,7 +205,7 @@ jobs:

- name: Install mkl_umath
run: |
CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c "https://software.repos.intel.com/python/conda" -c "conda-forge" --override-channels)
CHANNELS=(-c "$GITHUB_WORKSPACE/channel" -c "https://software.repos.intel.com/python/conda" -c "conda-forge" -c "conda-forge/label/python_rc" --override-channels)
PACKAGE_VERSION="$(python -c "${VER_SCRIPT1} ${VER_SCRIPT2}")"
conda create -n "${{ env.TEST_ENV_NAME }}" "python=${{ matrix.python_spec || matrix.python }}" ${{ matrix.numpy }} "$PACKAGE_NAME=${PACKAGE_VERSION}" pytest "${CHANNELS[@]}"
# Test installed packages
Expand Down Expand Up @@ -235,6 +245,10 @@ jobs:
numpy: "2.3"
python_spec: "3.14.* *_cp314t"
python_tag: "3.14t"
- python: "3.15"
numpy: "2.5"
python_spec: "3.15.* *_cp315"
python_tag: "3.15"
env:
conda-bld: C:\Miniconda\conda-bld\win-64\
steps:
Expand All @@ -252,7 +266,8 @@ jobs:
auto-update-conda: true
miniforge-version: latest
activate-environment: build
channels: conda-forge
# conda-forge/label/python_rc carries the 3.15 release candidate
channels: conda-forge,conda-forge/label/python_rc
python-version: ${{ matrix.python }}
conda-build-version: ${{ env.CONDA_BUILD_VERSION }}

Expand Down Expand Up @@ -283,7 +298,7 @@ jobs:
- name: Build conda package
run: |
conda activate
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
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

- name: Upload artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
Expand Down Expand Up @@ -322,10 +337,16 @@ 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 }}'
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
Expand All @@ -338,7 +359,8 @@ jobs:
auto-update-conda: true
miniforge-version: latest
activate-environment: ${{ env.TEST_ENV_NAME }}
channels: conda-forge
# conda-forge/label/python_rc carries the 3.15 release candidate
channels: conda-forge,conda-forge/label/python_rc
conda-remove-defaults: "true"
python-version: ${{ matrix.python }}

Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ CC=icx pip install --no-deps --no-build-isolation . # clang is also supported i

## CI/CD
- **Platforms:** Linux, Windows
- **Python versions:** 3.10, 3.11, 3.12, 3.13, 3.14
- **Python versions:** 3.10, 3.11, 3.12, 3.13, 3.14, 3.15
- **Workflows:** `.github/workflows/`
- `conda-package.yml` — main conda build/test pipeline
- `conda-package-cf.yml` — conda-forge-oriented build/test pipeline
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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-279](https://github.com/IntelPython/mkl_umath/pull/279)
* Added support for free-threaded (GIL-disabled) CPython builds: the Cython extension is compiled with `freethreading_compatible=True` and `_ufuncs` declares `Py_MOD_GIL_NOT_USED`, so importing `mkl_umath` no longer re-enables the GIL [gh-255](https://github.com/IntelPython/mkl_umath/pull/255)

### Changed
Expand Down
2 changes: 1 addition & 1 deletion conda-recipe/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Conda package build recipe for Intel channel distribution.

## Build configuration
- **Channels:** `https://software.repos.intel.com/python/conda`, `conda-forge`
- **Python versions:** 3.10, 3.11, 3.12, 3.13, 3.14
- **Python versions:** 3.10, 3.11, 3.12, 3.13, 3.14, 3.15
- **Build system:** meson-python (via `python -m build`)
- **Compilers:** Intel C compiler (icx)
- **Dependencies:** mkl-devel, intel-openmp, dpcpp_{linux,win}-64, numpy
Expand Down
2 changes: 1 addition & 1 deletion mkl_umath/tests/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ pytest mkl_umath/tests/

## CI integration
- Tests run in conda-package.yml workflow
- Separate test jobs per Python version (3.10-3.14)
- Separate test jobs per Python version (3.10-3.15)
- Linux + Windows platforms

## Adding tests
Expand Down
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,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 :: Free Threading :: 2 - Beta",
"Programming Language :: Python :: Implementation :: CPython",
"Topic :: Software Development",
Expand All @@ -65,7 +66,7 @@ keywords = ["mkl_umath"]
license = "BSD-3-Clause"
name = "mkl_umath"
readme = { file = "README.md", content-type = "text/markdown" }
requires-python = ">=3.10,<3.15"
requires-python = ">=3.10,<3.16"

[project.optional-dependencies]
test = ["pytest"]
Expand Down
Loading