From 5d3f174b25d58c6d44e3cdb8ac44d338fda1ecda Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Wed, 14 Oct 2026 23:15:00 -0700 Subject: [PATCH 1/5] ci: validate repository links before merge --- .github/actions/check-doc-links/action.yml | 7 ++ .pre-commit-config.yaml | 1 + ci/README.md | 18 ++++ ci/tools/preprocess_repo_links.py | 33 +++++++ ci/tools/tests/test_preprocess_repo_links.py | 93 ++++++++++++++++++ ci/tools/tests/test_repo_link_check_action.py | 96 +++++++++++++++++++ 6 files changed, 248 insertions(+) create mode 100755 ci/tools/preprocess_repo_links.py create mode 100644 ci/tools/tests/test_preprocess_repo_links.py create mode 100644 ci/tools/tests/test_repo_link_check_action.py diff --git a/.github/actions/check-doc-links/action.yml b/.github/actions/check-doc-links/action.yml index 7bde3fbdd48..3a628835b5f 100644 --- a/.github/actions/check-doc-links/action.yml +++ b/.github/actions/check-doc-links/action.yml @@ -51,6 +51,13 @@ runs: echo "prefix=${prefix}" >> "${GITHUB_OUTPUT}" echo "key=${prefix}${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}" >> "${GITHUB_OUTPUT}" echo "version=${LYCHEE_VERSION}" >> "${GITHUB_OUTPUT}" + # Validate main-branch source links against the actual checkout. Keep + # GitHub's file/directory views so rendered checks retain UI fragments. + checked_commit="$(git rev-parse HEAD)" + for view in blob tree; do + LYCHEE_ARGS+=" --remap \"^https://github[.]com/NVIDIA/cuda-python/${view}/main/ ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/${view}/${checked_commit}/\"" + done + echo "Checking repository source links at ${checked_commit}" echo "args=${LYCHEE_ARGS}" >> "${GITHUB_OUTPUT}" - name: Restore successful checks from the nightly baseline diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e141937748a..f82a762a9ab 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -115,6 +115,7 @@ repos: - id: lychee args: - LYCHEE_VERSION=0.24.2 # Must match the pinned rev above + - --preprocess=./ci/tools/preprocess_repo_links.py - --cache - --max-concurrency=4 - --max-retries=3 diff --git a/ci/README.md b/ci/README.md index be94dfb035d..ff2bb20ff80 100644 --- a/ci/README.md +++ b/ci/README.md @@ -24,6 +24,24 @@ The pinned checkout action's [`README`](https://github.com/actions/checkout/blob/3d3c42e5aac5ba805825da76410c181273ba90b1/README.md#fetch-all-history-for-all-tags-and-branches) documents `fetch-depth: 0` for fetching all history, branches, and tags. +## Repository Links Before Merge + +Keep links to the latest repository sources on `main`, even when their targets +are added or moved by the same pull request. Lychee remaps canonical +`https://github.com/NVIDIA/cuda-python/blob/main/` and `tree/main/` links +for validation only; source files and published documentation keep their URLs. +Links to tags, commit SHAs, other branches, and other repositories are checked +as written. + +CI remaps these links to the CI repository at the actual checked-out commit +using `--remap`, retaining GitHub's file/directory views and fragment behavior. +The initial check and all retries use the same remaps. Missing targets in that +commit still fail. + +Local pre-commit uses `ci/tools/preprocess_repo_links.py` through `--preprocess` +to check these paths in the working tree, including uncommitted and unpushed +targets. Local checks retain their existing policy of not checking fragments. + ## Temporary Pixi Lockfile Maintenance Pause Pixi lockfile freshness enforcement and automated refreshes are temporarily diff --git a/ci/tools/preprocess_repo_links.py b/ci/tools/preprocess_repo_links.py new file mode 100755 index 00000000000..6362ac2f9f9 --- /dev/null +++ b/ci/tools/preprocess_repo_links.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +"""Check this repository's main-branch source links against the local checkout.""" + +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] + + +def preprocess_links(content: str, root: Path = ROOT) -> str: + """Keep published URLs in source files while checking paths before merge.""" + local_prefix = root.resolve().as_uri() + "/" + for view in ("blob", "tree"): + content = content.replace(f"https://github.com/NVIDIA/cuda-python/{view}/main/", local_prefix) + return content + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("input", type=Path) + args = parser.parse_args() + # Lychee consumes stdout without changing the input file or its relative-link base. + sys.stdout.write(preprocess_links(args.input.read_text(encoding="utf-8"))) + + +if __name__ == "__main__": + main() diff --git a/ci/tools/tests/test_preprocess_repo_links.py b/ci/tools/tests/test_preprocess_repo_links.py new file mode 100644 index 00000000000..d3dff949f7d --- /dev/null +++ b/ci/tools/tests/test_preprocess_repo_links.py @@ -0,0 +1,93 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +from __future__ import annotations + +import shutil +import subprocess +import sys +from pathlib import Path + +import pytest + +sys.path.insert(0, str(Path(__file__).parent.parent)) +from preprocess_repo_links import preprocess_links + +SCRIPT = Path(__file__).resolve().parents[1] / "preprocess_repo_links.py" + + +@pytest.mark.parametrize( + "template", + [ + "[Directory]({directory})\n[File]({file})\n[Relative](guide.rst)\n", + "`Directory <{directory}>`_\n`File <{file}>`_\n`Relative `_\n", + 'DirectoryFileRelative\n', + ], +) +@pytest.mark.agent_authored(model="gpt-6.1-sol") +def test_preprocess_links_preserves_format_relative_links_and_url_encoding(tmp_path, template): + root = tmp_path / "checkout space$#" + content = template.format( + directory="https://github.com/NVIDIA/cuda-python/tree/main/new_directory/", + file="https://github.com/NVIDIA/cuda-python/blob/main/docs/a%20guide.md?plain=1#some-heading", + ) + + assert preprocess_links(content, root) == template.format( + directory=f"{root.as_uri()}/new_directory/", + file=f"{root.as_uri()}/docs/a%20guide.md?plain=1#some-heading", + ) + + +@pytest.mark.parametrize( + "url", + [ + "https://github.com/NVIDIA/cuda-python/blob/12.9.x/README.md", + "https://github.com/NVIDIA/cuda-python/tree/v13.0.0/cuda_bindings", + "https://github.com/NVIDIA/cuda-python/blob/0123456789abcdef/README.md", + "https://github.com/NVIDIA/cuda-python/blob/mainly/README.md", + "https://github.com/NVIDIA/cuda-python/tree/main", + "https://github.com/rwgk/cuda-python/blob/main/README.md", + "https://github.com/NVIDIA/other-repository/tree/main/docs", + "http://github.com/NVIDIA/cuda-python/blob/main/README.md", + "https://raw.githubusercontent.com/NVIDIA/cuda-python/main/README.md", + "https://nvidia.github.io/cuda-python/latest/", + ], +) +@pytest.mark.agent_authored(model="gpt-6.1-sol") +def test_preprocess_links_leaves_other_targets_unchanged(tmp_path, url): + assert preprocess_links(f"[Link]({url})\n", tmp_path) == f"[Link]({url})\n" + + +@pytest.mark.agent_authored(model="gpt-6.1-sol") +def test_cli_uses_its_checkout_root_and_leaves_input_unchanged(tmp_path): + checkout = tmp_path / "checkout space$#" + script = checkout / "ci" / "tools" / SCRIPT.name + script.parent.mkdir(parents=True) + shutil.copyfile(SCRIPT, script) + source = tmp_path / "source guide.rst" + content = b"`Repository `_\r\n" + source.write_bytes(content) + + result = subprocess.run( # noqa: S603 + [sys.executable, str(script), str(source)], + cwd=tmp_path, + check=True, + capture_output=True, + text=True, + ) + + assert result.stdout == f"`Repository <{checkout.as_uri()}/new_directory>`_\n" + assert result.stderr == "" + assert source.read_bytes() == content + + +@pytest.mark.agent_authored(model="gpt-6.1-sol") +def test_cli_missing_input_fails_without_success_output(tmp_path): + source = tmp_path / "missing.md" + + result = subprocess.run([sys.executable, str(SCRIPT), str(source)], capture_output=True, text=True) # noqa: S603 + + assert result.returncode != 0 + assert result.stdout == "" + assert "FileNotFoundError" in result.stderr + assert not source.exists() diff --git a/ci/tools/tests/test_repo_link_check_action.py b/ci/tools/tests/test_repo_link_check_action.py new file mode 100644 index 00000000000..37f5b1be55a --- /dev/null +++ b/ci/tools/tests/test_repo_link_check_action.py @@ -0,0 +1,96 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +from __future__ import annotations + +import os +import re +import shlex +import shutil +import subprocess +import sys +from pathlib import Path + +import pytest +import yaml + +ROOT = Path(__file__).resolve().parents[3] + + +@pytest.mark.agent_authored(model="gpt-6.1-sol") +def test_action_prepares_remaps_for_actual_checkout_commit(tmp_path): + action = yaml.safe_load((ROOT / ".github/actions/check-doc-links/action.yml").read_text(encoding="utf-8")) + prepare = next(step for step in action["runs"]["steps"] if step.get("id") == "inputs") + checkout = tmp_path / "checkout with spaces" + helper = checkout / "ci/tools/prepare_lychee_inputs.py" + helper.parent.mkdir(parents=True) + shutil.copyfile(ROOT / "ci/tools/prepare_lychee_inputs.py", helper) + readme = checkout / "README.md" + readme.write_text("# Smoke test\n", encoding="utf-8") + for arguments in ( + ["init", "--quiet"], + ["add", "README.md"], + [ + "-c", + "user.name=Test", + "-c", + "user.email=test@example.com", + "-c", + "core.hooksPath=/dev/null", + "commit", + "--quiet", + "--no-gpg-sign", + "-m", + "Smoke test", + ], + ): + subprocess.run(["git", *arguments], cwd=checkout, check=True) # noqa: S603, S607 + head = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=checkout, text=True).strip() # noqa: S607 + output = tmp_path / "action-output" + input_list = checkout / "lychee-authored-files.txt" + env = dict( + os.environ, + PATH=f"{Path(sys.executable).parent}{os.pathsep}{os.environ['PATH']}", + KIND="authored", + GITHUB_WORKSPACE=str(checkout), + RUNNER_TEMP=str(tmp_path / "runner temp"), + LYCHEE_VERSION="v0.24.2", + POLICY_HASH="test-policy", + GITHUB_OUTPUT=str(output), + LYCHEE_ARGS=f'--files-from "{input_list}" --cache', + GITHUB_RUN_ID="123", + GITHUB_RUN_ATTEMPT="1", + GITHUB_SHA="0" * 40, + GITHUB_SERVER_URL="https://github.com", + GITHUB_REPOSITORY="example-org/cuda-python-mirror", + ) + + subprocess.run( # noqa: S603 + ["bash", "--noprofile", "--norc", "-euo", "pipefail", "-c", prepare["run"]], # noqa: S607 + cwd=checkout, + env=env, + check=True, + capture_output=True, + text=True, + ) + + outputs = dict(line.split("=", 1) for line in output.read_text(encoding="utf-8").splitlines()) + args = shlex.split(outputs["args"]) + assert args[:3] == ["--files-from", str(input_list), "--cache"] + remaps = [args[index + 1] for index, argument in enumerate(args) if argument == "--remap"] + assert remaps == [ + f"^https://github[.]com/NVIDIA/cuda-python/{view}/main/ " + f"https://github.com/example-org/cuda-python-mirror/{view}/{head}/" + for view in ("blob", "tree") + ] + assert input_list.read_text(encoding="utf-8") == f"{readme}\n" + for remap in remaps: + pattern, replacement = remap.split() + view = "blob" if "/blob/" in pattern else "tree" + url = f"https://github.com/NVIDIA/cuda-python/{view}/main/new-directory" + assert re.sub(pattern, replacement, url) == ( + f"https://github.com/example-org/cuda-python-mirror/{view}/{head}/new-directory" + ) + assert re.search(pattern, url.replace("github.com", "githubXcom")) is None + assert re.search(pattern, url.replace("/main/", "/mainly/")) is None + assert re.search(pattern, "https://example.com/" + url) is None From 5b4c1d3a2970bc0334247bc840674b69ce65a919 Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Thu, 15 Oct 2026 11:35:35 -0700 Subject: [PATCH 2/5] ci: run Lychee portably with native checkout remaps Install the pinned official native wheel in a Python hook environment and pass anchored remaps for local checkout targets. Avoid launching a Python preprocessor from native Lychee on Windows, preserve URL boundaries, and document main-development and maintenance-branch scope. Signed-off-by: Ralf W. Grosse-Kunstleve --- .github/actions/check-doc-links/action.yml | 2 +- .pre-commit-config.yaml | 12 ++- CONTRIBUTING.md | 23 ++--- ci/README.md | 42 ++++++--- ci/tools/preprocess_repo_links.py | 33 ------- ci/tools/run_lychee.py | 35 ++++++++ ci/tools/tests/test_preprocess_repo_links.py | 93 -------------------- ci/tools/tests/test_run_lychee.py | 68 ++++++++++++++ 8 files changed, 155 insertions(+), 153 deletions(-) delete mode 100755 ci/tools/preprocess_repo_links.py create mode 100644 ci/tools/run_lychee.py delete mode 100644 ci/tools/tests/test_preprocess_repo_links.py create mode 100644 ci/tools/tests/test_run_lychee.py diff --git a/.github/actions/check-doc-links/action.yml b/.github/actions/check-doc-links/action.yml index 3a628835b5f..8b7f37ca819 100644 --- a/.github/actions/check-doc-links/action.yml +++ b/.github/actions/check-doc-links/action.yml @@ -25,7 +25,7 @@ runs: shell: bash --noprofile --norc -euo pipefail {0} env: KIND: ${{ inputs.kind }} - LYCHEE_VERSION: v0.24.2 # Must match the pinned rev in .pre-commit-config.yaml + LYCHEE_VERSION: v0.24.2 # Must match lychee-bin in .pre-commit-config.yaml POLICY_HASH: ${{ hashFiles('lychee.toml', '.github/actions/check-doc-links/action.yml', 'ci/tools/prepare_lychee_inputs.py', 'ci/tools/retry_lychee.py') }} # The first pass and all retries use the same inputs and cache policy. LYCHEE_ARGS: >- diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f82a762a9ab..b320023473c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -109,13 +109,17 @@ repos: - Cython==3.2.9 # Link checking for authored documentation files - - repo: https://github.com/lycheeverse/lychee - rev: 2bba271688c1abb1503097a064e6c3bc1d1b6a9b # frozen: lychee-v0.24.2 + - repo: local hooks: - id: lychee + name: lychee + entry: python ./ci/tools/run_lychee.py + language: python + additional_dependencies: + - lychee-bin==0.24.2 # Must match check-doc-links/action.yml + types: [text] + require_serial: true args: - - LYCHEE_VERSION=0.24.2 # Must match the pinned rev above - - --preprocess=./ci/tools/preprocess_repo_links.py - --cache - --max-concurrency=4 - --max-retries=3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 75c3056a59b..8befbf2bc12 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,7 +26,7 @@ Thank you for your interest in contributing to CUDA Python! Based on the type of - [Symptoms of a bad clone](#symptoms-of-a-bad-clone) - [Development on Windows](#development-on-windows) - [Enabling git symlinks](#enabling-git-symlinks) - - [Pre-commit lychee workaround](#pre-commit-lychee-workaround) + - [Lychee on Windows](#lychee-on-windows) - [Type stubs for cuda.core](#type-stubs-for-cudacore) - [Pre-commit](#pre-commit) - [Pixi lockfiles](#pixi-lockfiles) @@ -204,17 +204,18 @@ Repeat the last two commands for every other tracked symlink. Re-cloning after enabling Developer Mode and setting the global option is simpler if you want all links restored. -### Pre-commit lychee workaround +### Lychee on Windows -For development on Windows (not WSL), the `lychee` pre-commit task will not -work when running `pre-commit run --all-files`. This problem does not occur -if you install the pre-commit hook and run it automatically as part of your -`git commit` workflow. To resolve this, you can either: +The `lychee` pre-commit hook runs through Python and installs the native +`lychee-bin==0.24.2` wheel in its own environment. It has no Git Bash +dependency; use the same `pre-commit run --all-files` command from PowerShell, +cmd, or Git Bash. -1. Run `pre-commit` in Git Bash, rather than directly in PowerShell or cmd - -2. Skip it by setting the environment variable `SKIP` to `lychee`. This would - be `$env:SKIP = "lychee"` in PowerShell or `set SKIP=lychee` in cmd. +The Linux and Windows CI jobs exercise the installed hook against local +fixtures, including paths containing spaces and missing targets. The full +documentation link scan runs separately in documentation CI. See +[Repository links during main development](ci/README.md#repository-links-during-main-development) +for how repository source links are checked before merge. ## Type stubs for cuda.core @@ -259,7 +260,7 @@ between commits, leaving stale headers or out-of-date stubs in the history. If the hook isn't installed, `pre-commit run` will print a visible warning reminding you to run `pre-commit install`. -Windows contributors: see [Pre-commit lychee workaround](#pre-commit-lychee-workaround) under Development on Windows. +Windows contributors: see [Lychee on Windows](#lychee-on-windows) under Development on Windows. ## Pixi lockfiles diff --git a/ci/README.md b/ci/README.md index ff2bb20ff80..6fdc6ac6b28 100644 --- a/ci/README.md +++ b/ci/README.md @@ -24,23 +24,43 @@ The pinned checkout action's [`README`](https://github.com/actions/checkout/blob/3d3c42e5aac5ba805825da76410c181273ba90b1/README.md#fetch-all-history-for-all-tags-and-branches) documents `fetch-depth: 0` for fetching all history, branches, and tags. -## Repository Links Before Merge - -Keep links to the latest repository sources on `main`, even when their targets -are added or moved by the same pull request. Lychee remaps canonical -`https://github.com/NVIDIA/cuda-python/blob/main/` and `tree/main/` links -for validation only; source files and published documentation keep their URLs. -Links to tags, commit SHAs, other branches, and other repositories are checked -as written. +## Repository Links During Main Development + +For development targeting `main`, keep links to the latest repository sources +on `main`, even when their targets are added or moved by the same pull request. +The link checker treats canonical +`https://github.com/NVIDIA/cuda-python/blob/main/` and `tree/main/` URLs as +references to the proposed main tree. Lychee remaps them for validation only; +source files and published documentation keep their URLs. The remaps match only +at the start of a URL, leaving URLs embedded in another URL unchanged. Relative +links and links to tags, commit SHAs, other branches, and other repositories +are checked as written. CI remaps these links to the CI repository at the actual checked-out commit using `--remap`, retaining GitHub's file/directory views and fragment behavior. The initial check and all retries use the same remaps. Missing targets in that commit still fail. -Local pre-commit uses `ci/tools/preprocess_repo_links.py` through `--preprocess` -to check these paths in the working tree, including uncommitted and unpushed -targets. Local checks retain their existing policy of not checking fragments. +Local pre-commit runs the Python hook `ci/tools/run_lychee.py`, which computes +the checkout's file URI and passes anchored native `--remap` rules to Lychee. +This checks paths in the working tree, including uncommitted and unpushed +targets. The hook installs the official PyPI `lychee-bin==0.24.2` package in +its own Python environment and uses the platform's native wheel. Local checks +retain their existing policy of not checking fragments. + +The Linux and Windows pre-commit CI jobs run a bounded smoke check of the +installed hook against local Markdown and reST fixtures. They check valid +files and directories and missing targets in paths containing spaces, and +verify that the source files are unchanged. This smoke check does not scan all +external documentation links; full authored and rendered checks run in +documentation CI. + +The `check-doc-links` action is not currently present on `12.9.x`, `13.4.x`, +`12.2.x`, or `11.8.x`; merging changes into `main` does not update those +branches' workflows. A maintenance branch's `/main/` URLs may intentionally +refer to a different tree from its checkout. Before adopting this hook or +action there, choose an explicit validation policy for those links instead of +assuming that they refer to the maintenance checkout. ## Temporary Pixi Lockfile Maintenance Pause diff --git a/ci/tools/preprocess_repo_links.py b/ci/tools/preprocess_repo_links.py deleted file mode 100755 index 6362ac2f9f9..00000000000 --- a/ci/tools/preprocess_repo_links.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python3 -# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - -"""Check this repository's main-branch source links against the local checkout.""" - -from __future__ import annotations - -import argparse -import sys -from pathlib import Path - -ROOT = Path(__file__).resolve().parents[2] - - -def preprocess_links(content: str, root: Path = ROOT) -> str: - """Keep published URLs in source files while checking paths before merge.""" - local_prefix = root.resolve().as_uri() + "/" - for view in ("blob", "tree"): - content = content.replace(f"https://github.com/NVIDIA/cuda-python/{view}/main/", local_prefix) - return content - - -def main() -> None: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("input", type=Path) - args = parser.parse_args() - # Lychee consumes stdout without changing the input file or its relative-link base. - sys.stdout.write(preprocess_links(args.input.read_text(encoding="utf-8"))) - - -if __name__ == "__main__": - main() diff --git a/ci/tools/run_lychee.py b/ci/tools/run_lychee.py new file mode 100644 index 00000000000..0051b919159 --- /dev/null +++ b/ci/tools/run_lychee.py @@ -0,0 +1,35 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +"""Run Lychee with this checkout's main-branch source links mapped to local paths.""" + +from __future__ import annotations + +import shutil +import subprocess +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] + + +def repo_link_remaps(root: Path = ROOT) -> list[str]: + """Apply the same URL-prefix boundaries as the dedicated CI link check.""" + local_prefix = root.resolve().as_uri() + "/" + arguments = [] + for view in ("blob", "tree"): + arguments.extend(["--remap", f"^https://github[.]com/NVIDIA/cuda-python/{view}/main/ {local_prefix}"]) + return arguments + + +def main(arguments: list[str] | None = None) -> int: + executable = shutil.which("lychee") + if executable is None: + raise SystemExit("lychee was not found; run this script through the configured pre-commit hook") + arguments = sys.argv[1:] if arguments is None else arguments + # Let Python launch the native binary on every platform, including Windows. + return subprocess.run([executable, *repo_link_remaps(), *arguments], check=False).returncode # noqa: S603 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/ci/tools/tests/test_preprocess_repo_links.py b/ci/tools/tests/test_preprocess_repo_links.py deleted file mode 100644 index d3dff949f7d..00000000000 --- a/ci/tools/tests/test_preprocess_repo_links.py +++ /dev/null @@ -1,93 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - -from __future__ import annotations - -import shutil -import subprocess -import sys -from pathlib import Path - -import pytest - -sys.path.insert(0, str(Path(__file__).parent.parent)) -from preprocess_repo_links import preprocess_links - -SCRIPT = Path(__file__).resolve().parents[1] / "preprocess_repo_links.py" - - -@pytest.mark.parametrize( - "template", - [ - "[Directory]({directory})\n[File]({file})\n[Relative](guide.rst)\n", - "`Directory <{directory}>`_\n`File <{file}>`_\n`Relative `_\n", - 'DirectoryFileRelative\n', - ], -) -@pytest.mark.agent_authored(model="gpt-6.1-sol") -def test_preprocess_links_preserves_format_relative_links_and_url_encoding(tmp_path, template): - root = tmp_path / "checkout space$#" - content = template.format( - directory="https://github.com/NVIDIA/cuda-python/tree/main/new_directory/", - file="https://github.com/NVIDIA/cuda-python/blob/main/docs/a%20guide.md?plain=1#some-heading", - ) - - assert preprocess_links(content, root) == template.format( - directory=f"{root.as_uri()}/new_directory/", - file=f"{root.as_uri()}/docs/a%20guide.md?plain=1#some-heading", - ) - - -@pytest.mark.parametrize( - "url", - [ - "https://github.com/NVIDIA/cuda-python/blob/12.9.x/README.md", - "https://github.com/NVIDIA/cuda-python/tree/v13.0.0/cuda_bindings", - "https://github.com/NVIDIA/cuda-python/blob/0123456789abcdef/README.md", - "https://github.com/NVIDIA/cuda-python/blob/mainly/README.md", - "https://github.com/NVIDIA/cuda-python/tree/main", - "https://github.com/rwgk/cuda-python/blob/main/README.md", - "https://github.com/NVIDIA/other-repository/tree/main/docs", - "http://github.com/NVIDIA/cuda-python/blob/main/README.md", - "https://raw.githubusercontent.com/NVIDIA/cuda-python/main/README.md", - "https://nvidia.github.io/cuda-python/latest/", - ], -) -@pytest.mark.agent_authored(model="gpt-6.1-sol") -def test_preprocess_links_leaves_other_targets_unchanged(tmp_path, url): - assert preprocess_links(f"[Link]({url})\n", tmp_path) == f"[Link]({url})\n" - - -@pytest.mark.agent_authored(model="gpt-6.1-sol") -def test_cli_uses_its_checkout_root_and_leaves_input_unchanged(tmp_path): - checkout = tmp_path / "checkout space$#" - script = checkout / "ci" / "tools" / SCRIPT.name - script.parent.mkdir(parents=True) - shutil.copyfile(SCRIPT, script) - source = tmp_path / "source guide.rst" - content = b"`Repository `_\r\n" - source.write_bytes(content) - - result = subprocess.run( # noqa: S603 - [sys.executable, str(script), str(source)], - cwd=tmp_path, - check=True, - capture_output=True, - text=True, - ) - - assert result.stdout == f"`Repository <{checkout.as_uri()}/new_directory>`_\n" - assert result.stderr == "" - assert source.read_bytes() == content - - -@pytest.mark.agent_authored(model="gpt-6.1-sol") -def test_cli_missing_input_fails_without_success_output(tmp_path): - source = tmp_path / "missing.md" - - result = subprocess.run([sys.executable, str(SCRIPT), str(source)], capture_output=True, text=True) # noqa: S603 - - assert result.returncode != 0 - assert result.stdout == "" - assert "FileNotFoundError" in result.stderr - assert not source.exists() diff --git a/ci/tools/tests/test_run_lychee.py b/ci/tools/tests/test_run_lychee.py new file mode 100644 index 00000000000..14b6071cd0d --- /dev/null +++ b/ci/tools/tests/test_run_lychee.py @@ -0,0 +1,68 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +from __future__ import annotations + +import re +import subprocess +import sys +from pathlib import Path +from unittest.mock import patch + +import pytest + +sys.path.insert(0, str(Path(__file__).parent.parent)) +from run_lychee import main, repo_link_remaps + + +@pytest.mark.agent_authored(model="gpt-6.1-sol") +def test_remaps_encode_checkout_path_and_preserve_url_suffix(tmp_path): + root = tmp_path / "checkout space$#" + arguments = repo_link_remaps(root) + for index, view in enumerate(("blob", "tree")): + assert arguments[2 * index] == "--remap" + pattern, replacement = arguments[2 * index + 1].split() + url = f"https://github.com/NVIDIA/cuda-python/{view}/main/docs/a%20guide.md?plain=1#some-heading" + assert re.sub(pattern, replacement, url) == f"{root.as_uri()}/docs/a%20guide.md?plain=1#some-heading" + + +@pytest.mark.parametrize( + "url", + [ + "https://github.com/NVIDIA/cuda-python/blob/12.9.x/README.md", + "https://github.com/NVIDIA/cuda-python/tree/v13.0.0/cuda_bindings", + "https://github.com/NVIDIA/cuda-python/blob/0123456789abcdef/README.md", + "https://github.com/NVIDIA/cuda-python/blob/mainly/README.md", + "https://github.com/NVIDIA/cuda-python/tree/main", + "https://github.com/rwgk/cuda-python/blob/main/README.md", + "https://github.com/NVIDIA/other-repository/tree/main/docs", + "http://github.com/NVIDIA/cuda-python/blob/main/README.md", + "https://raw.githubusercontent.com/NVIDIA/cuda-python/main/README.md", + "https://nvidia.github.io/cuda-python/latest/", + "https://example.com/redirect?url=https://github.com/NVIDIA/cuda-python/blob/main/README.md", + "https://example.com/https://github.com/NVIDIA/cuda-python/tree/main/docs", + ], +) +@pytest.mark.agent_authored(model="gpt-6.1-sol") +def test_remaps_leave_other_targets_and_nested_urls_unchanged(tmp_path, url): + arguments = repo_link_remaps(tmp_path) + for index in (1, 3): + pattern, replacement = arguments[index].split() + assert re.sub(pattern, replacement, url) == url + + +@pytest.mark.agent_authored(model="gpt-6.1-sol") +def test_main_passes_arguments_without_shell_and_preserves_failure_status(): + arguments = ["--cache", "--max-concurrency=4", "guide with spaces.md"] + with ( + patch("run_lychee.shutil.which", return_value="/hook environment/bin/lychee"), + patch("run_lychee.subprocess.run", return_value=subprocess.CompletedProcess([], 2)) as run, + ): + assert main(arguments) == 2 + run.assert_called_once_with(["/hook environment/bin/lychee", *repo_link_remaps(), *arguments], check=False) + + +@pytest.mark.agent_authored(model="gpt-6.1-sol") +def test_main_reports_missing_binary(): + with patch("run_lychee.shutil.which", return_value=None), pytest.raises(SystemExit, match="lychee was not found"): + main(["guide.md"]) From 1e1d0639ec4976ff37072ac7c6e939b937e247ad Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Thu, 15 Oct 2026 11:35:48 -0700 Subject: [PATCH 3/5] ci: exercise Lychee pre-commit on Linux and Windows Run the actual configured hook against generated local Markdown and reST fixtures. Verify existing files and directories, reject deleted targets despite cached prior successes, and preserve source bytes. Keep the Python unit-test schedule unchanged. Signed-off-by: Ralf W. Grosse-Kunstleve --- .github/workflows/pre-commit.yml | 7 +++ ci/tools/test_lychee_precommit.py | 95 +++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 ci/tools/test_lychee_precommit.py diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index fe4e07fbd11..842d5a4115d 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -43,6 +43,7 @@ jobs: env: # Full-CI docs builds and nightly check links. The installation reminder # is for developer machines; CI does not install a Git commit hook. + # A separate bounded check below exercises Lychee with local fixtures. SKIP: lychee,check-precommit-installed # Minor version used by setup-python and as the cache restore-key prefix. PYTHON_VERSION: "3.14" @@ -88,6 +89,12 @@ jobs: - name: Run pre-commit run: pre-commit run --all-files --show-diff-on-failure + - name: Exercise the configured Lychee hook with local fixtures + env: + SKIP: check-precommit-installed + PYTHONUTF8: "1" + run: python ci/tools/test_lychee_precommit.py + - name: Save pre-commit cache # Only the default branch saves, so per-PR merge refs don't store their # own duplicate copies. !cancelled() keeps a push that fails lint from diff --git a/ci/tools/test_lychee_precommit.py b/ci/tools/test_lychee_precommit.py new file mode 100644 index 00000000000..50f73d0c30f --- /dev/null +++ b/ci/tools/test_lychee_precommit.py @@ -0,0 +1,95 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +"""Exercise the configured Lychee pre-commit hook without scanning external links.""" + +from __future__ import annotations + +import os +import subprocess +import sys +from pathlib import Path +from tempfile import TemporaryDirectory +from urllib.parse import quote + +ROOT = Path(__file__).resolve().parents[2] + + +def run_hook(sources: dict[Path, bytes], missing: Path | None = None) -> None: + result = subprocess.run( # noqa: S603 + [ + sys.executable, + "-m", + "pre_commit", + "run", + "lychee", + "--verbose", + "--color", + "never", + "--files", + *(source.relative_to(ROOT).as_posix() for source in sources), + ], + cwd=ROOT, + env=dict(os.environ, SKIP=""), + capture_output=True, + encoding="utf-8", + timeout=120, + ) + output = result.stdout + result.stderr + print(output, end="", flush=True) + for source, original in sources.items(): + if source.read_bytes() != original: + raise RuntimeError(f"The Lychee hook changed {source}") + if "- hook id: lychee" not in output or "Skipped" in output: + raise RuntimeError("The configured Lychee hook did not run") + if missing is None: + if result.returncode != 0: + raise RuntimeError("The Lychee hook rejected existing checkout targets") + elif ( + result.returncode == 0 + or "File not found" not in output + or missing.as_uri() not in output + or "- exit code: 2" not in output + ): + raise RuntimeError(f"Expected Lychee to report the missing local target {missing}") + + +def main() -> None: + # Generate sources inside the checkout so pre-commit applies the real file filters. + with TemporaryDirectory(prefix="lychee hook smoke ", dir=ROOT) as temporary: + fixture = Path(temporary) + directory = fixture / "new directory" + directory.mkdir() + target = fixture / "new source #$.py" + target.write_text("value = 1\n", encoding="utf-8") + relative = fixture / "relative guide.rst" + relative.write_text("Relative target\n", encoding="utf-8") + prefix = "https://github.com/NVIDIA/cuda-python" + file_url = f"{prefix}/blob/main/{quote(target.relative_to(ROOT).as_posix())}" + directory_url = f"{prefix}/tree/main/{quote(directory.relative_to(ROOT).as_posix())}/" + sources = { + fixture / "source guide.md": ( + f"[File]({file_url})\r\n[Directory]({directory_url})\r\n[Relative](relative%20guide.rst)\r\n" + ).encode(), + fixture / "source guide.rst": ( + f"`File <{file_url}>`_\n`Directory <{directory_url}>`_\n`Relative `_\n" + ).encode(), + } + for source, content in sources.items(): + source.write_bytes(content) + + print("Checking existing local file, directory, and relative targets", flush=True) + run_hook(sources) + target.unlink() + print("Checking that a previously valid file is rejected after deletion", flush=True) + run_hook(sources, missing=target) + target.write_text("value = 1\n", encoding="utf-8") + directory.rmdir() + print("Checking that a previously valid directory is rejected after deletion", flush=True) + run_hook(sources, missing=directory) + + print("Configured Lychee hook checks passed; documentation sources were unchanged.") + + +if __name__ == "__main__": + main() From 200be8bc04a21148dbb454626dfdf07cb937cd2c Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Thu, 15 Oct 2026 12:38:02 -0700 Subject: [PATCH 4/5] ci: resolve Lychee directly from the hook environment Use the running Python environment scripts directory instead of searching PATH. Fail explicitly when the native binary is absent, and cover Linux and Windows executable selection plus unrelated installations on PATH. Signed-off-by: Ralf W. Grosse-Kunstleve --- ci/tools/run_lychee.py | 14 +++++++------ ci/tools/tests/test_run_lychee.py | 33 ++++++++++++++++++++++++++----- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/ci/tools/run_lychee.py b/ci/tools/run_lychee.py index 0051b919159..92397aaaa9b 100644 --- a/ci/tools/run_lychee.py +++ b/ci/tools/run_lychee.py @@ -5,9 +5,9 @@ from __future__ import annotations -import shutil import subprocess import sys +import sysconfig from pathlib import Path ROOT = Path(__file__).resolve().parents[2] @@ -23,12 +23,14 @@ def repo_link_remaps(root: Path = ROOT) -> list[str]: def main(arguments: list[str] | None = None) -> int: - executable = shutil.which("lychee") - if executable is None: - raise SystemExit("lychee was not found; run this script through the configured pre-commit hook") + # Use this Python environment's installation, independent of PATH and the working directory. + executable = Path(sysconfig.get_path("scripts")) / ("lychee.exe" if sys.platform == "win32" else "lychee") + if not executable.is_file(): + raise SystemExit( + f"lychee was not found at {executable}; run this script through the configured pre-commit hook" + ) arguments = sys.argv[1:] if arguments is None else arguments - # Let Python launch the native binary on every platform, including Windows. - return subprocess.run([executable, *repo_link_remaps(), *arguments], check=False).returncode # noqa: S603 + return subprocess.run([str(executable), *repo_link_remaps(), *arguments], check=False).returncode # noqa: S603 if __name__ == "__main__": diff --git a/ci/tools/tests/test_run_lychee.py b/ci/tools/tests/test_run_lychee.py index 14b6071cd0d..5a04f6dd3f4 100644 --- a/ci/tools/tests/test_run_lychee.py +++ b/ci/tools/tests/test_run_lychee.py @@ -51,18 +51,41 @@ def test_remaps_leave_other_targets_and_nested_urls_unchanged(tmp_path, url): assert re.sub(pattern, replacement, url) == url +@pytest.mark.parametrize("platform", ["linux", "win32"]) @pytest.mark.agent_authored(model="gpt-6.1-sol") -def test_main_passes_arguments_without_shell_and_preserves_failure_status(): +def test_main_uses_hook_environment_despite_other_binary_on_path(tmp_path, monkeypatch, platform): + scripts = tmp_path / "hook environment" / ("Scripts" if platform == "win32" else "bin") + scripts.mkdir(parents=True) + name = "lychee.exe" if platform == "win32" else "lychee" + executable = scripts / name + executable.touch() + other_directory = tmp_path / "other installation" + other_directory.mkdir() + (other_directory / name).touch(mode=0o755) + monkeypatch.setenv("PATH", str(other_directory)) arguments = ["--cache", "--max-concurrency=4", "guide with spaces.md"] with ( - patch("run_lychee.shutil.which", return_value="/hook environment/bin/lychee"), + patch("run_lychee.sysconfig.get_path", return_value=str(scripts)), + patch("run_lychee.sys.platform", platform), patch("run_lychee.subprocess.run", return_value=subprocess.CompletedProcess([], 2)) as run, ): assert main(arguments) == 2 - run.assert_called_once_with(["/hook environment/bin/lychee", *repo_link_remaps(), *arguments], check=False) + run.assert_called_once_with([str(executable), *repo_link_remaps(), *arguments], check=False) @pytest.mark.agent_authored(model="gpt-6.1-sol") -def test_main_reports_missing_binary(): - with patch("run_lychee.shutil.which", return_value=None), pytest.raises(SystemExit, match="lychee was not found"): +def test_main_reports_missing_hook_binary_without_falling_back_to_path(tmp_path, monkeypatch): + scripts = tmp_path / "hook environment" / "bin" + other_directory = tmp_path / "other installation" + other_directory.mkdir() + (other_directory / "lychee").touch(mode=0o755) + monkeypatch.setenv("PATH", str(other_directory)) + with ( + patch("run_lychee.sysconfig.get_path", return_value=str(scripts)), + patch("run_lychee.sys.platform", "linux"), + patch("run_lychee.subprocess.run") as run, + pytest.raises(SystemExit, match="lychee was not found") as error, + ): main(["guide.md"]) + assert str(scripts / "lychee") in str(error.value) + run.assert_not_called() From ebd1b06430b84d6963a550ad2eee81417c758e73 Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Thu, 15 Oct 2026 11:52:02 -0700 Subject: [PATCH 5/5] cuda.bindings: rename source root to cuda_bindings_13 Rename the CUDA 13 bindings source root and update its build, test, CI, documentation, and tooling paths. This is the same file tree as the validated review branch, with linear history above PR #3118. Signed-off-by: Ralf W. Grosse-Kunstleve --- .coderabbit.yaml | 10 +++--- .github/labeler.yml | 2 +- .github/workflows/build-docs.yml | 16 +++++++++- .github/workflows/build-wheel.yml | 8 ++--- .github/workflows/ci-pixi-source-test.yml | 14 ++++---- .github/workflows/ci.yml | 12 +++---- .github/workflows/coverage.yml | 12 +++---- .github/workflows/test-sdist-linux.yml | 10 +++--- .github/workflows/test-sdist-windows.yml | 12 +++---- .gitignore | 26 +++++++-------- .pre-commit-config.yaml | 20 ++++++------ AGENTS.md | 2 +- README.md | 2 +- benchmarks/cuda_bindings/AGENTS.md | 2 +- benchmarks/cuda_bindings/pixi.lock | 4 +-- benchmarks/cuda_bindings/pixi.toml | 2 +- benchmarks/cuda_core/pixi.toml | 2 +- ci/README.md | 2 +- ci/tools/build_docs_for_link_check.sh | 10 +++--- ci/tools/check_pixi_cuda_version.py | 6 ++-- ci/tools/check_release_notes.py | 2 +- ci/tools/compute_ci_plan.py | 7 +++- ci/tools/env-vars | 4 +-- ci/tools/run-tests | 2 +- .../tests/test_build_docs_for_link_check.py | 26 ++++++++++++--- ci/tools/tests/test_check_release_notes.py | 12 +++---- ci/tools/tests/test_compute_ci_plan.py | 8 ++--- context7.json | 2 +- .../.git_archival.txt | 0 {cuda_bindings => cuda_bindings_13}/AGENTS.md | 4 +-- {cuda_bindings => cuda_bindings_13}/CLAUDE.md | 0 .../DESCRIPTION.rst | 2 +- {cuda_bindings => cuda_bindings_13}/LICENSE | 0 .../MANIFEST.in | 0 {cuda_bindings => cuda_bindings_13}/README.md | 0 .../_build_shared.py | 2 +- .../build_hooks.py | 0 .../cuda/bindings/__init__.pxd | 0 .../cuda/bindings/__init__.py | 0 .../cuda/bindings/_internal/__init__.py | 0 .../cuda/bindings/_internal/_fast_enum.py | 0 .../cuda/bindings/_internal/cudla.pxd | 0 .../cuda/bindings/_internal/cudla_linux.pyx | 0 .../cuda/bindings/_internal/cudla_windows.pyx | 0 .../cuda/bindings/_internal/cufile.pxd | 0 .../cuda/bindings/_internal/cufile_linux.pyx | 0 .../cuda/bindings/_internal/driver.pxd | 0 .../cuda/bindings/_internal/driver_linux.pyx | 0 .../bindings/_internal/driver_windows.pyx | 0 .../cuda/bindings/_internal/nvfatbin.pxd | 0 .../bindings/_internal/nvfatbin_linux.pyx | 0 .../bindings/_internal/nvfatbin_windows.pyx | 0 .../cuda/bindings/_internal/nvjitlink.pxd | 0 .../bindings/_internal/nvjitlink_linux.pyx | 0 .../bindings/_internal/nvjitlink_windows.pyx | 0 .../cuda/bindings/_internal/nvml.pxd | 0 .../cuda/bindings/_internal/nvml_linux.pyx | 0 .../cuda/bindings/_internal/nvml_windows.pyx | 0 .../cuda/bindings/_internal/nvrtc.pxd | 0 .../cuda/bindings/_internal/nvrtc_linux.pyx | 0 .../cuda/bindings/_internal/nvrtc_windows.pyx | 0 .../cuda/bindings/_internal/nvvm.pxd | 0 .../cuda/bindings/_internal/nvvm_linux.pyx | 0 .../cuda/bindings/_internal/nvvm_windows.pyx | 0 .../cuda/bindings/_internal/runtime.pxd | 0 .../cuda/bindings/_internal/runtime_linux.pyx | 0 .../cuda/bindings/_internal/runtime_ptds.pxd | 0 .../bindings/_internal/runtime_ptds_linux.pyx | 0 .../_internal/runtime_ptds_windows.pyx | 0 .../bindings/_internal/runtime_windows.pyx | 0 .../cuda/bindings/_internal/utils.pxd | 0 .../cuda/bindings/_internal/utils.pyx | 0 .../cuda/bindings/_lib/__init__.py | 0 .../bindings/_lib/cyruntime/cyruntime.pxd | 0 .../bindings/_lib/cyruntime/cyruntime.pxi | 0 .../cuda/bindings/_lib/dlfcn.pxd | 0 .../cuda/bindings/_lib/utils.pxd | 0 .../cuda/bindings/_lib/utils.pxi | 0 .../cuda/bindings/_lib/windll.pxd | 0 .../cuda/bindings/_v2/__init__.py | 0 .../cuda/bindings/_v2/nvrtc.pxd | 0 .../cuda/bindings/_v2/nvrtc.pyx | 0 .../cuda/bindings/cudla.pxd | 0 .../cuda/bindings/cudla.pyx | 0 .../cuda/bindings/cufile.pxd | 0 .../cuda/bindings/cufile.pyx | 0 .../cuda/bindings/cycudla.pxd | 0 .../cuda/bindings/cycudla.pyx | 0 .../cuda/bindings/cycufile.pxd | 0 .../cuda/bindings/cycufile.pyx | 0 .../cuda/bindings/cydriver.pxd | 0 .../cuda/bindings/cydriver.pyx | 0 .../cuda/bindings/cynvfatbin.pxd | 0 .../cuda/bindings/cynvfatbin.pyx | 0 .../cuda/bindings/cynvjitlink.pxd | 0 .../cuda/bindings/cynvjitlink.pyx | 0 .../cuda/bindings/cynvml.pxd | 0 .../cuda/bindings/cynvml.pyx | 0 .../cuda/bindings/cynvrtc.pxd | 0 .../cuda/bindings/cynvrtc.pyx | 0 .../cuda/bindings/cynvvm.pxd | 0 .../cuda/bindings/cynvvm.pyx | 0 .../cuda/bindings/cyruntime.pxd | 0 .../cuda/bindings/cyruntime.pyx | 0 .../cuda/bindings/driver.pxd | 0 .../cuda/bindings/driver.pyx | 0 .../cuda/bindings/nvfatbin.pxd | 0 .../cuda/bindings/nvfatbin.pyx | 0 .../cuda/bindings/nvjitlink.pxd | 0 .../cuda/bindings/nvjitlink.pyx | 0 .../cuda/bindings/nvml.pxd | 0 .../cuda/bindings/nvml.pyx | 0 .../cuda/bindings/nvrtc.pxd | 0 .../cuda/bindings/nvrtc.pyx | 0 .../cuda/bindings/nvvm.pxd | 0 .../cuda/bindings/nvvm.pyx | 0 .../cuda/bindings/runtime.pxd | 0 .../cuda/bindings/runtime.pyx | 0 .../cuda/bindings/utils/__init__.py | 0 .../cuda/bindings/utils/_envvar.py | 0 .../cuda/bindings/utils/_nvvm_utils.py | 0 .../cuda/bindings/utils/_ptx_utils.py | 0 .../cuda/bindings/utils/_version_check.py | 0 .../docs/Makefile | 0 .../docs/README.md | 0 .../docs/build_docs.sh | 0 .../docs/make.bat | 0 .../docs/nv-versions.json | 0 .../images/Nsight-Compute-CLI-625x473.png | Bin .../docs/source/_templates/main.html | 0 .../docs/source/api.rst | 0 .../docs/source/conduct.rst | 0 .../docs/source/conf.py | 0 .../docs/source/contribute.rst | 0 .../docs/source/environment_variables.rst | 0 .../docs/source/examples.rst | 0 .../docs/source/index.rst | 0 .../docs/source/install.rst | 0 .../docs/source/license.rst | 0 .../docs/source/module/cudla.rst | 0 .../docs/source/module/cufile.rst | 0 .../docs/source/module/driver.rst | 0 .../docs/source/module/nvfatbin.rst | 0 .../docs/source/module/nvjitlink.rst | 0 .../docs/source/module/nvml.rst | 0 .../docs/source/module/nvrtc.rst | 0 .../docs/source/module/nvvm.rst | 0 .../docs/source/module/runtime.rst | 0 .../docs/source/module/utils.rst | 0 .../docs/source/motivation.rst | 0 .../docs/source/overview.rst | 0 .../docs/source/release.rst | 0 .../docs/source/release/11.4.0-notes.rst | 0 .../docs/source/release/11.5.0-notes.rst | 0 .../docs/source/release/11.6.0-notes.rst | 0 .../docs/source/release/11.6.1-notes.rst | 0 .../docs/source/release/11.7.0-notes.rst | 0 .../docs/source/release/11.7.1-notes.rst | 0 .../docs/source/release/11.8.0-notes.rst | 0 .../docs/source/release/11.8.1-notes.rst | 0 .../docs/source/release/11.8.2-notes.rst | 0 .../docs/source/release/11.8.3-notes.rst | 0 .../docs/source/release/11.8.4-notes.rst | 0 .../docs/source/release/11.8.5-notes.rst | 0 .../docs/source/release/11.8.6-notes.rst | 0 .../docs/source/release/11.8.7-notes.rst | 0 .../docs/source/release/12.0.0-notes.rst | 0 .../docs/source/release/12.1.0-notes.rst | 0 .../docs/source/release/12.2.0-notes.rst | 0 .../docs/source/release/12.2.1-notes.rst | 0 .../docs/source/release/12.3.0-notes.rst | 0 .../docs/source/release/12.4.0-notes.rst | 0 .../docs/source/release/12.5.0-notes.rst | 0 .../docs/source/release/12.6.0-notes.rst | 0 .../docs/source/release/12.6.1-notes.rst | 0 .../docs/source/release/12.6.2-notes.rst | 0 .../docs/source/release/12.8.0-notes.rst | 0 .../docs/source/release/12.9.0-notes.rst | 0 .../docs/source/release/12.9.1-notes.rst | 0 .../docs/source/release/12.9.2-notes.rst | 0 .../docs/source/release/12.9.3-notes.rst | 0 .../docs/source/release/12.9.4-notes.rst | 0 .../docs/source/release/12.9.5-notes.rst | 0 .../docs/source/release/12.9.6-notes.rst | 0 .../docs/source/release/12.9.7-notes.rst | 0 .../docs/source/release/12.9.8-notes.rst | 0 .../docs/source/release/12.9.9-notes.rst | 0 .../docs/source/release/13.0.0-notes.rst | 0 .../docs/source/release/13.0.1-notes.rst | 0 .../docs/source/release/13.0.2-notes.rst | 0 .../docs/source/release/13.0.3-notes.rst | 0 .../docs/source/release/13.1.0-notes.rst | 0 .../docs/source/release/13.1.1-notes.rst | 0 .../docs/source/release/13.2.0-notes.rst | 0 .../docs/source/release/13.3.0-notes.rst | 0 .../docs/source/release/13.3.1-notes.rst | 0 .../docs/source/release/13.4.0-notes.rst | 0 .../docs/source/release/13.4.0b1-notes.rst | 0 .../docs/source/release/13.4.1-notes.rst | 0 .../docs/source/release/13.4.1a0-notes.rst | 0 .../docs/source/release/13.4.2-notes.rst | 0 .../docs/source/release/13.4.3-notes.rst | 0 .../docs/source/release/13.5.0-notes.rst | 0 .../docs/source/support.rst | 0 .../docs/source/tips_and_tricks.rst | 0 .../docs/versions.json | 0 {cuda_bindings => cuda_bindings_13}/pixi.lock | 0 {cuda_bindings => cuda_bindings_13}/pixi.toml | 0 .../pyproject.toml | 0 {cuda_bindings => cuda_bindings_13}/setup.py | 0 .../tests/conftest.py | 0 .../tests/cudla/conftest.py | 0 .../tests/cudla/test_cudla_bindings.py | 0 .../tests/cufile.json | 0 .../tests/cython/build_tests.bat | 0 .../tests/cython/build_tests.py | 2 +- .../tests/cython/build_tests.sh | 0 .../tests/cython/test_ccuda.pyx | 0 .../tests/cython/test_ccudart.pyx | 0 .../tests/cython/test_cython.py | 0 .../cython/test_interoperability_cython.pyx | 0 .../tests/example_tests/run_samples.py | 0 .../tests/example_tests/test_args.json | 0 .../example_tests/test_cuda_bindings_utils.py | 0 .../test_interactive_sample_configuration.py | 0 .../tests/example_tests/test_samples.py | 0 .../tests/legacy_api/README.md | 0 .../legacy_api/test_legacy_kernelParams.py | 0 .../tests/legacy_api/test_legacy_nvfatbin.py | 0 .../tests/legacy_api/test_legacy_nvjitlink.py | 0 .../tests/legacy_api/test_legacy_nvrtc.py | 0 .../tests/nvml/README.md | 0 .../tests/nvml/__init__.py | 0 .../tests/nvml/conftest.py | 0 .../tests/nvml/test_compute_mode.py | 0 .../tests/nvml/test_cuda.py | 0 .../tests/nvml/test_device.py | 0 .../tests/nvml/test_gpu.py | 0 .../tests/nvml/test_init.py | 0 .../tests/nvml/test_nvlink.py | 0 .../tests/nvml/test_page_retirement.py | 0 .../tests/nvml/test_pci.py | 0 .../tests/nvml/test_pynvml.py | 0 .../tests/nvml/test_unit.py | 0 .../tests/nvml/test_util.py | 0 .../tests/nvml/util.py | 0 .../tests/test_basics.py | 0 .../tests/test_build_hooks.py | 2 +- .../tests/test_cuda.py | 0 .../tests/test_cudart.py | 0 .../tests/test_cufile.py | 0 .../tests/test_envvar.py | 0 .../tests/test_graphics_apis.py | 0 .../tests/test_interoperability.py | 0 .../tests/test_kernelParams.py | 0 .../tests/test_nvfatbin.py | 0 .../tests/test_nvjitlink.py | 0 .../tests/test_nvrtc.py | 0 .../tests/test_nvvm.py | 0 .../tests/test_utils.py | 0 .../tests/test_version_check.py | 0 .../tests/utils/check_cyclical_import.py | 0 cuda_core/AGENTS.md | 4 +-- cuda_core/_build_shared.py | 2 +- cuda_core/build_hooks.py | 4 +-- cuda_core/pixi.lock | 30 +++++++++--------- cuda_core/pixi.toml | 2 +- cuda_core/pyproject.toml | 2 +- cuda_core/tests/AGENTS.md | 2 +- cuda_core/tests/conftest.py | 2 +- .../example_tests/test_sample_environment.py | 2 +- cuda_core/tests/test_build_hooks.py | 6 ++-- cuda_core/tests/test_driver_table.py | 6 ++-- cuda_core/tests/test_graphics.py | 2 +- cuda_core/tests/test_rt_layout.py | 2 +- cuda_python/AGENTS.md | 4 +-- cuda_python/docs/build_all_docs.sh | 2 +- .../_pytest_plugin.py | 2 +- .../cuda_python_test_helpers/cython_cache.py | 2 +- .../cuda_python_test_helpers/graphics.py | 4 +-- pixi.toml | 8 ++--- pytest.ini | 4 +-- ruff.toml | 4 +-- toolshed/build_static_bitcode_input.py | 4 +-- toolshed/check_generated_file_seals.py | 2 +- toolshed/check_spdx.py | 2 +- toolshed/find_skipped_tests.py | 2 +- 287 files changed, 196 insertions(+), 159 deletions(-) rename {cuda_bindings => cuda_bindings_13}/.git_archival.txt (100%) rename {cuda_bindings => cuda_bindings_13}/AGENTS.md (95%) rename {cuda_bindings => cuda_bindings_13}/CLAUDE.md (100%) rename {cuda_bindings => cuda_bindings_13}/DESCRIPTION.rst (98%) rename {cuda_bindings => cuda_bindings_13}/LICENSE (100%) rename {cuda_bindings => cuda_bindings_13}/MANIFEST.in (100%) rename {cuda_bindings => cuda_bindings_13}/README.md (100%) rename {cuda_bindings => cuda_bindings_13}/_build_shared.py (99%) rename {cuda_bindings => cuda_bindings_13}/build_hooks.py (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/__init__.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/__init__.py (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/__init__.py (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/_fast_enum.py (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/cudla.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/cudla_linux.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/cudla_windows.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/cufile.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/cufile_linux.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/driver.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/driver_linux.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/driver_windows.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvfatbin.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvfatbin_linux.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvfatbin_windows.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvjitlink.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvjitlink_linux.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvjitlink_windows.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvml.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvml_linux.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvml_windows.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvrtc.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvrtc_linux.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvrtc_windows.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvvm.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvvm_linux.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/nvvm_windows.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/runtime.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/runtime_linux.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/runtime_ptds.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/runtime_ptds_linux.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/runtime_ptds_windows.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/runtime_windows.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/utils.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_internal/utils.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_lib/__init__.py (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_lib/cyruntime/cyruntime.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_lib/cyruntime/cyruntime.pxi (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_lib/dlfcn.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_lib/utils.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_lib/utils.pxi (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_lib/windll.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_v2/__init__.py (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_v2/nvrtc.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/_v2/nvrtc.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cudla.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cudla.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cufile.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cufile.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cycudla.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cycudla.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cycufile.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cycufile.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cydriver.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cydriver.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cynvfatbin.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cynvfatbin.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cynvjitlink.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cynvjitlink.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cynvml.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cynvml.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cynvrtc.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cynvrtc.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cynvvm.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cynvvm.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cyruntime.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/cyruntime.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/driver.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/driver.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/nvfatbin.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/nvfatbin.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/nvjitlink.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/nvjitlink.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/nvml.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/nvml.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/nvrtc.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/nvrtc.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/nvvm.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/nvvm.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/runtime.pxd (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/runtime.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/utils/__init__.py (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/utils/_envvar.py (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/utils/_nvvm_utils.py (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/utils/_ptx_utils.py (100%) rename {cuda_bindings => cuda_bindings_13}/cuda/bindings/utils/_version_check.py (100%) rename {cuda_bindings => cuda_bindings_13}/docs/Makefile (100%) rename {cuda_bindings => cuda_bindings_13}/docs/README.md (100%) rename {cuda_bindings => cuda_bindings_13}/docs/build_docs.sh (100%) rename {cuda_bindings => cuda_bindings_13}/docs/make.bat (100%) rename {cuda_bindings => cuda_bindings_13}/docs/nv-versions.json (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/_static/images/Nsight-Compute-CLI-625x473.png (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/_templates/main.html (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/api.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/conduct.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/conf.py (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/contribute.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/environment_variables.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/examples.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/index.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/install.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/license.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/module/cudla.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/module/cufile.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/module/driver.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/module/nvfatbin.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/module/nvjitlink.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/module/nvml.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/module/nvrtc.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/module/nvvm.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/module/runtime.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/module/utils.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/motivation.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/overview.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.4.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.5.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.6.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.6.1-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.7.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.7.1-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.8.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.8.1-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.8.2-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.8.3-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.8.4-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.8.5-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.8.6-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/11.8.7-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.0.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.1.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.2.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.2.1-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.3.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.4.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.5.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.6.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.6.1-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.6.2-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.8.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.9.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.9.1-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.9.2-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.9.3-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.9.4-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.9.5-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.9.6-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.9.7-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.9.8-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/12.9.9-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.0.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.0.1-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.0.2-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.0.3-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.1.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.1.1-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.2.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.3.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.3.1-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.4.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.4.0b1-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.4.1-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.4.1a0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.4.2-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.4.3-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/release/13.5.0-notes.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/support.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/source/tips_and_tricks.rst (100%) rename {cuda_bindings => cuda_bindings_13}/docs/versions.json (100%) rename {cuda_bindings => cuda_bindings_13}/pixi.lock (100%) rename {cuda_bindings => cuda_bindings_13}/pixi.toml (100%) rename {cuda_bindings => cuda_bindings_13}/pyproject.toml (100%) rename {cuda_bindings => cuda_bindings_13}/setup.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/conftest.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/cudla/conftest.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/cudla/test_cudla_bindings.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/cufile.json (100%) rename {cuda_bindings => cuda_bindings_13}/tests/cython/build_tests.bat (100%) rename {cuda_bindings => cuda_bindings_13}/tests/cython/build_tests.py (98%) rename {cuda_bindings => cuda_bindings_13}/tests/cython/build_tests.sh (100%) rename {cuda_bindings => cuda_bindings_13}/tests/cython/test_ccuda.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/tests/cython/test_ccudart.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/tests/cython/test_cython.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/cython/test_interoperability_cython.pyx (100%) rename {cuda_bindings => cuda_bindings_13}/tests/example_tests/run_samples.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/example_tests/test_args.json (100%) rename {cuda_bindings => cuda_bindings_13}/tests/example_tests/test_cuda_bindings_utils.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/example_tests/test_interactive_sample_configuration.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/example_tests/test_samples.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/legacy_api/README.md (100%) rename {cuda_bindings => cuda_bindings_13}/tests/legacy_api/test_legacy_kernelParams.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/legacy_api/test_legacy_nvfatbin.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/legacy_api/test_legacy_nvjitlink.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/legacy_api/test_legacy_nvrtc.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/README.md (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/__init__.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/conftest.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/test_compute_mode.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/test_cuda.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/test_device.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/test_gpu.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/test_init.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/test_nvlink.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/test_page_retirement.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/test_pci.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/test_pynvml.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/test_unit.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/test_util.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/nvml/util.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_basics.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_build_hooks.py (99%) rename {cuda_bindings => cuda_bindings_13}/tests/test_cuda.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_cudart.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_cufile.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_envvar.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_graphics_apis.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_interoperability.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_kernelParams.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_nvfatbin.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_nvjitlink.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_nvrtc.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_nvvm.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_utils.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/test_version_check.py (100%) rename {cuda_bindings => cuda_bindings_13}/tests/utils/check_cyclical_import.py (100%) diff --git a/.coderabbit.yaml b/.coderabbit.yaml index 5d6302b986b..19c6c9d02f5 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -65,7 +65,7 @@ reviews: custom_checks: [] path_instructions: - - path: "cuda_bindings/**/*" + - path: "cuda_bindings_13/**/*" instructions: | Focus on Cython binding correctness, API and ABI stability, error-code propagation, resource ownership and reference counting, GIL handling, cross-platform behavior. @@ -122,23 +122,23 @@ knowledge_base: filePatterns: - "AGENTS.md" - "CONTRIBUTING.md" - - "cuda_bindings/AGENTS.md" + - "cuda_bindings_13/AGENTS.md" - "cuda_core/AGENTS.md" - "cuda_core/tests/AGENTS.md" - "cuda_pathfinder/AGENTS.md" - "cuda_python/AGENTS.md" - "benchmarks/cuda_bindings/AGENTS.md" - "benchmarks/cuda_core/AGENTS.md" - - "cuda_bindings/README.md" + - "cuda_bindings_13/README.md" - "cuda_core/README.md" - "cuda_pathfinder/DESCRIPTION.rst" - "cuda_python/DESCRIPTION.rst" - - "cuda_bindings/docs/source/contribute.rst" + - "cuda_bindings_13/docs/source/contribute.rst" - "cuda_core/docs/source/contribute.rst" - "cuda_core/docs/source/concurrency.rst" - "cuda_core/docs/source/error_handling.rst" - "cuda_pathfinder/docs/source/contribute.rst" - - "cuda_bindings/docs/source/release.rst" + - "cuda_bindings_13/docs/source/release.rst" - "cuda_core/docs/source/release.rst" - "cuda_pathfinder/docs/source/release.rst" - "cuda_python/docs/source/release.rst" diff --git a/.github/labeler.yml b/.github/labeler.yml index cff89c44a85..344b3d312e7 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -8,7 +8,7 @@ cuda.bindings: - changed-files: - any-glob-to-any-file: - - 'cuda_bindings/**' + - 'cuda_bindings_13/**' - 'samples/cuda_bindings/**' cuda.core: diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 4558992deda..a1dd9180a6b 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -110,6 +110,17 @@ jobs: PYTHON_VERSION_FORMATTED="312" # see above REPO_DIR=$(pwd) + # Release docs may check out tags from before the source-root rename. + if [[ -d cuda_bindings_13 ]]; then + CUDA_BINDINGS_SOURCE_DIR=cuda_bindings_13 + elif [[ -d cuda_bindings ]]; then + CUDA_BINDINGS_SOURCE_DIR=cuda_bindings + else + echo "error: cannot find the cuda.bindings source directory" >&2 + exit 1 + fi + echo "CUDA_BINDINGS_SOURCE_DIR=${CUDA_BINDINGS_SOURCE_DIR}" >> "$GITHUB_ENV" + if [[ ${{ inputs.is-release }} == "true" ]]; then FILE_HASH="*" DOCS_GITHUB_REF="${{ inputs.git-tag }}" @@ -130,7 +141,7 @@ jobs: CUDA_BINDINGS_ARTIFACT_BASENAME="cuda-bindings-python${PYTHON_VERSION_FORMATTED}-cuda${BUILD_CTK_VER}-linux-64" echo "CUDA_BINDINGS_ARTIFACT_BASENAME=${CUDA_BINDINGS_ARTIFACT_BASENAME}" >> $GITHUB_ENV echo "CUDA_BINDINGS_ARTIFACT_NAME=${CUDA_BINDINGS_ARTIFACT_BASENAME}-${FILE_HASH}" >> $GITHUB_ENV - echo "CUDA_BINDINGS_ARTIFACTS_DIR=$(realpath "$REPO_DIR/cuda_bindings/dist")" >> $GITHUB_ENV + echo "CUDA_BINDINGS_ARTIFACTS_DIR=$(realpath "$REPO_DIR/$CUDA_BINDINGS_SOURCE_DIR/dist")" >> $GITHUB_ENV - name: Download cuda-python build artifacts uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 @@ -262,6 +273,9 @@ jobs: if: ${{ inputs.component != 'all' }} run: | COMPONENT=$(echo "${{ inputs.component }}" | tr '-' '_') + if [[ "${{ inputs.component }}" == "cuda-bindings" ]]; then + COMPONENT="${CUDA_BINDINGS_SOURCE_DIR}" + fi pushd ${COMPONENT}/docs/ if [[ "${{ inputs.is-release }}" == "false" ]]; then ./build_docs.sh latest-only diff --git a/.github/workflows/build-wheel.yml b/.github/workflows/build-wheel.yml index a894387aec2..f51ce308f44 100644 --- a/.github/workflows/build-wheel.yml +++ b/.github/workflows/build-wheel.yml @@ -229,7 +229,7 @@ jobs: if: ${{ env.BUILD_BINDINGS == 'true' }} uses: pypa/cibuildwheel@b3395e271a35f73dad77f21802abe9b986dfe299 # v4.3.1 with: - package-dir: ./cuda_bindings/ + package-dir: ./cuda_bindings_13/ output-dir: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }} extras: uv env: @@ -474,7 +474,7 @@ jobs: - name: Build cuda.bindings Cython tests if: ${{ env.TEST_BINDINGS == 'true' }} run: | - pip install ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl --group ./cuda_bindings/pyproject.toml:test + pip install ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl --group ./cuda_bindings_13/pyproject.toml:test pushd ${{ env.CUDA_BINDINGS_CYTHON_TESTS_DIR }} bash build_tests.sh popd @@ -563,7 +563,7 @@ jobs: --branch "${OLD_BRANCH}" \ --artifact "${OLD_ARTIFACT_PATTERN}" \ NVIDIA/cuda-python "CI") - PREV_BINDINGS_DIR="cuda_bindings/dist-prev" + PREV_BINDINGS_DIR="cuda_bindings_13/dist-prev" gh run download \ "${LATEST_PRIOR_RUN_ID}" \ @@ -580,7 +580,7 @@ jobs: if: ${{ !inputs.single-cuda-major && env.BUILD_CORE == 'true' }} run: | pathfinder_wheels=(cuda_pathfinder/cuda_pathfinder-*.whl) - bindings_wheels=(cuda_bindings/dist-prev/cuda_bindings-"${BUILD_PREV_CUDA_MAJOR}".*.whl) + bindings_wheels=(cuda_bindings_13/dist-prev/cuda_bindings-"${BUILD_PREV_CUDA_MAJOR}".*.whl) test "${#pathfinder_wheels[@]}" -eq 1 test "${#bindings_wheels[@]}" -eq 1 test -f "${pathfinder_wheels[0]}" diff --git a/.github/workflows/ci-pixi-source-test.yml b/.github/workflows/ci-pixi-source-test.yml index fe2b442e3e1..1ec8b5d8bd1 100644 --- a/.github/workflows/ci-pixi-source-test.yml +++ b/.github/workflows/ci-pixi-source-test.yml @@ -41,10 +41,10 @@ on: # Path-dependency metadata (including cuda_python_test_helpers) feeds the # solve, so it can break the source build without a pixi.toml edit. - "**/pyproject.toml" - - "cuda_bindings/build_hooks.py" + - "cuda_bindings_13/build_hooks.py" - "cuda_core/build_hooks.py" - - "cuda_bindings/cuda/bindings/**" # generated bindings sources - - "cuda_bindings/tests/cython/**" + - "cuda_bindings_13/cuda/bindings/**" # generated bindings sources + - "cuda_bindings_13/tests/cython/**" - "cuda_core/tests/cython/**" - "ci/versions.yml" - "ci/pixi-version.env" @@ -103,16 +103,16 @@ jobs: # bindings + core: force the source build (catches nvrtc/driver # compile errors like #2182) and import them (catches ABI mismatches). - pixi run --manifest-path cuda_bindings -e "${CUDA_ENV}" \ + pixi run --manifest-path cuda_bindings_13 -e "${CUDA_ENV}" \ python -c "import cuda.bindings.driver, cuda.bindings.nvrtc, cuda.bindings.runtime; print('bindings import OK')" pixi run --manifest-path cuda_core -e "${CUDA_ENV}" \ python -c "import cuda.core; print('core import OK')" # cython test extensions: build them and confirm each .so landed next # to its .pyx in tests/cython (catches the placement regression #2180). - pixi run --manifest-path cuda_bindings -e "${CUDA_ENV}" build-cython-tests + pixi run --manifest-path cuda_bindings_13 -e "${CUDA_ENV}" build-cython-tests pixi run --manifest-path cuda_core -e "${CUDA_ENV}" build-cython-tests - for d in cuda_bindings/tests/cython cuda_core/tests/cython; do + for d in cuda_bindings_13/tests/cython cuda_core/tests/cython; do if ! compgen -G "${d}/*.cpython-*.so" > /dev/null; then echo "::error::no compiled cython test .so in ${d} (placement regression)" exit 1 @@ -131,7 +131,7 @@ jobs: # The round trip (not just cu13 -> cu12) is what catches the second half: # coming back to cu13 must not silently reuse the cu12 extension. # - # cuda_core only: cuda_bindings cannot be source-built in its cu12 + # cuda_core only: cuda_bindings_13 cannot be source-built in its cu12 # environment at all, for reasons unrelated to stale artifacts. build-identity-roundtrip: name: "cu13 -> cu12 -> cu13 round trip (linux-64, CPU)" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fc4f0999200..68d455ecefd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -122,13 +122,13 @@ jobs: # # Dependency graph (verified in pyproject.toml files): # cuda_pathfinder -> (no internal deps) - # cuda_bindings -> cuda_pathfinder - # cuda_core -> cuda_pathfinder, cuda_bindings - # cuda_python -> cuda_pathfinder, cuda_bindings, cuda_core (meta package) + # cuda_bindings_13 -> cuda_pathfinder + # cuda_core -> cuda_pathfinder, cuda_bindings_13 + # cuda_python -> cuda_pathfinder, cuda_bindings_13, cuda_core (meta package) # # A change to cuda_pathfinder (or shared infra) forces a rebuild of every - # downstream module. A change to cuda_bindings forces rebuild of cuda_core. - # A change to cuda_core alone skips rebuilding/retesting cuda_bindings and + # downstream module. A change to cuda_bindings_13 forces rebuild of cuda_core. + # A change to cuda_core alone skips rebuilding/retesting cuda_bindings_13 and # cuda_pathfinder, but still retests the downstream cuda-python metapackage. # Shared build/orchestration changes run the full pipeline; test-only CI # infrastructure runs every test suite without rebuilding package wheels. @@ -477,7 +477,7 @@ jobs: python-versions: ${{ needs.ci-vars.outputs.PYTHON_SUPPORTED }} # NOTE: test-sdist jobs are split by platform (mirroring build-* and test-wheel-*) - # so platform-specific sources (e.g. cuda_bindings/*_windows.pyx selected by + # so platform-specific sources (e.g. cuda_bindings_13/*_windows.pyx selected by # build_hooks.py) are exercised on their target OS. Keep these job definitions # textually identical except for: # - host-platform value diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index ff5a0546ded..aee89d41f2d 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -142,8 +142,8 @@ jobs: run: | export PIP_BUILD_CONSTRAINT="$(pwd)/wheel-constraints/cuda-bindings.txt" export PIP_CONSTRAINT="${PIP_BUILD_CONSTRAINT}" - .venv/bin/pip wheel -v --no-deps ./cuda_bindings -w ./wheels/ - .venv/bin/pip install -v ./wheels/cuda_bindings*.whl --group ./cuda_bindings/pyproject.toml:test + .venv/bin/pip wheel -v --no-deps ./cuda_bindings_13 -w ./wheels/ + .venv/bin/pip install -v ./wheels/cuda_bindings*.whl --group ./cuda_bindings_13/pyproject.toml:test - name: Constrain cuda-core to the local cuda-bindings wheel run: | @@ -188,7 +188,7 @@ jobs: continue-on-error: true run: | cd $INSTALL_ROOT - $REPO_ROOT/.venv/bin/pytest -v --cov=./cuda --cov-append --cov-context=test --cov-config=$REPO_ROOT/.coveragerc $REPO_ROOT/cuda_bindings/tests + $REPO_ROOT/.venv/bin/pytest -v --cov=./cuda --cov-append --cov-context=test --cov-config=$REPO_ROOT/.coveragerc $REPO_ROOT/cuda_bindings_13/tests - name: Run cuda.core tests continue-on-error: true @@ -284,7 +284,7 @@ jobs: run: | export PIP_BUILD_CONSTRAINT="$(cygpath -w "$(pwd)/wheel-constraints/cuda-bindings.txt")" export PIP_CONSTRAINT="${PIP_BUILD_CONSTRAINT}" - cd cuda_bindings + cd cuda_bindings_13 ../.venv/Scripts/pip wheel -v --no-deps . -w ../wheels/ - name: Constrain cuda.core to the local cuda.bindings wheel @@ -423,7 +423,7 @@ jobs: run: | .venv/Scripts/pip install coverage pytest-cov Cython .venv/Scripts/pip install --group ./cuda_pathfinder/pyproject.toml:test - .venv/Scripts/pip install --group ./cuda_bindings/pyproject.toml:test + .venv/Scripts/pip install --group ./cuda_bindings_13/pyproject.toml:test .venv/Scripts/pip install --group ./cuda_core/pyproject.toml:test - name: Get install root @@ -448,7 +448,7 @@ jobs: --cwd "${{ steps.install-root.outputs.INSTALL_ROOT }}" \ -v --cov=./cuda --cov-append --cov-context=test \ --cov-config="$GITHUB_WORKSPACE/.coveragerc" \ - "$GITHUB_WORKSPACE/cuda_bindings/tests" + "$GITHUB_WORKSPACE/cuda_bindings_13/tests" - name: Run cuda.core tests (with 8MB stack) continue-on-error: true diff --git a/.github/workflows/test-sdist-linux.yml b/.github/workflows/test-sdist-linux.yml index 2717fdb5a60..f061246d501 100644 --- a/.github/workflows/test-sdist-linux.yml +++ b/.github/workflows/test-sdist-linux.yml @@ -109,7 +109,7 @@ jobs: host-platform: ${{ inputs.host-platform }} cuda-version: ${{ inputs.cuda-version }} - # cuda_bindings/setup.py parses CUDA headers at import time, so CUDA_PATH + # cuda_bindings_13/setup.py parses CUDA headers at import time, so CUDA_PATH # (set by fetch_ctk) must be available for both sdist and wheel builds. - name: Build cuda.bindings sdist and wheel-from-sdist if: ${{ env.BUILD_BINDINGS == 'true' }} @@ -119,22 +119,22 @@ jobs: export CXX="sccache c++" export PIP_BUILD_CONSTRAINT="$(pwd)/wheel-constraints/cuda-bindings.txt" export PIP_CONSTRAINT="${PIP_BUILD_CONSTRAINT}" - python -m build --sdist cuda_bindings/ - pip wheel --no-deps --wheel-dir cuda_bindings/dist cuda_bindings/dist/*.tar.gz + python -m build --sdist cuda_bindings_13/ + pip wheel --no-deps --wheel-dir cuda_bindings_13/dist cuda_bindings_13/dist/*.tar.gz - name: Download cuda.bindings wheel if: ${{ env.BUILD_BINDINGS != 'true' && env.BUILD_CORE == 'true' }} uses: ./.github/actions/download-artifact-retry with: name: cuda-bindings-python312-cuda${{ inputs.cuda-version }}-${{ inputs.host-platform }}-${{ github.sha }} - path: cuda_bindings/dist + path: cuda_bindings_13/dist - name: Constrain cuda.core to the local cuda.bindings wheel if: ${{ env.BUILD_CORE == 'true' }} run: | CUDA_MAJOR="$(echo '${{ inputs.cuda-version }}' | cut -d. -f1)" pathfinder_wheels=(cuda_pathfinder/dist/cuda_pathfinder-*.whl) - bindings_wheels=(cuda_bindings/dist/cuda_bindings-"${CUDA_MAJOR}".*.whl) + bindings_wheels=(cuda_bindings_13/dist/cuda_bindings-"${CUDA_MAJOR}".*.whl) test "${#pathfinder_wheels[@]}" -eq 1 test "${#bindings_wheels[@]}" -eq 1 test -f "${pathfinder_wheels[0]}" diff --git a/.github/workflows/test-sdist-windows.yml b/.github/workflows/test-sdist-windows.yml index 52bfcf949c9..a24d806b38b 100644 --- a/.github/workflows/test-sdist-windows.yml +++ b/.github/workflows/test-sdist-windows.yml @@ -3,7 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 # Windows counterpart of test-sdist-linux.yml. Exists so that platform-gated -# sources (e.g. cuda_bindings/*_windows.pyx selected by build_hooks.py) are +# sources (e.g. cuda_bindings_13/*_windows.pyx selected by build_hooks.py) are # exercised by the sdist completeness test. Keep the shape of this file in # sync with test-sdist-linux.yml aside from Windows-specific setup (MSVC, # no sccache, no proxy cache). @@ -108,7 +108,7 @@ jobs: host-platform: ${{ inputs.host-platform }} cuda-version: ${{ inputs.cuda-version }} - # cuda_bindings/setup.py parses CUDA headers at import time, so CUDA_PATH + # cuda_bindings_13/setup.py parses CUDA headers at import time, so CUDA_PATH # (set by fetch_ctk) must be available for both sdist and wheel builds. # Constraint paths are passed as native Windows paths because the pip # subprocesses run outside Git Bash. @@ -118,22 +118,22 @@ jobs: export CUDA_PYTHON_PARALLEL_LEVEL=$(nproc) export PIP_BUILD_CONSTRAINT="$(cygpath -w "$(pwd)/wheel-constraints/cuda-bindings.txt")" export PIP_CONSTRAINT="${PIP_BUILD_CONSTRAINT}" - python -m build --sdist cuda_bindings/ - pip wheel --no-deps --wheel-dir cuda_bindings/dist cuda_bindings/dist/*.tar.gz + python -m build --sdist cuda_bindings_13/ + pip wheel --no-deps --wheel-dir cuda_bindings_13/dist cuda_bindings_13/dist/*.tar.gz - name: Download cuda.bindings wheel if: ${{ env.BUILD_BINDINGS != 'true' && env.BUILD_CORE == 'true' }} uses: ./.github/actions/download-artifact-retry with: name: cuda-bindings-python312-cuda${{ inputs.cuda-version }}-${{ inputs.host-platform }}-${{ github.sha }} - path: cuda_bindings/dist + path: cuda_bindings_13/dist - name: Constrain cuda.core to the local cuda.bindings wheel if: ${{ env.BUILD_CORE == 'true' }} run: | CUDA_MAJOR="$(echo '${{ inputs.cuda-version }}' | cut -d. -f1)" pathfinder_wheels=(cuda_pathfinder/dist/cuda_pathfinder-*.whl) - bindings_wheels=(cuda_bindings/dist/cuda_bindings-"${CUDA_MAJOR}".*.whl) + bindings_wheels=(cuda_bindings_13/dist/cuda_bindings-"${CUDA_MAJOR}".*.whl) test "${#pathfinder_wheels[@]}" -eq 1 test "${#bindings_wheels[@]}" -eq 1 test -f "${pathfinder_wheels[0]}" diff --git a/.gitignore b/.gitignore index 5616c05cc44..388fb5e11a3 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,7 @@ __pycache__/ .benchmarks/ *.cpp !*_impl.cpp -!cuda_bindings/cuda/bindings/_bindings/loader.cpp +!cuda_bindings_13/cuda/bindings/_bindings/loader.cpp !cuda_core/cuda/core/_cpp/**/*.cpp cache_driver cache_runtime @@ -27,17 +27,17 @@ cuda_core/tests/test_binaries/*.a cuda_core/tests/test_binaries/*.lib # CUDA Python specific (auto-generated) -cuda_bindings/cuda/bindings/_internal/cudla.pyx -cuda_bindings/cuda/bindings/_internal/driver.pyx -cuda_bindings/cuda/bindings/_internal/nvrtc.pyx -cuda_bindings/cuda/bindings/_internal/cufile.pyx -cuda_bindings/cuda/bindings/_internal/nvfatbin.pyx -cuda_bindings/cuda/bindings/_internal/nvjitlink.pyx -cuda_bindings/cuda/bindings/_internal/nvml.pyx -cuda_bindings/cuda/bindings/_internal/nvvm.pyx -cuda_bindings/cuda/bindings/_internal/runtime.pyx -cuda_bindings/cuda/bindings/_internal/runtime_ptds.pyx -cuda_bindings/cuda/bindings/utils/_get_handle.pyx +cuda_bindings_13/cuda/bindings/_internal/cudla.pyx +cuda_bindings_13/cuda/bindings/_internal/driver.pyx +cuda_bindings_13/cuda/bindings/_internal/nvrtc.pyx +cuda_bindings_13/cuda/bindings/_internal/cufile.pyx +cuda_bindings_13/cuda/bindings/_internal/nvfatbin.pyx +cuda_bindings_13/cuda/bindings/_internal/nvjitlink.pyx +cuda_bindings_13/cuda/bindings/_internal/nvml.pyx +cuda_bindings_13/cuda/bindings/_internal/nvvm.pyx +cuda_bindings_13/cuda/bindings/_internal/runtime.pyx +cuda_bindings_13/cuda/bindings/_internal/runtime_ptds.pyx +cuda_bindings_13/cuda/bindings/utils/_get_handle.pyx # Version files from setuptools_scm _version.py @@ -178,7 +178,7 @@ cython_debug/ # Dont ignore !.github/actions/build/ # pixi environments -# Per-workspace commands such as `pixi lock --manifest-path cuda_bindings` +# Per-workspace commands such as `pixi lock --manifest-path cuda_bindings_13` # create a .pixi/ next to that manifest, so match at any depth. **/.pixi/* !**/.pixi/config.toml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b320023473c..f64f830561d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -28,7 +28,7 @@ repos: hooks: - id: ruff-check args: [--fix, --show-fixes] - exclude: (^cuda_bindings/cuda/bindings/_internal/_fast_enum\.py$)|(.*\.pyi$) + exclude: (^cuda_bindings_13/cuda/bindings/_internal/_fast_enum\.py$)|(.*\.pyi$) - id: ruff-format exclude: .*\.pyi$ @@ -62,7 +62,7 @@ repos: name: Check generated-file seals entry: python ./toolshed/check_generated_file_seals.py language: python - files: ^cuda_bindings/ + files: ^cuda_bindings_13/ types: [text] - id: check-pixi-cuda-version @@ -70,7 +70,7 @@ repos: entry: python ./ci/tools/check_pixi_cuda_version.py language: python additional_dependencies: [pyyaml==6.0.3] - files: '^(ci/versions\.yml|cuda_bindings/pixi\.toml|cuda_core/pixi\.toml)$' + files: '^(ci/versions\.yml|cuda_bindings_13/pixi\.toml|cuda_core/pixi\.toml)$' pass_filenames: false - id: check-mempool-hygiene @@ -83,10 +83,10 @@ repos: name: Check _build_shared.py copies are identical language: system pass_filenames: false - files: '^(cuda_bindings|cuda_core)/_build_shared\.py$' + files: '^(cuda_bindings_13|cuda_core)/_build_shared\.py$' entry: bash -c args: - - 'git diff --no-index --exit-code -- cuda_bindings/_build_shared.py cuda_core/_build_shared.py || { echo "ERROR: cuda_bindings/_build_shared.py and cuda_core/_build_shared.py must be byte-identical. Copy one onto the other and commit both." >&2; exit 1; }' + - 'git diff --no-index --exit-code -- cuda_bindings_13/_build_shared.py cuda_core/_build_shared.py || { echo "ERROR: cuda_bindings_13/_build_shared.py and cuda_core/_build_shared.py must be byte-identical. Copy one onto the other and commit both." >&2; exit 1; }' - "_" # fake script name, because bash considers $0 (the first argument) to be the script name - id: no-markdown-in-docs-source @@ -132,7 +132,7 @@ repos: rev: "3e8a8703264a2f4a69428a0aa4dcb512790b2c8c" # frozen: v6.0.0 hooks: - id: check-added-large-files - exclude: cuda_bindings/cuda/bindings/nvml.pyx + exclude: cuda_bindings_13/cuda/bindings/nvml.pyx - id: check-case-conflict - id: check-docstring-first - id: check-merge-conflict @@ -141,14 +141,14 @@ repos: - id: check-yaml - id: debug-statements - id: end-of-file-fixer - exclude: &gen_exclude '^(?:cuda_python/README\.md|(?:.*/)?CLAUDE\.md|(?:.*/)?\.git_archival\.txt|cuda_bindings/cuda/bindings/.*\.in?|cuda_bindings/docs/source/module/.*\.rst?|.*\.pyi)$' + exclude: &gen_exclude '^(?:cuda_python/README\.md|(?:.*/)?CLAUDE\.md|(?:.*/)?\.git_archival\.txt|cuda_bindings_13/cuda/bindings/.*\.in?|cuda_bindings_13/docs/source/module/.*\.rst?|.*\.pyi)$' - id: mixed-line-ending - id: trailing-whitespace exclude: | (?x)^(?: cuda_python/README\.md| - cuda_bindings/cuda/bindings/.*\.in?| - cuda_bindings/docs/source/module/.*\.rst?| + cuda_bindings_13/cuda/bindings/.*\.in?| + cuda_bindings_13/docs/source/module/.*\.rst?| .*\.patch$ )$ @@ -190,7 +190,7 @@ repos: hooks: - id: cython-lint args: [--no-pycodestyle] - exclude: ^cuda_bindings/ + exclude: ^cuda_bindings_13/ additional_dependencies: - Cython==3.2.9 diff --git a/AGENTS.md b/AGENTS.md index 45a625ceb3f..b50bd9e1ca3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,7 +8,7 @@ guide for package-specific conventions and workflows. ## Package map - `cuda_pathfinder/`: Pure-Python library discovery and loading utilities. -- `cuda_bindings/`: Low-level CUDA host API bindings (Cython-heavy). +- `cuda_bindings_13/`: Low-level CUDA host API bindings (Cython-heavy). - `cuda_core/`: High-level Pythonic CUDA APIs built on top of bindings. - `cuda_python/`: Metapackage and docs aggregation. diff --git a/README.md b/README.md index 9c2955f6b7e..3e9ebf79afb 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ The root `LICENSE` governs the repository as a whole: | Subproject | License | License file | | ---------------- | ---------- | -------------------------------------------------------- | -| `cuda.bindings` | Apache-2.0 | [`cuda_bindings/LICENSE`](./cuda_bindings/LICENSE) | +| `cuda.bindings` | Apache-2.0 | [`cuda_bindings_13/LICENSE`](./cuda_bindings_13/LICENSE) | | `cuda.core` | Apache-2.0 | [`cuda_core/LICENSE`](./cuda_core/LICENSE) | | `cuda.pathfinder`| Apache-2.0 | [`cuda_pathfinder/LICENSE`](./cuda_pathfinder/LICENSE) | | `cuda-python` | Apache-2.0 | [`cuda_python/LICENSE`](./cuda_python/LICENSE) | diff --git a/benchmarks/cuda_bindings/AGENTS.md b/benchmarks/cuda_bindings/AGENTS.md index b9096a737f8..a416312f684 100644 --- a/benchmarks/cuda_bindings/AGENTS.md +++ b/benchmarks/cuda_bindings/AGENTS.md @@ -3,4 +3,4 @@ Read the README.md in this directory for more details about the benchmarks. When generating code verify that that the code is correct based on the source for cuda-bindings -that can be found in ../../cuda_bindings +that can be found in ../../cuda_bindings_13 diff --git a/benchmarks/cuda_bindings/pixi.lock b/benchmarks/cuda_bindings/pixi.lock index 5ae3b9ed85c..48fca1bfe4e 100644 --- a/benchmarks/cuda_bindings/pixi.lock +++ b/benchmarks/cuda_bindings/pixi.lock @@ -136,7 +136,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.14.6-pyh5ded981_0.conda - - conda_source: cuda-bindings[d44e1d66] @ ../../cuda_bindings + - conda_source: cuda-bindings[d44e1d66] @ ../../cuda_bindings_13 - conda_source: cuda-pathfinder[6b7636a9] @ ../../cuda_pathfinder wheel: channels: @@ -2065,7 +2065,7 @@ packages: run_exports: {} size: 3994924 timestamp: 1791486987517 -- conda_source: cuda-bindings[d44e1d66] @ ../../cuda_bindings +- conda_source: cuda-bindings[d44e1d66] @ ../../cuda_bindings_13 variants: c_stdlib: sysroot c_stdlib_version: '2.28' diff --git a/benchmarks/cuda_bindings/pixi.toml b/benchmarks/cuda_bindings/pixi.toml index 92b7b2e336f..50d358be431 100644 --- a/benchmarks/cuda_bindings/pixi.toml +++ b/benchmarks/cuda_bindings/pixi.toml @@ -45,7 +45,7 @@ pre-commit = "*" cuda-bindings = "==13.1.0" [feature.bindings-source.dependencies] -cuda-bindings = { path = "../../cuda_bindings" } +cuda-bindings = { path = "../../cuda_bindings_13" } [environments] wheel = { features = ["cu13", "cu13-pinned", "bench", "cpp-bench", "dev", "bindings-wheel"] } diff --git a/benchmarks/cuda_core/pixi.toml b/benchmarks/cuda_core/pixi.toml index 419dfd91b92..c2ba805775d 100644 --- a/benchmarks/cuda_core/pixi.toml +++ b/benchmarks/cuda_core/pixi.toml @@ -33,7 +33,7 @@ cuda-core = "==0.7.0" # sources so local changes are exercised. Mirrors cuda_core/pixi.toml. [feature.core-source.dependencies] cuda-core = { path = "../../cuda_core" } -cuda-bindings = { path = "../../cuda_bindings" } +cuda-bindings = { path = "../../cuda_bindings_13" } [environments] wheel = { features = ["cu13", "cu13-pinned", "bench", "dev", "core-wheel"] } diff --git a/ci/README.md b/ci/README.md index 6fdc6ac6b28..8fc71c6df7d 100644 --- a/ci/README.md +++ b/ci/README.md @@ -86,7 +86,7 @@ version and committed lockfiles are unchanged. Re-enable maintenance only after a released Pixi passes both upstream issue reproducers and repeated byte-stable update/lock/check cycles across all six -workspaces: the repository root, `cuda_pathfinder`, `cuda_bindings`, `cuda_core`, +workspaces: the repository root, `cuda_pathfinder`, `cuda_bindings_13`, `cuda_core`, `benchmarks/cuda_bindings`, and `benchmarks/cuda_core`. Verify both `pixi update --no-install` and `pixi lock`, followed by repeated `pixi lock --check` commands, converge to unchanged lockfile bytes. Then restore strict freshness checks, diff --git a/ci/tools/build_docs_for_link_check.sh b/ci/tools/build_docs_for_link_check.sh index 32c781bf1ad..6c27725b8cd 100644 --- a/ci/tools/build_docs_for_link_check.sh +++ b/ci/tools/build_docs_for_link_check.sh @@ -32,13 +32,13 @@ from importlib import import_module from importlib.metadata import version from pathlib import Path -for distribution, module_name in ( - ("cuda-bindings", "cuda.bindings"), - ("cuda-core", "cuda.core"), - ("cuda-pathfinder", "cuda.pathfinder"), +for distribution, module_name, package_dir in ( + ("cuda-bindings", "cuda.bindings", "cuda_bindings_13"), + ("cuda-core", "cuda.core", "cuda_core"), + ("cuda-pathfinder", "cuda.pathfinder", "cuda_pathfinder"), ): module = import_module(module_name) - source = Path.cwd() / distribution.replace("-", "_") + source = Path.cwd() / package_dir if not Path(module.__file__).resolve().is_relative_to(source): raise RuntimeError(f"{distribution} must be imported from the checkout: {module.__file__}") installed_version = version(distribution) diff --git a/ci/tools/check_pixi_cuda_version.py b/ci/tools/check_pixi_cuda_version.py index aa9be85341c..acd244a7316 100644 --- a/ci/tools/check_pixi_cuda_version.py +++ b/ci/tools/check_pixi_cuda_version.py @@ -13,11 +13,11 @@ ROOT = Path(__file__).resolve().parents[2] VERSIONS_FILE_PATH = ROOT / "ci" / "versions.yml" -PIXI_FILES = [ROOT / d / "pixi.toml" for d in ("cuda_bindings", "cuda_core")] +PIXI_FILES = [ROOT / d / "pixi.toml" for d in ("cuda_bindings_13", "cuda_core")] def main() -> int: - """Verify cuda_bindings/cuda_core pixi pins match ci/versions.yml.""" + """Verify cuda_bindings_13/cuda_core pixi pins match ci/versions.yml.""" if not VERSIONS_FILE_PATH.is_file(): print(f"error: {VERSIONS_FILE_PATH} not found", file=sys.stderr) return 2 @@ -69,7 +69,7 @@ def main() -> int: if errors: print( - f"error: cuda_bindings/cuda_core pixi cuda-version pins out of sync with " + f"error: cuda_bindings_13/cuda_core pixi cuda-version pins out of sync with " f"ci/versions.yml cuda.build.version={build_version!r} " f"(expected pin {expected!r}):", file=sys.stderr, diff --git a/ci/tools/check_release_notes.py b/ci/tools/check_release_notes.py index 1c99ddb019a..e9214e2c595 100644 --- a/ci/tools/check_release_notes.py +++ b/ci/tools/check_release_notes.py @@ -22,7 +22,7 @@ COMPONENT_TO_PACKAGE: dict[str, str] = { "cuda-core": "cuda_core", - "cuda-bindings": "cuda_bindings", + "cuda-bindings": "cuda_bindings_13", "cuda-pathfinder": "cuda_pathfinder", "cuda-python": "cuda_python", } diff --git a/ci/tools/compute_ci_plan.py b/ci/tools/compute_ci_plan.py index 9f94c67173d..ea03abc31a9 100644 --- a/ci/tools/compute_ci_plan.py +++ b/ci/tools/compute_ci_plan.py @@ -16,7 +16,12 @@ REPO_ROOT = Path(__file__).resolve().parents[2] MODULES = ("pathfinder", "bindings", "core", "python") PLATFORMS = ("linux", "windows") -PACKAGE_MODULES = {f"cuda_{module}": module for module in MODULES} +PACKAGE_MODULES = { + "cuda_pathfinder": "pathfinder", + "cuda_bindings_13": "bindings", + "cuda_core": "core", + "cuda_python": "python", +} # Source changes have different build and test consumers. In particular, # cuda-python source needs a same-version bindings wheel, while a core-only diff --git a/ci/tools/env-vars b/ci/tools/env-vars index 9e55a988487..219c9db04f7 100755 --- a/ci/tools/env-vars +++ b/ci/tools/env-vars @@ -138,6 +138,6 @@ fi { echo "CUDA_BINDINGS_ARTIFACT_BASENAME=${CUDA_BINDINGS_ARTIFACT_BASENAME}" echo "CUDA_BINDINGS_ARTIFACT_NAME=${CUDA_BINDINGS_ARTIFACT_BASENAME}-${SHA}" - echo "CUDA_BINDINGS_ARTIFACTS_DIR=$(realpath "${REPO_DIR}/cuda_bindings/dist")" - echo "CUDA_BINDINGS_CYTHON_TESTS_DIR=$(realpath "${REPO_DIR}/cuda_bindings/tests/cython")" + echo "CUDA_BINDINGS_ARTIFACTS_DIR=$(realpath "${REPO_DIR}/cuda_bindings_13/dist")" + echo "CUDA_BINDINGS_CYTHON_TESTS_DIR=$(realpath "${REPO_DIR}/cuda_bindings_13/tests/cython")" } >> $GITHUB_ENV diff --git a/ci/tools/run-tests b/ci/tools/run-tests index e90517c82b9..04a5fa689d3 100755 --- a/ci/tools/run-tests +++ b/ci/tools/run-tests @@ -68,7 +68,7 @@ if [[ "${test_module}" == "pathfinder" ]]; then popd elif [[ "${test_module}" == "bindings" ]]; then echo "Installing bindings wheel" - pushd ./cuda_bindings + pushd ./cuda_bindings_13 if [[ "${LOCAL_CTK}" == 1 ]]; then pip install "${CUDA_BINDINGS_ARTIFACTS_DIR}"/*.whl --group test "${TEST_FT_GROUP[@]}" else diff --git a/ci/tools/tests/test_build_docs_for_link_check.py b/ci/tools/tests/test_build_docs_for_link_check.py index a0a514b3ab9..ad482d2cbdc 100644 --- a/ci/tools/tests/test_build_docs_for_link_check.py +++ b/ci/tools/tests/test_build_docs_for_link_check.py @@ -23,8 +23,26 @@ def test_checking_build_uses_final_local_output_as_docs_domain(tmp_path, monkeyp helper.parent.mkdir(parents=True) shutil.copyfile(BUILD_HELPER, helper) - # Skip package installation/import checks while running the helper's actual - # environment setup and artifact copy. Sphinx is not a CI-tools dependency. + # Use tiny source packages to exercise import provenance without CUDA or + # Sphinx. Distribution names stay unchanged when a source directory moves. + package_dirs = [] + for distribution, directory, module in ( + ("cuda-bindings", "cuda_bindings_13", "bindings"), + ("cuda-core", "cuda_core", "core"), + ("cuda-pathfinder", "cuda_pathfinder", "pathfinder"), + ("cuda-python", "cuda_python", None), + ): + package_dir = checkout / directory + package_dirs.append(str(package_dir)) + metadata = package_dir / f"{distribution.replace('-', '_')}-1.0.dist-info" / "METADATA" + metadata.parent.mkdir(parents=True) + metadata.write_text(f"Name: {distribution}\nVersion: 1.0\n", encoding="utf-8") + if module is not None: + module_file = package_dir / "cuda" / module / "__init__.py" + module_file.parent.mkdir(parents=True) + module_file.write_text('__version__ = "1.0"\n', encoding="utf-8") + + # Skip installation while keeping the helper's actual import checks. bin_dir = tmp_path / "bin" bin_dir.mkdir() python = bin_dir / "python" @@ -33,9 +51,6 @@ def test_checking_build_uses_final_local_output_as_docs_domain(tmp_path, monkeyp set -euo pipefail if [[ "$1" == '-m' && "$2" == 'pip' ]]; then exit 0 -elif [[ "$1" == '-' ]]; then - cat >/dev/null - exit 0 fi exec "$TEST_PYTHON" "$@" """, @@ -66,6 +81,7 @@ def test_checking_build_uses_final_local_output_as_docs_domain(tmp_path, monkeyp monkeypatch.setenv("PATH", f"{bin_dir}{os.pathsep}{os.environ['PATH']}") monkeypatch.setenv("TEST_PYTHON", sys.executable) + monkeypatch.setenv("PYTHONPATH", os.pathsep.join(package_dirs)) monkeypatch.setenv("PIXI_ENVIRONMENT_NAME", "docs") monkeypatch.setenv("CUDA_PYTHON_DOCS_GITHUB_REF", "test-ref") monkeypatch.setenv("CUDA_PYTHON_DOCS_DOMAIN", "https://nvidia.github.io/cuda-python") diff --git a/ci/tools/tests/test_check_release_notes.py b/ci/tools/tests/test_check_release_notes.py index e08eac6610d..61b0d1900b0 100644 --- a/ci/tools/tests/test_check_release_notes.py +++ b/ci/tools/tests/test_check_release_notes.py @@ -207,7 +207,7 @@ def test_mainline_bindings_requires_backport_decision(self, tmp_path, capsys): assert "" in captured.err def test_mainline_bindings_accepts_not_planned(self, tmp_path): - self._make_notes(tmp_path, "cuda_bindings", "13.3.0") + self._make_notes(tmp_path, "cuda_bindings_13", "13.3.0") rc = main( [ @@ -227,7 +227,7 @@ def test_mainline_bindings_accepts_not_planned(self, tmp_path): assert rc == 0 def test_mainline_bindings_checks_planned_backport_notes(self, tmp_path, capsys): - self._make_notes(tmp_path, "cuda_bindings", "13.3.0") + self._make_notes(tmp_path, "cuda_bindings_13", "13.3.0") rc = main( [ @@ -249,8 +249,8 @@ def test_mainline_bindings_checks_planned_backport_notes(self, tmp_path, capsys) assert "12.9.7-notes.rst" in captured.err def test_mainline_bindings_accepts_planned_backport_notes(self, tmp_path): - self._make_notes(tmp_path, "cuda_bindings", "13.3.0") - self._make_notes(tmp_path, "cuda_bindings", "12.9.7") + self._make_notes(tmp_path, "cuda_bindings_13", "13.3.0") + self._make_notes(tmp_path, "cuda_bindings_13", "12.9.7") rc = main( [ @@ -309,11 +309,11 @@ def test_backport_bindings_missing_notes_warns_without_failing(self, tmp_path, m captured = capsys.readouterr() assert rc == 0 - assert "::warning file=cuda_bindings/docs/source/release/12.9.7-notes.rst::" in captured.out + assert "::warning file=cuda_bindings_13/docs/source/release/12.9.7-notes.rst::" in captured.out assert "12.9.7-notes.rst" in summary_path.read_text() def test_mainline_bindings_rejects_non_backport_tag(self, tmp_path): - self._make_notes(tmp_path, "cuda_bindings", "13.3.0") + self._make_notes(tmp_path, "cuda_bindings_13", "13.3.0") rc = main( [ diff --git a/ci/tools/tests/test_compute_ci_plan.py b/ci/tools/tests/test_compute_ci_plan.py index 377fdfce3f3..e1844384d54 100644 --- a/ci/tools/tests/test_compute_ci_plan.py +++ b/ci/tools/tests/test_compute_ci_plan.py @@ -46,7 +46,7 @@ class ComputeWorkplanTest(unittest.TestCase): def test_path_impacts(self) -> None: cases = { "cuda_pathfinder/cuda/pathfinder/_loader.py": (ALL_MODULES, ALL_MODULES, False), - "cuda_bindings/cuda/bindings/driver.pyx": ( + "cuda_bindings_13/cuda/bindings/driver.pyx": ( {"bindings", "core", "python"}, {"bindings", "core", "python"}, False, @@ -55,8 +55,8 @@ def test_path_impacts(self) -> None: "cuda_core/cuda/core/examples/demo.py": ({"core"}, {"core", "python"}, True), "cuda_python/pyproject.toml": ({"bindings", "python"}, {"python"}, False), "cuda_pathfinder/tests/test_loader.py": (set(), {"pathfinder"}, False), - "cuda_bindings/examples/0_Introduction/vectorAddDrv.py": (set(), {"bindings"}, False), - "cuda_bindings/tests/README.md": (set(), {"bindings"}, False), + "cuda_bindings_13/examples/0_Introduction/vectorAddDrv.py": (set(), {"bindings"}, False), + "cuda_bindings_13/tests/README.md": (set(), {"bindings"}, False), "cuda_core/pytest.ini": (set(), {"core"}, False), "cuda_python/tests/test_import.py": (set(), {"python"}, False), "cuda_python_test_helpers/cuda_python_test_helpers/cuda_utils.py": ( @@ -114,7 +114,7 @@ def test_ignored_paths_select_no_work(self) -> None: "benchmarks/cuda_bindings/pixi.toml", "benchmarks/cuda_bindings/AGENTS.md", "cuda_core/cuda/core/_cpp/rt/DESIGN.md", - "cuda_bindings/README.md", + "cuda_bindings_13/README.md", "cuda_core/README.md", "new-area/pixi.toml", "notes.md", diff --git a/context7.json b/context7.json index 99fc556c850..f2eba9367ae 100644 --- a/context7.json +++ b/context7.json @@ -4,7 +4,7 @@ "public_key": "pk_gupaHhsdvsuT1j3BZpb7i", "folders": [ "cuda_python/docs/source", - "cuda_bindings/docs/source", + "cuda_bindings_13/docs/source", "cuda_core/docs/source", "cuda_pathfinder/docs/source" ], diff --git a/cuda_bindings/.git_archival.txt b/cuda_bindings_13/.git_archival.txt similarity index 100% rename from cuda_bindings/.git_archival.txt rename to cuda_bindings_13/.git_archival.txt diff --git a/cuda_bindings/AGENTS.md b/cuda_bindings_13/AGENTS.md similarity index 95% rename from cuda_bindings/AGENTS.md rename to cuda_bindings_13/AGENTS.md index 389246be5a9..327e08bf656 100644 --- a/cuda_bindings/AGENTS.md +++ b/cuda_bindings_13/AGENTS.md @@ -1,4 +1,4 @@ -This file describes `cuda_bindings`, the low-level CUDA host API bindings +This file describes `cuda_bindings_13`, the low-level CUDA host API bindings subpackage in the `cuda-python` monorepo. ## Scope and principles @@ -21,7 +21,7 @@ subpackage in the `cuda-python` monorepo. - **Build backend**: `build_hooks.py` drives extension configuration and Cythonization. Logic shared with `cuda_core` (toolchain selection, the compiler flag set, the Cython cache helpers and the rebuild stamps) lives - in `_build_shared.py`. `cuda_bindings/_build_shared.py` is canonical; + in `_build_shared.py`. `cuda_bindings_13/_build_shared.py` is canonical; `cuda_core/_build_shared.py` must be either a symlink to it or a byte-for-byte identical copy. diff --git a/cuda_bindings/CLAUDE.md b/cuda_bindings_13/CLAUDE.md similarity index 100% rename from cuda_bindings/CLAUDE.md rename to cuda_bindings_13/CLAUDE.md diff --git a/cuda_bindings/DESCRIPTION.rst b/cuda_bindings_13/DESCRIPTION.rst similarity index 98% rename from cuda_bindings/DESCRIPTION.rst rename to cuda_bindings_13/DESCRIPTION.rst index 04ccc93e98a..5fa830bed00 100644 --- a/cuda_bindings/DESCRIPTION.rst +++ b/cuda_bindings_13/DESCRIPTION.rst @@ -11,7 +11,7 @@ cuda-bindings: Low-level CUDA interfaces `cuda.bindings `_ is a standard set of low-level interfaces, providing full coverage of and 1:1 access to the CUDA host APIs from Python. Checkout the `Overview `_ for the workflow and performance results. -* `Repository `_ +* `Repository `_ * `Documentation `_ * `Examples `_ * `Issue tracker `_ diff --git a/cuda_bindings/LICENSE b/cuda_bindings_13/LICENSE similarity index 100% rename from cuda_bindings/LICENSE rename to cuda_bindings_13/LICENSE diff --git a/cuda_bindings/MANIFEST.in b/cuda_bindings_13/MANIFEST.in similarity index 100% rename from cuda_bindings/MANIFEST.in rename to cuda_bindings_13/MANIFEST.in diff --git a/cuda_bindings/README.md b/cuda_bindings_13/README.md similarity index 100% rename from cuda_bindings/README.md rename to cuda_bindings_13/README.md diff --git a/cuda_bindings/_build_shared.py b/cuda_bindings_13/_build_shared.py similarity index 99% rename from cuda_bindings/_build_shared.py rename to cuda_bindings_13/_build_shared.py index 5a1231d1a75..9f40249f20a 100644 --- a/cuda_bindings/_build_shared.py +++ b/cuda_bindings_13/_build_shared.py @@ -3,7 +3,7 @@ """Build helpers shared by the cuda-bindings and cuda-core PEP 517 backends. -``cuda_bindings/_build_shared.py`` is canonical. ``cuda_core/_build_shared.py`` +``cuda_bindings_13/_build_shared.py`` is canonical. ``cuda_core/_build_shared.py`` is either a symlink to it or a byte-for-byte identical copy. Both backends load the helper through their package-local path, keeping ``Path(__file__)``-relative state package-local. diff --git a/cuda_bindings/build_hooks.py b/cuda_bindings_13/build_hooks.py similarity index 100% rename from cuda_bindings/build_hooks.py rename to cuda_bindings_13/build_hooks.py diff --git a/cuda_bindings/cuda/bindings/__init__.pxd b/cuda_bindings_13/cuda/bindings/__init__.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/__init__.pxd rename to cuda_bindings_13/cuda/bindings/__init__.pxd diff --git a/cuda_bindings/cuda/bindings/__init__.py b/cuda_bindings_13/cuda/bindings/__init__.py similarity index 100% rename from cuda_bindings/cuda/bindings/__init__.py rename to cuda_bindings_13/cuda/bindings/__init__.py diff --git a/cuda_bindings/cuda/bindings/_internal/__init__.py b/cuda_bindings_13/cuda/bindings/_internal/__init__.py similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/__init__.py rename to cuda_bindings_13/cuda/bindings/_internal/__init__.py diff --git a/cuda_bindings/cuda/bindings/_internal/_fast_enum.py b/cuda_bindings_13/cuda/bindings/_internal/_fast_enum.py similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/_fast_enum.py rename to cuda_bindings_13/cuda/bindings/_internal/_fast_enum.py diff --git a/cuda_bindings/cuda/bindings/_internal/cudla.pxd b/cuda_bindings_13/cuda/bindings/_internal/cudla.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/cudla.pxd rename to cuda_bindings_13/cuda/bindings/_internal/cudla.pxd diff --git a/cuda_bindings/cuda/bindings/_internal/cudla_linux.pyx b/cuda_bindings_13/cuda/bindings/_internal/cudla_linux.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/cudla_linux.pyx rename to cuda_bindings_13/cuda/bindings/_internal/cudla_linux.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/cudla_windows.pyx b/cuda_bindings_13/cuda/bindings/_internal/cudla_windows.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/cudla_windows.pyx rename to cuda_bindings_13/cuda/bindings/_internal/cudla_windows.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/cufile.pxd b/cuda_bindings_13/cuda/bindings/_internal/cufile.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/cufile.pxd rename to cuda_bindings_13/cuda/bindings/_internal/cufile.pxd diff --git a/cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx b/cuda_bindings_13/cuda/bindings/_internal/cufile_linux.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx rename to cuda_bindings_13/cuda/bindings/_internal/cufile_linux.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/driver.pxd b/cuda_bindings_13/cuda/bindings/_internal/driver.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/driver.pxd rename to cuda_bindings_13/cuda/bindings/_internal/driver.pxd diff --git a/cuda_bindings/cuda/bindings/_internal/driver_linux.pyx b/cuda_bindings_13/cuda/bindings/_internal/driver_linux.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/driver_linux.pyx rename to cuda_bindings_13/cuda/bindings/_internal/driver_linux.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/driver_windows.pyx b/cuda_bindings_13/cuda/bindings/_internal/driver_windows.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/driver_windows.pyx rename to cuda_bindings_13/cuda/bindings/_internal/driver_windows.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/nvfatbin.pxd b/cuda_bindings_13/cuda/bindings/_internal/nvfatbin.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvfatbin.pxd rename to cuda_bindings_13/cuda/bindings/_internal/nvfatbin.pxd diff --git a/cuda_bindings/cuda/bindings/_internal/nvfatbin_linux.pyx b/cuda_bindings_13/cuda/bindings/_internal/nvfatbin_linux.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvfatbin_linux.pyx rename to cuda_bindings_13/cuda/bindings/_internal/nvfatbin_linux.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/nvfatbin_windows.pyx b/cuda_bindings_13/cuda/bindings/_internal/nvfatbin_windows.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvfatbin_windows.pyx rename to cuda_bindings_13/cuda/bindings/_internal/nvfatbin_windows.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/nvjitlink.pxd b/cuda_bindings_13/cuda/bindings/_internal/nvjitlink.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvjitlink.pxd rename to cuda_bindings_13/cuda/bindings/_internal/nvjitlink.pxd diff --git a/cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx b/cuda_bindings_13/cuda/bindings/_internal/nvjitlink_linux.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx rename to cuda_bindings_13/cuda/bindings/_internal/nvjitlink_linux.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/nvjitlink_windows.pyx b/cuda_bindings_13/cuda/bindings/_internal/nvjitlink_windows.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvjitlink_windows.pyx rename to cuda_bindings_13/cuda/bindings/_internal/nvjitlink_windows.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/nvml.pxd b/cuda_bindings_13/cuda/bindings/_internal/nvml.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvml.pxd rename to cuda_bindings_13/cuda/bindings/_internal/nvml.pxd diff --git a/cuda_bindings/cuda/bindings/_internal/nvml_linux.pyx b/cuda_bindings_13/cuda/bindings/_internal/nvml_linux.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvml_linux.pyx rename to cuda_bindings_13/cuda/bindings/_internal/nvml_linux.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/nvml_windows.pyx b/cuda_bindings_13/cuda/bindings/_internal/nvml_windows.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvml_windows.pyx rename to cuda_bindings_13/cuda/bindings/_internal/nvml_windows.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/nvrtc.pxd b/cuda_bindings_13/cuda/bindings/_internal/nvrtc.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvrtc.pxd rename to cuda_bindings_13/cuda/bindings/_internal/nvrtc.pxd diff --git a/cuda_bindings/cuda/bindings/_internal/nvrtc_linux.pyx b/cuda_bindings_13/cuda/bindings/_internal/nvrtc_linux.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvrtc_linux.pyx rename to cuda_bindings_13/cuda/bindings/_internal/nvrtc_linux.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/nvrtc_windows.pyx b/cuda_bindings_13/cuda/bindings/_internal/nvrtc_windows.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvrtc_windows.pyx rename to cuda_bindings_13/cuda/bindings/_internal/nvrtc_windows.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/nvvm.pxd b/cuda_bindings_13/cuda/bindings/_internal/nvvm.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvvm.pxd rename to cuda_bindings_13/cuda/bindings/_internal/nvvm.pxd diff --git a/cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx b/cuda_bindings_13/cuda/bindings/_internal/nvvm_linux.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx rename to cuda_bindings_13/cuda/bindings/_internal/nvvm_linux.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/nvvm_windows.pyx b/cuda_bindings_13/cuda/bindings/_internal/nvvm_windows.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/nvvm_windows.pyx rename to cuda_bindings_13/cuda/bindings/_internal/nvvm_windows.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/runtime.pxd b/cuda_bindings_13/cuda/bindings/_internal/runtime.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/runtime.pxd rename to cuda_bindings_13/cuda/bindings/_internal/runtime.pxd diff --git a/cuda_bindings/cuda/bindings/_internal/runtime_linux.pyx b/cuda_bindings_13/cuda/bindings/_internal/runtime_linux.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/runtime_linux.pyx rename to cuda_bindings_13/cuda/bindings/_internal/runtime_linux.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/runtime_ptds.pxd b/cuda_bindings_13/cuda/bindings/_internal/runtime_ptds.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/runtime_ptds.pxd rename to cuda_bindings_13/cuda/bindings/_internal/runtime_ptds.pxd diff --git a/cuda_bindings/cuda/bindings/_internal/runtime_ptds_linux.pyx b/cuda_bindings_13/cuda/bindings/_internal/runtime_ptds_linux.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/runtime_ptds_linux.pyx rename to cuda_bindings_13/cuda/bindings/_internal/runtime_ptds_linux.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/runtime_ptds_windows.pyx b/cuda_bindings_13/cuda/bindings/_internal/runtime_ptds_windows.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/runtime_ptds_windows.pyx rename to cuda_bindings_13/cuda/bindings/_internal/runtime_ptds_windows.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/runtime_windows.pyx b/cuda_bindings_13/cuda/bindings/_internal/runtime_windows.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/runtime_windows.pyx rename to cuda_bindings_13/cuda/bindings/_internal/runtime_windows.pyx diff --git a/cuda_bindings/cuda/bindings/_internal/utils.pxd b/cuda_bindings_13/cuda/bindings/_internal/utils.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/utils.pxd rename to cuda_bindings_13/cuda/bindings/_internal/utils.pxd diff --git a/cuda_bindings/cuda/bindings/_internal/utils.pyx b/cuda_bindings_13/cuda/bindings/_internal/utils.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_internal/utils.pyx rename to cuda_bindings_13/cuda/bindings/_internal/utils.pyx diff --git a/cuda_bindings/cuda/bindings/_lib/__init__.py b/cuda_bindings_13/cuda/bindings/_lib/__init__.py similarity index 100% rename from cuda_bindings/cuda/bindings/_lib/__init__.py rename to cuda_bindings_13/cuda/bindings/_lib/__init__.py diff --git a/cuda_bindings/cuda/bindings/_lib/cyruntime/cyruntime.pxd b/cuda_bindings_13/cuda/bindings/_lib/cyruntime/cyruntime.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_lib/cyruntime/cyruntime.pxd rename to cuda_bindings_13/cuda/bindings/_lib/cyruntime/cyruntime.pxd diff --git a/cuda_bindings/cuda/bindings/_lib/cyruntime/cyruntime.pxi b/cuda_bindings_13/cuda/bindings/_lib/cyruntime/cyruntime.pxi similarity index 100% rename from cuda_bindings/cuda/bindings/_lib/cyruntime/cyruntime.pxi rename to cuda_bindings_13/cuda/bindings/_lib/cyruntime/cyruntime.pxi diff --git a/cuda_bindings/cuda/bindings/_lib/dlfcn.pxd b/cuda_bindings_13/cuda/bindings/_lib/dlfcn.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_lib/dlfcn.pxd rename to cuda_bindings_13/cuda/bindings/_lib/dlfcn.pxd diff --git a/cuda_bindings/cuda/bindings/_lib/utils.pxd b/cuda_bindings_13/cuda/bindings/_lib/utils.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_lib/utils.pxd rename to cuda_bindings_13/cuda/bindings/_lib/utils.pxd diff --git a/cuda_bindings/cuda/bindings/_lib/utils.pxi b/cuda_bindings_13/cuda/bindings/_lib/utils.pxi similarity index 100% rename from cuda_bindings/cuda/bindings/_lib/utils.pxi rename to cuda_bindings_13/cuda/bindings/_lib/utils.pxi diff --git a/cuda_bindings/cuda/bindings/_lib/windll.pxd b/cuda_bindings_13/cuda/bindings/_lib/windll.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_lib/windll.pxd rename to cuda_bindings_13/cuda/bindings/_lib/windll.pxd diff --git a/cuda_bindings/cuda/bindings/_v2/__init__.py b/cuda_bindings_13/cuda/bindings/_v2/__init__.py similarity index 100% rename from cuda_bindings/cuda/bindings/_v2/__init__.py rename to cuda_bindings_13/cuda/bindings/_v2/__init__.py diff --git a/cuda_bindings/cuda/bindings/_v2/nvrtc.pxd b/cuda_bindings_13/cuda/bindings/_v2/nvrtc.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/_v2/nvrtc.pxd rename to cuda_bindings_13/cuda/bindings/_v2/nvrtc.pxd diff --git a/cuda_bindings/cuda/bindings/_v2/nvrtc.pyx b/cuda_bindings_13/cuda/bindings/_v2/nvrtc.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/_v2/nvrtc.pyx rename to cuda_bindings_13/cuda/bindings/_v2/nvrtc.pyx diff --git a/cuda_bindings/cuda/bindings/cudla.pxd b/cuda_bindings_13/cuda/bindings/cudla.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/cudla.pxd rename to cuda_bindings_13/cuda/bindings/cudla.pxd diff --git a/cuda_bindings/cuda/bindings/cudla.pyx b/cuda_bindings_13/cuda/bindings/cudla.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/cudla.pyx rename to cuda_bindings_13/cuda/bindings/cudla.pyx diff --git a/cuda_bindings/cuda/bindings/cufile.pxd b/cuda_bindings_13/cuda/bindings/cufile.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/cufile.pxd rename to cuda_bindings_13/cuda/bindings/cufile.pxd diff --git a/cuda_bindings/cuda/bindings/cufile.pyx b/cuda_bindings_13/cuda/bindings/cufile.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/cufile.pyx rename to cuda_bindings_13/cuda/bindings/cufile.pyx diff --git a/cuda_bindings/cuda/bindings/cycudla.pxd b/cuda_bindings_13/cuda/bindings/cycudla.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/cycudla.pxd rename to cuda_bindings_13/cuda/bindings/cycudla.pxd diff --git a/cuda_bindings/cuda/bindings/cycudla.pyx b/cuda_bindings_13/cuda/bindings/cycudla.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/cycudla.pyx rename to cuda_bindings_13/cuda/bindings/cycudla.pyx diff --git a/cuda_bindings/cuda/bindings/cycufile.pxd b/cuda_bindings_13/cuda/bindings/cycufile.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/cycufile.pxd rename to cuda_bindings_13/cuda/bindings/cycufile.pxd diff --git a/cuda_bindings/cuda/bindings/cycufile.pyx b/cuda_bindings_13/cuda/bindings/cycufile.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/cycufile.pyx rename to cuda_bindings_13/cuda/bindings/cycufile.pyx diff --git a/cuda_bindings/cuda/bindings/cydriver.pxd b/cuda_bindings_13/cuda/bindings/cydriver.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/cydriver.pxd rename to cuda_bindings_13/cuda/bindings/cydriver.pxd diff --git a/cuda_bindings/cuda/bindings/cydriver.pyx b/cuda_bindings_13/cuda/bindings/cydriver.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/cydriver.pyx rename to cuda_bindings_13/cuda/bindings/cydriver.pyx diff --git a/cuda_bindings/cuda/bindings/cynvfatbin.pxd b/cuda_bindings_13/cuda/bindings/cynvfatbin.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/cynvfatbin.pxd rename to cuda_bindings_13/cuda/bindings/cynvfatbin.pxd diff --git a/cuda_bindings/cuda/bindings/cynvfatbin.pyx b/cuda_bindings_13/cuda/bindings/cynvfatbin.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/cynvfatbin.pyx rename to cuda_bindings_13/cuda/bindings/cynvfatbin.pyx diff --git a/cuda_bindings/cuda/bindings/cynvjitlink.pxd b/cuda_bindings_13/cuda/bindings/cynvjitlink.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/cynvjitlink.pxd rename to cuda_bindings_13/cuda/bindings/cynvjitlink.pxd diff --git a/cuda_bindings/cuda/bindings/cynvjitlink.pyx b/cuda_bindings_13/cuda/bindings/cynvjitlink.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/cynvjitlink.pyx rename to cuda_bindings_13/cuda/bindings/cynvjitlink.pyx diff --git a/cuda_bindings/cuda/bindings/cynvml.pxd b/cuda_bindings_13/cuda/bindings/cynvml.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/cynvml.pxd rename to cuda_bindings_13/cuda/bindings/cynvml.pxd diff --git a/cuda_bindings/cuda/bindings/cynvml.pyx b/cuda_bindings_13/cuda/bindings/cynvml.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/cynvml.pyx rename to cuda_bindings_13/cuda/bindings/cynvml.pyx diff --git a/cuda_bindings/cuda/bindings/cynvrtc.pxd b/cuda_bindings_13/cuda/bindings/cynvrtc.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/cynvrtc.pxd rename to cuda_bindings_13/cuda/bindings/cynvrtc.pxd diff --git a/cuda_bindings/cuda/bindings/cynvrtc.pyx b/cuda_bindings_13/cuda/bindings/cynvrtc.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/cynvrtc.pyx rename to cuda_bindings_13/cuda/bindings/cynvrtc.pyx diff --git a/cuda_bindings/cuda/bindings/cynvvm.pxd b/cuda_bindings_13/cuda/bindings/cynvvm.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/cynvvm.pxd rename to cuda_bindings_13/cuda/bindings/cynvvm.pxd diff --git a/cuda_bindings/cuda/bindings/cynvvm.pyx b/cuda_bindings_13/cuda/bindings/cynvvm.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/cynvvm.pyx rename to cuda_bindings_13/cuda/bindings/cynvvm.pyx diff --git a/cuda_bindings/cuda/bindings/cyruntime.pxd b/cuda_bindings_13/cuda/bindings/cyruntime.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/cyruntime.pxd rename to cuda_bindings_13/cuda/bindings/cyruntime.pxd diff --git a/cuda_bindings/cuda/bindings/cyruntime.pyx b/cuda_bindings_13/cuda/bindings/cyruntime.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/cyruntime.pyx rename to cuda_bindings_13/cuda/bindings/cyruntime.pyx diff --git a/cuda_bindings/cuda/bindings/driver.pxd b/cuda_bindings_13/cuda/bindings/driver.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/driver.pxd rename to cuda_bindings_13/cuda/bindings/driver.pxd diff --git a/cuda_bindings/cuda/bindings/driver.pyx b/cuda_bindings_13/cuda/bindings/driver.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/driver.pyx rename to cuda_bindings_13/cuda/bindings/driver.pyx diff --git a/cuda_bindings/cuda/bindings/nvfatbin.pxd b/cuda_bindings_13/cuda/bindings/nvfatbin.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/nvfatbin.pxd rename to cuda_bindings_13/cuda/bindings/nvfatbin.pxd diff --git a/cuda_bindings/cuda/bindings/nvfatbin.pyx b/cuda_bindings_13/cuda/bindings/nvfatbin.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/nvfatbin.pyx rename to cuda_bindings_13/cuda/bindings/nvfatbin.pyx diff --git a/cuda_bindings/cuda/bindings/nvjitlink.pxd b/cuda_bindings_13/cuda/bindings/nvjitlink.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/nvjitlink.pxd rename to cuda_bindings_13/cuda/bindings/nvjitlink.pxd diff --git a/cuda_bindings/cuda/bindings/nvjitlink.pyx b/cuda_bindings_13/cuda/bindings/nvjitlink.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/nvjitlink.pyx rename to cuda_bindings_13/cuda/bindings/nvjitlink.pyx diff --git a/cuda_bindings/cuda/bindings/nvml.pxd b/cuda_bindings_13/cuda/bindings/nvml.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/nvml.pxd rename to cuda_bindings_13/cuda/bindings/nvml.pxd diff --git a/cuda_bindings/cuda/bindings/nvml.pyx b/cuda_bindings_13/cuda/bindings/nvml.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/nvml.pyx rename to cuda_bindings_13/cuda/bindings/nvml.pyx diff --git a/cuda_bindings/cuda/bindings/nvrtc.pxd b/cuda_bindings_13/cuda/bindings/nvrtc.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/nvrtc.pxd rename to cuda_bindings_13/cuda/bindings/nvrtc.pxd diff --git a/cuda_bindings/cuda/bindings/nvrtc.pyx b/cuda_bindings_13/cuda/bindings/nvrtc.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/nvrtc.pyx rename to cuda_bindings_13/cuda/bindings/nvrtc.pyx diff --git a/cuda_bindings/cuda/bindings/nvvm.pxd b/cuda_bindings_13/cuda/bindings/nvvm.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/nvvm.pxd rename to cuda_bindings_13/cuda/bindings/nvvm.pxd diff --git a/cuda_bindings/cuda/bindings/nvvm.pyx b/cuda_bindings_13/cuda/bindings/nvvm.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/nvvm.pyx rename to cuda_bindings_13/cuda/bindings/nvvm.pyx diff --git a/cuda_bindings/cuda/bindings/runtime.pxd b/cuda_bindings_13/cuda/bindings/runtime.pxd similarity index 100% rename from cuda_bindings/cuda/bindings/runtime.pxd rename to cuda_bindings_13/cuda/bindings/runtime.pxd diff --git a/cuda_bindings/cuda/bindings/runtime.pyx b/cuda_bindings_13/cuda/bindings/runtime.pyx similarity index 100% rename from cuda_bindings/cuda/bindings/runtime.pyx rename to cuda_bindings_13/cuda/bindings/runtime.pyx diff --git a/cuda_bindings/cuda/bindings/utils/__init__.py b/cuda_bindings_13/cuda/bindings/utils/__init__.py similarity index 100% rename from cuda_bindings/cuda/bindings/utils/__init__.py rename to cuda_bindings_13/cuda/bindings/utils/__init__.py diff --git a/cuda_bindings/cuda/bindings/utils/_envvar.py b/cuda_bindings_13/cuda/bindings/utils/_envvar.py similarity index 100% rename from cuda_bindings/cuda/bindings/utils/_envvar.py rename to cuda_bindings_13/cuda/bindings/utils/_envvar.py diff --git a/cuda_bindings/cuda/bindings/utils/_nvvm_utils.py b/cuda_bindings_13/cuda/bindings/utils/_nvvm_utils.py similarity index 100% rename from cuda_bindings/cuda/bindings/utils/_nvvm_utils.py rename to cuda_bindings_13/cuda/bindings/utils/_nvvm_utils.py diff --git a/cuda_bindings/cuda/bindings/utils/_ptx_utils.py b/cuda_bindings_13/cuda/bindings/utils/_ptx_utils.py similarity index 100% rename from cuda_bindings/cuda/bindings/utils/_ptx_utils.py rename to cuda_bindings_13/cuda/bindings/utils/_ptx_utils.py diff --git a/cuda_bindings/cuda/bindings/utils/_version_check.py b/cuda_bindings_13/cuda/bindings/utils/_version_check.py similarity index 100% rename from cuda_bindings/cuda/bindings/utils/_version_check.py rename to cuda_bindings_13/cuda/bindings/utils/_version_check.py diff --git a/cuda_bindings/docs/Makefile b/cuda_bindings_13/docs/Makefile similarity index 100% rename from cuda_bindings/docs/Makefile rename to cuda_bindings_13/docs/Makefile diff --git a/cuda_bindings/docs/README.md b/cuda_bindings_13/docs/README.md similarity index 100% rename from cuda_bindings/docs/README.md rename to cuda_bindings_13/docs/README.md diff --git a/cuda_bindings/docs/build_docs.sh b/cuda_bindings_13/docs/build_docs.sh similarity index 100% rename from cuda_bindings/docs/build_docs.sh rename to cuda_bindings_13/docs/build_docs.sh diff --git a/cuda_bindings/docs/make.bat b/cuda_bindings_13/docs/make.bat similarity index 100% rename from cuda_bindings/docs/make.bat rename to cuda_bindings_13/docs/make.bat diff --git a/cuda_bindings/docs/nv-versions.json b/cuda_bindings_13/docs/nv-versions.json similarity index 100% rename from cuda_bindings/docs/nv-versions.json rename to cuda_bindings_13/docs/nv-versions.json diff --git a/cuda_bindings/docs/source/_static/images/Nsight-Compute-CLI-625x473.png b/cuda_bindings_13/docs/source/_static/images/Nsight-Compute-CLI-625x473.png similarity index 100% rename from cuda_bindings/docs/source/_static/images/Nsight-Compute-CLI-625x473.png rename to cuda_bindings_13/docs/source/_static/images/Nsight-Compute-CLI-625x473.png diff --git a/cuda_bindings/docs/source/_templates/main.html b/cuda_bindings_13/docs/source/_templates/main.html similarity index 100% rename from cuda_bindings/docs/source/_templates/main.html rename to cuda_bindings_13/docs/source/_templates/main.html diff --git a/cuda_bindings/docs/source/api.rst b/cuda_bindings_13/docs/source/api.rst similarity index 100% rename from cuda_bindings/docs/source/api.rst rename to cuda_bindings_13/docs/source/api.rst diff --git a/cuda_bindings/docs/source/conduct.rst b/cuda_bindings_13/docs/source/conduct.rst similarity index 100% rename from cuda_bindings/docs/source/conduct.rst rename to cuda_bindings_13/docs/source/conduct.rst diff --git a/cuda_bindings/docs/source/conf.py b/cuda_bindings_13/docs/source/conf.py similarity index 100% rename from cuda_bindings/docs/source/conf.py rename to cuda_bindings_13/docs/source/conf.py diff --git a/cuda_bindings/docs/source/contribute.rst b/cuda_bindings_13/docs/source/contribute.rst similarity index 100% rename from cuda_bindings/docs/source/contribute.rst rename to cuda_bindings_13/docs/source/contribute.rst diff --git a/cuda_bindings/docs/source/environment_variables.rst b/cuda_bindings_13/docs/source/environment_variables.rst similarity index 100% rename from cuda_bindings/docs/source/environment_variables.rst rename to cuda_bindings_13/docs/source/environment_variables.rst diff --git a/cuda_bindings/docs/source/examples.rst b/cuda_bindings_13/docs/source/examples.rst similarity index 100% rename from cuda_bindings/docs/source/examples.rst rename to cuda_bindings_13/docs/source/examples.rst diff --git a/cuda_bindings/docs/source/index.rst b/cuda_bindings_13/docs/source/index.rst similarity index 100% rename from cuda_bindings/docs/source/index.rst rename to cuda_bindings_13/docs/source/index.rst diff --git a/cuda_bindings/docs/source/install.rst b/cuda_bindings_13/docs/source/install.rst similarity index 100% rename from cuda_bindings/docs/source/install.rst rename to cuda_bindings_13/docs/source/install.rst diff --git a/cuda_bindings/docs/source/license.rst b/cuda_bindings_13/docs/source/license.rst similarity index 100% rename from cuda_bindings/docs/source/license.rst rename to cuda_bindings_13/docs/source/license.rst diff --git a/cuda_bindings/docs/source/module/cudla.rst b/cuda_bindings_13/docs/source/module/cudla.rst similarity index 100% rename from cuda_bindings/docs/source/module/cudla.rst rename to cuda_bindings_13/docs/source/module/cudla.rst diff --git a/cuda_bindings/docs/source/module/cufile.rst b/cuda_bindings_13/docs/source/module/cufile.rst similarity index 100% rename from cuda_bindings/docs/source/module/cufile.rst rename to cuda_bindings_13/docs/source/module/cufile.rst diff --git a/cuda_bindings/docs/source/module/driver.rst b/cuda_bindings_13/docs/source/module/driver.rst similarity index 100% rename from cuda_bindings/docs/source/module/driver.rst rename to cuda_bindings_13/docs/source/module/driver.rst diff --git a/cuda_bindings/docs/source/module/nvfatbin.rst b/cuda_bindings_13/docs/source/module/nvfatbin.rst similarity index 100% rename from cuda_bindings/docs/source/module/nvfatbin.rst rename to cuda_bindings_13/docs/source/module/nvfatbin.rst diff --git a/cuda_bindings/docs/source/module/nvjitlink.rst b/cuda_bindings_13/docs/source/module/nvjitlink.rst similarity index 100% rename from cuda_bindings/docs/source/module/nvjitlink.rst rename to cuda_bindings_13/docs/source/module/nvjitlink.rst diff --git a/cuda_bindings/docs/source/module/nvml.rst b/cuda_bindings_13/docs/source/module/nvml.rst similarity index 100% rename from cuda_bindings/docs/source/module/nvml.rst rename to cuda_bindings_13/docs/source/module/nvml.rst diff --git a/cuda_bindings/docs/source/module/nvrtc.rst b/cuda_bindings_13/docs/source/module/nvrtc.rst similarity index 100% rename from cuda_bindings/docs/source/module/nvrtc.rst rename to cuda_bindings_13/docs/source/module/nvrtc.rst diff --git a/cuda_bindings/docs/source/module/nvvm.rst b/cuda_bindings_13/docs/source/module/nvvm.rst similarity index 100% rename from cuda_bindings/docs/source/module/nvvm.rst rename to cuda_bindings_13/docs/source/module/nvvm.rst diff --git a/cuda_bindings/docs/source/module/runtime.rst b/cuda_bindings_13/docs/source/module/runtime.rst similarity index 100% rename from cuda_bindings/docs/source/module/runtime.rst rename to cuda_bindings_13/docs/source/module/runtime.rst diff --git a/cuda_bindings/docs/source/module/utils.rst b/cuda_bindings_13/docs/source/module/utils.rst similarity index 100% rename from cuda_bindings/docs/source/module/utils.rst rename to cuda_bindings_13/docs/source/module/utils.rst diff --git a/cuda_bindings/docs/source/motivation.rst b/cuda_bindings_13/docs/source/motivation.rst similarity index 100% rename from cuda_bindings/docs/source/motivation.rst rename to cuda_bindings_13/docs/source/motivation.rst diff --git a/cuda_bindings/docs/source/overview.rst b/cuda_bindings_13/docs/source/overview.rst similarity index 100% rename from cuda_bindings/docs/source/overview.rst rename to cuda_bindings_13/docs/source/overview.rst diff --git a/cuda_bindings/docs/source/release.rst b/cuda_bindings_13/docs/source/release.rst similarity index 100% rename from cuda_bindings/docs/source/release.rst rename to cuda_bindings_13/docs/source/release.rst diff --git a/cuda_bindings/docs/source/release/11.4.0-notes.rst b/cuda_bindings_13/docs/source/release/11.4.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.4.0-notes.rst rename to cuda_bindings_13/docs/source/release/11.4.0-notes.rst diff --git a/cuda_bindings/docs/source/release/11.5.0-notes.rst b/cuda_bindings_13/docs/source/release/11.5.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.5.0-notes.rst rename to cuda_bindings_13/docs/source/release/11.5.0-notes.rst diff --git a/cuda_bindings/docs/source/release/11.6.0-notes.rst b/cuda_bindings_13/docs/source/release/11.6.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.6.0-notes.rst rename to cuda_bindings_13/docs/source/release/11.6.0-notes.rst diff --git a/cuda_bindings/docs/source/release/11.6.1-notes.rst b/cuda_bindings_13/docs/source/release/11.6.1-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.6.1-notes.rst rename to cuda_bindings_13/docs/source/release/11.6.1-notes.rst diff --git a/cuda_bindings/docs/source/release/11.7.0-notes.rst b/cuda_bindings_13/docs/source/release/11.7.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.7.0-notes.rst rename to cuda_bindings_13/docs/source/release/11.7.0-notes.rst diff --git a/cuda_bindings/docs/source/release/11.7.1-notes.rst b/cuda_bindings_13/docs/source/release/11.7.1-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.7.1-notes.rst rename to cuda_bindings_13/docs/source/release/11.7.1-notes.rst diff --git a/cuda_bindings/docs/source/release/11.8.0-notes.rst b/cuda_bindings_13/docs/source/release/11.8.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.8.0-notes.rst rename to cuda_bindings_13/docs/source/release/11.8.0-notes.rst diff --git a/cuda_bindings/docs/source/release/11.8.1-notes.rst b/cuda_bindings_13/docs/source/release/11.8.1-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.8.1-notes.rst rename to cuda_bindings_13/docs/source/release/11.8.1-notes.rst diff --git a/cuda_bindings/docs/source/release/11.8.2-notes.rst b/cuda_bindings_13/docs/source/release/11.8.2-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.8.2-notes.rst rename to cuda_bindings_13/docs/source/release/11.8.2-notes.rst diff --git a/cuda_bindings/docs/source/release/11.8.3-notes.rst b/cuda_bindings_13/docs/source/release/11.8.3-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.8.3-notes.rst rename to cuda_bindings_13/docs/source/release/11.8.3-notes.rst diff --git a/cuda_bindings/docs/source/release/11.8.4-notes.rst b/cuda_bindings_13/docs/source/release/11.8.4-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.8.4-notes.rst rename to cuda_bindings_13/docs/source/release/11.8.4-notes.rst diff --git a/cuda_bindings/docs/source/release/11.8.5-notes.rst b/cuda_bindings_13/docs/source/release/11.8.5-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.8.5-notes.rst rename to cuda_bindings_13/docs/source/release/11.8.5-notes.rst diff --git a/cuda_bindings/docs/source/release/11.8.6-notes.rst b/cuda_bindings_13/docs/source/release/11.8.6-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.8.6-notes.rst rename to cuda_bindings_13/docs/source/release/11.8.6-notes.rst diff --git a/cuda_bindings/docs/source/release/11.8.7-notes.rst b/cuda_bindings_13/docs/source/release/11.8.7-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/11.8.7-notes.rst rename to cuda_bindings_13/docs/source/release/11.8.7-notes.rst diff --git a/cuda_bindings/docs/source/release/12.0.0-notes.rst b/cuda_bindings_13/docs/source/release/12.0.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.0.0-notes.rst rename to cuda_bindings_13/docs/source/release/12.0.0-notes.rst diff --git a/cuda_bindings/docs/source/release/12.1.0-notes.rst b/cuda_bindings_13/docs/source/release/12.1.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.1.0-notes.rst rename to cuda_bindings_13/docs/source/release/12.1.0-notes.rst diff --git a/cuda_bindings/docs/source/release/12.2.0-notes.rst b/cuda_bindings_13/docs/source/release/12.2.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.2.0-notes.rst rename to cuda_bindings_13/docs/source/release/12.2.0-notes.rst diff --git a/cuda_bindings/docs/source/release/12.2.1-notes.rst b/cuda_bindings_13/docs/source/release/12.2.1-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.2.1-notes.rst rename to cuda_bindings_13/docs/source/release/12.2.1-notes.rst diff --git a/cuda_bindings/docs/source/release/12.3.0-notes.rst b/cuda_bindings_13/docs/source/release/12.3.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.3.0-notes.rst rename to cuda_bindings_13/docs/source/release/12.3.0-notes.rst diff --git a/cuda_bindings/docs/source/release/12.4.0-notes.rst b/cuda_bindings_13/docs/source/release/12.4.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.4.0-notes.rst rename to cuda_bindings_13/docs/source/release/12.4.0-notes.rst diff --git a/cuda_bindings/docs/source/release/12.5.0-notes.rst b/cuda_bindings_13/docs/source/release/12.5.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.5.0-notes.rst rename to cuda_bindings_13/docs/source/release/12.5.0-notes.rst diff --git a/cuda_bindings/docs/source/release/12.6.0-notes.rst b/cuda_bindings_13/docs/source/release/12.6.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.6.0-notes.rst rename to cuda_bindings_13/docs/source/release/12.6.0-notes.rst diff --git a/cuda_bindings/docs/source/release/12.6.1-notes.rst b/cuda_bindings_13/docs/source/release/12.6.1-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.6.1-notes.rst rename to cuda_bindings_13/docs/source/release/12.6.1-notes.rst diff --git a/cuda_bindings/docs/source/release/12.6.2-notes.rst b/cuda_bindings_13/docs/source/release/12.6.2-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.6.2-notes.rst rename to cuda_bindings_13/docs/source/release/12.6.2-notes.rst diff --git a/cuda_bindings/docs/source/release/12.8.0-notes.rst b/cuda_bindings_13/docs/source/release/12.8.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.8.0-notes.rst rename to cuda_bindings_13/docs/source/release/12.8.0-notes.rst diff --git a/cuda_bindings/docs/source/release/12.9.0-notes.rst b/cuda_bindings_13/docs/source/release/12.9.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.9.0-notes.rst rename to cuda_bindings_13/docs/source/release/12.9.0-notes.rst diff --git a/cuda_bindings/docs/source/release/12.9.1-notes.rst b/cuda_bindings_13/docs/source/release/12.9.1-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.9.1-notes.rst rename to cuda_bindings_13/docs/source/release/12.9.1-notes.rst diff --git a/cuda_bindings/docs/source/release/12.9.2-notes.rst b/cuda_bindings_13/docs/source/release/12.9.2-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.9.2-notes.rst rename to cuda_bindings_13/docs/source/release/12.9.2-notes.rst diff --git a/cuda_bindings/docs/source/release/12.9.3-notes.rst b/cuda_bindings_13/docs/source/release/12.9.3-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.9.3-notes.rst rename to cuda_bindings_13/docs/source/release/12.9.3-notes.rst diff --git a/cuda_bindings/docs/source/release/12.9.4-notes.rst b/cuda_bindings_13/docs/source/release/12.9.4-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.9.4-notes.rst rename to cuda_bindings_13/docs/source/release/12.9.4-notes.rst diff --git a/cuda_bindings/docs/source/release/12.9.5-notes.rst b/cuda_bindings_13/docs/source/release/12.9.5-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.9.5-notes.rst rename to cuda_bindings_13/docs/source/release/12.9.5-notes.rst diff --git a/cuda_bindings/docs/source/release/12.9.6-notes.rst b/cuda_bindings_13/docs/source/release/12.9.6-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.9.6-notes.rst rename to cuda_bindings_13/docs/source/release/12.9.6-notes.rst diff --git a/cuda_bindings/docs/source/release/12.9.7-notes.rst b/cuda_bindings_13/docs/source/release/12.9.7-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.9.7-notes.rst rename to cuda_bindings_13/docs/source/release/12.9.7-notes.rst diff --git a/cuda_bindings/docs/source/release/12.9.8-notes.rst b/cuda_bindings_13/docs/source/release/12.9.8-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.9.8-notes.rst rename to cuda_bindings_13/docs/source/release/12.9.8-notes.rst diff --git a/cuda_bindings/docs/source/release/12.9.9-notes.rst b/cuda_bindings_13/docs/source/release/12.9.9-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/12.9.9-notes.rst rename to cuda_bindings_13/docs/source/release/12.9.9-notes.rst diff --git a/cuda_bindings/docs/source/release/13.0.0-notes.rst b/cuda_bindings_13/docs/source/release/13.0.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.0.0-notes.rst rename to cuda_bindings_13/docs/source/release/13.0.0-notes.rst diff --git a/cuda_bindings/docs/source/release/13.0.1-notes.rst b/cuda_bindings_13/docs/source/release/13.0.1-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.0.1-notes.rst rename to cuda_bindings_13/docs/source/release/13.0.1-notes.rst diff --git a/cuda_bindings/docs/source/release/13.0.2-notes.rst b/cuda_bindings_13/docs/source/release/13.0.2-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.0.2-notes.rst rename to cuda_bindings_13/docs/source/release/13.0.2-notes.rst diff --git a/cuda_bindings/docs/source/release/13.0.3-notes.rst b/cuda_bindings_13/docs/source/release/13.0.3-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.0.3-notes.rst rename to cuda_bindings_13/docs/source/release/13.0.3-notes.rst diff --git a/cuda_bindings/docs/source/release/13.1.0-notes.rst b/cuda_bindings_13/docs/source/release/13.1.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.1.0-notes.rst rename to cuda_bindings_13/docs/source/release/13.1.0-notes.rst diff --git a/cuda_bindings/docs/source/release/13.1.1-notes.rst b/cuda_bindings_13/docs/source/release/13.1.1-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.1.1-notes.rst rename to cuda_bindings_13/docs/source/release/13.1.1-notes.rst diff --git a/cuda_bindings/docs/source/release/13.2.0-notes.rst b/cuda_bindings_13/docs/source/release/13.2.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.2.0-notes.rst rename to cuda_bindings_13/docs/source/release/13.2.0-notes.rst diff --git a/cuda_bindings/docs/source/release/13.3.0-notes.rst b/cuda_bindings_13/docs/source/release/13.3.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.3.0-notes.rst rename to cuda_bindings_13/docs/source/release/13.3.0-notes.rst diff --git a/cuda_bindings/docs/source/release/13.3.1-notes.rst b/cuda_bindings_13/docs/source/release/13.3.1-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.3.1-notes.rst rename to cuda_bindings_13/docs/source/release/13.3.1-notes.rst diff --git a/cuda_bindings/docs/source/release/13.4.0-notes.rst b/cuda_bindings_13/docs/source/release/13.4.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.4.0-notes.rst rename to cuda_bindings_13/docs/source/release/13.4.0-notes.rst diff --git a/cuda_bindings/docs/source/release/13.4.0b1-notes.rst b/cuda_bindings_13/docs/source/release/13.4.0b1-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.4.0b1-notes.rst rename to cuda_bindings_13/docs/source/release/13.4.0b1-notes.rst diff --git a/cuda_bindings/docs/source/release/13.4.1-notes.rst b/cuda_bindings_13/docs/source/release/13.4.1-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.4.1-notes.rst rename to cuda_bindings_13/docs/source/release/13.4.1-notes.rst diff --git a/cuda_bindings/docs/source/release/13.4.1a0-notes.rst b/cuda_bindings_13/docs/source/release/13.4.1a0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.4.1a0-notes.rst rename to cuda_bindings_13/docs/source/release/13.4.1a0-notes.rst diff --git a/cuda_bindings/docs/source/release/13.4.2-notes.rst b/cuda_bindings_13/docs/source/release/13.4.2-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.4.2-notes.rst rename to cuda_bindings_13/docs/source/release/13.4.2-notes.rst diff --git a/cuda_bindings/docs/source/release/13.4.3-notes.rst b/cuda_bindings_13/docs/source/release/13.4.3-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.4.3-notes.rst rename to cuda_bindings_13/docs/source/release/13.4.3-notes.rst diff --git a/cuda_bindings/docs/source/release/13.5.0-notes.rst b/cuda_bindings_13/docs/source/release/13.5.0-notes.rst similarity index 100% rename from cuda_bindings/docs/source/release/13.5.0-notes.rst rename to cuda_bindings_13/docs/source/release/13.5.0-notes.rst diff --git a/cuda_bindings/docs/source/support.rst b/cuda_bindings_13/docs/source/support.rst similarity index 100% rename from cuda_bindings/docs/source/support.rst rename to cuda_bindings_13/docs/source/support.rst diff --git a/cuda_bindings/docs/source/tips_and_tricks.rst b/cuda_bindings_13/docs/source/tips_and_tricks.rst similarity index 100% rename from cuda_bindings/docs/source/tips_and_tricks.rst rename to cuda_bindings_13/docs/source/tips_and_tricks.rst diff --git a/cuda_bindings/docs/versions.json b/cuda_bindings_13/docs/versions.json similarity index 100% rename from cuda_bindings/docs/versions.json rename to cuda_bindings_13/docs/versions.json diff --git a/cuda_bindings/pixi.lock b/cuda_bindings_13/pixi.lock similarity index 100% rename from cuda_bindings/pixi.lock rename to cuda_bindings_13/pixi.lock diff --git a/cuda_bindings/pixi.toml b/cuda_bindings_13/pixi.toml similarity index 100% rename from cuda_bindings/pixi.toml rename to cuda_bindings_13/pixi.toml diff --git a/cuda_bindings/pyproject.toml b/cuda_bindings_13/pyproject.toml similarity index 100% rename from cuda_bindings/pyproject.toml rename to cuda_bindings_13/pyproject.toml diff --git a/cuda_bindings/setup.py b/cuda_bindings_13/setup.py similarity index 100% rename from cuda_bindings/setup.py rename to cuda_bindings_13/setup.py diff --git a/cuda_bindings/tests/conftest.py b/cuda_bindings_13/tests/conftest.py similarity index 100% rename from cuda_bindings/tests/conftest.py rename to cuda_bindings_13/tests/conftest.py diff --git a/cuda_bindings/tests/cudla/conftest.py b/cuda_bindings_13/tests/cudla/conftest.py similarity index 100% rename from cuda_bindings/tests/cudla/conftest.py rename to cuda_bindings_13/tests/cudla/conftest.py diff --git a/cuda_bindings/tests/cudla/test_cudla_bindings.py b/cuda_bindings_13/tests/cudla/test_cudla_bindings.py similarity index 100% rename from cuda_bindings/tests/cudla/test_cudla_bindings.py rename to cuda_bindings_13/tests/cudla/test_cudla_bindings.py diff --git a/cuda_bindings/tests/cufile.json b/cuda_bindings_13/tests/cufile.json similarity index 100% rename from cuda_bindings/tests/cufile.json rename to cuda_bindings_13/tests/cufile.json diff --git a/cuda_bindings/tests/cython/build_tests.bat b/cuda_bindings_13/tests/cython/build_tests.bat similarity index 100% rename from cuda_bindings/tests/cython/build_tests.bat rename to cuda_bindings_13/tests/cython/build_tests.bat diff --git a/cuda_bindings/tests/cython/build_tests.py b/cuda_bindings_13/tests/cython/build_tests.py similarity index 98% rename from cuda_bindings/tests/cython/build_tests.py rename to cuda_bindings_13/tests/cython/build_tests.py index 9ddfadfbad8..d5f0c7fe583 100644 --- a/cuda_bindings/tests/cython/build_tests.py +++ b/cuda_bindings_13/tests/cython/build_tests.py @@ -1,6 +1,6 @@ # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -"""Build cuda_bindings Cython test extensions in-place. +"""Build cuda_bindings_13 Cython test extensions in-place. pixi-build's editable install exposes the `cuda` namespace package via a PEP 660 finder hook. Python's import machinery honors the hook, but diff --git a/cuda_bindings/tests/cython/build_tests.sh b/cuda_bindings_13/tests/cython/build_tests.sh similarity index 100% rename from cuda_bindings/tests/cython/build_tests.sh rename to cuda_bindings_13/tests/cython/build_tests.sh diff --git a/cuda_bindings/tests/cython/test_ccuda.pyx b/cuda_bindings_13/tests/cython/test_ccuda.pyx similarity index 100% rename from cuda_bindings/tests/cython/test_ccuda.pyx rename to cuda_bindings_13/tests/cython/test_ccuda.pyx diff --git a/cuda_bindings/tests/cython/test_ccudart.pyx b/cuda_bindings_13/tests/cython/test_ccudart.pyx similarity index 100% rename from cuda_bindings/tests/cython/test_ccudart.pyx rename to cuda_bindings_13/tests/cython/test_ccudart.pyx diff --git a/cuda_bindings/tests/cython/test_cython.py b/cuda_bindings_13/tests/cython/test_cython.py similarity index 100% rename from cuda_bindings/tests/cython/test_cython.py rename to cuda_bindings_13/tests/cython/test_cython.py diff --git a/cuda_bindings/tests/cython/test_interoperability_cython.pyx b/cuda_bindings_13/tests/cython/test_interoperability_cython.pyx similarity index 100% rename from cuda_bindings/tests/cython/test_interoperability_cython.pyx rename to cuda_bindings_13/tests/cython/test_interoperability_cython.pyx diff --git a/cuda_bindings/tests/example_tests/run_samples.py b/cuda_bindings_13/tests/example_tests/run_samples.py similarity index 100% rename from cuda_bindings/tests/example_tests/run_samples.py rename to cuda_bindings_13/tests/example_tests/run_samples.py diff --git a/cuda_bindings/tests/example_tests/test_args.json b/cuda_bindings_13/tests/example_tests/test_args.json similarity index 100% rename from cuda_bindings/tests/example_tests/test_args.json rename to cuda_bindings_13/tests/example_tests/test_args.json diff --git a/cuda_bindings/tests/example_tests/test_cuda_bindings_utils.py b/cuda_bindings_13/tests/example_tests/test_cuda_bindings_utils.py similarity index 100% rename from cuda_bindings/tests/example_tests/test_cuda_bindings_utils.py rename to cuda_bindings_13/tests/example_tests/test_cuda_bindings_utils.py diff --git a/cuda_bindings/tests/example_tests/test_interactive_sample_configuration.py b/cuda_bindings_13/tests/example_tests/test_interactive_sample_configuration.py similarity index 100% rename from cuda_bindings/tests/example_tests/test_interactive_sample_configuration.py rename to cuda_bindings_13/tests/example_tests/test_interactive_sample_configuration.py diff --git a/cuda_bindings/tests/example_tests/test_samples.py b/cuda_bindings_13/tests/example_tests/test_samples.py similarity index 100% rename from cuda_bindings/tests/example_tests/test_samples.py rename to cuda_bindings_13/tests/example_tests/test_samples.py diff --git a/cuda_bindings/tests/legacy_api/README.md b/cuda_bindings_13/tests/legacy_api/README.md similarity index 100% rename from cuda_bindings/tests/legacy_api/README.md rename to cuda_bindings_13/tests/legacy_api/README.md diff --git a/cuda_bindings/tests/legacy_api/test_legacy_kernelParams.py b/cuda_bindings_13/tests/legacy_api/test_legacy_kernelParams.py similarity index 100% rename from cuda_bindings/tests/legacy_api/test_legacy_kernelParams.py rename to cuda_bindings_13/tests/legacy_api/test_legacy_kernelParams.py diff --git a/cuda_bindings/tests/legacy_api/test_legacy_nvfatbin.py b/cuda_bindings_13/tests/legacy_api/test_legacy_nvfatbin.py similarity index 100% rename from cuda_bindings/tests/legacy_api/test_legacy_nvfatbin.py rename to cuda_bindings_13/tests/legacy_api/test_legacy_nvfatbin.py diff --git a/cuda_bindings/tests/legacy_api/test_legacy_nvjitlink.py b/cuda_bindings_13/tests/legacy_api/test_legacy_nvjitlink.py similarity index 100% rename from cuda_bindings/tests/legacy_api/test_legacy_nvjitlink.py rename to cuda_bindings_13/tests/legacy_api/test_legacy_nvjitlink.py diff --git a/cuda_bindings/tests/legacy_api/test_legacy_nvrtc.py b/cuda_bindings_13/tests/legacy_api/test_legacy_nvrtc.py similarity index 100% rename from cuda_bindings/tests/legacy_api/test_legacy_nvrtc.py rename to cuda_bindings_13/tests/legacy_api/test_legacy_nvrtc.py diff --git a/cuda_bindings/tests/nvml/README.md b/cuda_bindings_13/tests/nvml/README.md similarity index 100% rename from cuda_bindings/tests/nvml/README.md rename to cuda_bindings_13/tests/nvml/README.md diff --git a/cuda_bindings/tests/nvml/__init__.py b/cuda_bindings_13/tests/nvml/__init__.py similarity index 100% rename from cuda_bindings/tests/nvml/__init__.py rename to cuda_bindings_13/tests/nvml/__init__.py diff --git a/cuda_bindings/tests/nvml/conftest.py b/cuda_bindings_13/tests/nvml/conftest.py similarity index 100% rename from cuda_bindings/tests/nvml/conftest.py rename to cuda_bindings_13/tests/nvml/conftest.py diff --git a/cuda_bindings/tests/nvml/test_compute_mode.py b/cuda_bindings_13/tests/nvml/test_compute_mode.py similarity index 100% rename from cuda_bindings/tests/nvml/test_compute_mode.py rename to cuda_bindings_13/tests/nvml/test_compute_mode.py diff --git a/cuda_bindings/tests/nvml/test_cuda.py b/cuda_bindings_13/tests/nvml/test_cuda.py similarity index 100% rename from cuda_bindings/tests/nvml/test_cuda.py rename to cuda_bindings_13/tests/nvml/test_cuda.py diff --git a/cuda_bindings/tests/nvml/test_device.py b/cuda_bindings_13/tests/nvml/test_device.py similarity index 100% rename from cuda_bindings/tests/nvml/test_device.py rename to cuda_bindings_13/tests/nvml/test_device.py diff --git a/cuda_bindings/tests/nvml/test_gpu.py b/cuda_bindings_13/tests/nvml/test_gpu.py similarity index 100% rename from cuda_bindings/tests/nvml/test_gpu.py rename to cuda_bindings_13/tests/nvml/test_gpu.py diff --git a/cuda_bindings/tests/nvml/test_init.py b/cuda_bindings_13/tests/nvml/test_init.py similarity index 100% rename from cuda_bindings/tests/nvml/test_init.py rename to cuda_bindings_13/tests/nvml/test_init.py diff --git a/cuda_bindings/tests/nvml/test_nvlink.py b/cuda_bindings_13/tests/nvml/test_nvlink.py similarity index 100% rename from cuda_bindings/tests/nvml/test_nvlink.py rename to cuda_bindings_13/tests/nvml/test_nvlink.py diff --git a/cuda_bindings/tests/nvml/test_page_retirement.py b/cuda_bindings_13/tests/nvml/test_page_retirement.py similarity index 100% rename from cuda_bindings/tests/nvml/test_page_retirement.py rename to cuda_bindings_13/tests/nvml/test_page_retirement.py diff --git a/cuda_bindings/tests/nvml/test_pci.py b/cuda_bindings_13/tests/nvml/test_pci.py similarity index 100% rename from cuda_bindings/tests/nvml/test_pci.py rename to cuda_bindings_13/tests/nvml/test_pci.py diff --git a/cuda_bindings/tests/nvml/test_pynvml.py b/cuda_bindings_13/tests/nvml/test_pynvml.py similarity index 100% rename from cuda_bindings/tests/nvml/test_pynvml.py rename to cuda_bindings_13/tests/nvml/test_pynvml.py diff --git a/cuda_bindings/tests/nvml/test_unit.py b/cuda_bindings_13/tests/nvml/test_unit.py similarity index 100% rename from cuda_bindings/tests/nvml/test_unit.py rename to cuda_bindings_13/tests/nvml/test_unit.py diff --git a/cuda_bindings/tests/nvml/test_util.py b/cuda_bindings_13/tests/nvml/test_util.py similarity index 100% rename from cuda_bindings/tests/nvml/test_util.py rename to cuda_bindings_13/tests/nvml/test_util.py diff --git a/cuda_bindings/tests/nvml/util.py b/cuda_bindings_13/tests/nvml/util.py similarity index 100% rename from cuda_bindings/tests/nvml/util.py rename to cuda_bindings_13/tests/nvml/util.py diff --git a/cuda_bindings/tests/test_basics.py b/cuda_bindings_13/tests/test_basics.py similarity index 100% rename from cuda_bindings/tests/test_basics.py rename to cuda_bindings_13/tests/test_basics.py diff --git a/cuda_bindings/tests/test_build_hooks.py b/cuda_bindings_13/tests/test_build_hooks.py similarity index 99% rename from cuda_bindings/tests/test_build_hooks.py rename to cuda_bindings_13/tests/test_build_hooks.py index b45b58fa102..8d5cf3dc007 100644 --- a/cuda_bindings/tests/test_build_hooks.py +++ b/cuda_bindings_13/tests/test_build_hooks.py @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: Apache-2.0 -"""Tests for cuda_bindings/build_hooks.py build infrastructure. +"""Tests for cuda_bindings_13/build_hooks.py build infrastructure. These tests do NOT require cuda.bindings to be built/installed since they test build-time infrastructure. Run with --noconftest to avoid loading conftest.py diff --git a/cuda_bindings/tests/test_cuda.py b/cuda_bindings_13/tests/test_cuda.py similarity index 100% rename from cuda_bindings/tests/test_cuda.py rename to cuda_bindings_13/tests/test_cuda.py diff --git a/cuda_bindings/tests/test_cudart.py b/cuda_bindings_13/tests/test_cudart.py similarity index 100% rename from cuda_bindings/tests/test_cudart.py rename to cuda_bindings_13/tests/test_cudart.py diff --git a/cuda_bindings/tests/test_cufile.py b/cuda_bindings_13/tests/test_cufile.py similarity index 100% rename from cuda_bindings/tests/test_cufile.py rename to cuda_bindings_13/tests/test_cufile.py diff --git a/cuda_bindings/tests/test_envvar.py b/cuda_bindings_13/tests/test_envvar.py similarity index 100% rename from cuda_bindings/tests/test_envvar.py rename to cuda_bindings_13/tests/test_envvar.py diff --git a/cuda_bindings/tests/test_graphics_apis.py b/cuda_bindings_13/tests/test_graphics_apis.py similarity index 100% rename from cuda_bindings/tests/test_graphics_apis.py rename to cuda_bindings_13/tests/test_graphics_apis.py diff --git a/cuda_bindings/tests/test_interoperability.py b/cuda_bindings_13/tests/test_interoperability.py similarity index 100% rename from cuda_bindings/tests/test_interoperability.py rename to cuda_bindings_13/tests/test_interoperability.py diff --git a/cuda_bindings/tests/test_kernelParams.py b/cuda_bindings_13/tests/test_kernelParams.py similarity index 100% rename from cuda_bindings/tests/test_kernelParams.py rename to cuda_bindings_13/tests/test_kernelParams.py diff --git a/cuda_bindings/tests/test_nvfatbin.py b/cuda_bindings_13/tests/test_nvfatbin.py similarity index 100% rename from cuda_bindings/tests/test_nvfatbin.py rename to cuda_bindings_13/tests/test_nvfatbin.py diff --git a/cuda_bindings/tests/test_nvjitlink.py b/cuda_bindings_13/tests/test_nvjitlink.py similarity index 100% rename from cuda_bindings/tests/test_nvjitlink.py rename to cuda_bindings_13/tests/test_nvjitlink.py diff --git a/cuda_bindings/tests/test_nvrtc.py b/cuda_bindings_13/tests/test_nvrtc.py similarity index 100% rename from cuda_bindings/tests/test_nvrtc.py rename to cuda_bindings_13/tests/test_nvrtc.py diff --git a/cuda_bindings/tests/test_nvvm.py b/cuda_bindings_13/tests/test_nvvm.py similarity index 100% rename from cuda_bindings/tests/test_nvvm.py rename to cuda_bindings_13/tests/test_nvvm.py diff --git a/cuda_bindings/tests/test_utils.py b/cuda_bindings_13/tests/test_utils.py similarity index 100% rename from cuda_bindings/tests/test_utils.py rename to cuda_bindings_13/tests/test_utils.py diff --git a/cuda_bindings/tests/test_version_check.py b/cuda_bindings_13/tests/test_version_check.py similarity index 100% rename from cuda_bindings/tests/test_version_check.py rename to cuda_bindings_13/tests/test_version_check.py diff --git a/cuda_bindings/tests/utils/check_cyclical_import.py b/cuda_bindings_13/tests/utils/check_cyclical_import.py similarity index 100% rename from cuda_bindings/tests/utils/check_cyclical_import.py rename to cuda_bindings_13/tests/utils/check_cyclical_import.py diff --git a/cuda_core/AGENTS.md b/cuda_core/AGENTS.md index 12cb85d483a..e0722b9fcc4 100644 --- a/cuda_core/AGENTS.md +++ b/cuda_core/AGENTS.md @@ -23,9 +23,9 @@ This file describes `cuda_core`, the high-level Pythonic CUDA subpackage in the one `_cpp/.cpp` or as a directory `_cpp//` whose sources all compile into the `_` extension (`_cpp/rt/` for `_rt`). - **Build backend**: `build_hooks.py` handles Cython extension setup and build - dependency wiring. Logic shared with `cuda_bindings` (toolchain selection, + dependency wiring. Logic shared with `cuda_bindings_13` (toolchain selection, the compiler flag set, the Cython cache helpers and the rebuild stamps) - lives in `_build_shared.py`. `cuda_bindings/_build_shared.py` is canonical; + lives in `_build_shared.py`. `cuda_bindings_13/_build_shared.py` is canonical; `cuda_core/_build_shared.py` must be either a symlink to it or a byte-for-byte identical copy. diff --git a/cuda_core/_build_shared.py b/cuda_core/_build_shared.py index 5a1231d1a75..9f40249f20a 100644 --- a/cuda_core/_build_shared.py +++ b/cuda_core/_build_shared.py @@ -3,7 +3,7 @@ """Build helpers shared by the cuda-bindings and cuda-core PEP 517 backends. -``cuda_bindings/_build_shared.py`` is canonical. ``cuda_core/_build_shared.py`` +``cuda_bindings_13/_build_shared.py`` is canonical. ``cuda_core/_build_shared.py`` is either a symlink to it or a byte-for-byte identical copy. Both backends load the helper through their package-local path, keeping ``Path(__file__)``-relative state package-local. diff --git a/cuda_core/build_hooks.py b/cuda_core/build_hooks.py index 95deb1b44a4..bda03f2df63 100644 --- a/cuda_core/build_hooks.py +++ b/cuda_core/build_hooks.py @@ -466,7 +466,7 @@ def _build_cuda_core(debug=False): bindings_path = Path(cuda_bindings.__file__).parent # .../cuda/bindings/ print(f"Using cuda-bindings {cuda_bindings.__version__} from {bindings_path}", file=sys.stderr) - cuda_package_dir = bindings_path.parent.parent # .../cuda_bindings/ (contains cuda/) + cuda_package_dir = bindings_path.parent.parent # .../cuda_bindings_13/ (contains cuda/) if str(cuda_package_dir) not in sys.path: sys.path.insert(0, str(cuda_package_dir)) print(f"Added cuda-bindings parent path for Cython: {cuda_package_dir}", file=sys.stderr) @@ -616,7 +616,7 @@ def _add_cython_include_paths_to_pth(wheel_path: str) -> None: bindings_path = Path(cuda.bindings.__file__).parent # .../cuda/bindings/ # We need the directory containing the 'cuda' package for Cython imports - cuda_package_dir = bindings_path.parent.parent # .../cuda_bindings/ (contains cuda/) + cuda_package_dir = bindings_path.parent.parent # .../cuda_bindings_13/ (contains cuda/) print(f"Found cuda-bindings at: {bindings_path}", file=sys.stderr) print(f"Will add to .pth for Cython: {cuda_package_dir}", file=sys.stderr) except ImportError: diff --git a/cuda_core/pixi.lock b/cuda_core/pixi.lock index 6132ec6ea75..a0e62df38f7 100644 --- a/cuda_core/pixi.lock +++ b/cuda_core/pixi.lock @@ -837,7 +837,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda - - conda_source: cuda-bindings[5d449781] @ ../cuda_bindings + - conda_source: cuda-bindings[5d449781] @ ../cuda_bindings_13 - conda_source: cuda-core[5f96c167] @ . - conda_source: cuda-pathfinder[fafb88ff] @ ../cuda_pathfinder - pypi: ../cuda_python_test_helpers @@ -1042,7 +1042,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - - conda_source: cuda-bindings[98e8d06d] @ ../cuda_bindings + - conda_source: cuda-bindings[98e8d06d] @ ../cuda_bindings_13 - conda_source: cuda-core[a76d8fe9] @ . - conda_source: cuda-pathfinder[df36ec6d] @ ../cuda_pathfinder - pypi: ../cuda_python_test_helpers @@ -1184,7 +1184,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/x265-3.5-h3ee6617_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda - - conda_source: cuda-bindings[cadf4021] @ ../cuda_bindings + - conda_source: cuda-bindings[cadf4021] @ ../cuda_bindings_13 - conda_source: cuda-core[39556291] @ . - conda_source: cuda-pathfinder[19ca45ab] @ ../cuda_pathfinder - pypi: ../cuda_python_test_helpers @@ -1404,7 +1404,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda - - conda_source: cuda-bindings[5d449781] @ ../cuda_bindings + - conda_source: cuda-bindings[5d449781] @ ../cuda_bindings_13 - conda_source: cuda-core[5f96c167] @ . - conda_source: cuda-pathfinder[fafb88ff] @ ../cuda_pathfinder - pypi: ../cuda_python_test_helpers @@ -1609,7 +1609,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - - conda_source: cuda-bindings[98e8d06d] @ ../cuda_bindings + - conda_source: cuda-bindings[98e8d06d] @ ../cuda_bindings_13 - conda_source: cuda-core[a76d8fe9] @ . - conda_source: cuda-pathfinder[df36ec6d] @ ../cuda_pathfinder - pypi: ../cuda_python_test_helpers @@ -1751,7 +1751,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/x265-3.5-h3ee6617_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda - - conda_source: cuda-bindings[cadf4021] @ ../cuda_bindings + - conda_source: cuda-bindings[cadf4021] @ ../cuda_bindings_13 - conda_source: cuda-core[39556291] @ . - conda_source: cuda-pathfinder[19ca45ab] @ ../cuda_pathfinder - pypi: ../cuda_python_test_helpers @@ -1937,7 +1937,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.1-pyh5ded981_0.conda - - conda_source: cuda-bindings[5d449781] @ ../cuda_bindings + - conda_source: cuda-bindings[5d449781] @ ../cuda_bindings_13 - conda_source: cuda-core[5f96c167] @ . - conda_source: cuda-pathfinder[fafb88ff] @ ../cuda_pathfinder - pypi: https://files.pythonhosted.org/packages/8c/79/017fab2f7167a9a9795665f894d04f77aafceca80821b51589bb4b23ff5c/nvidia_sphinx_theme-0.0.9.post1-py3-none-any.whl @@ -2118,7 +2118,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.1-pyh5ded981_0.conda - - conda_source: cuda-bindings[98e8d06d] @ ../cuda_bindings + - conda_source: cuda-bindings[98e8d06d] @ ../cuda_bindings_13 - conda_source: cuda-core[a76d8fe9] @ . - conda_source: cuda-pathfinder[df36ec6d] @ ../cuda_pathfinder - pypi: https://files.pythonhosted.org/packages/8c/79/017fab2f7167a9a9795665f894d04f77aafceca80821b51589bb4b23ff5c/nvidia_sphinx_theme-0.0.9.post1-py3-none-any.whl @@ -2289,7 +2289,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h3a581c9_12.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda - - conda_source: cuda-bindings[cadf4021] @ ../cuda_bindings + - conda_source: cuda-bindings[cadf4021] @ ../cuda_bindings_13 - conda_source: cuda-core[39556291] @ . - conda_source: cuda-pathfinder[19ca45ab] @ ../cuda_pathfinder - pypi: https://files.pythonhosted.org/packages/8c/79/017fab2f7167a9a9795665f894d04f77aafceca80821b51589bb4b23ff5c/nvidia_sphinx_theme-0.0.9.post1-py3-none-any.whl @@ -3234,7 +3234,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda - - conda_source: cuda-bindings[5d449781] @ ../cuda_bindings + - conda_source: cuda-bindings[5d449781] @ ../cuda_bindings_13 - conda_source: cuda-core[5f96c167] @ . - conda_source: cuda-pathfinder[fafb88ff] @ ../cuda_pathfinder - pypi: https://files.pythonhosted.org/packages/04/fb/8d570c9cd23eaacebd29064d4f883f3548db90594c21d0e7fc2ea4970112/nvtx-0.2.16-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -3487,7 +3487,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - - conda_source: cuda-bindings[98e8d06d] @ ../cuda_bindings + - conda_source: cuda-bindings[98e8d06d] @ ../cuda_bindings_13 - conda_source: cuda-core[a76d8fe9] @ . - conda_source: cuda-pathfinder[df36ec6d] @ ../cuda_pathfinder - pypi: https://files.pythonhosted.org/packages/1f/a8/1cbd4014898af8b419e69b0d7dbc63da2121ee92d92b47d59f4fe9075349/nvidia_nvjitlink-13.4.92-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl @@ -3603,7 +3603,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/x265-3.5-h3ee6617_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda - - conda_source: cuda-bindings[cadf4021] @ ../cuda_bindings + - conda_source: cuda-bindings[cadf4021] @ ../cuda_bindings_13 - conda_source: cuda-core[39556291] @ . - conda_source: cuda-pathfinder[19ca45ab] @ ../cuda_pathfinder - pypi: https://files.pythonhosted.org/packages/0c/41/3e3528f3b0f9ffae69310d2e71f81ff74d272ee3b6c0600c4f4abaa31a80/numba-0.68.0-cp314-cp314-win_amd64.whl @@ -18734,7 +18734,7 @@ packages: - zstd >=1.5.7,<1.6.0a0 size: 387535 timestamp: 1786599623274 -- conda_source: cuda-bindings[5d449781] @ ../cuda_bindings +- conda_source: cuda-bindings[5d449781] @ ../cuda_bindings_13 variants: c_stdlib: sysroot c_stdlib_version: '2.28' @@ -18838,7 +18838,7 @@ packages: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/vcs_versioning-2.6.0-pyh5ded981_0.conda - conda_source: cuda-pathfinder[fafb88ff] @ ../cuda_pathfinder -- conda_source: cuda-bindings[98e8d06d] @ ../cuda_bindings +- conda_source: cuda-bindings[98e8d06d] @ ../cuda_bindings_13 variants: c_stdlib: sysroot c_stdlib_version: '2.28' @@ -18943,7 +18943,7 @@ packages: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/vcs_versioning-2.6.0-pyh5ded981_0.conda - conda_source: cuda-pathfinder[df36ec6d] @ ../cuda_pathfinder -- conda_source: cuda-bindings[cadf4021] @ ../cuda_bindings +- conda_source: cuda-bindings[cadf4021] @ ../cuda_bindings_13 variants: c_compiler: vs2022 cuda_version: 13.4.* diff --git a/cuda_core/pixi.toml b/cuda_core/pixi.toml index af77a5b468c..3d490c05cdf 100644 --- a/cuda_core/pixi.toml +++ b/cuda_core/pixi.toml @@ -30,7 +30,7 @@ packaging = "*" cuda-python-test-helpers = { path = "../cuda_python_test_helpers", editable = true } [feature.local-deps.dependencies] -cuda-bindings = { path = "../cuda_bindings" } +cuda-bindings = { path = "../cuda_bindings_13" } cuda-pathfinder = { path = "../cuda_pathfinder" } [feature.samples.dependencies] diff --git a/cuda_core/pyproject.toml b/cuda_core/pyproject.toml index 588e751fe5f..b15612516c4 100644 --- a/cuda_core/pyproject.toml +++ b/cuda_core/pyproject.toml @@ -77,7 +77,7 @@ test = [ "psutil==7.2.2", "packaging>=24", "docutils==0.23", - # Required by tests/test_graphics.py; pinned to match cuda_bindings. + # Required by tests/test_graphics.py; pinned to match cuda_bindings_13. "pyglet==2.1.14", "cffi==2.1.1", ] diff --git a/cuda_core/tests/AGENTS.md b/cuda_core/tests/AGENTS.md index 4cd50de44a2..2f077e7cd60 100644 --- a/cuda_core/tests/AGENTS.md +++ b/cuda_core/tests/AGENTS.md @@ -100,7 +100,7 @@ Follow these rules when adding or moving shared test code: before adding a new helper; consolidate duplicates across packages into `cuda_python_test_helpers` (both `cuda_core` and - `cuda_bindings` test environments already depend on it). + `cuda_bindings_13` test environments already depend on it). - Fixtures in a nested `conftest.py` are available to tests in its directory and descendants; fixtures from applicable parent `conftest.py` files remain available. diff --git a/cuda_core/tests/conftest.py b/cuda_core/tests/conftest.py index 66e086ce791..012de8e7abc 100644 --- a/cuda_core/tests/conftest.py +++ b/cuda_core/tests/conftest.py @@ -12,7 +12,7 @@ import pytest -# Keep in sync with cuda_bindings/tests/conftest.py. +# Keep in sync with cuda_bindings_13/tests/conftest.py. try: import cuda_python_test_helpers._pytest_plugin # noqa: F401 except ImportError as e: diff --git a/cuda_core/tests/example_tests/test_sample_environment.py b/cuda_core/tests/example_tests/test_sample_environment.py index 479aeb7dd7c..8db28f41fb5 100644 --- a/cuda_core/tests/example_tests/test_sample_environment.py +++ b/cuda_core/tests/example_tests/test_sample_environment.py @@ -18,7 +18,7 @@ ("distribution_name", "expected_source", "expected_version"), ( ("cuda-core", "cuda_core", "1.1.0"), - ("cuda-bindings", "cuda_bindings", "13.3.1"), + ("cuda-bindings", "cuda_bindings_13", "13.3.1"), ("cuda-pathfinder", "cuda_pathfinder", "1.5.6"), ), ) diff --git a/cuda_core/tests/test_build_hooks.py b/cuda_core/tests/test_build_hooks.py index fd016f9df71..538ab09c7b5 100644 --- a/cuda_core/tests/test_build_hooks.py +++ b/cuda_core/tests/test_build_hooks.py @@ -402,7 +402,7 @@ def fake_cythonize(ext_modules, **kwargs): build_hooks._determine_cuda_major_version.cache_clear() # _build_cuda_core() globs cuda/core/**/*.pyx relative to the cwd. monkeypatch.chdir(Path(__file__).parent.parent) - # It also prepends cuda_bindings/ to sys.path; swap in a copy so the + # It also prepends cuda_bindings_13/ to sys.path; swap in a copy so the # mutation lands there and the real list is restored on teardown. monkeypatch.setattr(sys, "path", list(sys.path)) @@ -462,7 +462,7 @@ def _load_setup_py(monkeypatch): guard does not affect real builds. setup.py does a bare ``import build_hooks``, which resolves to - cuda_bindings' copy if that directory is on sys.path. Pin cuda_core's, so + cuda_bindings_13' copy if that directory is on sys.path. Pin cuda_core's, so the flag the test sets is the one setup.py reads. """ monkeypatch.setitem(sys.modules, "build_hooks", build_hooks) @@ -1067,7 +1067,7 @@ class TestCythonCacheSmokeTest: The actual cythonize exercise lives in ``cuda_python_test_helpers.cython_cache`` so it is shared with - ``cuda_bindings/tests/test_build_hooks.py``. + ``cuda_bindings_13/tests/test_build_hooks.py``. """ @POSIX_ONLY_CACHE diff --git a/cuda_core/tests/test_driver_table.py b/cuda_core/tests/test_driver_table.py index 725059e3fc5..3a0f073d5a0 100644 --- a/cuda_core/tests/test_driver_table.py +++ b/cuda_core/tests/test_driver_table.py @@ -27,7 +27,9 @@ import pytest CORE = Path(__file__).resolve().parents[1] / "cuda" / "core" -LOADER = Path(__file__).resolve().parents[2] / "cuda_bindings" / "cuda" / "bindings" / "_internal" / "driver_linux.pyx" +LOADER = ( + Path(__file__).resolve().parents[2] / "cuda_bindings_13" / "cuda" / "bindings" / "_internal" / "driver_linux.pyx" +) def _gpu_available() -> bool: @@ -64,7 +66,7 @@ def _table_keys() -> list[str]: """The keys the fill looks up: "__" + the symbol that the cuda-bindings loader requests for each name in driver_api.hpp. For example, cuStreamDestroy maps to __cuStreamDestroy_v2.""" if not LOADER.is_file(): - pytest.skip("needs the cuda_bindings source tree next to cuda_core") + pytest.skip("needs the cuda_bindings_13 source tree next to cuda_core") names = re.findall( r"^\s*X\((cu\w+), \d+\)", (CORE / "_cpp" / "rt" / "driver_api.hpp").read_text(encoding="utf-8"), re.M ) diff --git a/cuda_core/tests/test_graphics.py b/cuda_core/tests/test_graphics.py index 72e1c8c559c..9c617def003 100644 --- a/cuda_core/tests/test_graphics.py +++ b/cuda_core/tests/test_graphics.py @@ -42,7 +42,7 @@ # cuGraphicsGLRegister{Buffer,Image} returns CUDA_ERROR_OPERATING_SYSTEM on # environments where the driver refuses CUDA-GL interop (e.g. WSL). Treat -# that as an acceptable skip, mirroring cuda_bindings/tests/test_graphics_apis.py. +# that as an acceptable skip, mirroring cuda_bindings_13/tests/test_graphics_apis.py. def _register_gl_buffer(gl_buf, *, flags=None, stream=None): try: return GraphicsResource.from_gl_buffer(gl_buf, flags=flags, stream=stream) diff --git a/cuda_core/tests/test_rt_layout.py b/cuda_core/tests/test_rt_layout.py index 2c721074e34..649d990997c 100644 --- a/cuda_core/tests/test_rt_layout.py +++ b/cuda_core/tests/test_rt_layout.py @@ -117,7 +117,7 @@ def test_driver_function_table_matches_the_cuda_bindings_loader(): """driver_api.hpp lists each driver function with the CUDA version that cuda-bindings requests it at. That number decides which functions every supported driver must provide. Check it against the loader that cuda-bindings generates.""" - loader = CORE.parents[2] / "cuda_bindings" / "cuda" / "bindings" / "_internal" / "driver_linux.pyx" + loader = CORE.parents[2] / "cuda_bindings_13" / "cuda" / "bindings" / "_internal" / "driver_linux.pyx" if not loader.is_file(): pytest.skip("cuda-bindings source is not next to cuda_core") entries = re.findall(r"^\s*X\((cu\w+), (\d+)\)", read(RT / "driver_api.hpp"), re.M) diff --git a/cuda_python/AGENTS.md b/cuda_python/AGENTS.md index 9eef3d4b772..e4038dc5824 100644 --- a/cuda_python/AGENTS.md +++ b/cuda_python/AGENTS.md @@ -5,7 +5,7 @@ monorepo. - `cuda_python` is primarily packaging and documentation glue. - It does not host substantial runtime APIs like `cuda_core`, - `cuda_bindings`, or `cuda_pathfinder`. + `cuda_bindings_13`, or `cuda_pathfinder`. ## Main files to edit @@ -31,4 +31,4 @@ monorepo. - Users should pin `cuda-python` alone. A separate `cuda-core` pin next to it can make the install unresolvable after a `cuda-core` release. - If you update docs structure, ensure `docs/build_all_docs.sh` still collects - docs from `cuda_python`, `cuda_bindings`, `cuda_core`, and `cuda_pathfinder`. + docs from `cuda_python`, `cuda_bindings_13`, `cuda_core`, and `cuda_pathfinder`. diff --git a/cuda_python/docs/build_all_docs.sh b/cuda_python/docs/build_all_docs.sh index 77e990e1530..d2036bd329e 100755 --- a/cuda_python/docs/build_all_docs.sh +++ b/cuda_python/docs/build_all_docs.sh @@ -13,7 +13,7 @@ rm -rf build CUDA_BINDINGS_PATH=build/html/cuda-bindings mkdir -p $CUDA_BINDINGS_PATH pushd . -cd ../../cuda_bindings/docs +cd ../../cuda_bindings_13/docs rm -rf build ./build_docs.sh $@ cp -r build/html/* "$(dirs -l +1)"/$CUDA_BINDINGS_PATH diff --git a/cuda_python_test_helpers/cuda_python_test_helpers/_pytest_plugin.py b/cuda_python_test_helpers/cuda_python_test_helpers/_pytest_plugin.py index 1fee57fac21..831c8aca4c6 100644 --- a/cuda_python_test_helpers/cuda_python_test_helpers/_pytest_plugin.py +++ b/cuda_python_test_helpers/cuda_python_test_helpers/_pytest_plugin.py @@ -32,7 +32,7 @@ def pytest_collection_modifyitems(config, items): # noqa: ARG001 # Package markers by path if nodeid.startswith("cuda_pathfinder/tests/") or "/cuda_pathfinder/tests/" in nodeid: item.add_marker(pytest.mark.pathfinder) - if nodeid.startswith("cuda_bindings/tests/") or "/cuda_bindings/tests/" in nodeid: + if nodeid.startswith("cuda_bindings_13/tests/") or "/cuda_bindings_13/tests/" in nodeid: item.add_marker(pytest.mark.bindings) if nodeid.startswith("cuda_core/tests/") or "/cuda_core/tests/" in nodeid: item.add_marker(pytest.mark.core) diff --git a/cuda_python_test_helpers/cuda_python_test_helpers/cython_cache.py b/cuda_python_test_helpers/cuda_python_test_helpers/cython_cache.py index 7282d7ed3eb..5a831123063 100644 --- a/cuda_python_test_helpers/cuda_python_test_helpers/cython_cache.py +++ b/cuda_python_test_helpers/cuda_python_test_helpers/cython_cache.py @@ -13,7 +13,7 @@ - ``WINDOWS_ONLY_CACHE``: shared skip marker for the complementary Windows disable-path tests (warn + return None when the cache dir is set). -These are used by ``cuda_bindings/tests/test_build_hooks.py`` and +These are used by ``cuda_bindings_13/tests/test_build_hooks.py`` and ``cuda_core/tests/test_build_hooks.py``. The helpers themselves are loaded through matching package-local ``_build_shared.py`` paths. diff --git a/cuda_python_test_helpers/cuda_python_test_helpers/graphics.py b/cuda_python_test_helpers/cuda_python_test_helpers/graphics.py index 96561e8b244..8b8a80fb1a5 100644 --- a/cuda_python_test_helpers/cuda_python_test_helpers/graphics.py +++ b/cuda_python_test_helpers/cuda_python_test_helpers/graphics.py @@ -4,7 +4,7 @@ """Shared GL helpers for graphics interop tests. -Both ``cuda_core`` and ``cuda_bindings`` graphics tests need to skip +Both ``cuda_core`` and ``cuda_bindings_13`` graphics tests need to skip when the GL backend cannot be made current, and that decision must not hide real bugs in the tests' own GL allocation code. This module owns the shared predicate so the two test suites stay in sync. @@ -135,7 +135,7 @@ def tcc_skip_reason() -> str | None: OpenGL support, so CUDA-GL interop is unavailable on a TCC device. The check queries the currently-selected device via the CUDA runtime API (``cuda.bindings``) rather than ``cuda.core``, so both the ``cuda_core`` - and ``cuda_bindings`` graphics tests can share it without the latter + and ``cuda_bindings_13`` graphics tests can share it without the latter taking a ``cuda.core`` dependency. Runtime query failures (e.g. no CUDA device) propagate rather than being diff --git a/pixi.toml b/pixi.toml index 8feca4785d8..52469b716c7 100644 --- a/pixi.toml +++ b/pixi.toml @@ -1,4 +1,4 @@ -# 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 @@ -43,7 +43,7 @@ cmd = [ cmd = [ "bash", "-c", - 'pixi run --manifest-path "$PIXI_PROJECT_ROOT/cuda_bindings" -e "$PIXI_ENVIRONMENT_NAME" test', + 'pixi run --manifest-path "$PIXI_PROJECT_ROOT/cuda_bindings_13" -e "$PIXI_ENVIRONMENT_NAME" test', ] [target.linux.tasks.test-core] @@ -57,7 +57,7 @@ cmd = [ cmd = [ "bash", "-c", - 'pixi run --manifest-path "$PIXI_PROJECT_ROOT/cuda_bindings" test-samples', + 'pixi run --manifest-path "$PIXI_PROJECT_ROOT/cuda_bindings_13" test-samples', ] [target.linux.tasks.test-samples-core] @@ -96,7 +96,7 @@ cmd = [ "pixi", "run", "--manifest-path", - "$PIXI_PROJECT_ROOT/cuda_bindings", + "$PIXI_PROJECT_ROOT/cuda_bindings_13", "-e", "docs", "build-docs", diff --git a/pytest.ini b/pytest.ini index 4f98c6e7e18..fce1f3f2173 100644 --- a/pytest.ini +++ b/pytest.ini @@ -8,13 +8,13 @@ norecursedirs = testpaths = cuda_pathfinder/tests - cuda_bindings/tests + cuda_bindings_13/tests cuda_core/tests tests/integration markers = pathfinder: tests for cuda_pathfinder - bindings: tests for cuda_bindings + bindings: tests for cuda_bindings_13 core: tests for cuda_core samples: tests for package-owned standalone samples under ./samples cython: cython tests diff --git a/ruff.toml b/ruff.toml index 6407a1fbeea..120842435f5 100644 --- a/ruff.toml +++ b/ruff.toml @@ -140,7 +140,7 @@ inline-quotes = "double" # CUDA bindings mirror C API naming conventions (CamelCase types, camelCase functions) # Keep examples opted-in to enforce naming conventions in example-local identifiers. -"cuda_bindings/{cuda,docs,tests}/**" = [ +"cuda_bindings_13/{cuda,docs,tests}/**" = [ "N801", # invalid-class-name "N802", # invalid-function-name "N803", # invalid-argument-name @@ -152,7 +152,7 @@ inline-quotes = "double" "N802", # invalid-function-name "N806", # non-lowercase-variable-in-function ] -"cuda_bindings/{build_hooks.py,setup.py}" = ["N801", "N802", "N803", "N806", "N816"] +"cuda_bindings_13/{build_hooks.py,setup.py}" = ["N801", "N802", "N803", "N806", "N816"] # scripts and build tooling — print is the expected output method "qa/**" = ["T201"] diff --git a/toolshed/build_static_bitcode_input.py b/toolshed/build_static_bitcode_input.py index 816603aed50..2fc205dca52 100755 --- a/toolshed/build_static_bitcode_input.py +++ b/toolshed/build_static_bitcode_input.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -# 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 """ @@ -24,7 +24,7 @@ def get_minimal_nvvmir_txt_template(): - cuda_bindings_tests_dir = Path("cuda_bindings/tests") + cuda_bindings_tests_dir = Path("cuda_bindings_13/tests") assert cuda_bindings_tests_dir.is_dir(), "Please run this helper script from the cuda-python top-level directory." sys.path.insert(0, str(cuda_bindings_tests_dir.resolve())) import test_nvvm diff --git a/toolshed/check_generated_file_seals.py b/toolshed/check_generated_file_seals.py index 4863fe32d61..0cc861a1f4e 100644 --- a/toolshed/check_generated_file_seals.py +++ b/toolshed/check_generated_file_seals.py @@ -62,7 +62,7 @@ def load_previously_sealed_paths(): GENERATED_FILE_MARKER_FRAGMENT, "HEAD", "--", - "cuda_bindings", + "cuda_bindings_13", ], capture_output=True, text=True, diff --git a/toolshed/check_spdx.py b/toolshed/check_spdx.py index 44b879d36d4..c1de07ff891 100644 --- a/toolshed/check_spdx.py +++ b/toolshed/check_spdx.py @@ -25,7 +25,7 @@ ".github": "Apache-2.0", "benchmarks": "Apache-2.0", "ci": "Apache-2.0", - "cuda_bindings": "Apache-2.0", + "cuda_bindings_13": "Apache-2.0", "cuda_core": "Apache-2.0", "cuda_pathfinder": "Apache-2.0", "cuda_python": "Apache-2.0", diff --git a/toolshed/find_skipped_tests.py b/toolshed/find_skipped_tests.py index c2cb1c9777d..1ad72eb8de6 100755 --- a/toolshed/find_skipped_tests.py +++ b/toolshed/find_skipped_tests.py @@ -49,7 +49,7 @@ # Map step-name substrings to canonical test suite names. STEP_SUITE_PATTERNS: list[tuple[re.Pattern[str], str]] = [ - (re.compile(r"\brun-tests bindings\b"), "cuda_bindings"), + (re.compile(r"\brun-tests bindings\b"), "cuda_bindings_13"), (re.compile(r"\brun-tests core\b"), "cuda_core"), (re.compile(r"\brun-tests pathfinder\b"), "cuda_pathfinder"), ]