Repository navigation
·
8 commits
to releases/v0.16.0
since this release
This release integrates CUDA-Q Logical version 0.1.1. CUDA-Q Logical expands CUDA-Q with an open, extensible
logical layer for fault-tolerant quantum computing. It provides additional language tools to express and compose
quantum error correction gadget and understand the resources they need to run across different system architectures.
For more information, see our docs.
0.16.0 also adds support for Python 3.14. It improves quantum optimization and qubit mapping capabilities,
adds support for static rotation synthesis, and introduces atomic quantum regions among other exciting changes.
What's Changed
Features and Enhancements 🎉
- Support disconnected device topologies in the qubit mapper by @khalatepradnya in #4824
- Add Python 3.14 support by @mitchdz in #4670
- Expanded mapping support for control flow by @atgeller in #4838
- Support for static Rotation Gate Synthesis (Clifford + T) by @sacpis in #4508
- Add the ability to disable all quantum optimizations by @schweitzpgi in #5057
- Introduce atomic quantum regions by @khalatepradnya in #5275
- Adding CUDA-Q Logical by @bettinaheim in #5422
Bug Fixes 🐛
- Fix multi-qubit noise broadcast in Stim MSM mode by @bmhowe23 in #4731
- [python] Serialize MLIR pass manager runs for async compilation by @khalatepradnya in #4771
- [braket] Fix the basis gate set for decomposition so that unsupported gates such as
sdgandtdgare not emitted by @khalatepradnya in #4787 - Fix cudaq.evolve with shared Hamiltonian and batched initial states by @huaweil-nv in #4835
- Support individual-qubit operand in
exp_pauliby @1tnguyen in #4852 - Fix mixed int/float arithmetic promotion by @huaweil-nv in #4854
- Fix dataclass kernel argument containing list raises std::bad_cast by @atgeller in #4860
- Correctly handle early
returnin Python by @1tnguyen in #4864 - [python] Fix translation of return-typed kernels by @khalatepradnya in #4858
- Qubit ordering problem on IQM backends #4621 by @iqm-bhoffmann in #4818
- [runtime] Preserve measurement handles across nested JIT calls by @khalatepradnya in #4861
- Fix type inference of captured arguments by @sacpis in #4871
- Fix cudaq.run crash when remote server returns fewer shots than requested by @adityabagchi24 in #4883
- Fix odd-electron UCCSD virtual orbital indices by @khalatepradnya in #4893
- Implementing -MD, -MMD, -MT and -MF in nvqpp by @Renaud-K in #4929
- Add support for empty state vectors in statevector simulator by @mitchdz in #4947
- Enable qubit reuse in cudaq::run by @anpaz in #4945
- Add an owned single-flight compiled-module cache by @khalatepradnya in #4998
- Fix distributed explicit-state initialization in dynamic backend by @huaweil-nv in #4988
- Fixing cudaq-translate crash on custom operations with -fno-array-conversion by @sacpis in #5010
- Fix segfault crash when there are pending tasks in the QPU execution queue by @1tnguyen in #5030
- Fix density matrix layout across QPP and dynamics when states are created from complex_matrix by @huaweil-nv in #5053
- Fixing transposed closed-system propagator in cudaq.contrib by @sacpis in #5093
- Preserving state layout metadata when splitting a batched state by @sacpis in #5115
- Fix aliasing issues for quantum vectors by @schweitzpgi in #5126
- Minor CMake fixes by @lmondada in #5169
- Fail decomposition when no basis is supplied by @EvanGruhlkey in #5158
- Selectively unroll loops with dynamic pauli-word indexing by @1tnguyen in #5191
- Fixup qubit ordering problem on IQM backends by @iqm-bhoffmann in #5074
- Fixing nested-loop adjoint by @sacpis in #5233
- Fix
MemToReglive-ins forcc.scopeby @khalatepradnya in #5238 - Fix Resource Estimation on value semantics by @lmondada in #5148
- Fix unwind threading bug by @schweitzpgi in #5246
- Fix exit block collection bug in memtoreg by @schweitzpgi in #5256
- Fix a bug when initializer expression in missing in C++ for-loops by @schweitzpgi in #5265
- Fix some bugs in handling of the Python for-else construct by @schweitzpgi in #5282
- Ensure qubits in Python loops and ifs get freed by @sacpis in #5292
- Fix some memtoreg issues by @schweitzpgi in #5293
Breaking Changes 🛠
- realtime: self-relaunching device-graph scheduler for unbounded device-side dispatch by @cketcham2333 in #4783
- Updating cuquantum to 26.06.0 by @sacpis in #4815
- [realtime] Split graph launch dispatch from the host ring loop by @boschmitt in #4770
- Removing deprecated SpinOp operations by @anpaz in #4833
- Pluggable transport providers for cudaq-realtime by @bmhowe23 in #4915
- Rename of the IR type stdvec by @schweitzpgi in #5089
Documentation Updates ✏️
- [docs] Updated docs for
stim::ErrorAnalyzer::circuit_to_detector_error_modelflags indem_from_kernelby @eliotheinrich in #4795 - [docs] Document m2d/m2o measurement matrix output for dem_from_kernel by @bmhowe23 in #4839
- Fix operator examples in docs by @mitchdz in #4376
- Add CUDA-Q compiler develop documentation section with dialect references by @taalexander in #4930
- Rename hololink GPU-side transceiver software by @cketcham2333 in #5006
- Update the statevector simulators to leverage the latest improvements in cuquantum by @1tnguyen in #5025
- Add documentation for developing the Cuda-Q MLIR compiler by @taalexander in #4938
- Adding qbraid examples to the doc by @sacpis in #5078
- Add cudaq-devel wheel by @lmondada in #5087
- Adding qbraid to hw providers by @sacpis in #5120
- Adding --installpath option to the realtime installer by @Renaud-K in #5134
- Support scopes in qubit mapping by @taalexander in #5124
- Add link to pulse research preview by @lmondada in #5255
- Update documentation for atomic quantum regions by @khalatepradnya in #5321
Other Changes
- Enable HOST_CALL entries in device_call host_dispatch channel by @vedika-saravanan in #4729
- [unitaryhack] Add closed- and open-system dynamics propagators by @friedsam in #4672
- Add shared-ring realtime dispatch routing support by @cketcham2333 in #4712
- [unitaryhack] Support unitary synthesis for 3+ qubit custom operations (QSD) by @thedaemon-wizard in #4693
- Add two quantum embeddings by @simsaidan in #4667
- [unitaryhack] Topology-aware initial placement for the qubit-mapping pass by @border-b in #4678
- Add kernel math function support by @LubuSeb in #4680
- [macOS] Surface simulator kernel exceptions across the macOS JIT boundary by @mitchdz in #4777
- Implement conditional loop unrolling for value-semantics pipelines by @1tnguyen in #4784
- Accept np.floor in Python kernels by @aryanputta in #4785
- Support trivial control flow in Mapping by @atgeller in #4733
- Add support for UDP transport in cudaq-realtime by @bmhowe23 in #4877
- Add unified CPU dispatch loop to cudaq-realtime by @boschmitt in #4869
- Deal with disconnected-island packing in qubit mapping by @Adithyaphani in #4885
- Avoid repeated scans for unbound measurement handles by @khalatepradnya in #4937
- Make Python AST bridge terminator queries constant time by @khalatepradnya in #4936
- Reuse dominance-safe fixed qvector references by @khalatepradnya in #4943
- External backends Plugin Framework by @anpaz in #4754
- Fix and issue with compiled-module cache reuse by @khalatepradnya in #4978
- Use shared libcudaqMLIR dependency everywhere by @lmondada in #4928
- Static-link CUDA runtime in cudaq-realtime UDP bridge provider by @Renaud-K in #4999
- [python] Reuse compiled modules across asynchronous launches by @khalatepradnya in #5008
- [core] Update wire and cable to be SSI types. by @schweitzpgi in #5033
- Adding a negligible rotation pruning pass by @sacpis in #4992
- Enabling quantum optimizations on value semantics by default by @schweitzpgi in #4993
- [Python] Materialize broadcast arguments once by @khalatepradnya in #5069
- Minor CMake hardening, fixes & tweaks by @lmondada in #5054
- Representation and optimization of global phases during compilation by @cabreraam in #4976
- Accept global-register expectations in async Future by @tomers-qedma in #5101
- Support Python math functions in addition to numpy functions by @1tnguyen in #5130
- Expose dependency-aware T-depth resource metric by @taalexander in #5145
- Migrate phase folding for value semantics by @atgeller in #5021
- Computing CuDensityMatState overlap on the GPU by @sacpis in #5184
- Overhaul of apply op specialization by @schweitzpgi in #4940
- Adding set_function_entry to brige API by @Renaud-K in #5155
- Support std::fmod in C++ QPU kernels by @Bryanzzy1 in #5217
- Tune gridsynth and expose controls by @sacpis in #5143
- [core] Add a new pass to convert control flow to dataflow. by @schweitzpgi in #5239
- Support basic measurement feedback in qubit mapping by @1tnguyen in #5235
- Ergonomic improvements for downstream packages by @lmondada in #5253
New Contributors
- @friedsam made their first contribution in #4672
- @thedaemon-wizard made their first contribution in #4693
- @simsaidan made their first contribution in #4667
- @border-b made their first contribution in #4678
- @LubuSeb made their first contribution in #4680
- @Adithyaphani made their first contribution in #4790
- @adityabagchi24 made their first contribution in #4883
- @tomers-qedma made their first contribution in #5101
- @EvanGruhlkey made their first contribution in #5158
- @Bryanzzy1 made their first contribution in #5217
Full Changelog: 0.15.0...0.16.0