In this release we have added a range of tools for simulating noisy quantum systems. It includes support for trajectory based noise simulation for our GPU-accelerated statevector and tensor network simulators, and a new sampling option for better stim
performance. We have also expanded the range of noise models, and added an apply_noise
"gate". This release also adds the C++ support for the CUDA-Q dynamics
backend (a master equation solver), as well as operator classes for fermionic, bosonic and custom operators. This release also includes support for submitting to Pasqal backends, and adds C++ support for QuEra. Check out our docs, including new tutorials and examples, for more information.
Note: Support for CUDA 11 will be removed in future releases. Please update to CUDA 12.
What's Changed
Features and Enhancements 🎉
- Support noise trajectory simulation for the statevector targets by @1tnguyen in #2466
- Support noise trajectory simulation for tensornet targets by @1tnguyen in #2520
- Implement new noise models by @bmhowe23 in #2653
- Implementation of the cudaq::apply_noise feature by @schweitzpgi in #2635
- New
cudaq::sample
option: explicit measurements by @bmhowe23 in #2567 - Enable multi-GPU for dynamics target in Python by @1tnguyen in #2509
- Operator classes by @bettinaheim in #2631
- Dynamics cpp integration by @sacpis in #2683
- Support Rydberg Hamiltonian in C++ Evolve API by @nvidia-dobri in #2704
- Add support for IonQ qpu.forte-enterprise-1 and qpu.forte-enterprise-2 quantum backends by @radumarg in #2559
- Add Pasqal target by @awennersteen in #2632
Bug Fixes 🐛
- Apply LLVM customizations for Python wheel build by @bmhowe23 in #2504
- Fix a bug in tensornet backend scratch pad allocation in multi-GPU mode by @1tnguyen in #2516
- Fix issues with python range boundaries by @annagrin in #2571
- Fix issues in lift-array-alloc by @annagrin in #2570
- Fixing various Python bugs by @boschmitt in #2592
- Accept extensions other than .cpp in
nvq++
by @bebora in #2514 - Bug fix for Python bridge by @amccaskey in #2615
- Fix a couple of bugs with loop normalization and unrolling by @schweitzpgi in #2618
- Fix an issue with the tensornet initialization for the remote-mqpu target by @1tnguyen in #2565
- Add Stim support for sdg gate (required for
my
measurements) by @bmhowe23 in #2624 - Fixes for Python dynamics handling distributed state by @1tnguyen in #2629
- Allow 'None' as a type annotation for cuda-q kernels by @cuMikeBrown in #2630
- Fix #2525: Make exp_pauli a fully functional operator. by @schweitzpgi in #2642
- Handle missing cases in ObserveAnsatz by @annagrin in #2661
- Fix decomposition patterns to handle spans of pauli words. by @schweitzpgi in #2664
- Fixes for
NoiseModel
when using withfp32
targets by @1tnguyen in #2672 - Fix a bug in ObserveAnsatz when handling
spin.y
term by @annagrin in #2676 - Fix cudaq.draw for circuits with exp_pauli by @bmhowe23 in #2678
- Fix cudaq.exp_pauli usage of pauli_word for quantum devices by @bmhowe23 in #2675
- Fixing an issue with exp_pauli in nested kernel by @schweitzpgi in #2697
- Fix bug with exp_pauli lowering. by @schweitzpgi in #2698
- Explicitly add the path for
cuTensor
library in theCUDAQ_DYNLIBS
by @khalatepradnya in #2691 - Improve error handling for analog targets when local emulation is requested by @khalatepradnya in #2713
Breaking Changes 🛠
- C++ operator and matrix API changes by @bettinaheim in #2714
Documentation Updates ✏️
- Update Python install instructions by @bmhowe23 in #2519
- Improve photonics documentation by @Omar-ORCA in #2502
- Reorganized Backends Docs Page by @mawolf2023 in #2481
- New application notebooks for Hamiltonian simulation & Deutsch Jozsa by @zohimchandani in #2488
- Update Braket example and doc links by @yitchen-tim in #2633
- Update docs for
nvidia
target fuse settings by @1tnguyen in #2660 - New tutorial for adapt-qaoa algorithm by @marwafar in #2638
- CUDA-Q quantum transformer tutorial by @anthonysmaldone in #2614
- Add documentation for Pasqal integration by @awennersteen in #2695
- Docs update for Amazon Braket by @khalatepradnya in #2702
- Instructions for running on Blackwell by @mitchdz in #2740
Other Changes
- Add number of trajectories to
observe_options
struct by @1tnguyen in #2456 - Add
ElementaryOperator.define
override option by @ikkoham in #2419 - Support for float comparison in Python kernels by @sacpis in #2489
- Add a few state-related cc ops by @annagrin in #2354
- Add support for character literals to C++ kernels by @schweitzpgi in #2495
- Allow
mx
andmy
gates in OpenQasm2 translation by @annagrin in #2494 - Make controlled rank a configurable setting for tensornet backends by @1tnguyen in #2446
- Environment variable for tensornet observe calculation by @1tnguyen in #2522
- Add support for
observe
API for Amazon Braket by @khalatepradnya in #2539 - Normalize loops with negative upper bounds by @annagrin in #2573
- New implementation of QIR codegen. by @schweitzpgi in #2542
- Add WriteAfterWriteElimination pass by @annagrin in #2572
- Support reservation ARN for Amazon Braket by @yitchen-tim in #2553
- Make sure uccsd compiles for quantum devices by @annagrin in #2458
New Contributors
- @vtomole made their first contribution in #2423
- @caiyunh made their first contribution in #2442
- @bharat-thotakura made their first contribution in #2464
- @lmondada made their first contribution in #2140
- @yitchen-tim made their first contribution in #2553
- @cuMikeBrown made their first contribution in #2630
- @radumarg made their first contribution in #2559
- @awennersteen made their first contribution in #2632
- @anthonysmaldone made their first contribution in #2614
Full Changelog: 0.9.1...0.10.0
Release created by workflow 13913105388.