Skip to content

Commit d531ad1

Browse files
authored
feat: add support for Python 3.14 (#933)
Contributes to rapidsai/build-planning#205 This PR adds support for Python 3.14. ## Notes for Reviewers This is part of ongoing work to add Python 3.14 support across RAPIDS. It temporarily introduces a build/test matrix including Python 3.14, from rapidsai/shared-workflows#508. A follow-up PR will revert back to pointing at the `main` branch of `shared-workflows` once all RAPIDS repos have added Python 3.14 support. ### This will fail until all dependencies have been updated to Python 3.14 CI here is expected to fail until all of this project's upstream dependencies support Python 3.14. This can be merged whenever all CI jobs are passing. Authors: - Gil Forsyth (https://github.com/gforsyth) Approvers: - James Lamb (https://github.com/jameslamb) - Ramakrishnap (https://github.com/rgsl888prabhu) URL: #933
1 parent e98c588 commit d531ad1

22 files changed

Lines changed: 98 additions & 86 deletions

File tree

.github/workflows/build.yaml

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ concurrency:
4545
jobs:
4646
cpp-build:
4747
secrets: inherit
48-
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main
48+
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@python-3.14
4949
with:
5050
build_type: ${{ inputs.build_type || 'branch' }}
5151
branch: ${{ inputs.branch }}
@@ -55,7 +55,7 @@ jobs:
5555
python-build:
5656
needs: [cpp-build]
5757
secrets: inherit
58-
uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main
58+
uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@python-3.14
5959
with:
6060
build_type: ${{ inputs.build_type || 'branch' }}
6161
branch: ${{ inputs.branch }}
@@ -65,15 +65,15 @@ jobs:
6565
upload-conda:
6666
needs: [cpp-build, python-build]
6767
secrets: inherit
68-
uses: rapidsai/shared-workflows/.github/workflows/conda-upload-packages.yaml@main
68+
uses: rapidsai/shared-workflows/.github/workflows/conda-upload-packages.yaml@python-3.14
6969
with:
7070
build_type: ${{ inputs.build_type || 'branch' }}
7171
branch: ${{ inputs.branch }}
7272
date: ${{ inputs.date }}
7373
sha: ${{ inputs.sha }}
7474
wheel-build-cuopt-mps-parser:
7575
secrets: inherit
76-
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
76+
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14
7777
with:
7878
build_type: ${{ inputs.build_type || 'branch' }}
7979
branch: ${{ inputs.branch }}
@@ -88,7 +88,7 @@ jobs:
8888
wheel-publish-cuopt-mps-parser:
8989
needs: wheel-build-cuopt-mps-parser
9090
secrets: inherit
91-
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
91+
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14
9292
with:
9393
build_type: ${{ inputs.build_type || 'branch' }}
9494
branch: ${{ inputs.branch }}
@@ -99,7 +99,7 @@ jobs:
9999
wheel-build-libcuopt:
100100
needs: wheel-build-cuopt-mps-parser
101101
secrets: inherit
102-
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
102+
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14
103103
with:
104104
build_type: ${{ inputs.build_type || 'branch' }}
105105
branch: ${{ inputs.branch }}
@@ -112,7 +112,7 @@ jobs:
112112
wheel-publish-libcuopt:
113113
needs: wheel-build-libcuopt
114114
secrets: inherit
115-
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
115+
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14
116116
with:
117117
build_type: ${{ inputs.build_type || 'branch' }}
118118
branch: ${{ inputs.branch }}
@@ -123,7 +123,7 @@ jobs:
123123
wheel-build-cuopt:
124124
needs: [wheel-build-cuopt-mps-parser, wheel-build-libcuopt]
125125
secrets: inherit
126-
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
126+
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14
127127
with:
128128
build_type: ${{ inputs.build_type || 'branch' }}
129129
branch: ${{ inputs.branch }}
@@ -135,7 +135,7 @@ jobs:
135135
wheel-publish-cuopt:
136136
needs: wheel-build-cuopt
137137
secrets: inherit
138-
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
138+
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14
139139
with:
140140
build_type: ${{ inputs.build_type || 'branch' }}
141141
branch: ${{ inputs.branch }}
@@ -145,7 +145,7 @@ jobs:
145145
package-type: python
146146
wheel-build-cuopt-server:
147147
secrets: inherit
148-
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
148+
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14
149149
with:
150150
build_type: ${{ inputs.build_type || 'branch' }}
151151
branch: ${{ inputs.branch }}
@@ -160,7 +160,7 @@ jobs:
160160
wheel-publish-cuopt-server:
161161
needs: wheel-build-cuopt-server
162162
secrets: inherit
163-
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
163+
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14
164164
with:
165165
build_type: ${{ inputs.build_type || 'branch' }}
166166
branch: ${{ inputs.branch }}
@@ -171,7 +171,7 @@ jobs:
171171
docs-build:
172172
needs: [python-build]
173173
secrets: inherit
174-
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
174+
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@python-3.14
175175
with:
176176
build_type: ${{ inputs.build_type || 'branch' }}
177177
node_type: "gpu-l4-latest-1"
@@ -185,7 +185,7 @@ jobs:
185185
script: "ci/build_docs.sh"
186186
wheel-build-cuopt-sh-client:
187187
secrets: inherit
188-
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
188+
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14
189189
with:
190190
build_type: ${{ inputs.build_type || 'branch' }}
191191
branch: ${{ inputs.branch }}
@@ -201,7 +201,7 @@ jobs:
201201
wheel-publish-cuopt-sh-client:
202202
needs: wheel-build-cuopt-sh-client
203203
secrets: inherit
204-
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
204+
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14
205205
with:
206206
build_type: ${{ inputs.build_type || 'branch' }}
207207
branch: ${{ inputs.branch }}

.github/workflows/pr.yaml

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
- wheel-build-cuopt-sh-client
3535
- test-self-hosted-server
3636
secrets: inherit
37-
uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@main
37+
uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@python-3.14
3838
if: always()
3939
with:
4040
needs: ${{ toJSON(needs) }}
@@ -111,7 +111,7 @@ jobs:
111111
112112
changed-files:
113113
secrets: inherit
114-
uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@main
114+
uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@python-3.14
115115
with:
116116
files_yaml: |
117117
build_docs:
@@ -279,20 +279,20 @@ jobs:
279279
- '!gemini-extension.json'
280280
checks:
281281
secrets: inherit
282-
uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@main
282+
uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@python-3.14
283283
with:
284284
enable_check_generated_files: false
285285
conda-cpp-build:
286286
needs: [checks, compute-matrix-filters]
287287
secrets: inherit
288-
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main
288+
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@python-3.14
289289
with:
290290
build_type: pull-request
291291
script: ci/build_cpp.sh
292292
matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_lean_filter }}
293293
conda-cpp-tests:
294294
needs: [conda-cpp-build, changed-files, compute-matrix-filters]
295-
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@main
295+
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@python-3.14
296296
if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp
297297
with:
298298
build_type: pull-request
@@ -308,14 +308,14 @@ jobs:
308308
conda-python-build:
309309
needs: [conda-cpp-build, compute-matrix-filters]
310310
secrets: inherit
311-
uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main
311+
uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@python-3.14
312312
with:
313313
build_type: pull-request
314314
script: ci/build_python.sh
315315
matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_test_filter }}
316316
conda-python-tests:
317317
needs: [conda-python-build, changed-files, compute-matrix-filters]
318-
uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main
318+
uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@python-3.14
319319
if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda
320320
with:
321321
run_codecov: false
@@ -332,7 +332,7 @@ jobs:
332332
docs-build:
333333
needs: [conda-python-build, changed-files]
334334
secrets: inherit
335-
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
335+
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@python-3.14
336336
if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs
337337
with:
338338
build_type: pull-request
@@ -345,7 +345,7 @@ jobs:
345345
wheel-build-cuopt-mps-parser:
346346
needs: compute-matrix-filters
347347
secrets: inherit
348-
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
348+
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14
349349
with:
350350
build_type: pull-request
351351
script: ci/build_wheel_cuopt_mps_parser.sh
@@ -357,7 +357,7 @@ jobs:
357357
wheel-build-libcuopt:
358358
needs: [wheel-build-cuopt-mps-parser, compute-matrix-filters]
359359
secrets: inherit
360-
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
360+
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14
361361
with:
362362
# build for every combination of arch and CUDA version, but only for the latest Python
363363
matrix_filter: ${{ needs.compute-matrix-filters.outputs.libcuopt_filter }}
@@ -368,7 +368,7 @@ jobs:
368368
wheel-build-cuopt:
369369
needs: [wheel-build-cuopt-mps-parser, wheel-build-libcuopt, compute-matrix-filters]
370370
secrets: inherit
371-
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
371+
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14
372372
with:
373373
build_type: pull-request
374374
script: ci/build_wheel_cuopt.sh
@@ -377,7 +377,7 @@ jobs:
377377
matrix_filter: ${{ needs.compute-matrix-filters.outputs.wheel_lean_filter }}
378378
wheel-tests-cuopt:
379379
needs: [wheel-build-cuopt, wheel-build-cuopt-mps-parser, wheel-build-cuopt-sh-client, changed-files, compute-matrix-filters]
380-
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
380+
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@python-3.14
381381
if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels
382382
with:
383383
build_type: pull-request
@@ -393,7 +393,7 @@ jobs:
393393
wheel-build-cuopt-server:
394394
needs: [checks, compute-matrix-filters]
395395
secrets: inherit
396-
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
396+
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14
397397
with:
398398
build_type: pull-request
399399
script: ci/build_wheel_cuopt_server.sh
@@ -405,7 +405,7 @@ jobs:
405405
wheel-build-cuopt-sh-client:
406406
needs: compute-matrix-filters
407407
secrets: inherit
408-
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
408+
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14
409409
with:
410410
build_type: pull-request
411411
script: ci/build_wheel_cuopt_sh_client.sh
@@ -417,7 +417,7 @@ jobs:
417417
matrix_filter: ${{ needs.compute-matrix-filters.outputs.cuopt_sh_client_filter }}
418418
wheel-tests-cuopt-server:
419419
needs: [wheel-build-cuopt, wheel-build-cuopt-server, changed-files, compute-matrix-filters]
420-
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
420+
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@python-3.14
421421
if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels
422422
with:
423423
build_type: pull-request

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ CUDA/GPU Runtime:
101101

102102
Python:
103103

104-
* Python >=3.11.x, <= 3.13.x
104+
* Python >=3.11.x, <= 3.14.x
105105

106106
OS:
107107

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ This repo is also hosted as a [COIN-OR](http://github.com/coin-or/cuopt/) projec
5757

5858
### Python requirements
5959

60-
* Python >=3.11, <=3.13
60+
* Python >=3.11, <=3.14
6161

6262
### OS requirements
6363

@@ -130,13 +130,13 @@ Users can pull the cuOpt container from the NVIDIA container registry.
130130

131131
```bash
132132
# For CUDA 12.x
133-
docker pull nvidia/cuopt:latest-cuda12.9-py3.13
133+
docker pull nvidia/cuopt:latest-cuda12.9-py3.14
134134

135135
# For CUDA 13.x
136-
docker pull nvidia/cuopt:latest-cuda13.0-py3.13
136+
docker pull nvidia/cuopt:latest-cuda13.0-py3.14
137137
```
138138

139-
Note: The ``latest`` tag is the latest stable release of cuOpt. If you want to use a specific version, you can use the ``<version>-cuda12.9-py3.13`` or ``<version>-cuda13.0-py3.13`` tag. For example, to use cuOpt 25.10.0, you can use the ``25.10.0-cuda12.9-py3.13`` or ``25.10.0-cuda13.0-py3.13`` tag. Please refer to `cuOpt dockerhub page <https://hub.docker.com/r/nvidia/cuopt/tags>`_ for the list of available tags.
139+
Note: The ``latest`` tag is the latest stable release of cuOpt. If you want to use a specific version, you can use the ``<version>-cuda12.9-py3.14`` or ``<version>-cuda13.0-py3.14`` tag. For example, to use cuOpt 25.10.0, you can use the ``25.10.0-cuda12.9-py3.13`` or ``25.10.0-cuda13.0-py3.13`` tag. Please refer to `cuOpt dockerhub page <https://hub.docker.com/r/nvidia/cuopt/tags>`_ for the list of available tags.
140140

141141
More information about the cuOpt container can be found [here](https://docs.nvidia.com/cuopt/user-guide/latest/cuopt-server/quick-start.html#container-from-docker-hub).
142142

conda/environments/all_cuda-129_arch-aarch64.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ dependencies:
3636
- librmm==26.4.*,>=0.0.0a0
3737
- make
3838
- msgpack-numpy==0.4.8
39-
- msgpack-python==1.1.0
39+
- msgpack-python==1.1.2
4040
- myst-nb
4141
- myst-parser
4242
- ninja
4343
- notebook
44-
- numba-cuda>=0.22.1,<0.23.0
45-
- numba>=0.60.0
44+
- numba-cuda>=0.22.1
45+
- numba>=0.60.0,<0.65.0
4646
- numpy>=1.23.5,<3.0
4747
- numpydoc
4848
- pandas>=2.0
@@ -54,7 +54,7 @@ dependencies:
5454
- pyrsistent
5555
- pytest-cov
5656
- pytest<9.0
57-
- python>=3.11,<3.14
57+
- python>=3.11,<3.15
5858
- pyyaml>=6.0.0
5959
- rapids-build-backend>=0.4.0,<0.5.0
6060
- rapids-logger==0.2.*,>=0.0.0a0

conda/environments/all_cuda-129_arch-x86_64.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ dependencies:
3636
- librmm==26.4.*,>=0.0.0a0
3737
- make
3838
- msgpack-numpy==0.4.8
39-
- msgpack-python==1.1.0
39+
- msgpack-python==1.1.2
4040
- myst-nb
4141
- myst-parser
4242
- ninja
4343
- notebook
44-
- numba-cuda>=0.22.1,<0.23.0
45-
- numba>=0.60.0
44+
- numba-cuda>=0.22.1
45+
- numba>=0.60.0,<0.65.0
4646
- numpy>=1.23.5,<3.0
4747
- numpydoc
4848
- pandas>=2.0
@@ -54,7 +54,7 @@ dependencies:
5454
- pyrsistent
5555
- pytest-cov
5656
- pytest<9.0
57-
- python>=3.11,<3.14
57+
- python>=3.11,<3.15
5858
- pyyaml>=6.0.0
5959
- rapids-build-backend>=0.4.0,<0.5.0
6060
- rapids-logger==0.2.*,>=0.0.0a0

conda/environments/all_cuda-131_arch-aarch64.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ dependencies:
3636
- librmm==26.4.*,>=0.0.0a0
3737
- make
3838
- msgpack-numpy==0.4.8
39-
- msgpack-python==1.1.0
39+
- msgpack-python==1.1.2
4040
- myst-nb
4141
- myst-parser
4242
- ninja
4343
- notebook
44-
- numba-cuda>=0.22.1,<0.23.0
45-
- numba>=0.60.0
44+
- numba-cuda>=0.22.1
45+
- numba>=0.60.0,<0.65.0
4646
- numpy>=1.23.5,<3.0
4747
- numpydoc
4848
- pandas>=2.0
@@ -54,7 +54,7 @@ dependencies:
5454
- pyrsistent
5555
- pytest-cov
5656
- pytest<9.0
57-
- python>=3.11,<3.14
57+
- python>=3.11,<3.15
5858
- pyyaml>=6.0.0
5959
- rapids-build-backend>=0.4.0,<0.5.0
6060
- rapids-logger==0.2.*,>=0.0.0a0

conda/environments/all_cuda-131_arch-x86_64.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ dependencies:
3636
- librmm==26.4.*,>=0.0.0a0
3737
- make
3838
- msgpack-numpy==0.4.8
39-
- msgpack-python==1.1.0
39+
- msgpack-python==1.1.2
4040
- myst-nb
4141
- myst-parser
4242
- ninja
4343
- notebook
44-
- numba-cuda>=0.22.1,<0.23.0
45-
- numba>=0.60.0
44+
- numba-cuda>=0.22.1
45+
- numba>=0.60.0,<0.65.0
4646
- numpy>=1.23.5,<3.0
4747
- numpydoc
4848
- pandas>=2.0
@@ -54,7 +54,7 @@ dependencies:
5454
- pyrsistent
5555
- pytest-cov
5656
- pytest<9.0
57-
- python>=3.11,<3.14
57+
- python>=3.11,<3.15
5858
- pyyaml>=6.0.0
5959
- rapids-build-backend>=0.4.0,<0.5.0
6060
- rapids-logger==0.2.*,>=0.0.0a0

0 commit comments

Comments
 (0)