Skip to content

Commit 249d73c

Browse files
authored
Merge branch 'main' into 315-support
2 parents 3c7bf6a + c7e6f09 commit 249d73c

857 files changed

Lines changed: 142308 additions & 69008 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
---
2+
name: create-cuda-python-pull-request
3+
description: Create a CUDA Python pull request from an approved personal or organization-owned fork, including the GitHub CLI GraphQL fallback for renamed organization-owned forks. Use when the user directly requests creating or opening a CUDA Python pull request. Do not use for local implementation, commits, pushes, branch preparation, PR advice, or general GitHub work without that direct request.
4+
---
5+
6+
# Create CUDA Python Pull Request
7+
8+
This skill supplies technical procedure after the user directly asks to create
9+
a pull request. It does not define when a pull request should be created or
10+
authorize one without that direct request. Do not infer the request from
11+
completed work, a local commit, a push request, or the existence of a suitable
12+
fork.
13+
14+
## Inspect the topology and proposed change
15+
16+
1. Run `git status --short --branch`, inspect the branch diff, and confirm the
17+
intended base branch.
18+
2. Run `git remote -v` and resolve the complete `OWNER/REPOSITORY` names of the
19+
base repository and intended fork. Do not rely on remote names alone.
20+
3. Confirm through GitHub that the push target is a fork of the base repository
21+
and is not the base repository itself.
22+
4. Confirm that the intended push target complies with the repository's
23+
remote-write policy and the user's request.
24+
5. Inspect the repository's pull-request template, available labels, and open
25+
milestones. Do not guess required metadata; ask the user when it is unclear.
26+
27+
## Validate and push
28+
29+
Run the checks appropriate to the change and review the final diff. Push the
30+
current branch to the approved fork using the explicit remote and branch:
31+
32+
```bash
33+
git push <fork-remote> <branch>
34+
```
35+
36+
## Create the pull request
37+
38+
Prepare a complete body from the repository's pull-request template. Every
39+
pull request must have at least one assignee, one label, and a milestone; CI
40+
enforces this through `pr-metadata-check`.
41+
42+
Use `gh pr create` when it can identify the fork unambiguously. Select the base
43+
repository and branch explicitly and supply the required metadata:
44+
45+
```bash
46+
gh pr create \
47+
--repo <base-owner>/<base-repository> \
48+
--base <base-branch> \
49+
--head <fork-owner>:<head-branch> \
50+
--title "<title>" \
51+
--body-file <path-to-pr-body> \
52+
--assignee <assignee> \
53+
--label <label> \
54+
--milestone <milestone>
55+
```
56+
57+
Add `--draft` when the user requests a draft pull request.
58+
59+
## Handle renamed organization-owned forks
60+
61+
[GitHub CLI issue cli/cli#10093](https://github.com/cli/cli/issues/10093)
62+
tracks `gh pr create` support for cross-repository pull requests within one
63+
organization. Check whether the issue has been resolved before using the
64+
workaround.
65+
66+
If `gh pr create` cannot identify an organization-owned fork whose repository
67+
name differs from the base repository, create the pull request with GitHub's
68+
GraphQL API and pass `headRepositoryId` explicitly.
69+
70+
Resolve the repository node IDs:
71+
72+
```bash
73+
BASE_REPO="<base-owner>/<base-repository>"
74+
HEAD_REPO="<fork-owner>/<fork-repository>"
75+
BASE_REPO_ID="$(gh api "repos/${BASE_REPO}" --jq '.node_id')"
76+
HEAD_REPO_ID="$(gh api "repos/${HEAD_REPO}" --jq '.node_id')"
77+
```
78+
79+
Create the pull request. Set `draft` to match the user's request.
80+
81+
```bash
82+
gh api graphql \
83+
-f repositoryId="${BASE_REPO_ID}" \
84+
-f headRepositoryId="${HEAD_REPO_ID}" \
85+
-f baseRefName="<base-branch>" \
86+
-f headRefName="<head-branch>" \
87+
-f title="<title>" \
88+
-F body="@<path-to-pr-body>" \
89+
-F draft=false \
90+
-f query='
91+
mutation CreatePullRequest(
92+
$repositoryId: ID!
93+
$headRepositoryId: ID!
94+
$baseRefName: String!
95+
$headRefName: String!
96+
$title: String!
97+
$body: String!
98+
$draft: Boolean!
99+
) {
100+
createPullRequest(input: {
101+
repositoryId: $repositoryId
102+
headRepositoryId: $headRepositoryId
103+
baseRefName: $baseRefName
104+
headRefName: $headRefName
105+
title: $title
106+
body: $body
107+
draft: $draft
108+
}) {
109+
pullRequest { number url }
110+
}
111+
}' \
112+
--jq '.data.createPullRequest.pullRequest'
113+
```
114+
115+
The GraphQL API does not populate the pull-request template automatically.
116+
After creation, add the required metadata to the returned pull-request number:
117+
118+
```bash
119+
gh pr edit <pr-number> \
120+
--repo "${BASE_REPO}" \
121+
--add-assignee "<assignee>" \
122+
--add-label "<label>" \
123+
--milestone "<milestone>"
124+
```
125+
126+
Verify the resulting URL, base branch, head repository and branch, draft state,
127+
body, assignee, label, and milestone before reporting completion.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
interface:
6+
display_name: "Create CUDA Python PR"
7+
short_description: "Open an explicitly requested CUDA Python pull request"
8+
default_prompt: "Use $create-cuda-python-pull-request to create the CUDA Python pull request I explicitly requested."
9+
policy:
10+
allow_implicit_invocation: true

‎.coderabbit.yaml‎

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
language: en-US
5+
tone_instructions: |
6+
Be direct, technical, brief. No praise, emojis, headings, or collapsible menus.
7+
Start each comment with one prefix:
8+
- suggestion: optional improvement;
9+
- important: must-fix/high-impact risk;
10+
- critical: blocking correctness/security/data-loss.
11+
12+
reviews:
13+
profile: chill
14+
15+
high_level_summary: true
16+
high_level_summary_in_walkthrough: true
17+
poem: false
18+
in_progress_fortune: false
19+
sequence_diagrams: false
20+
estimate_code_review_effort: false
21+
collapse_walkthrough: true
22+
23+
# Reduce noisy status/details sections.
24+
request_changes_workflow: false
25+
review_status: false
26+
review_details: false
27+
enable_prompt_for_ai_agents: false
28+
29+
auto_review:
30+
enabled: true
31+
drafts: false
32+
base_branches:
33+
- "^main$"
34+
ignore_usernames:
35+
- "copy-pr-bot[bot]"
36+
- "dependabot[bot]"
37+
- "github-actions[bot]"
38+
39+
tools:
40+
gitleaks:
41+
enabled: false
42+
markdownlint:
43+
enabled: false
44+
shellcheck:
45+
enabled: false
46+
47+
# Keep Autofix available, but disable the other finishing touch actions.
48+
finishing_touches:
49+
docstrings:
50+
enabled: false
51+
unit_tests:
52+
enabled: false
53+
simplify:
54+
enabled: false
55+
56+
pre_merge_checks:
57+
docstrings:
58+
mode: "off"
59+
title:
60+
mode: "off"
61+
description:
62+
mode: "off"
63+
issue_assessment:
64+
mode: "off"
65+
custom_checks: []
66+
67+
path_instructions:
68+
- path: "cuda_bindings/**/*"
69+
instructions: |
70+
Focus on Cython binding correctness, API and ABI stability, error-code propagation,
71+
resource ownership and reference counting, GIL handling, cross-platform behavior.
72+
Avoid style-only comments already covered by pre-commit.
73+
74+
- path: "cuda_core/**/*"
75+
instructions: |
76+
Focus on Python API stability, stream ordering, CUDA resource lifetime and ownership, CUDA Array Interface
77+
compatibility, host/device memory semantics, error translation, and free-threading correctness. Check that
78+
public behavior changes have corresponding tests, documentation and release notes. Avoid style-only comments
79+
already covered by pre-commit.
80+
81+
- path: "cuda_pathfinder/**/*"
82+
instructions: |
83+
Focus on deterministic path resolution across Linux and Windows, wheel and conda layouts, dynamic-library
84+
loading and cache semantics, and explicit behavior when the CUDA Toolkit is missing or partially installed.
85+
Check that errors preserve the package's public exception contracts.
86+
87+
- path: "cuda_python/**/*"
88+
instructions: |
89+
Focus on metapackage correctness, dependency and version pins, wheel and sdist contents, and documentation
90+
aggregation. Keep runtime functionality in the component packages and verify that packaging changes preserve
91+
compatibility among cuda-python, cuda-bindings, cuda-core, and cuda-pathfinder.
92+
93+
- path: "benchmarks/**/*"
94+
instructions: |
95+
Check that benchmark changes measure meaningful workloads, keep comparison axes and benchmark identifiers
96+
comparable, avoid excessive runtime, and preserve useful comparison data.
97+
98+
- path: "ci/**/*"
99+
instructions: |
100+
For CI and build scripts, focus on matrix correctness, the GPU-versus-CPU job split, targeted build and test
101+
behavior, cache and artifact handling, environment setup, clear failure modes, and avoiding unnecessary
102+
expensive jobs.
103+
104+
- path: ".github/**/*"
105+
instructions: |
106+
For GitHub workflows and repository automation, focus on least-privilege permissions, event triggers, matrix
107+
generation, status and check behavior, security boundaries, and avoiding unnecessary CI fanout.
108+
109+
- path: "**/*.pyx"
110+
instructions: |
111+
Focus on typed-memoryview safety, GIL and nogil correctness, exception specifications, fused-type behavior,
112+
Python reference ownership, and consistency with related declarations and generated type stubs.
113+
114+
- path: "**/*.pxd"
115+
instructions: |
116+
Focus on declaration and implementation consistency, typed-memoryview safety, GIL and nogil correctness,
117+
exception specifications, fused-type behavior, and API or ABI impact on Cython consumers.
118+
119+
knowledge_base:
120+
opt_out: false
121+
code_guidelines:
122+
filePatterns:
123+
- "AGENTS.md"
124+
- "CONTRIBUTING.md"
125+
- "cuda_bindings/AGENTS.md"
126+
- "cuda_core/AGENTS.md"
127+
- "cuda_core/tests/AGENTS.md"
128+
- "cuda_pathfinder/AGENTS.md"
129+
- "cuda_python/AGENTS.md"
130+
- "benchmarks/cuda_bindings/AGENTS.md"
131+
- "benchmarks/cuda_core/AGENTS.md"
132+
- "cuda_bindings/README.md"
133+
- "cuda_core/README.md"
134+
- "cuda_pathfinder/DESCRIPTION.rst"
135+
- "cuda_python/DESCRIPTION.rst"
136+
- "cuda_bindings/docs/source/contribute.rst"
137+
- "cuda_core/docs/source/contribute.rst"
138+
- "cuda_core/docs/source/concurrency.rst"
139+
- "cuda_core/docs/source/error_handling.rst"
140+
- "cuda_pathfinder/docs/source/contribute.rst"
141+
- "cuda_bindings/docs/source/release.rst"
142+
- "cuda_core/docs/source/release.rst"
143+
- "cuda_pathfinder/docs/source/release.rst"
144+
- "cuda_python/docs/source/release.rst"

‎.coveragerc‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ plugins = Cython.Coverage
1111
core = ctrace
1212
branch = False
1313
relative_files = True
14-
# Omits specific definition files that causes plugin errors
14+
# Cython.Coverage cannot build a FileReporter for .pxd/.pxi (not standalone
15+
# translation units). Pattern in [run], not an enumeration: a new file of
16+
# either kind otherwise breaks `coverage html`. Must be [run], not [report].
1517
omit =
16-
*/windll.pxd
17-
*/_lib/windll.pxd
18-
*/_lib/utils.pxd
18+
*/*.pxd
19+
*/*.pxi
1920

2021
[report]
2122
show_missing = true

‎.github/ISSUE_TEMPLATE/release_checklist.yml‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@ body:
2020
- label: File an internal nvbug to communicate test plan & release schedule with QA
2121
- label: Ensure all pending PRs are reviewed, tested, and merged
2222
- label: Check (or update if needed) the dependency requirements
23+
- label: Sweep deprecations whose stated removal version has arrived (`grep -rn 'deprecated::' cuda_core/cuda`) and remove any that are due
2324
- label: "Finalize the doc update, including release notes (\"Note: Touching docstrings/type annotations in code is OK during code freeze, apply your best judgement!\")"
2425
- label: Update the docs for the new version
2526
- label: Create a public release tag
26-
- label: Wait for the tag-triggered CI run to complete, and use that run ID for release workflows
27-
- label: If any code change happens, rebuild the wheels from the new tag
28-
- label: Upload wheels to PyPI
29-
- label: Update the conda recipe & release conda packages
27+
- label: Wait for the tag-triggered CI run to complete, and use that run ID for release workflows (this will upload the release to PyPI)
28+
- label: Publish the release at https://github.com/NVIDIA/cuda-python/releases (this will trigger the conda package update)
29+
- label: Approve the conda-package update PR
3030
- label: Post-release QA
3131
- label: Finalize the announcement update
32-
- label: Send out the announcement internally
32+
- label: Send out the announcement internally (on `#swcuda-python`)
3333
- label: Send out the announcement externally (GitHub Release -> Announcement)
34+
- label: For a `cuda-bindings` release, make sure MAJOR and MAJOR-1 releases are made, as well as releases of `cuda-python` for MAJOR and MAJOR-1

‎.github/RELEASE-core.md‎

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,35 @@ platforms as appropriate for each release.
6262
## Check (or update if needed) the dependency requirements
6363

6464
Review `cuda_core/pyproject.toml` and verify that all dependency
65-
requirements are current.
65+
requirements are current. The `cu12`/`cu13` extras declare the
66+
`cuda-bindings` floors; see "Bumping the cuda-bindings floor" in
67+
`cuda_core/AGENTS.md`.
68+
69+
Update the `cuda-core` pin in `cuda_python/setup.py` to the new minor
70+
series (`cuda-core~=X.Y.0`), and plan a `cuda-python` release right after
71+
this one. Until that release, `pip install cuda-python` resolves to the
72+
previous `cuda-core`.
73+
74+
---
75+
76+
## Sweep deprecations whose removal version has arrived
77+
78+
Deprecated APIs are marked in the source with a Sphinx `deprecated`
79+
directive naming the version that introduced the deprecation, and their
80+
docstrings state the version in which they will be removed. Find them all
81+
with:
82+
83+
```console
84+
$ grep -rn 'deprecated::' cuda_core/cuda
85+
```
86+
87+
For each hit, check the stated removal version against the version being
88+
released. If the release has reached or passed it, remove the API, its
89+
runtime `DeprecationWarning`, and any tests asserting that warning.
90+
91+
This must happen *before* the release tag is cut. Removals are breaking
92+
changes, so they are only permitted at a major-version boundary per the
93+
[support policy](https://nvidia.github.io/cuda-python/cuda-core/latest/support.html).
6694

6795
---
6896

‎.github/actionlint.yaml‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,16 @@ self-hosted-runner:
88
labels:
99
- linux-amd64-cpu8
1010
- linux-amd64-gpu-l4-latest-1
11+
12+
# GitHub supports queued concurrency runs, but the latest actionlint release
13+
# does not yet recognize the concurrency.queue key.
14+
paths:
15+
".github/workflows/build-docs.yml":
16+
ignore:
17+
- 'unexpected key "queue" for "concurrency" section'
18+
".github/workflows/cleanup-pr-previews.yml":
19+
ignore:
20+
- 'unexpected key "queue" for "concurrency" section'
21+
".github/workflows/ci-workflow-health.yml":
22+
ignore:
23+
- 'unexpected key "queue" for "concurrency" section'

0 commit comments

Comments
 (0)