Skip to content

Add a quake-unmapped profile and lower the FTQC bench targets through it - #5758

Merged
taalexander merged 12 commits into
NVIDIA:mainfrom
taalexander:feature/quake-unmapped
Oct 29, 2026
Merged

taalexander merged 12 commits into
NVIDIA:mainfrom
taalexander:feature/quake-unmapped

Conversation

@taalexander

Copy link
Copy Markdown
Collaborator

This adds quake-unmapped, an IR profile for Quake on abstract qubits, with a
handler 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-unmapped takes basis-gates, approximation-tolerance, and
    cost-model: t-count. The tolerance bounds every rotation the compiler
    approximates: erasing small ones, snapping near-Clifford+T angles, and
    synthesis. Target-argument placeholders like %EPSILON% work in it and are
    checked when the target is created.
  • QuakeUnmappedHandler builds the stage from the profile and the level:
    • level 0 stays on references and only does what the basis needs
    • level 1 converts to wires and cleans up
    • level 2 adds the T-count passes (fusion, phase folding, angle snapping,
      Clifford+T normalization)
    • Synthesis runs at every level when the basis has no rotation gates.
  • Two registered pipelines, clifford-t-optimization-pipeline{level epsilon}
    and clifford-t-synthesis-pipeline{epsilon seed}, replace
    cudaq-fault-tolerant-target.
  • verify-profile-quake-unmapped ends every stage.
  • The synthesis seed moves to CompileOptions and comes from
    cudaq.set_random_seed. The old %SEED% target-argument plumbing, and the
    compile-target rebuild on every seed change, are gone.
  • compiler-bench-ftqc-logical and compiler-bench-ftqc-clifford-t move to
    the v2 schema with one quake-unmapped stage each. The Clifford+T target
    keeps its current output gates.
  • quake-reference-semantics is marked for deprecation once the
    two-qubit-gates cost model lands.

Things to be aware of

  • The default level is still 1, and Python can't pick a level until [nvqpp/python] Expose optimization_level compile option #5707. So
    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 epsilon has no effect at level 1.
  • The final basis conversion is strict now. A rotation the basis can't express
    is an error rather than something that slips through. The cccrz test
    kernel hits this.
  • compiler-bench-ftqc-clifford-t no longer takes a seed argument. Use
    cudaq.set_random_seed.
  • cudaq-fault-tolerant-target and addCliffordTSynthesis are gone.
  • Changing the random seed now causes a recompile on every target, since it's
    part of the compile options hash.

Follow-ups

  • let a synthesizing stage ask for specialized kernel arguments, so a kernel
    whose angles or widths are arguments compiles without cudaq.synthesize
  • before/after resource counts on the FTQC corpus
  • quake-mapped, the two-qubit-gates cost model, and compiler-bench-nisq
  • moving the hardware targets off quake-reference-semantics
  • CUDA-Q Logical declaring quake-unmapped instead of its override pipeline
  • codegen's optimization moving into the stage, then default level 2

@taalexander
taalexander requested a review from lmondada October 28, 2026 18:19
@taalexander
taalexander force-pushed the feature/quake-unmapped branch 2 times, most recently from acbd7ce to 3ed7e58 Compare October 28, 2026 18:42
@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

CI Summary (push) — ✅ passed

Run #40924361054 · ✅ 8 · ⏩ 10 · ❌ 0 · ⛔ 0

Top-level jobs (18)
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

@taalexander

Copy link
Copy Markdown
Collaborator Author

I pushed a change to keep YAML out of the C++ config types this PR adds:

  1. QuakeUnmappedProfile::approximationTolerance is now a double. It was a string so that createFromConfig could substitute %EPSILON:1e-10% into it, which meant any code building a profile had to write YAML text. Now the target argument names the option it sets (profile-option: approximation-tolerance, a small enum) and createFromConfig parses the value once. set_target(..., epsilon=...) works the same. I also moved requiresSynthesis() off the profile into the handler, since whether to synthesize is the handler's call, and dropped the target-side tolerance checks: the synthesis pass already rejects an epsilon that isn't positive.
  2. The YAML adapters now spell each enum's YAML names in a switch instead of deriving them from the C++ enumerator names, so renaming an enumerator doesn't silently change the YAML, and a missing name is a -Wswitch warning. I did this for all the reflected enums. Most aren't new here, but doing all of them was about the same size as doing only the new ones.
  3. cudaq-target-db-gen and TargetCatalogTestDriver now print profiles (and db-gen also lowerings and argument types) with one reflect-cpp walk over the fields instead of a hand-written printer per profile, so adding a profile option no longer means touching both tools.
  4. The handler no longer runs verify-profile-quake-unmapped, like the reference profile's handler. The strict basis-conversion at the end of the stage already enforces the basis; the verifier stays as a lit-tested pass.

I think the profile-option binding is transitional. Which settings users should override per launch (the tolerance, search budgets) and whether those overrides belong in CompileOptions probably deserves its own step after this one.

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>
@taalexander
taalexander force-pushed the feature/quake-unmapped branch from 862f6a0 to 600a039 Compare October 29, 2026 02:45

@lmondada lmondada left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Beautiful work, thank you 💚

Comment thread cudaq/include/cudaq/Target/Profile/QuakeReferenceSemanticsProfile.h
Comment thread cudaq/lib/Target/Yaml/TargetConfigYamlAdapters.h
Comment thread cudaq/lib/Target/tools/cudaq-target-db-gen/cudaq-target-db-gen.cpp
Comment thread python/tests/backends/test_compiler_bench_ftqc_logical.py
Comment thread python/tests/targets/compiler-bench-ftqc-clifford-t.yml
Comment thread runtime/common/CompileOptions.h Outdated
Comment thread runtime/cudaq/algorithms/policy_cpos.h Outdated
Comment thread runtime/test/Regress/profile_providers.cpp
@lmondada

Copy link
Copy Markdown
Collaborator

@github-actions

Copy link
Copy Markdown

CI Summary (workflow_dispatch) — ❌ failed

Run #40852965017 · ✅ 15 · ⏩ 2 · ❌ 1 · ⛔ 0

❌ Failed or cancelled
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

github-actions Bot pushed a commit that referenced this pull request Oct 29, 2026
@github-actions

Copy link
Copy Markdown

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>
@taalexander
taalexander marked this pull request as ready for review October 29, 2026 16:27
@taalexander
taalexander enabled auto-merge October 29, 2026 16:27
@github-actions github-actions Bot added documentation Improvements or additions to documentation build The issue related to the CUDA Quantum build runtime CUDA quantum runtime python-lang Anything related to the Python CUDA Quantum language implementation testing Relates to testing labels Oct 29, 2026
@github-actions github-actions Bot added codegen issue with generating any codegen output (QIR, OpenQASM etc.) core compiler labels Oct 29, 2026
@taalexander
taalexander force-pushed the feature/quake-unmapped branch from 7c79492 to 4f4127e Compare October 29, 2026 16:45
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>
@taalexander
taalexander force-pushed the feature/quake-unmapped branch from 4f4127e to 3d91743 Compare October 29, 2026 17:45
@taalexander
taalexander added this pull request to the merge queue Oct 29, 2026
@schweitzpgi

Copy link
Copy Markdown
Collaborator

I dropped a bunch of questions in the follow-up PR (#5771) that probably pertain to this one. You should take a look.

@github-actions

Copy link
Copy Markdown

CI Summary (merge_group) — ✅ passed

Run #40941166541 · ✅ 5 · ⏩ 13 · ❌ 0 · ⛔ 0

⚡ Fast merge queue — only the llvm dev-environment build+test legs ran.
Wheels, metapackages, installers, Docker images, and the gcc12 legs were skipped.
Set the repository variable MERGE_QUEUE_FAST to false to restore the full matrix.

Top-level jobs (18)
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

Merged via the queue into NVIDIA:main with commit 1fa3c52 Oct 29, 2026
87 checks passed
@taalexander
taalexander deleted the feature/quake-unmapped branch October 29, 2026 21:29
github-actions Bot pushed a commit that referenced this pull request Oct 29, 2026
lmondada pushed a commit to lmondada/cuda-quantum that referenced this pull request Oct 30, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build The issue related to the CUDA Quantum build codegen issue with generating any codegen output (QIR, OpenQASM etc.) core compiler documentation Improvements or additions to documentation python-lang Anything related to the Python CUDA Quantum language implementation runtime CUDA quantum runtime testing Relates to testing

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants