This release comes with a range of exciting improvements.
- This release includes the first 0.1.0 version of CUDA-Q Realtime. CUDA-Q Realtime is built to support low-latency high-bandwidth data transfer between FPGAs and GPUs using NVQLink. CUDA-Q Realtime is installed separately via the C++ installer provided in the release assets. For more information about CUDA-Q Realtime, please see our docs.
- 0.14.0 adds support for Pre-Trajectory Sampling with Batch Execution (PTSBE). PTSBE can be used to capture millions of times more noisy shot data, which can then be used as training data in ML tasks such as AI decoders, or it can be deployed proportionally, capturing the exact statistics of the problem while still offering a considerable speedup. For more information, see our docs and applications.
- Starting with version 0.14.0, we now also distribute MacOS wheels on PyPI, and have made the C++ installer usable without root privileges.
- Additionally, we have completely overhauled the Python compiler. More details about the changes can be found in #3537 and #3693.
What's Changed
Features and Enhancements 🎉
- Introducing CUDA-Q Realtime by @1tnguyen in #4118
- Complete revision of the way CUDA-Q embeds in Python by @schweitzpgi in #3693
- Add MacOS support by @taalexander in #3840
- Pre-Trajectory Sampling with Batch Execution by @sacpis in #3995
- Make CUDA-Q installer non-root installable by @taalexander in #3993
- Scaleway integration by @vmscw in #3781
- Add support for TII backend by @GabrielePalazzo in #3797
- Introduces Pasqal CUDA-Q QRMI integration by @awennersteen in #4023
Bug Fixes 🐛
- Fix some bugs in evolve_async related to storing intermediate results by @huaweil-nv in #3636
- Fix an issue during lowering of callables defined within kernels by @schweitzpgi in #3649
- Support for zsh in cudaq_set_env.sh by @lmondada in #3592
- Fix an issue for expectation value computations with noise on the tensornet-mps backend by @huaweil-nv in #3709
- Fix issue during migration to host in tensornet backend by @huaweil-nv in #3713
- Fix Runge-Kutta second order midpoint formula by @huaweil-nv in #3720
- Fix issue in batched execution of dynamics backend by @huaweil-nv in #3725
- Fix a bug in overlap computation for tensornet-mps backend by @huaweil-nv in #3749
- Fix density matrix indexing bug for dynamics backend by @huaweil-nv in #3768
- Parameter fix for
exp_paulidecomposition by @khalatepradnya in #3775 - Fix segmentation fault in distributed batched state evolution with
store_intermediate_resultsby @huaweil-nv in #3771 - Handling distributed batched results for dynamics backend by @1tnguyen in #3794
- Fix issue with uninitialized values for noise channels by @huaweil-nv in #3811
- Fix column-major indexing in dynamics backend by @huaweil-nv in #3836
- Fix
list[pauli_word]broadcast detection in sample/observe by @taalexander in #3861 - Fix
cudaq.control(...)type specialization bug by @taalexander in #3860 - Bug fix for using run on emulated targets by @atgeller in #3868
- Fix dynamics backend to accept density-matrix initial state by @sacpis in #3967
- Fix density matrix overlap dimension by @huaweil-nv in #3909
- Fix
sample_asyncnoise model lifetime and isolation by @huaweil-nv in #3857 - Captured args are resolved in kernel definition scope by @lmondada in #4005
- Fix cmake bug related to interop by @taalexander in #4006
- Fix bug in exp_pauli qubit concatenation by @huaweil-nv in #4064
- Fix segfault in
EvolveResult.final_expectation_values()when no observables were provided by @huaweil-nv in #4065 - Fix a potential segfault in conda environment by @sacpis in #4066
- Fix integer overflow for 31+ qubits by @huaweil-nv in #4093
- Bug fix for using
cudaq.translatewith kernel builder by @huaweil-nv in #4105 - Fix potential seg fault in
evolve_asyncby @sacpis in #4114
Breaking Changes 🛠
- Python language translation revision by @bettinaheim in #3537
- Removing NVQC target and associated functions by @sacpis in #3633
- Remove C++17 support from CUDA-Q runtime libraries by @sacpis in #3690
- Remove deprecated platform-wide shot count by @lmondada in #3701
- Disallow kernels with conditional branching on measurement results by @khalatepradnya in #3731
- Fixing
depolarization2channel by @sacpis in #3846 - Bump cuquantum version by @sacpis in #3866
Documentation Updates ✏️
- Updated SKQD tutorial by @zohimchandani in #3643
- Fixing an incorrect weight in QAOA notebook by @sacpis in #3654
- Update documentation on
runreturn types and supported targets by @khalatepradnya in #3692 - Update docs and usage examples for optimizers by @sacpis in #3822
- Migration guide for using run instead of sample by @khalatepradnya in #4070
- Fix divisive clustering notebook by @sacpis in #4121
- Update tutorial
unitary_compilation_diffusion_modelsby @FlorianFuerrutter in #4123
Other Changes
- Expose resource estimates as dictionary by @sacpis in #3662
- Add Decomposition Pattern Selection logic by @lmondada in #3644
- Remove unnecessary restriction during evolution of custom operators by @1tnguyen in #3712
- Reduce data type conversion overhead in Torch integrator implementation by @1tnguyen in #3779
- Python/C++ interoperability tools by @schweitzpgi in #3791
- Support multi-term SpinOperators in Observe by @sacpis in #3835
- Fix perf issue with adaptive solvers by @sacpis in #3844
- Add two-qubit Pauli product gate decomposition, id gate and fix state reset by @taalexander in #3935
- Support creating qubit lists in Python list comprehension by @sacpis in #4031
- Defer Python kernel compilation until invocation by @lmondada in #3948
New Contributors
- @efratshabtai made their first contribution in #3672
- @AndrewTKent made their first contribution in #3739
- @dependabot[bot] made their first contribution in #3903
- @derek-yux made their first contribution in #3984
- @vmscw made their first contribution in #3781
- @jeis4wpi made their first contribution in #4076
- @GabrielePalazzo made their first contribution in #3797
- @QuantumRaul made their first contribution in #3847
Full Changelog: 0.13.0...0.14.0
Release created by workflow 23132024839.