From 626188663ca6af22a13b80294275b2e33454fda7 Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Wed, 14 Oct 2026 14:41:13 +0200 Subject: [PATCH] Add support for Python 3.15 Raise the upper Python bound to <3.16 in pyproject.toml and in the CMake find_package(Python) range, add the 3.15 classifier and black target version, and list 3.15 in the quick start guide. Add Python 3.15 (GIL build) to the conda package and nightly test workflows, and drop 3.12 there to keep the number of CI jobs unchanged. Free-threaded 3.15t is left as a TODO until NumPy and dpctl cp315t builds are available. --- .github/workflows/conda-package.yml | 34 +++++++++++++++++++++++---- .github/workflows/cron-run-tests.yaml | 10 +++++++- CHANGELOG.md | 1 + CMakeLists.txt | 2 +- doc/quick_start_guide.rst | 4 ++-- pyproject.toml | 5 ++-- 6 files changed, 46 insertions(+), 10 deletions(-) diff --git a/.github/workflows/conda-package.yml b/.github/workflows/conda-package.yml index 5b7fb1dcb4c6..3bae1aa51ecc 100644 --- a/.github/workflows/conda-package.yml +++ b/.github/workflows/conda-package.yml @@ -30,7 +30,7 @@ jobs: strategy: fail-fast: false matrix: - python: ['3.12', '3.13'] + python: ['3.13'] os: [ubuntu-latest, windows-2022] include: - python: '3.14' @@ -45,6 +45,14 @@ jobs: - python: '3.14' os: windows-2022 python_spec: '3.14.* *_cp314t' + - python: '3.15' + os: ubuntu-latest + python_spec: '3.15.* *_cp315' + - python: '3.15' + os: windows-2022 + python_spec: '3.15.* *_cp315' + # TODO: add free-threaded builds ('3.15.* *_cp315t') once NumPy and + # dpctl cp315t builds are available permissions: # Needed to cancel any previous runs that are not completed for a given workflow @@ -152,7 +160,7 @@ jobs: strategy: fail-fast: false matrix: - python: ['3.12', '3.13'] + python: ['3.13'] os: [ubuntu-latest] include: - python: '3.14' @@ -161,6 +169,11 @@ jobs: - python: '3.14' os: ubuntu-latest python_spec: '3.14.* *_cp314t' + - python: '3.15' + os: ubuntu-latest + python_spec: '3.15.* *_cp315' + # TODO: add free-threaded builds ('3.15.* *_cp315t') once NumPy and + # dpctl cp315t builds are available env: dpnp-repo-path: '${{ github.workspace }}/source/' @@ -430,7 +443,7 @@ jobs: strategy: fail-fast: false matrix: - python: ['3.12', '3.13'] + python: ['3.13'] os: [windows-2022] include: - python: '3.14' @@ -439,6 +452,11 @@ jobs: - python: '3.14' os: windows-2022 python_spec: '3.14.* *_cp314t' + - python: '3.15' + os: windows-2022 + python_spec: '3.15.* *_cp315' + # TODO: add free-threaded builds ('3.15.* *_cp315t') once NumPy and + # dpctl cp315t builds are available env: dpnp-repo-path: '${{ github.workspace }}\source' @@ -612,7 +630,7 @@ jobs: strategy: fail-fast: false matrix: - python: ['3.12', '3.13'] + python: ['3.13'] os: [ubuntu-latest, windows-2022] include: - python: '3.14' @@ -627,6 +645,14 @@ jobs: - python: '3.14' os: windows-2022 python_spec: '3.14.* *_cp314t' + - python: '3.15' + os: ubuntu-latest + python_spec: '3.15.* *_cp315' + - python: '3.15' + os: windows-2022 + python_spec: '3.15.* *_cp315' + # TODO: add free-threaded builds ('3.15.* *_cp315t') once NumPy and + # dpctl cp315t builds are available runs-on: ${{ matrix.os }} timeout-minutes: 10 diff --git a/.github/workflows/cron-run-tests.yaml b/.github/workflows/cron-run-tests.yaml index d12530bd7325..c3a2808797e2 100644 --- a/.github/workflows/cron-run-tests.yaml +++ b/.github/workflows/cron-run-tests.yaml @@ -38,7 +38,7 @@ jobs: strategy: fail-fast: false matrix: - python: ['3.12', '3.13'] + python: ['3.13'] runner: [ubuntu-latest, windows-2022] include: - python: '3.14' @@ -53,6 +53,14 @@ jobs: - python: '3.14' runner: windows-2022 python_spec: '3.14.* *_cp314t' + - python: '3.15' + runner: ubuntu-latest + python_spec: '3.15.* *_cp315' + - python: '3.15' + runner: windows-2022 + python_spec: '3.15.* *_cp315' + # TODO: add free-threaded builds ('3.15.* *_cp315t') once NumPy and + # dpctl cp315t builds are available env: python-install-spec: "python ${{ matrix.python_spec || format('{0}.*', matrix.python) }}" diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d6b8161ef84..26362b9af91e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ This release is compatible with NumPy 2.5. * Added `UsmNDArray_RemoveQueueRef` C API function to release a queue reference obtained from `UsmNDArray_GetQueueRef` [#3042](https://github.com/IntelPython/dpnp/pull/3042) * Added a `rattler-build`-compatible conda recipe (`conda-recipe/rattler_recipe.yaml`) alongside the existing `conda-build` recipe [#3031](https://github.com/IntelPython/dpnp/pull/3031) * Added support for the `"nuc"` (nuclear) norm in `dpnp.linalg.cond` [#3084](https://github.com/IntelPython/dpnp/pull/3084) +* Added support for Python 3.15 [#3098](https://github.com/IntelPython/dpnp/pull/3098) ### Changed diff --git a/CMakeLists.txt b/CMakeLists.txt index 4645d6419759..1f41dab8fbe4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,7 +100,7 @@ find_package(oneDPL REQUIRED PATHS ${path_to_cmake_dir}) include(GNUInstallDirs) # find Python before enabling pybind11 -find_package(Python 3.10...<3.15 REQUIRED COMPONENTS Development.Module NumPy) +find_package(Python 3.10...<3.16 REQUIRED COMPONENTS Development.Module NumPy) # Fetch pybind11 include(FetchContent) diff --git a/doc/quick_start_guide.rst b/doc/quick_start_guide.rst index abc57a2ff603..ad40dae88c43 100644 --- a/doc/quick_start_guide.rst +++ b/doc/quick_start_guide.rst @@ -24,8 +24,8 @@ Follow device driver installation instructions to complete the step. Python Interpreter ================== -You will need Python 3.10, 3.11, 3.12, 3.13 or 3.14 installed on your system. If you -do not have one yet the easiest way to do that is to install +You will need Python 3.10, 3.11, 3.12, 3.13, 3.14 or 3.15 installed on your system. +If you do not have one yet the easiest way to do that is to install `Intel Distribution for Python*`_. It installs all essential Python numerical and machine learning packages optimized for the Intel hardware, including Data Parallel Extension for NumPy*. diff --git a/pyproject.toml b/pyproject.toml index b0348918536f..2c35f154adc8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,6 +32,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 :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Free Threading :: 2 - Beta", @@ -72,7 +73,7 @@ license-files = ["LICENSE.txt"] maintainers = [{ name = "Intel Corporation" }] name = "dpnp" 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", "scipy"] @@ -108,7 +109,7 @@ Repository = "https://github.com/IntelPython/dpnp.git" [tool.black] line-length = 80 -target-version = ['py310', 'py311', 'py312', 'py313', 'py314'] +target-version = ['py310', 'py311', 'py312', 'py313', 'py314', 'py315'] [tool.codespell] builtin = "clear,rare,informal,names"