Repository navigation
Add a quake-unmapped profile and lower the FTQC bench targets through it - #5758
Conversation
acbd7ce to
3ed7e58
Compare
CI Summary (
|
| Job | Result |
|---|---|
binaries |
⏩ skipped |
build_and_test |
✅ success |
changes |
✅ success |
config_devdeps |
✅ success |
config_source_build |
⏩ skipped |
config_wheeldeps |
✅ success |
devdeps |
✅ success |
docker_image |
⏩ skipped |
documentation |
✅ success |
gen_code_coverage |
⏩ skipped |
metadata |
✅ success |
python_devel_wheel |
⏩ skipped |
python_metapackages |
⏩ skipped |
python_wheels |
⏩ skipped |
python_wheels_cu12_validation |
⏩ skipped |
python_wheels_cu13 |
⏩ skipped |
source_build |
⏩ skipped |
wheeldeps |
✅ success |
⏩ Skipped jobs (10) — intentionally skipped on PR builds; run on merge_group / workflow_dispatch
| Job |
|---|
binaries |
config_source_build |
docker_image |
gen_code_coverage |
python_devel_wheel |
python_metapackages |
python_wheels_cu12_validation |
python_wheels_cu13 |
python_wheels |
source_build |
All sub-jobs (47) — every matrix leg, with links
| Job | Status | Link |
|---|---|---|
| Build and test (amd64, gcc12, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (amd64, gcc12, openmpi) / Dev environment (Python) | ✅ success | view |
| Build and test (amd64, llvm, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (amd64, llvm, openmpi) / Dev environment (Python) | ✅ success | view |
| Build and test (arm64, llvm, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (arm64, llvm, openmpi) / Dev environment (Python) | ✅ success | view |
| CI Summary | ❔ in_progress | view |
| Check for stable CUDA-Q changes | ✅ success | view |
| Configure build (devdeps) | ✅ success | view |
| Configure build (source_build) | ⏩ skipped | view |
| Configure build (wheeldeps) | ✅ success | view |
| Create CUDA 12 Python wheels | ⏩ skipped | view |
| Create CUDA 13 Python wheels | ⏩ skipped | view |
| Create CUDA Quantum installer | ⏩ skipped | view |
| Create Docker images | ⏩ skipped | view |
| Create Python metapackages | ⏩ skipped | view |
| Create shared Python development wheel | ⏩ skipped | view |
| Documentation / Build and check docs | ✅ success | view |
| Gen code coverage | ⏩ skipped | view |
| Load dependencies (amd64, gcc12) / Caching | ✅ success | view |
| Load dependencies (amd64, gcc12) / Finalize | ✅ success | view |
| Load dependencies (amd64, gcc12) / Metadata | ✅ success | view |
| Load dependencies (amd64, llvm) / Caching | ✅ success | view |
| Load dependencies (amd64, llvm) / Finalize | ✅ success | view |
| Load dependencies (amd64, llvm) / Metadata | ✅ success | view |
| Load dependencies (arm64, gcc12) / Caching | ✅ success | view |
| Load dependencies (arm64, gcc12) / Finalize | ✅ success | view |
| Load dependencies (arm64, gcc12) / Metadata | ✅ success | view |
| Load dependencies (arm64, llvm) / Caching | ✅ success | view |
| Load dependencies (arm64, llvm) / Finalize | ✅ success | view |
| Load dependencies (arm64, llvm) / Metadata | ✅ success | view |
| Load source build cache | ⏩ skipped | view |
| Load wheel dependencies (amd64, 12.6) / Caching | ✅ success | view |
| Load wheel dependencies (amd64, 12.6) / Finalize | ✅ success | view |
| Load wheel dependencies (amd64, 12.6) / Metadata | ✅ success | view |
| Load wheel dependencies (amd64, 13.0) / Caching | ✅ success | view |
| Load wheel dependencies (amd64, 13.0) / Finalize | ✅ success | view |
| Load wheel dependencies (amd64, 13.0) / Metadata | ✅ success | view |
| Load wheel dependencies (arm64, 12.6) / Caching | ✅ success | view |
| Load wheel dependencies (arm64, 12.6) / Finalize | ✅ success | view |
| Load wheel dependencies (arm64, 12.6) / Metadata | ✅ success | view |
| Load wheel dependencies (arm64, 13.0) / Caching | ✅ success | view |
| Load wheel dependencies (arm64, 13.0) / Finalize | ✅ success | view |
| Load wheel dependencies (arm64, 13.0) / Metadata | ✅ success | view |
| Prepare cache clean-up | ❔ queued | view |
| Retrieve PR info | ✅ success | view |
| Validate CUDA 12 Python wheels | ⏩ skipped | view |
✅ Required checks (7/7) — declared in .github/required-checks.yml for push
| Required check | Status | Link |
|---|---|---|
| Build and test (amd64, llvm, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (amd64, llvm, openmpi) / Dev environment (Python) | ✅ success | view |
| Build and test (arm64, llvm, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (arm64, llvm, openmpi) / Dev environment (Python) | ✅ success | view |
| Build and test (amd64, gcc12, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (amd64, gcc12, openmpi) / Dev environment (Python) | ✅ success | view |
| Documentation / Build and check docs | ✅ success | view |
|
I pushed a change to keep YAML out of the C++ config types this PR adds:
I think the |
278290b to
862f6a0
Compare
The two FTQC benchmark targets ran fixed pipeline strings, so the
optimization level could not change what they did. This adds the
`quake-unmapped` profile, Quake before qubit mapping, with a handler
that picks its passes from the profile and the level, and converts
`compiler-bench-ftqc-logical` and `compiler-bench-ftqc-clifford-t` to
one `quake-unmapped` stage each.
The profile takes `basis-gates`, `approximation-tolerance`, and
`cost-model: t-count`. The tolerance bounds every rotation the compiler
approximates: erasing small rotations, snapping angles near a
Clifford+T value, and synthesis. `CompileTarget::createFromConfig`
replaces a target-argument placeholder in it and rejects a value that
is not a non-negative number, or a missing one when the basis needs
synthesis.
With the `t-count` cost model, level 0 stays on references and does
only what the basis requires. Level 1 converts to wires through
`prepare-for-wireset` and cleans up. Level 2 adds fusion, phase
folding, angle snapping, and one-qubit Clifford+T normalization, and
level 3 runs level 2. When the basis has no rotation gate, synthesis
runs at every level. Every stage ends with a strict `basis-conversion`
and the new `verify-profile-quake-unmapped`. Without a cost model, a
stage only converts to the basis and verifies.
`clifford-t-optimization-pipeline{level epsilon}` and
`clifford-t-synthesis-pipeline{epsilon seed}` replace
`cudaq-fault-tolerant-target` and `addCliffordTSynthesis`. The
synthesis seed moves to `CompileOptions` and comes from
`cudaq.set_random_seed` through `cudaq::get_compile_options`.
Behavior changes:
- The default level is 1 and Python cannot select another until
NVIDIA#5707, so the bench targets skip the level-2
passes from Python for now. The Clifford+T target still synthesizes
every rotation, and the documented example's output is unchanged.
The logical target's `epsilon` only erases rotations at level 1.
- The final basis conversion is strict, so a rotation the basis cannot
express, such as a rotation with a dynamic number of controls on the
logical target, is now a compile error.
- `compiler-bench-ftqc-clifford-t` no longer takes a `seed` argument
or reads `%SEED%`, so the platform no longer rebuilds its compile
target when the seed changes.
- The seed is part of the `CompileOptions` hash, so changing it causes
a recompile on every target.
- `cudaq-fault-tolerant-target` and `addCliffordTSynthesis` are
removed.
- Comments mark `quake-reference-semantics` and its handler for
deprecation once `quake-unmapped` has a cost model that counts
two-qubit gates.
Tests: lit tests for both pipelines at levels 1 to 3, the bound on what
level 2 may erase, and the verifier; the synthesis lit tests moved to
the new pipelines; `profile_providers` checks both targets' pipelines
at levels 0 to 2; `compile_target` checks resource counts by level, a
loop past the unroll limit, and Clifford+T synthesis at levels 0 and 2;
a target-config fixture and gtest cover parsing, printing, placeholder
resolution, and validation; the bench target Python tests add a
`get_unitary` check that lowering preserves the circuit, and four
level-2 checks are skipped until Python can select a level. The
Optimizer lit tests, the runtime regression tests, the target-config
tests, and the Python kernel, builder, and backends suites pass, except
failures that also occur on upstream main.
Signed-off-by: Thomas Alexander <talexander@nvidia.com>
Clang's -Wmissing-designated-field-initializers rejects
`StagePasses{.postDeployPasses = ...}`, because the struct's fields have
no default initializers, and CI compiles with -Werror. Set the field
after construction, as the reference-semantics handler does. No
behavior change.
The handler and the other files this branch changes compile under clang
22 with CI's warning flags, and the runtime regression tests pass.
Signed-off-by: Thomas Alexander <talexander@nvidia.com>
The `profile_providers` blocks for the FTQC targets pinned the whole pipeline, so every block repeated the shared prep, deploy, and finalize lines that the other blocks already check. They now check only the stage's passes between `jit-deploy-pipeline` and `jit-finalize-pipeline`. The Clifford+T level 1 block is dropped, since it differs from level 2 only in the level number and the cleanup after synthesis. The Clifford+T cases in `compile_target` now check only that `rz`, `r1`, and the global phase are gone. A rotation left over would already fail the stage's verifier and the compile. The runtime regression tests pass. Signed-off-by: Thomas Alexander <talexander@nvidia.com>
Clang's -Wmissing-designated-field-initializers rejects a partial
designated initializer such as `StagePasses{.preDeployPasses = ...}`
when the omitted fields have no default initializer, and CI compiles
with -Werror. `profile_stages` and `compile_target` use that form for
their test handlers. Giving the three strings `{}` initializers allows
it, as `CustomPipelineLowering` already does. No behavior change.
Signed-off-by: Thomas Alexander <talexander@nvidia.com>
`profile_providers` keeps one Clifford+T pipeline, at level 2, and the stage without a cost model. The other levels and the logical target are exercised by `compile_target` and the Python tests. The `compile_target` cases share one setup, the verifier lit test keeps one rejection each for references, wires, and a borrowed wire, and the logical target's unitary check is removed, since its lowering is exact and covered elsewhere. Comments in the handler and the pipelines are shortened to the contract and the reasons. No behavior change. The runtime regression tests, the Clifford+T and verifier lit tests, the platform and target-config unit tests, and the FTQC Python tests pass. Signed-off-by: Thomas Alexander <talexander@nvidia.com>
The profile's approximation tolerance was a string so that
CompileTarget::createFromConfig could substitute a %EPSILON% placeholder
into it, which meant code that builds a profile had to write YAML text.
It is now a double. A target argument that should set it names the option
with `profile-option: approximation-tolerance`, a ProfileOption enum whose
YAML name the adapter spells, and createFromConfig parses the supplied
value once. `set_target(..., epsilon=...)` behaves as before. The binding
is transitional: which settings users override per launch, and whether
those overrides move to CompileOptions, is left to a later step.
The target layer no longer reasons about synthesis. requiresSynthesis()
moves from the profile into the quake-unmapped handler, and createFromConfig
no longer requires a positive tolerance when the basis needs synthesis,
because the clifford-t-synthesis pass already rejects an epsilon that is
not positive. A zero epsilon on the Clifford+T target therefore fails when
a kernel compiles, as it did before this PR, rather than when the target is
created, and a negative tolerance is rejected by the passes that read it.
The YAML adapters spell each enum's YAML names in a switch instead of
deriving them from the C++ enumerator names, so renaming an enumerator no
longer changes the YAML, and a missing name is a -Wswitch warning. The
spellings themselves are unchanged. cudaq-target-db-gen prints profiles,
lowerings, and argument types by walking their fields with reflect-cpp, and
the catalog test driver prints profile options the same way, so a new
profile option needs no printer changes. The generated database now writes
an unchecked stage as `UncheckedProfile{}` and ends each aggregate with a
trailing comma.
The quake-unmapped handler no longer runs verify-profile-quake-unmapped,
matching the reference profile's handler. The strict basis-conversion that
ends the stage enforces the basis through the same conversion target. The
verifier's other check, that no qubit is borrowed from a wire set, is no
longer run in the pipeline; no pass in the stage borrows one, and the
verifier remains a lit-tested pass.
Also: v1 target arguments accept `profile-option` too, because v2 shares
their schema, although only v2 profiles have options. The epsilon help
strings, the profile's documentation, and the clifford-t-synthesis pass
description are rewritten.
Tests: the catalog fixture covers the argument binding and the generated
database; the target-config test covers the default, the argument, the
hash, and a non-numeric argument; the synthesis pipeline test checks that
no helper definition survives; and compile_target checks that an exact
exp_pauli angle synthesizes to one t<adj> at level 0, which the removed
fault-tolerant pipeline tests used to cover.
Verified locally: target-catalog, runtime, Clifford+T synthesis, and
verifier lit tests (54/54); target-config, platform, and compile-target
gtests; the FTQC bench Python tests (12 passed, 4 skipped as before); the
rotation-synthesis docs example (T count 208, unchanged); loading all 22
targets; and the changed C++ under clang 22 with the CI warning flags.
Signed-off-by: Thomas Alexander <talexander@nvidia.com>
The spelling check reads doc comments in headers and rejected the profile name in the YAML example. A \code block keeps the example and skips the check. Signed-off-by: Thomas Alexander <talexander@nvidia.com>
862f6a0 to
600a039
Compare
lmondada
left a comment
There was a problem hiding this comment.
Beautiful work, thank you 💚
CI Summary (
|
| Job | Result | Link |
|---|---|---|
binaries |
❌ failure | view |
Top-level jobs (18)
| Job | Result |
|---|---|
binaries |
❌ failure |
build_and_test |
✅ success |
changes |
✅ success |
config_devdeps |
✅ success |
config_source_build |
✅ success |
config_wheeldeps |
✅ success |
devdeps |
✅ success |
docker_image |
✅ success |
documentation |
⏩ skipped |
gen_code_coverage |
⏩ skipped |
metadata |
✅ success |
python_devel_wheel |
✅ success |
python_metapackages |
✅ success |
python_wheels |
✅ success |
python_wheels_cu12_validation |
✅ success |
python_wheels_cu13 |
✅ success |
source_build |
✅ success |
wheeldeps |
✅ success |
⏩ Skipped jobs (2) — intentionally skipped on PR builds; run on merge_group / workflow_dispatch
| Job |
|---|
documentation |
gen_code_coverage |
All sub-jobs (325) — every matrix leg, with links
| Job | Status | Link |
|---|---|---|
| null | ❔ null | view |
| Build and test (amd64, gcc12, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (amd64, gcc12, openmpi) / Dev environment (Python) | ✅ success | view |
| Build and test (amd64, llvm, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (amd64, llvm, openmpi) / Dev environment (Python) | ✅ success | view |
| Build and test (arm64, gcc12, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (arm64, gcc12, openmpi) / Dev environment (Python) | ✅ success | view |
| Build and test (arm64, llvm, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (arm64, llvm, openmpi) / Dev environment (Python) | ✅ success | view |
| CI Summary | ❔ in_progress | view |
| Check for stable CUDA-Q changes | ✅ success | view |
| Configure build (devdeps) | ✅ success | view |
| Configure build (source_build) | ✅ success | view |
| Configure build (wheeldeps) | ✅ success | view |
| Create CUDA 12 Python wheels (amd64, 3.11, 12.6) / Build Python 3.11 wheel | ✅ success | view |
| Create CUDA 12 Python wheels (amd64, 3.11, 12.6) / Build and test cudaq.logical | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.11, 12.6) / Build cudaq-devel wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.11, 12.6) / Compute wheel info | ✅ success | view |
| Create CUDA 12 Python wheels (amd64, 3.11, 12.6) / Prepare validation | ✅ success | view |
| Create CUDA 12 Python wheels (amd64, 3.11, 12.6) / Staging | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate devel wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.13, 12.6) / Build Python 3.13 wheel | ✅ success | view |
| Create CUDA 12 Python wheels (amd64, 3.13, 12.6) / Build and test cudaq.logical | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.13, 12.6) / Build cudaq-devel wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.13, 12.6) / Compute wheel info | ✅ success | view |
| Create CUDA 12 Python wheels (amd64, 3.13, 12.6) / Prepare validation | ✅ success | view |
| Create CUDA 12 Python wheels (amd64, 3.13, 12.6) / Staging | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.13, 12.6) / Validate devel wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.13, 12.6) / Validate wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.13, 12.6) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.14, 12.6) / Build Python 3.14 wheel | ✅ success | view |
| Create CUDA 12 Python wheels (amd64, 3.14, 12.6) / Build and test cudaq.logical | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.14, 12.6) / Build cudaq-devel wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.14, 12.6) / Compute wheel info | ✅ success | view |
| Create CUDA 12 Python wheels (amd64, 3.14, 12.6) / Prepare validation | ✅ success | view |
| Create CUDA 12 Python wheels (amd64, 3.14, 12.6) / Staging | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.14, 12.6) / Validate devel wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.14, 12.6) / Validate wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (amd64, 3.14, 12.6) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.11, 12.6) / Build Python 3.11 wheel | ✅ success | view |
| Create CUDA 12 Python wheels (arm64, 3.11, 12.6) / Build and test cudaq.logical | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.11, 12.6) / Build cudaq-devel wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.11, 12.6) / Compute wheel info | ✅ success | view |
| Create CUDA 12 Python wheels (arm64, 3.11, 12.6) / Prepare validation | ✅ success | view |
| Create CUDA 12 Python wheels (arm64, 3.11, 12.6) / Staging | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate devel wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.13, 12.6) / Build Python 3.13 wheel | ✅ success | view |
| Create CUDA 12 Python wheels (arm64, 3.13, 12.6) / Build and test cudaq.logical | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.13, 12.6) / Build cudaq-devel wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.13, 12.6) / Compute wheel info | ✅ success | view |
| Create CUDA 12 Python wheels (arm64, 3.13, 12.6) / Prepare validation | ✅ success | view |
| Create CUDA 12 Python wheels (arm64, 3.13, 12.6) / Staging | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.13, 12.6) / Validate devel wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.13, 12.6) / Validate wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.13, 12.6) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.14, 12.6) / Build Python 3.14 wheel | ✅ success | view |
| Create CUDA 12 Python wheels (arm64, 3.14, 12.6) / Build and test cudaq.logical | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.14, 12.6) / Build cudaq-devel wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.14, 12.6) / Compute wheel info | ✅ success | view |
| Create CUDA 12 Python wheels (arm64, 3.14, 12.6) / Prepare validation | ✅ success | view |
| Create CUDA 12 Python wheels (arm64, 3.14, 12.6) / Staging | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.14, 12.6) / Validate devel wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.14, 12.6) / Validate wheel | ⏩ skipped | view |
| Create CUDA 12 Python wheels (arm64, 3.14, 12.6) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Build Python 3.11 wheel | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Build and test cudaq.logical / Build and test cudaq.logical | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Build and test cudaq.logical / Infer platform and Python version | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Build and test cudaq.logical / Test cudaq.logical | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Build cudaq-devel wheel | ⏩ skipped | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Compute wheel info | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Prepare validation | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Staging | ⏩ skipped | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate devel wheel | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (debian:12) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (debian:12, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (fedora:42) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (redhat/ubi8:8.10) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (redhat/ubi8:8.10, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (redhat/ubi9:9.6) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (redhat/ubi9:9.6, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (ubuntu:22.04) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (ubuntu:22.04, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Create CUDA 13 Python wheels (amd64, 3.13, 13.0) / Build Python 3.13 wheel | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.13, 13.0) / Build and test cudaq.logical / Build and test cudaq.logical | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.13, 13.0) / Build and test cudaq.logical / Infer platform and Python version | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.13, 13.0) / Build and test cudaq.logical / Test cudaq.logical | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.13, 13.0) / Build cudaq-devel wheel | ⏩ skipped | view |
| Create CUDA 13 Python wheels (amd64, 3.13, 13.0) / Compute wheel info | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.13, 13.0) / Prepare validation | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.13, 13.0) / Staging | ⏩ skipped | view |
| Create CUDA 13 Python wheels (amd64, 3.13, 13.0) / Validate devel wheel | ⏩ skipped | view |
| Create CUDA 13 Python wheels (amd64, 3.13, 13.0) / Validate wheel (fedora:42) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.13, 13.0) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.13, 13.0) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Create CUDA 13 Python wheels (amd64, 3.14, 13.0) / Build Python 3.14 wheel | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.14, 13.0) / Build and test cudaq.logical / Build and test cudaq.logical | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.14, 13.0) / Build and test cudaq.logical / Infer platform and Python version | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.14, 13.0) / Build and test cudaq.logical / Test cudaq.logical | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.14, 13.0) / Build cudaq-devel wheel | ⏩ skipped | view |
| Create CUDA 13 Python wheels (amd64, 3.14, 13.0) / Compute wheel info | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.14, 13.0) / Prepare validation | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.14, 13.0) / Staging | ⏩ skipped | view |
| Create CUDA 13 Python wheels (amd64, 3.14, 13.0) / Validate devel wheel | ⏩ skipped | view |
| Create CUDA 13 Python wheels (amd64, 3.14, 13.0) / Validate wheel (fedora:42) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.14, 13.0) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.14, 13.0) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Build Python 3.11 wheel | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Build and test cudaq.logical | ⏩ skipped | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Build cudaq-devel wheel | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Compute wheel info | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Prepare validation | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Staging | ⏩ skipped | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate devel wheel | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (debian:12) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (debian:12, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (fedora:42) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (redhat/ubi8:8.10) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (redhat/ubi8:8.10, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (redhat/ubi9:9.6) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (redhat/ubi9:9.6, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (ubuntu:22.04) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (ubuntu:22.04, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Create CUDA 13 Python wheels (arm64, 3.13, 13.0) / Build Python 3.13 wheel | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.13, 13.0) / Build and test cudaq.logical | ⏩ skipped | view |
| Create CUDA 13 Python wheels (arm64, 3.13, 13.0) / Build cudaq-devel wheel | ⏩ skipped | view |
| Create CUDA 13 Python wheels (arm64, 3.13, 13.0) / Compute wheel info | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.13, 13.0) / Prepare validation | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.13, 13.0) / Staging | ⏩ skipped | view |
| Create CUDA 13 Python wheels (arm64, 3.13, 13.0) / Validate devel wheel | ⏩ skipped | view |
| Create CUDA 13 Python wheels (arm64, 3.13, 13.0) / Validate wheel (fedora:42) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.13, 13.0) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.13, 13.0) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Create CUDA 13 Python wheels (arm64, 3.14, 13.0) / Build Python 3.14 wheel | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.14, 13.0) / Build and test cudaq.logical | ⏩ skipped | view |
| Create CUDA 13 Python wheels (arm64, 3.14, 13.0) / Build cudaq-devel wheel | ⏩ skipped | view |
| Create CUDA 13 Python wheels (arm64, 3.14, 13.0) / Compute wheel info | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.14, 13.0) / Prepare validation | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.14, 13.0) / Staging | ⏩ skipped | view |
| Create CUDA 13 Python wheels (arm64, 3.14, 13.0) / Validate devel wheel | ⏩ skipped | view |
| Create CUDA 13 Python wheels (arm64, 3.14, 13.0) / Validate wheel (fedora:42) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.14, 13.0) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.14, 13.0) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Create CUDA Quantum installer (amd64, 12.6) / Build CUDA Quantum assets | ❌ failure | view |
| Create CUDA Quantum installer (amd64, 12.6) / Minimal OpenMPI installation | ❌ failure | view |
| Create CUDA Quantum installer (amd64, 12.6) / Prepare cache clean-up | ✅ success | view |
| Create CUDA Quantum installer (amd64, 12.6) / Prepare validation | ✅ success | view |
| Create CUDA Quantum installer (amd64, 12.6) / Staging | ⏩ skipped | view |
| Create CUDA Quantum installer (amd64, 12.6) / Validate installer | ⏩ skipped | view |
| Create CUDA Quantum installer (amd64, 13.0) / Build CUDA Quantum assets | ❌ failure | view |
| Create CUDA Quantum installer (amd64, 13.0) / Minimal OpenMPI installation | ❌ failure | view |
| Create CUDA Quantum installer (amd64, 13.0) / Prepare cache clean-up | ✅ success | view |
| Create CUDA Quantum installer (amd64, 13.0) / Prepare validation | ✅ success | view |
| Create CUDA Quantum installer (amd64, 13.0) / Staging | ⏩ skipped | view |
| Create CUDA Quantum installer (amd64, 13.0) / Validate installer | ⏩ skipped | view |
| Create CUDA Quantum installer (arm64, 12.6) / Build CUDA Quantum assets | ❌ failure | view |
| Create CUDA Quantum installer (arm64, 12.6) / Minimal OpenMPI installation | ❌ failure | view |
| Create CUDA Quantum installer (arm64, 12.6) / Prepare cache clean-up | ✅ success | view |
| Create CUDA Quantum installer (arm64, 12.6) / Prepare validation | ✅ success | view |
| Create CUDA Quantum installer (arm64, 12.6) / Staging | ⏩ skipped | view |
| Create CUDA Quantum installer (arm64, 12.6) / Validate installer | ⏩ skipped | view |
| Create CUDA Quantum installer (arm64, 13.0) / Build CUDA Quantum assets | ❌ failure | view |
| Create CUDA Quantum installer (arm64, 13.0) / Minimal OpenMPI installation | ❌ failure | view |
| Create CUDA Quantum installer (arm64, 13.0) / Prepare cache clean-up | ✅ success | view |
| Create CUDA Quantum installer (arm64, 13.0) / Prepare validation | ✅ success | view |
| Create CUDA Quantum installer (arm64, 13.0) / Staging | ⏩ skipped | view |
| Create CUDA Quantum installer (arm64, 13.0) / Validate installer | ⏩ skipped | view |
| Create Docker images (amd64) / Documentation | ✅ success | view |
| Create Docker images (amd64) / Metadata | ✅ success | view |
| Create Docker images (amd64) / Prepare cache clean-up | ✅ success | view |
| Create Docker images (amd64) / Staging | ⏩ skipped | view |
| Create Docker images (amd64) / Validation | ✅ success | view |
| Create Docker images (amd64) / cuda-quantum (release) | ✅ success | view |
| Create Docker images (amd64) / cuda-quantum-dev (debug) | ✅ success | view |
| Create Docker images (amd64) / open-mpi | ⏩ skipped | view |
| Create Docker images (arm64) / Documentation | ⏩ skipped | view |
| Create Docker images (arm64) / Metadata | ✅ success | view |
| Create Docker images (arm64) / Prepare cache clean-up | ✅ success | view |
| Create Docker images (arm64) / Staging | ⏩ skipped | view |
| Create Docker images (arm64) / Validation | ✅ success | view |
| Create Docker images (arm64) / cuda-quantum (release) | ✅ success | view |
| Create Docker images (arm64) / cuda-quantum-dev (debug) | ✅ success | view |
| Create Docker images (arm64) / open-mpi | ⏩ skipped | view |
| Create Python metapackages / Build Python metapackages | ✅ success | view |
| Create Python metapackages / Test Python metapackages (12.6, 3.11) | ✅ success | view |
| Create Python metapackages / Test Python metapackages (12.6, 3.13) | ✅ success | view |
| Create Python metapackages / Test Python metapackages (12.6, 3.14) | ✅ success | view |
| Create Python metapackages / Test Python metapackages (13.0, 3.11) | ✅ success | view |
| Create Python metapackages / Test Python metapackages (13.0, 3.13) | ✅ success | view |
| Create Python metapackages / Test Python metapackages (13.0, 3.14) | ✅ success | view |
| Create Python metapackages / Test Python metapackages (3.11) | ✅ success | view |
| Create Python metapackages / Test Python metapackages (3.13) | ✅ success | view |
| Create Python metapackages / Test Python metapackages (3.14) | ✅ success | view |
| Create shared Python development wheel / Build Python ${{ inputs.python_version }} wheel | ⏩ skipped | view |
| Create shared Python development wheel / Build and test cudaq.logical | ⏩ skipped | view |
| Create shared Python development wheel / Build cudaq-devel wheel | ✅ success | view |
| Create shared Python development wheel / Compute wheel info | ✅ success | view |
| Create shared Python development wheel / Prepare validation | ✅ success | view |
| Create shared Python development wheel / Staging | ⏩ skipped | view |
| Create shared Python development wheel / Validate devel wheel | ⏩ skipped | view |
| Create shared Python development wheel / Validate wheel | ⏩ skipped | view |
| Create shared Python development wheel / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Documentation | ⏩ skipped | view |
| Gen code coverage | ⏩ skipped | view |
| Load dependencies (amd64, gcc12) / Caching | ✅ success | view |
| Load dependencies (amd64, gcc12) / Finalize | ✅ success | view |
| Load dependencies (amd64, gcc12) / Metadata | ✅ success | view |
| Load dependencies (amd64, llvm) / Caching | ✅ success | view |
| Load dependencies (amd64, llvm) / Finalize | ✅ success | view |
| Load dependencies (amd64, llvm) / Metadata | ✅ success | view |
| Load dependencies (arm64, gcc12) / Caching | ✅ success | view |
| Load dependencies (arm64, gcc12) / Finalize | ✅ success | view |
| Load dependencies (arm64, gcc12) / Metadata | ✅ success | view |
| Load dependencies (arm64, llvm) / Caching | ✅ success | view |
| Load dependencies (arm64, llvm) / Finalize | ✅ success | view |
| Load dependencies (arm64, llvm) / Metadata | ✅ success | view |
| Load source build cache (amd64, 12.6) / Caching | ✅ success | view |
| Load source build cache (amd64, 12.6) / Finalize | ✅ success | view |
| Load source build cache (amd64, 12.6) / Metadata | ✅ success | view |
| Load source build cache (amd64, 13.0) / Caching | ✅ success | view |
| Load source build cache (amd64, 13.0) / Finalize | ✅ success | view |
| Load source build cache (amd64, 13.0) / Metadata | ✅ success | view |
| Load source build cache (arm64, 12.6) / Caching | ✅ success | view |
| Load source build cache (arm64, 12.6) / Finalize | ✅ success | view |
| Load source build cache (arm64, 12.6) / Metadata | ✅ success | view |
| Load source build cache (arm64, 13.0) / Caching | ✅ success | view |
| Load source build cache (arm64, 13.0) / Finalize | ✅ success | view |
| Load source build cache (arm64, 13.0) / Metadata | ✅ success | view |
| Load wheel dependencies (amd64, 12.6) / Caching | ✅ success | view |
| Load wheel dependencies (amd64, 12.6) / Finalize | ✅ success | view |
| Load wheel dependencies (amd64, 12.6) / Metadata | ✅ success | view |
| Load wheel dependencies (amd64, 13.0) / Caching | ✅ success | view |
| Load wheel dependencies (amd64, 13.0) / Finalize | ✅ success | view |
| Load wheel dependencies (amd64, 13.0) / Metadata | ✅ success | view |
| Load wheel dependencies (arm64, 12.6) / Caching | ✅ success | view |
| Load wheel dependencies (arm64, 12.6) / Finalize | ✅ success | view |
| Load wheel dependencies (arm64, 12.6) / Metadata | ✅ success | view |
| Load wheel dependencies (arm64, 13.0) / Caching | ✅ success | view |
| Load wheel dependencies (arm64, 13.0) / Finalize | ✅ success | view |
| Load wheel dependencies (arm64, 13.0) / Metadata | ✅ success | view |
| Prepare cache clean-up | ✅ success | view |
| Retrieve PR info | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Build Python ${{ inputs.python_version }} wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Build and test cudaq.logical | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Build cudaq-devel wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Compute wheel info | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Prepare validation | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Staging | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate devel wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (debian:12) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (debian:12, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (fedora:42) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (redhat/ubi8:8.10) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (redhat/ubi8:8.10, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (redhat/ubi9:9.6) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (redhat/ubi9:9.6, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (ubuntu:22.04) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (ubuntu:22.04, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel on GPU (nvidia simulator) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.13, 12.6) / Build Python ${{ inputs.python_version }} wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.13, 12.6) / Build and test cudaq.logical | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.13, 12.6) / Build cudaq-devel wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.13, 12.6) / Compute wheel info | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.13, 12.6) / Prepare validation | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.13, 12.6) / Staging | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.13, 12.6) / Validate devel wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.13, 12.6) / Validate wheel (fedora:42) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.13, 12.6) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.13, 12.6) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.14, 12.6) / Build Python ${{ inputs.python_version }} wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.14, 12.6) / Build and test cudaq.logical | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.14, 12.6) / Build cudaq-devel wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.14, 12.6) / Compute wheel info | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.14, 12.6) / Prepare validation | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.14, 12.6) / Staging | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.14, 12.6) / Validate devel wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (amd64, 3.14, 12.6) / Validate wheel (fedora:42) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.14, 12.6) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.14, 12.6) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Build Python ${{ inputs.python_version }} wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Build and test cudaq.logical | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Build cudaq-devel wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Compute wheel info | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Prepare validation | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Staging | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate devel wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (debian:12) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (debian:12, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (fedora:42) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (redhat/ubi8:8.10) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (redhat/ubi8:8.10, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (redhat/ubi9:9.6) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (redhat/ubi9:9.6, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (ubuntu:22.04) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (ubuntu:22.04, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.13, 12.6) / Build Python ${{ inputs.python_version }} wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.13, 12.6) / Build and test cudaq.logical | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.13, 12.6) / Build cudaq-devel wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.13, 12.6) / Compute wheel info | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.13, 12.6) / Prepare validation | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.13, 12.6) / Staging | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.13, 12.6) / Validate devel wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.13, 12.6) / Validate wheel (fedora:42) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.13, 12.6) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.13, 12.6) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.14, 12.6) / Build Python ${{ inputs.python_version }} wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.14, 12.6) / Build and test cudaq.logical | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.14, 12.6) / Build cudaq-devel wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.14, 12.6) / Compute wheel info | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.14, 12.6) / Prepare validation | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.14, 12.6) / Staging | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.14, 12.6) / Validate devel wheel | ⏩ skipped | view |
| Validate CUDA 12 Python wheels (arm64, 3.14, 12.6) / Validate wheel (fedora:42) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.14, 12.6) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.14, 12.6) / Validate wheel on GPU (nvidia simulator) | ⏩ skipped | view |
⚠️ Required checks (42/53) — 11 missing — declared in .github/required-checks.yml for workflow_dispatch
| Required check | Status | Link |
|---|---|---|
| Build and test (amd64, llvm, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (amd64, llvm, openmpi) / Dev environment (Python) | ✅ success | view |
| Build and test (arm64, llvm, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (arm64, llvm, openmpi) / Dev environment (Python) | ✅ success | view |
| Build and test (amd64, gcc12, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (amd64, gcc12, openmpi) / Dev environment (Python) | ✅ success | view |
| Build and test (arm64, gcc12, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (arm64, gcc12, openmpi) / Dev environment (Python) | ✅ success | view |
| Create CUDA Quantum installer (amd64, 12.6) / Build CUDA Quantum assets | ❌ failure | view |
| Create CUDA Quantum installer (amd64, 12.6) / Minimal OpenMPI installation | ❌ failure | view |
| Create CUDA Quantum installer (amd64, 12.6) / Validate installer (debian:12) | ❔ missing | |
| Create CUDA Quantum installer (amd64, 12.6) / Validate installer (fedora:42) | ❔ missing | |
| Create CUDA Quantum installer (amd64, 12.6) / Validate installer (opensuse/leap:15.5) | ❔ missing | |
| Create CUDA Quantum installer (amd64, 12.6) / Validate installer (redhat/ubi9:9.6) | ❔ missing | |
| Create CUDA Quantum installer (amd64, 12.6) / Validate installer (ubuntu:22.04) | ❔ missing | |
| Create CUDA Quantum installer (arm64, 12.6) / Build CUDA Quantum assets | ❌ failure | view |
| Create CUDA Quantum installer (arm64, 12.6) / Minimal OpenMPI installation | ❌ failure | view |
| Create CUDA Quantum installer (arm64, 12.6) / Validate installer (redhat/ubi9:9.6) | ❔ missing | |
| Create CUDA Quantum installer (arm64, 12.6) / Validate installer (ubuntu:22.04) | ❔ missing | |
| Create Docker images (amd64) / Documentation | ✅ success | view |
| Create Docker images (amd64) / Validation | ✅ success | view |
| Create Docker images (arm64) / Validation | ✅ success | view |
| Create Python metapackages / Build Python metapackages | ✅ success | view |
| Create Python metapackages / Test Python metapackages (3.11) | ✅ success | view |
| Create Python metapackages / Test Python metapackages (3.13) | ✅ success | view |
| Create Python metapackages / Test Python metapackages (3.14) | ✅ success | view |
| Create Python metapackages / Test Python metapackages (12.6, 3.11) | ✅ success | view |
| Create Python metapackages / Test Python metapackages (12.6, 3.13) | ✅ success | view |
| Create Python metapackages / Test Python metapackages (12.6, 3.14) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (debian:12, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (debian:12) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (fedora:42) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (redhat/ubi8:8.10, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (amd64, 3.11, 13.0) / Validate wheel (redhat/ubi8:8.10) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (debian:12, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (debian:12) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (fedora:42) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (redhat/ubi8:8.10, --user) | ✅ success | view |
| Create CUDA 13 Python wheels (arm64, 3.11, 13.0) / Validate wheel (redhat/ubi8:8.10) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (debian:12, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (debian:12) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (fedora:42) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (redhat/ubi8:8.10, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (amd64, 3.11, 12.6) / Validate wheel (redhat/ubi8:8.10) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (debian:12, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (debian:12) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (fedora:42, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (fedora:42) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (redhat/ubi8:8.10, --user) | ✅ success | view |
| Validate CUDA 12 Python wheels (arm64, 3.11, 12.6) / Validate wheel (redhat/ubi8:8.10) | ✅ success | view |
|
CUDA Quantum Docs Bot: A preview of the documentation can be found here. |
The FTQC benchmark targets had an `epsilon` target argument that replaced
the `approximation-tolerance` of their `quake-unmapped` stage through a
new `profile-option` binding on target arguments. That gave a target two
places for one setting and made every target argument a possible profile
writer. A target's compilation settings now live only on its stage
profile, and a Python user who wants another tolerance derives a compile
target from the active one.
Behavior changes:
- `compiler-bench-ftqc-clifford-t` and `compiler-bench-ftqc-logical` no
longer have an `epsilon` argument. Their tolerances stay 1e-10 and 0.
The argument's help text now documents `approximationTolerance`.
- Target arguments no longer accept `profile-option`. `TargetArgument`,
its v1/v2 YAML structs, and the canonical conversion match upstream
again, `CompileTarget::createFromConfig` no longer sets profile options
from arguments, and the database generator and catalog test driver no
longer print the field.
- `cudaq._experimental` exports `QuakeUnmappedProfile` (`basis_gates`,
`approximation_tolerance`, `cost_model`) and a `CostModel` enum, so a
compile target with a `quake-unmapped` stage can be built, compared,
and read from Python.
- `cudaq._experimental.get_compile_target(qpu_id=0)` returns the compile
target that kernels for the active target are compiled against.
Known hazard: `set_target` ignores keyword arguments a target does not
define, so `cudaq.set_target("compiler-bench-ftqc-clifford-t",
epsilon="1e-3")` still succeeds and compiles at the default 1e-10.
Callers that pass `epsilon`, such as cudaq-bench's Clifford+T sweep
helper, must derive the compile target instead. Rejecting unknown
arguments is left to a later change.
Tests: the FTQC Python tests derive the compile target where they vary
the tolerance, a test checks the getter against the Clifford+T target's
profile, and the profile equality test covers `QuakeUnmappedProfile`.
The unit test and lit lines that covered only the argument are removed.
Target and Clifford+T lit, `compile_target` and `profile_providers`
regression tests, `TargetConfigTester`, and the docs example pass.
Signed-off-by: Thomas Alexander <talexander@nvidia.com>
7c79492 to
4f4127e
Compare
The quake-unmapped handler decided whether to run Clifford+T synthesis from a hand-written list of rotation names and its own parsing of the basis grammar, kept a second list of the rotations the Clifford+T optimizer reads, and spelled out the post-synthesis cleanup as an inline pass string. The list also disagreed with decomposition: it treated an uncontrolled `u3` as enough to express a rotation, but `basis-conversion` cannot lower `r1` to it. - `clifford-t-synthesis-pipeline` takes the target `basis`. When the registered decomposition patterns lower any of the rotations it reads to the basis exactly, the pipeline adds no passes, which keeps the handler's old rule of synthesizing only for a basis without a rotation. Without a basis it behaves as before. The check is a new `cudaq::canDecomposeTo` over the same pattern graph `basis-conversion` uses. It reads the shared graph without touching its selection cache, so pipelines built on several threads can call it. - The pipeline also takes a `level` option. From level 2 it runs the cleanup the handler used to append, in the same order. The default is 2, so direct `cudaq-opt` uses of the pipeline without `level` now also run the cleanup. - `cudaq::opt::cliffordTRotations` names the rotations the Clifford+T pipelines read, in a header with no LLVM or MLIR dependency. The pipeline and the handler share it, and the handler keeps planning pipelines as text. - The handler always adds the synthesis pipeline, with the basis, for a `t-count` stage with a non-empty basis, and `getStagePasses` is split into small helpers. For both FTQC targets the passes that run are unchanged; the synthesis pipeline now carries `basis` and `level` and absorbs the cleanup. Signed-off-by: Thomas Alexander <talexander@nvidia.com>
Follow-ups from review of the tolerance change: - The `_experimental` README example changed only the first stage and then replaced the stage list with it, which drops later stages of a multi-stage target. It now updates each `quake-unmapped` stage in place and keeps the rest. The FTQC test helpers unpack exactly one stage, so a target that grows a second stage fails instead of losing it. - The compile-targets docs page now names `QuakeUnmappedProfile` as a supported profile, matching the README. - `QuakeUnmappedProfile.__repr__` prints `cost_model=CostModel.t_count` or `None`, so the repr reads back as a constructor call like the other profiles', and a test pins it. - `QuakeUnmappedProfile` also accepts the cost model by name, as `cost_model="t_count"`, like `measurement_type` on the reference-semantics profile. Any other string raises `ValueError`. Signed-off-by: Thomas Alexander <talexander@nvidia.com>
Adding a target profile used to edit three shared places on the YAML side: a per-profile V2 struct in TargetConfigV2.h, the hand-written IrOutputProfileV2 tagged union, and a toCanonicalProfile overload. The test driver also derived YAML keys from the public profile's C++ field names, coupling the public type to the YAML vocabulary. Each profile now has one YAML file under Yaml/v2 that specializes the project trait v2::ProfileYaml<P>: its YAML type, whose Tag is the profile name, and the conversions to and from the public type. Each YAML default is initialized from a default-constructed public profile, and a static_assert checks that the options and the profile have the same number of fields. The profile union is derived from the public Profile variant, and one visit converts the parsed alternative through overload resolution on the trait's `to` functions. A new profile adds its YAML file and one include line in TargetConfigV2.h. The union holds the YAML types rather than the public types because rfl::TaggedUnion reads the Tag from the alternative itself, so public types would be tagged by their C++ type names. Since the union holds the YAML types, reflect-cpp would never use an rfl::Reflector on a public profile when parsing. Specializing that third-party template on public types in a private header would also give them a serialization that depends on which headers a translation unit includes, an ODR risk. The project trait avoids both. The MeasurementForm and CostModel enum adapters move to the YAML file of the profile that uses them. std::hash for each profile moves beside the profile, so CompileTarget names no specific profile. TargetCatalogTestDriver now prints each profile's YAML form, written with rfl::to_generic from v2::ProfileYaml<P>::from, so PARSE output shows an `options:` mapping. It does not use rfl::yaml::write, which formats doubles with std::to_string and prints 1e-10 as 0.000000. Tests check the driver's printed form for every option, for omitted options, and for a null cost-model; they do not re-parse the printed YAML. The accepted YAML is unchanged. The target-catalog lit suite passes (28 tests) with the driver and cudaq-target-db-gen built from these sources outside the CMake build. Signed-off-by: Thomas Alexander <talexander@nvidia.com>
`CompileOptions::seed` is now a `std::optional<std::uint64_t>`, so an unseeded compilation shows in the type rather than as the value 0. A random seed of 0 still means unseeded, because `cudaq::set_random_seed(0)` and the synthesis pass's `seed` option already define it that way, so `get_compile_options` maps it to `std::nullopt`. Without a seed, the quake-unmapped handler leaves `seed=` out of the synthesis pipeline. `get_compile_options` takes the random seed as an argument instead of reading the thread-local seed, so it stays a pure function. Its callers pass `cudaq::get_random_seed()`. Signed-off-by: Thomas Alexander <talexander@nvidia.com>
4f4127e to
3d91743
Compare
|
I dropped a bunch of questions in the follow-up PR (#5771) that probably pertain to this one. You should take a look. |
CI Summary (
|
| Job | Result |
|---|---|
binaries |
⏩ skipped |
build_and_test |
✅ success |
changes |
✅ success |
config_devdeps |
✅ success |
config_source_build |
⏩ skipped |
config_wheeldeps |
⏩ skipped |
devdeps |
✅ success |
docker_image |
⏩ skipped |
documentation |
⏩ skipped |
gen_code_coverage |
⏩ skipped |
metadata |
✅ success |
python_devel_wheel |
⏩ skipped |
python_metapackages |
⏩ skipped |
python_wheels |
⏩ skipped |
python_wheels_cu12_validation |
⏩ skipped |
python_wheels_cu13 |
⏩ skipped |
source_build |
⏩ skipped |
wheeldeps |
⏩ skipped |
⏩ Skipped jobs (13) — intentionally skipped on PR builds; run on merge_group / workflow_dispatch
| Job |
|---|
binaries |
config_source_build |
config_wheeldeps |
docker_image |
documentation |
gen_code_coverage |
python_devel_wheel |
python_metapackages |
python_wheels_cu12_validation |
python_wheels_cu13 |
python_wheels |
source_build |
wheeldeps |
All sub-jobs (28) — every matrix leg, with links
| Job | Status | Link |
|---|---|---|
| Build and test (amd64, llvm, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (amd64, llvm, openmpi) / Dev environment (Python) | ✅ success | view |
| Build and test (arm64, llvm, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (arm64, llvm, openmpi) / Dev environment (Python) | ✅ success | view |
| CI Summary | ❔ in_progress | view |
| Check for stable CUDA-Q changes | ✅ success | view |
| Configure build (devdeps) | ✅ success | view |
| Configure build (source_build) | ⏩ skipped | view |
| Configure build (wheeldeps) | ⏩ skipped | view |
| Create CUDA 12 Python wheels | ⏩ skipped | view |
| Create CUDA 13 Python wheels | ⏩ skipped | view |
| Create CUDA Quantum installer | ⏩ skipped | view |
| Create Docker images | ⏩ skipped | view |
| Create Python metapackages | ⏩ skipped | view |
| Create shared Python development wheel | ⏩ skipped | view |
| Documentation | ⏩ skipped | view |
| Gen code coverage | ⏩ skipped | view |
| Load dependencies (amd64, llvm) / Caching | ✅ success | view |
| Load dependencies (amd64, llvm) / Finalize | ✅ success | view |
| Load dependencies (amd64, llvm) / Metadata | ✅ success | view |
| Load dependencies (arm64, llvm) / Caching | ✅ success | view |
| Load dependencies (arm64, llvm) / Finalize | ✅ success | view |
| Load dependencies (arm64, llvm) / Metadata | ✅ success | view |
| Load source build cache | ⏩ skipped | view |
| Load wheel dependencies | ⏩ skipped | view |
| Prepare cache clean-up | ❔ in_progress | view |
| Retrieve PR info | ✅ success | view |
| Validate CUDA 12 Python wheels | ⏩ skipped | view |
✅ Required checks (4/4) — declared in .github/required-checks.yml for merge_group_fast
| Required check | Status | Link |
|---|---|---|
| Build and test (amd64, llvm, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (amd64, llvm, openmpi) / Dev environment (Python) | ✅ success | view |
| Build and test (arm64, llvm, openmpi) / Dev environment (Debug) | ✅ success | view |
| Build and test (arm64, llvm, openmpi) / Dev environment (Python) | ✅ success | view |
…IA#5771) Closes NVIDIA#5754. This lets a compile stage ask for the values of a kernel's arguments, so the Clifford+T benchmark target can synthesize rotations whose angles depend on an argument. Before, a QFT whose width is an argument failed to compile on that target unless you called `cudaq.synthesize` first. Stacked on NVIDIA#5758. Until that merges, only these two commits are new here: - 6c12716 - 4133421 ## The problem On simulators, a Python kernel is compiled once and gets its arguments at run time, so the compile stages never see the argument values. That's usually what you want, but some stages can't do their job without them. Clifford+T synthesis has to know every rotation angle at compile time, and angles often come from arguments, like the width of a QFT. On `compiler-bench-ftqc-clifford-t`, those kernels failed to compile. The only way to get values into the compile was `fullySpecialize` on the target. Simulators clear it (`DefaultQPU`), and setting it there anyway exposed a second bug. Argument synthesis and the run-time `.argsCreator` lay out some types differently (`list[bool]`, for one), and Python picked the layout from whether the platform was a local simulator rather than from whether the compile would actually substitute the arguments. With `fully_specialize` set on `qpp-cpu`, sampling a kernel that takes a `list[bool]` returned `{}`. ## How this fixes it Stages can now ask for argument values. Lowering handlers get a `requiresArgumentValues` query, and the quake-unmapped handler says yes when it synthesizes. A target specializes if it sets `fullySpecialize` or one of its stages asks, which `specializesArguments(target)` computes. The compiler, the Python compiled-module cache, and Python argument packing all use that one answer, so they can't disagree. That also fixes the `list[bool]` layout. The second commit fixes two misleading errors: the synthesis dynamic-angle error no longer suggests a pass option users can't set, and local pipeline failures no longer say "Remote rest platform". ## Things to be aware of - On `compiler-bench-ftqc-clifford-t`, a kernel with live arguments now recompiles on every call, because the cache doesn't key on argument values. That includes every shot of `cudaq.run`. Kernels without live arguments still cache there. Before this change, kernels with angle arguments didn't compile at all, so I think this is fine for a benchmark target, but a cache keyed on argument values would fix it if it matters. - Remote and emulated targets already set `fullySpecialize`, so nothing changes for them. The simulators and `compiler-bench-ftqc-logical` still compile once and reuse the result. - Handler selection for this query uses default `CompileOptions`. That's right as long as `supports` only looks at the profiles, which the built-in handlers do and the `supports` doc now requires. --------- Signed-off-by: Thomas Alexander <talexander@nvidia.com>
This adds
quake-unmapped, an IR profile for Quake on abstract qubits, with ahandler that picks passes from the optimization level. The two FTQC benchmark
targets now use it instead of hand-written pipeline strings, so the level
actually changes what they do.
Stacked on #5742.
What's in it
quake-unmappedtakesbasis-gates,approximation-tolerance, andcost-model: t-count. The tolerance bounds every rotation the compilerapproximates: erasing small ones, snapping near-Clifford+T angles, and
synthesis. Target-argument placeholders like
%EPSILON%work in it and arechecked when the target is created.
QuakeUnmappedHandlerbuilds the stage from the profile and the level:Clifford+T normalization)
clifford-t-optimization-pipeline{level epsilon}and
clifford-t-synthesis-pipeline{epsilon seed}, replacecudaq-fault-tolerant-target.verify-profile-quake-unmappedends every stage.CompileOptionsand comes fromcudaq.set_random_seed. The old%SEED%target-argument plumbing, and thecompile-target rebuild on every seed change, are gone.
compiler-bench-ftqc-logicalandcompiler-bench-ftqc-clifford-tmove tothe v2 schema with one
quake-unmappedstage each. The Clifford+T targetkeeps its current output gates.
quake-reference-semanticsis marked for deprecation once thetwo-qubit-gatescost model lands.Things to be aware of
for now the bench targets skip the T-count passes from Python. The Clifford+T
target still synthesizes everything (the docs example's T count is
unchanged), but the logical target's
epsilonhas no effect at level 1.is an error rather than something that slips through. The
cccrztestkernel hits this.
compiler-bench-ftqc-clifford-tno longer takes aseedargument. Usecudaq.set_random_seed.cudaq-fault-tolerant-targetandaddCliffordTSynthesisare gone.part of the compile options hash.
Follow-ups
whose angles or widths are arguments compiles without
cudaq.synthesizequake-mapped, thetwo-qubit-gatescost model, andcompiler-bench-nisqquake-reference-semanticsquake-unmappedinstead of its override pipeline