Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
c39cca9
hello world
anthony-santana Jul 3, 2026
89bcf3b
Adopt CUDA-Q pulse research-preview integration (from amccaskey/719104e)
anthony-santana Jul 29, 2026
4b577be
[dynamics] Add Dormand-Prince RK5(4) adaptive integrator (dopri5)
anthony-santana Jul 29, 2026
2a16d8d
[dynamics] Add high-order Magnus integrator with propagator cache (CUDA)
anthony-santana Jul 29, 2026
82602b9
[pulse] Add magnus and crank_nicolson integrators to the GPU runtime
anthony-santana Jul 29, 2026
ebc1b91
Port GPU physics regressions as pulse runtime tests
anthony-santana Jul 29, 2026
2e14d56
Document new pulse GPU integrators and expanded test coverage
anthony-santana Jul 29, 2026
b541d18
[pulse] Size the simulated register by qudit allocation
anthony-santana Jul 29, 2026
388eb0f
[pulse] Clean up GPU port: formatting, dead code, and dynamics test f…
anthony-santana Jul 29, 2026
6ef6939
[pulse] Fail early with a clear message when cuSOLVER is missing
anthony-santana Jul 30, 2026
58c97a3
Merge branch 'main' into research_preview/pulse
anthony-santana Jul 30, 2026
d2fa250
[pulse] Remove benchmarks folder
anthony-santana Jul 30, 2026
42696d1
Merge remote-tracking branch 'github/main' into research_preview/pulse
anthony-santana Aug 10, 2026
c1cb2ab
[pulse] Split dynamics integrators out of core; retain non-public copy
anthony-santana Aug 10, 2026
6f902a6
[pulse] Package pulse as an installable cudaq-pulse CMake project
anthony-santana Aug 10, 2026
c91271f
[pulse] Address PR review: CI path source-of-truth, canonicalize CAPI
anthony-santana Aug 10, 2026
9e96b35
[pulse] Fix cudaq-pulse export: use build/install interface include dirs
anthony-santana Aug 11, 2026
b74788d
[pulse] Rename relocated integrator support namespace to cudaq::detail
anthony-santana Aug 11, 2026
d968946
[pulse] Fix CI content checks: license ignores, yapf, spelling
anthony-santana Aug 11, 2026
3f37697
Merge remote-tracking branch 'github/main' into research_preview/pulse
anthony-santana Aug 11, 2026
05ba52b
DCO remediation commit for previously unsigned pulse commits
anthony-santana Aug 11, 2026
92e9f09
[pulse] CI: authenticate to ghcr.io for the devcontainer image
anthony-santana Aug 11, 2026
9e521da
[pulse] CI: allow a read:packages PAT for the devcontainer pull
anthony-santana Aug 11, 2026
29d9460
[pulse] CI: use canonical GITHUB_TOKEN ghcr credentials
anthony-santana Aug 11, 2026
a2ca6e4
[pulse] CI: pull the public devcontainer image anonymously via docker…
anthony-santana Aug 11, 2026
a04568f
[pulse] CI: revert to container: with forward-compatible ghcr credential
anthony-santana Aug 11, 2026
8e6dcb6
[pulse] CI: use the correct public devcontainer tag
anthony-santana Aug 11, 2026
d2621e6
[pulse] CI: mark workspace safe before submodule init
anthony-santana Aug 11, 2026
d8572ae
[pulse] Sync relocated integrator snapshot with cleaned core copy
anthony-santana Aug 11, 2026
603ef89
Merge branch 'main' into research_preview/pulse
anthony-santana Aug 11, 2026
94f3629
[ci] Split out cudaq-devel build for reuse
lmondada Aug 12, 2026
97716c4
Merge branch 'main' into research_preview/pulse
anthony-santana Aug 12, 2026
1165f9f
Merge branch 'lm/splitout-devel' into tmp
lmondada Aug 12, 2026
e5ced56
Build cudaq-pulse standalone against the cudaq-devel wheel
lmondada Aug 12, 2026
628f416
Merge branch 'lm/pulse-devel-wheel' into research_preview/pulse
anthony-santana Aug 12, 2026
5d15c8d
[pulse] CI: fix venv_path output ref and force bash in GPU container job
anthony-santana Aug 12, 2026
a433015
[pulse] CI: don't run self-hosted CPU jobs on untrusted pull_request …
anthony-santana Aug 12, 2026
8f95d64
[pulse] CI: allowlist 'devel' for the spell checker
anthony-santana Aug 12, 2026
f981620
[pulse] CI: run lit via `python -m lit` for the wheel-based build
anthony-santana Aug 13, 2026
c24ec6b
[pulse] CI: run the venv lit console script through the interpreter
anthony-santana Aug 13, 2026
b1824f4
Add support for Python 3.11 in bytecode normalization
lmondada Aug 13, 2026
98b101f
Merge branch 'main' into research_preview/pulse
anthony-santana Aug 13, 2026
73690c9
[pulse] Slim the spelling allowlist per review
anthony-santana Aug 13, 2026
f1007d4
Merge remote-tracking branch 'github/main' into research_preview/pulse
anthony-santana Aug 13, 2026
d9609fc
Merge remote-tracking branch 'github/main' into research_preview/pulse
anthony-santana Aug 24, 2026
7291c1d
Merge remote-tracking branch 'github/main' into research_preview/pulse
anthony-santana Aug 24, 2026
52d463f
DCO remediation commit for b1824f4
lmondada Aug 24, 2026
ead3eb2
Merge remote-tracking branch 'github/main' into research_preview/pulse
anthony-santana Aug 25, 2026
3b5948a
Merge remote-tracking branch 'github/main' into research_preview/pulse
anthony-santana Aug 25, 2026
1711ce3
Merge remote-tracking branch 'github/main' into research_preview/pulse
anthony-santana Aug 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
168 changes: 168 additions & 0 deletions .github/actions/setup-cudaq-devel-venv/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
name: Set up cudaq-devel environment
description: |
Resolve and download the latest cudaq wheel, install the Python
build toolchain, build a cudaq-devel wheel, and expose wheel paths for further installation or validation.

inputs:
cudaq-wheel-url:
description: |
Optional URL of a cudaq wheel artifact (e.g. .../actions/runs/RUN_ID/artifacts/ARTIFACT_ID).
Defaults to the latest artifact built from main.
required: false
default: ''
output-dir:
description: Directory where the cudaq-devel wheel is written.
required: false
default: dist

outputs:
cudaq-version:
description: CUDA-Q release version used to build the devel wheel.
value: ${{ steps.version.outputs.cudaq_version }}
python-version:
description: Python version inferred from the runtime wheel (e.g. 3.11).
value: ${{ steps.runtime_wheel.outputs.python_version }}
python-executable:
description: Path to the uv-managed Python interpreter matching the runtime wheel.
value: ${{ steps.toolchain.outputs.python_executable }}
output-dir:
description: Directory containing the downloaded/built wheels.
value: ${{ inputs.output-dir }}
cudaq-wheel-path:
description: Path to the downloaded cudaq*.whl file.
value: ${{ steps.runtime_wheel.outputs.wheel_path }}
cudaq-devel-wheel-path:
description: Path to the built cudaq_devel*.whl file.
value: ${{ steps.devel_wheel.outputs.wheel_path }}

runs:
using: composite
steps:
- name: Initialize submodules (with retry)
shell: bash
run: |
retry() { for n in 1 2 3; do "$@" && return 0; [ $n -lt 3 ] && sleep $((15*n*n)); done; return 1; }
retry git -c submodule.tpls/llvm.update=none submodule update --init --recursive

- name: Compute CUDA-Q version
id: version
uses: ./.github/actions/compute-cudaq-version

- name: Resolve runtime wheel artifact
id: runtime_artifact
shell: bash
env:
GH_TOKEN: ${{ github.token }}
REPO: ${{ github.repository }}
ARTIFACT_NAME: pycudaq-3-11-manylinux-amd64-cu13-0-gcc12-main
WHEEL_URL: ${{ inputs.cudaq-wheel-url }}
run: |
if [ -n "$WHEEL_URL" ]; then
run_id=$(echo "$WHEEL_URL" | sed -n 's|.*/runs/\([0-9]*\)/.*|\1|p')
artifact_id=$(echo "$WHEEL_URL" | sed -n 's|.*/artifacts/\([0-9]*\)$|\1|p')
if [ -z "$run_id" ] || [ -z "$artifact_id" ]; then
echo "::error::Could not parse run and artifact id from: $WHEEL_URL"
exit 1
fi
else
artifact=$(gh api "repos/$REPO/actions/artifacts?name=$ARTIFACT_NAME&per_page=100" \
--jq '[.artifacts[] | select(.expired == false and .workflow_run.head_branch == "main")]
| sort_by(.created_at) | last')
if [ -z "$artifact" ] || [ "$artifact" = "null" ]; then
echo "::error::No unexpired $ARTIFACT_NAME artifact built from main. Wheels are only kept for a day; pass runtime-wheel-url to use a specific artifact instead."
exit 1
fi
run_id=$(echo "$artifact" | jq -r '.workflow_run.id')
artifact_id=$(echo "$artifact" | jq -r '.id')
fi
echo "Using artifact $artifact_id from run $run_id"
echo "run_id=$run_id" >> "$GITHUB_OUTPUT"
echo "artifact_id=$artifact_id" >> "$GITHUB_OUTPUT"

- name: Download runtime wheel
uses: actions/download-artifact@v8
with:
run-id: ${{ steps.runtime_artifact.outputs.run_id }}
artifact-ids: ${{ steps.runtime_artifact.outputs.artifact_id }}
path: ${{ inputs.output-dir }}
github-token: ${{ github.token }}

- name: Resolve runtime wheel Python version
id: runtime_wheel
shell: bash
env:
RUNTIME_DIR: ${{ inputs.output-dir }}
run: |
whl=$(find "$RUNTIME_DIR" -name 'cuda_quantum_cu13*.whl' | head -1)
if [ -z "$whl" ]; then
echo "::error::No cuda_quantum_cu13*.whl found under $RUNTIME_DIR/"
find "$RUNTIME_DIR" -type f || true
exit 1
fi
py=$(basename "$whl" | sed -nE 's/.*-cp3([0-9]+)-cp3[0-9]+.*/3.\1/p')
if [ -z "$py" ]; then
echo "::error::Could not parse Python version from wheel: $whl"
exit 1
fi
echo "Using runtime wheel: $whl (Python $py)"
echo "python_version=$py" >> "$GITHUB_OUTPUT"
echo "wheel_path=$whl" >> "$GITHUB_OUTPUT"

- name: Install uv
uses: astral-sh/setup-uv@v6

- name: Set up validation toolchain
id: toolchain
shell: bash
env:
PY: ${{ steps.runtime_wheel.outputs.python_version }}
run: |
retry() { for n in 1 2 3; do "$@" && return 0; [ $n -lt 3 ] && sleep $((15*n*n)); done; return 1; }
uv python install "$PY"
uv tool install "cmake==4.0.3"
uv tool install "ninja==1.13.0"
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
retry sudo apt-get update
retry sudo apt-get install -y g++-12
echo "CC=gcc-12" >> "$GITHUB_ENV"
echo "CXX=g++-12" >> "$GITHUB_ENV"
echo "python_executable=$(uv python find "$PY")" >> "$GITHUB_OUTPUT"

- name: Log in to GitHub CR
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ github.token }}

- name: Build cudaq-devel wheel
shell: bash
env:
RELEASE_VERSION: ${{ steps.version.outputs.cudaq_version }}
BASE_IMAGE: ghcr.io/nvidia/cuda-quantum-devdeps:manylinux-amd64-cu13.0-gcc12-main
DEVEL_DIR: ${{ inputs.output-dir }}
PYTHON_VERSION: ${{ steps.runtime_wheel.outputs.python_version }}
run: |
mkdir -p "$DEVEL_DIR"
DOCKER_BUILDKIT=1 docker build \
-f docker/release/cudaq.wheel.Dockerfile \
--build-arg base_image="${BASE_IMAGE}" \
--build-arg release_version="${RELEASE_VERSION}" \
--build-arg python_version="${PYTHON_VERSION}" \
--build-arg build_devel=1 \
--output "$DEVEL_DIR" .

- name: Resolve devel wheel path
id: devel_wheel
shell: bash
env:
DEVEL_DIR: ${{ inputs.output-dir }}
run: |
whl=$(find "$DEVEL_DIR" -name 'cudaq_devel*.whl' | head -1)
if [ -z "$whl" ]; then
echo "::error::No cudaq_devel*.whl found under $DEVEL_DIR/"
find "$DEVEL_DIR" -type f || true
exit 1
fi
echo "Built devel wheel: $whl"
echo "wheel_path=$whl" >> "$GITHUB_OUTPUT"
8 changes: 8 additions & 0 deletions .github/research-preview-paths.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Ignore-list of repository-relative path prefixes owned by research-preview
# packages. The stable CUDA-Q CI workflows (ci, ci_macos, codeql, repo_checks)
# pass this file as `paths-ignore-file`, so a change that touches only these
# prefixes does not trigger the full stable CI suite. It is also the single
# source of truth for the paths a preview's own scoped workflow watches (see
# .github/workflows/pulse.yml). Only add a preview here once it has dedicated,
# scoped CI coverage.
pulse/
Loading
Loading