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
23 changes: 3 additions & 20 deletions .github/workflows/build-wheel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -223,19 +223,14 @@ jobs:

- name: Build cuda.bindings wheel
if: ${{ env.BUILD_BINDINGS == 'true' }}
uses: pypa/cibuildwheel@4726cd35bb13f7bde50cf2761f2499ac7b3aa32c # v4.1.1
uses: pypa/cibuildwheel@e090b81e30c4d855ea63bf4b6e59204c09a101ae # v4.2.1
with:
package-dir: ./cuda_bindings/
output-dir: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
env:
CIBW_BUILD: ${{ env.CIBW_BUILD }}
CIBW_BEFORE_BUILD_LINUX: 'python -m pip install --upgrade "pip>=25.3"'
CIBW_BEFORE_BUILD_WINDOWS: 'python -m pip install --upgrade "pip>=25.3" delvewheel'
# TODO: remove cpython-prerelease once 3.15 is officially supported
# Allow CPython pre-release builds (currently 3.15 / 3.15t). This is a
# no-op for stable Python versions because CIBW_BUILD still filters
# the target version.
CIBW_ENABLE: cpython-prerelease
# CIBW mounts the host filesystem under /host
CIBW_ENVIRONMENT_LINUX: >
CUDA_PATH=/host/${{ env.CUDA_PATH }}
Expand Down Expand Up @@ -330,19 +325,14 @@ jobs:

- name: Build cuda.core wheel
if: ${{ env.BUILD_CORE == 'true' }}
uses: pypa/cibuildwheel@4726cd35bb13f7bde50cf2761f2499ac7b3aa32c # v4.1.1
uses: pypa/cibuildwheel@e090b81e30c4d855ea63bf4b6e59204c09a101ae # v4.2.1
with:
package-dir: ./cuda_core/
output-dir: ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
env:
CIBW_BUILD: ${{ env.CIBW_BUILD }}
CIBW_BEFORE_BUILD_LINUX: 'python -m pip install --upgrade "pip>=25.3"'
CIBW_BEFORE_BUILD_WINDOWS: 'python -m pip install --upgrade "pip>=25.3" delvewheel'
# TODO: remove cpython-prerelease once 3.15 is officially supported
# Allow CPython pre-release builds (currently 3.15 / 3.15t). This is a
# no-op for stable Python versions because CIBW_BUILD still filters
# the target version.
CIBW_ENABLE: cpython-prerelease
# CIBW mounts the host filesystem under /host
CIBW_ENVIRONMENT_LINUX: >
CUDA_PATH=/host/${{ env.CUDA_PATH }}
Expand Down Expand Up @@ -459,8 +449,6 @@ jobs:
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: ${{ matrix.python-version }}
# TODO: remove allow-prereleases once 3.15 is officially supported
allow-prereleases: ${{ startsWith(matrix.python-version, '3.15') }}

- name: Enable Scientific Python Nightly Wheels for Python 3.15
if: ${{ (env.TEST_BINDINGS == 'true' || env.TEST_CORE == 'true') && startsWith(matrix.python-version, '3.15') }}
Expand Down Expand Up @@ -624,19 +612,14 @@ jobs:

- name: Build cuda.core wheel
if: ${{ !inputs.single-cuda-major && env.BUILD_CORE == 'true' }}
uses: pypa/cibuildwheel@4726cd35bb13f7bde50cf2761f2499ac7b3aa32c # v4.1.1
uses: pypa/cibuildwheel@e090b81e30c4d855ea63bf4b6e59204c09a101ae # v4.2.1
with:
package-dir: ./cuda_core/
output-dir: ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
env:
CIBW_BUILD: ${{ env.CIBW_BUILD }}
CIBW_BEFORE_BUILD_LINUX: 'python -m pip install --upgrade "pip>=25.3"'
CIBW_BEFORE_BUILD_WINDOWS: 'python -m pip install --upgrade "pip>=25.3" delvewheel'
# TODO: remove cpython-prerelease once 3.15 is officially supported
# Allow CPython pre-release builds (currently 3.15 / 3.15t). This is a
# no-op for stable Python versions because CIBW_BUILD still filters
# the target version.
CIBW_ENABLE: cpython-prerelease
# CIBW mounts the host filesystem under /host
CIBW_ENVIRONMENT_LINUX: >
CUDA_PATH=/host/${{ env.CUDA_PATH }}
Expand Down
4 changes: 0 additions & 4 deletions .github/workflows/test-wheel-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,6 @@ jobs:
fail-fast: false
matrix: ${{ fromJSON(needs.compute-matrix.outputs.MATRIX) }}
runs-on: "${{ matrix.FLAVOR || 'linux' }}-${{ matrix.ARCH }}-gpu-${{ matrix.GPU }}-${{ matrix.RUNNER_DRIVER }}-${{ matrix.GPU_COUNT }}"
# TODO: remove continue-on-error once 3.15 is officially supported
continue-on-error: ${{ startsWith(matrix.PY_VER, '3.15') }}
# The build stage could fail but we want the CI to keep moving.
if: ${{ github.repository_owner == 'nvidia' && !cancelled() }}
# Our self-hosted runners require a container
Expand Down Expand Up @@ -324,8 +322,6 @@ jobs:
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: ${{ matrix.PY_VER }}
# TODO: remove allow-prereleases once 3.15 is officially supported
allow-prereleases: ${{ startsWith(matrix.PY_VER, '3.15') }}
env:
# we use self-hosted runners on which setup-python behaves weirdly (Python include can't be found)...
AGENT_TOOLSDIRECTORY: "/opt/hostedtoolcache"
Expand Down
4 changes: 0 additions & 4 deletions .github/workflows/test-wheel-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,6 @@ jobs:
fail-fast: false
matrix: ${{ fromJSON(needs.compute-matrix.outputs.MATRIX) }}
if: ${{ github.repository_owner == 'nvidia' && !cancelled() }}
# TODO: remove continue-on-error once 3.15 is officially supported
continue-on-error: ${{ startsWith(matrix.PY_VER, '3.15') }}
runs-on: "windows-${{ matrix.ARCH }}-gpu-${{ matrix.GPU }}-${{ matrix.RUNNER_DRIVER }}-${{ matrix.GPU_COUNT }}"
steps:
- name: Checkout ${{ github.event.repository.name }}
Expand Down Expand Up @@ -304,8 +302,6 @@ jobs:
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: ${{ matrix.PY_VER }}
# TODO: remove allow-prereleases once 3.15 is officially supported
allow-prereleases: ${{ startsWith(matrix.PY_VER, '3.15') }}

- name: Enable Scientific Python Nightly Wheels for Python 3.15
if: ${{ (env.TEST_BINDINGS == 'true' || env.TEST_CORE == 'true' || env.TEST_PYTHON == 'true') &&
Expand Down
14 changes: 10 additions & 4 deletions ci/test-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,14 @@ linux:
- { ARCH: 'amd64', PY_VER: '3.14t', CUDA_VER: '12.9.1', LOCAL_CTK: '1', GPU: 't4', GPU_COUNT: '1', DRIVER: 'latest' }
- { ARCH: 'amd64', PY_VER: '3.14t', CUDA_VER: '13.0.2', LOCAL_CTK: '1', GPU: 'l4', GPU_COUNT: '1', DRIVER: 'latest' }
- { ARCH: 'amd64', PY_VER: '3.14t', CUDA_VER: '13.3.0', LOCAL_CTK: '1', GPU: 'l4', GPU_COUNT: '1', DRIVER: 'latest' }
# No Python 3.15 test jobs on this release branch: the build uses CUDA 13.4.2
# while these jobs test on 13.3.0, so they install published cuda-bindings
# 13.3.x, which has no cp315 wheels. 1.2.1 ships no 3.15 wheels either.
# Python 3.15 jobs test against published cuda-bindings, like every other
# job on this branch. cuda-bindings 13.4.4 is the first release with cp315
# wheels. A test CUDA version of 13.4 matches the build version, so env-vars
# would select the bindings built in this run; the ENV values below select
# the published 13.4.* release instead, with the settings that env-vars uses
# for published bindings.
- { ARCH: 'amd64', PY_VER: '3.15', CUDA_VER: '13.4.2', LOCAL_CTK: '0', GPU: 'l4', GPU_COUNT: '1', DRIVER: 'latest', ENV: { BINDINGS_SOURCE: 'published', SKIP_CUDA_BINDINGS_TEST: '1', SKIP_CYTHON_TEST: '1' } }
- { ARCH: 'amd64', PY_VER: '3.15t', CUDA_VER: '13.4.2', LOCAL_CTK: '0', GPU: 'l4', GPU_COUNT: '1', DRIVER: 'latest', ENV: { BINDINGS_SOURCE: 'published', SKIP_CUDA_BINDINGS_TEST: '1', SKIP_CYTHON_TEST: '1' } }
# linux-aarch64
- { ARCH: 'arm64', PY_VER: '3.10', CUDA_VER: '12.9.1', LOCAL_CTK: '1', GPU: 'a100', GPU_COUNT: '1', DRIVER: 'latest' }
- { ARCH: 'arm64', PY_VER: '3.10', CUDA_VER: '13.0.2', LOCAL_CTK: '0', GPU: 'l4', GPU_COUNT: '1', DRIVER: 'latest' }
Expand Down Expand Up @@ -135,7 +140,8 @@ windows:
- { ARCH: 'amd64', PY_VER: '3.14t', CUDA_VER: '12.9.1', LOCAL_CTK: '1', GPU: 'l4', GPU_COUNT: '1', DRIVER: 'latest', DRIVER_MODE: 'TCC' }
- { ARCH: 'amd64', PY_VER: '3.14t', CUDA_VER: '13.0.2', LOCAL_CTK: '0', GPU: 'a100', GPU_COUNT: '1', DRIVER: 'latest', DRIVER_MODE: 'MCDM' }
- { ARCH: 'amd64', PY_VER: '3.14t', CUDA_VER: '13.3.0', LOCAL_CTK: '0', GPU: 'a100', GPU_COUNT: '1', DRIVER: 'latest', DRIVER_MODE: 'MCDM' }
# No Python 3.15 test job here either; see the linux-64 note above.
# Python 3.15 tests against published cuda-bindings; see the linux-64 note above.
- { ARCH: 'amd64', PY_VER: '3.15', CUDA_VER: '13.4.2', LOCAL_CTK: '0', GPU: 'l4', GPU_COUNT: '1', DRIVER: 'latest', DRIVER_MODE: 'MCDM', ENV: { BINDINGS_SOURCE: 'published', SKIP_CUDA_BINDINGS_TEST: '1', SKIP_CYTHON_TEST: '1' } }
# special runners
- { ARCH: 'amd64', PY_VER: '3.14', CUDA_VER: '13.3.0', LOCAL_CTK: '1', GPU: 't4', GPU_COUNT: '2', DRIVER: 'latest', DRIVER_MODE: 'TCC' }
- { ARCH: 'amd64', PY_VER: '3.14', CUDA_VER: '13.3.0', LOCAL_CTK: '0', GPU: 'h100', GPU_COUNT: '2', DRIVER: 'latest', DRIVER_MODE: 'MCDM' }
Expand Down
9 changes: 1 addition & 8 deletions ci/tools/download-wheels
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash

# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0

Expand Down Expand Up @@ -56,13 +56,6 @@ do
continue
fi

# TODO: remove the Python 3.15 exclusion once 3.15 is officially supported
# exclude pre-release Python (3.15) wheels from releasing
if [[ "${p}" == *python315* ]]; then
echo "Skipping pre-release Python artifact: $p"
continue
fi

# If we're not downloading "all", only process matching component
if [[ "$COMPONENT" != "all" && "$p" != ${COMPONENT}* ]]; then
continue
Expand Down
2 changes: 1 addition & 1 deletion cuda_core/docs/source/install.rst
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ dependencies are as follows:
.. [#f1] Including ``cuda-python``.


``cuda.core`` supports Python 3.10 - 3.14, on Linux (x86-64, arm64) and Windows (x86-64, arm64). Windows on ARM (arm64) wheels are provided for CUDA 13 only and for Python 3.11 and newer, and require ``cuda.bindings`` 13.4.1 or newer. **Experimental** free-threaded builds for Python 3.14 are also provided.
``cuda.core`` supports Python 3.10 - 3.15, on Linux (x86-64, arm64) and Windows (x86-64, arm64). Windows on ARM (arm64) wheels are provided for CUDA 13 only and for Python 3.11 and newer, and require ``cuda.bindings`` 13.4.1 or newer. Python 3.15 requires ``cuda.bindings`` 13.4.4 or newer, the first release with Python 3.15 wheels, so Python 3.15 is supported with CUDA 13 only. **Experimental** free-threaded builds for Python 3.14 and 3.15 are also provided.


Free-threading Build Support
Expand Down
15 changes: 15 additions & 0 deletions cuda_core/docs/source/release/1.2.2-notes.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
.. SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
.. SPDX-License-Identifier: Apache-2.0

.. currentmodule:: cuda.core

``cuda.core`` 1.2.2 Release Notes
=================================

New features
------------

- Added wheels for Python 3.15, including the experimental free-threaded
build. On Python 3.15, ``cuda.core`` requires ``cuda.bindings`` 13.4.4 or
newer, the first release with Python 3.15 wheels, so Python 3.15 is
Comment on lines +13 to +14

@mdboom mdboom Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess we should make a cuda_bindings 12.9.10 release as well...?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See this preparation for the 12.9.10 release: #3112

supported with CUDA 13 only. Python 3.10 remains supported.
2 changes: 1 addition & 1 deletion cuda_core/docs/source/support.rst
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ Python Version Support
----------------------

``cuda.core`` supports all Python versions following the `CPython EOL schedule
<https://devguide.python.org/versions/>`_. As of writing, Python 3.10 – 3.14 are supported.
<https://devguide.python.org/versions/>`_. As of writing, Python 3.10 – 3.15 are supported.

When a new Python feature version is released and the oldest supported version reaches EOL,
``cuda.core`` will bump its minor version accordingly.
Expand Down
1 change: 1 addition & 0 deletions cuda_core/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,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",
"Environment :: GPU :: NVIDIA CUDA",
"Environment :: GPU :: NVIDIA CUDA :: 12",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,7 @@ class DescriptorSpec:
packaged_with="ctk",
linux_sonames=("libcupti.so.13", "libcupti.so.12"),
windows_dlls=(
"cupti64_2026.3.1.dll",
"cupti64_2026.3.0.dll",
"cupti64_2026.2.1.dll",
"cupti64_2026.2.0.dll",
Expand Down Expand Up @@ -480,7 +481,7 @@ class DescriptorSpec:
name="cusparseLt",
packaged_with="other",
linux_sonames=("libcusparseLt.so.0",),
windows_dlls=("cusparseLt.dll",),
windows_dlls=("cusparseLt_13.dll", "cusparseLt.dll"),
supported_windows_arch=("x64", "arm64"),
site_packages_linux=("nvidia/cu13/lib", "nvidia/cusparselt/lib"),
site_packages_windows=WindowsSearchDirs(
Expand Down
Loading