diff --git a/.github/workflows/build-wheel.yml b/.github/workflows/build-wheel.yml index ffcab41734d..9b702a8c17e 100644 --- a/.github/workflows/build-wheel.yml +++ b/.github/workflows/build-wheel.yml @@ -34,6 +34,8 @@ jobs: - "3.13" - "3.14" - "3.14t" + - "3.15" + - "3.15t" name: py${{ matrix.python-version }} runs-on: ${{ (inputs.host-platform == 'linux-64' && 'linux-amd64-cpu8') || (inputs.host-platform == 'linux-aarch64' && 'linux-arm64-cpu8') || @@ -162,12 +164,20 @@ jobs: cuda-version: ${{ inputs.cuda-version }} - name: Build cuda.bindings wheel - uses: pypa/cibuildwheel@8d2b08b68458a16aeb24b64e68a09ab1c8e82084 # v3.4.1 + uses: pypa/cibuildwheel@54327ab9d35de03b359ac25c97de9417d94639c0 # v4.0.0rc1 with: package-dir: ./cuda_bindings/ output-dir: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }} env: CIBW_BUILD: ${{ env.CIBW_BUILD }} + # 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 + # v4.0 made delvewheel the default Windows repair command. We rely + # on cuda.pathfinder for runtime DLL discovery, so preserve the + # previous behaviour (no automatic DLL bundling) for now. + CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: "" # CIBW mounts the host filesystem under /host CIBW_ENVIRONMENT_LINUX: > CUDA_PATH=/host/${{ env.CUDA_PATH }} @@ -226,12 +236,20 @@ jobs: if-no-files-found: error - name: Build cuda.core wheel - uses: pypa/cibuildwheel@8d2b08b68458a16aeb24b64e68a09ab1c8e82084 # v3.4.1 + uses: pypa/cibuildwheel@54327ab9d35de03b359ac25c97de9417d94639c0 # v4.0.0rc1 with: package-dir: ./cuda_core/ output-dir: ${{ env.CUDA_CORE_ARTIFACTS_DIR }} env: CIBW_BUILD: ${{ env.CIBW_BUILD }} + # 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 + # v4.0 made delvewheel the default Windows repair command. We rely + # on cuda.pathfinder for runtime DLL discovery, so preserve the + # previous behaviour (no automatic DLL bundling) for now. + CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: "" # CIBW mounts the host filesystem under /host CIBW_ENVIRONMENT_LINUX: > CUDA_PATH=/host/${{ env.CUDA_PATH }} @@ -327,6 +345,7 @@ jobs: uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: ${{ matrix.python-version }} + allow-prereleases: true - name: verify free-threaded build if: endsWith(matrix.python-version, 't') @@ -411,12 +430,20 @@ jobs: rmdir $OLD_BASENAME - name: Build cuda.core wheel - uses: pypa/cibuildwheel@8d2b08b68458a16aeb24b64e68a09ab1c8e82084 # v3.4.1 + uses: pypa/cibuildwheel@54327ab9d35de03b359ac25c97de9417d94639c0 # v4.0.0rc1 with: package-dir: ./cuda_core/ output-dir: ${{ env.CUDA_CORE_ARTIFACTS_DIR }} env: CIBW_BUILD: ${{ env.CIBW_BUILD }} + # 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 + # v4.0 made delvewheel the default Windows repair command. We rely + # on cuda.pathfinder for runtime DLL discovery, so preserve the + # previous behaviour (no automatic DLL bundling) for now. + CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: "" # CIBW mounts the host filesystem under /host CIBW_ENVIRONMENT_LINUX: > CUDA_PATH=/host/${{ env.CUDA_PATH }} diff --git a/.github/workflows/test-wheel-linux.yml b/.github/workflows/test-wheel-linux.yml index 725eda307f9..c442b3703e1 100644 --- a/.github/workflows/test-wheel-linux.yml +++ b/.github/workflows/test-wheel-linux.yml @@ -257,6 +257,7 @@ jobs: uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: ${{ matrix.PY_VER }} + allow-prereleases: true env: # we use self-hosted runners on which setup-python behaves weirdly (Python include can't be found)... AGENT_TOOLSDIRECTORY: "/opt/hostedtoolcache" diff --git a/ci/test-matrix.yml b/ci/test-matrix.yml index 35f02847ed7..896e9140dd7 100644 --- a/ci/test-matrix.yml +++ b/ci/test-matrix.yml @@ -36,6 +36,8 @@ 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.2.1', LOCAL_CTK: '1', GPU: 'l4', GPU_COUNT: '1', DRIVER: 'latest' } + - { ARCH: 'amd64', PY_VER: '3.15', CUDA_VER: '13.2.1', LOCAL_CTK: '0', GPU: 'l4', GPU_COUNT: '1', DRIVER: 'latest' } + - { ARCH: 'amd64', PY_VER: '3.15t', CUDA_VER: '13.2.1', LOCAL_CTK: '0', GPU: 'l4', GPU_COUNT: '1', DRIVER: 'latest' } # 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' } diff --git a/cuda_bindings/pyproject.toml b/cuda_bindings/pyproject.toml index bac72f5b9be..539e7f2fac0 100644 --- a/cuda_bindings/pyproject.toml +++ b/cuda_bindings/pyproject.toml @@ -44,7 +44,6 @@ all = [ test = [ "cython>=3.2,<3.3", "setuptools>=77.0.0", - "matplotlib>=3.5.0", # Required by isoFDModelling_test.py "numpy>=1.21.1", "pytest>=6.2.4", "pytest-benchmark>=3.4.1", diff --git a/cuda_core/pyproject.toml b/cuda_core/pyproject.toml index d5a4b5fd29c..c1510f8d06b 100644 --- a/cuda_core/pyproject.toml +++ b/cuda_core/pyproject.toml @@ -58,7 +58,7 @@ cu12 = ["cuda-bindings[all]==12.*"] cu13 = ["cuda-bindings[all]==13.*"] [dependency-groups] -test = ["cython>=3.2,<3.3", "setuptools", "pytest>=6.2.4", "pytest-benchmark", "pytest-randomly", "pytest-repeat", "pytest-rerunfailures", "cloudpickle", "psutil", "cffi"] +test = ["cython>=3.2,<3.3", "setuptools", "pytest>=6.2.4", "pytest-benchmark", "pytest-randomly", "pytest-repeat", "pytest-rerunfailures", "cloudpickle", "psutil"] ml-dtypes = ["ml-dtypes>=0.5.4,<0.6.0"] test-cu12 = [ {include-group = "ml-dtypes" }, {include-group = "test" }, "cupy-cuda12x; python_version < '3.14'", "cuda-toolkit[cudart]==12.*"] # runtime headers needed by CuPy test-cu13 = [ {include-group = "ml-dtypes" }, {include-group = "test" }, "cupy-cuda13x; python_version < '3.14'", "cuda-toolkit[cudart]==13.*"] # runtime headers needed by CuPy