0.4.0
CUDA Quantum is now available on PyPI!
For the initial PyPI release, the NVIDIA multi-gpu and tensornet backends are not yet included. Check out our Docker images on NGC to obtain the fully featured version, or build it from source using the release assets.
With 0.4.0 we have added support for quantum kernel execution on Quantinuum and IonQ backends. For more information, see our docs.
As always, we welcome questions and feedback in the form of issues and discussions on this repository.
What's Changed
Features and Enhancements 🎉
- Implement cudaq::control() taking a free function as argument by @schweitzpgi in #35
- Add reset to kernel_builder in C++ and python. by @amccaskey in #18
- Add for_loop to cudaq::kernel_builder and cudaq.Kernel by @amccaskey in #19
- Optimization: do not add control qubits to compute/uncompute steps of compute_action idiom. by @schweitzpgi in #63
- Expose for_each_term and for_each_pauli to python by @amccaskey in #56
- Implement spin_op::to_matrix() by @amccaskey in #31
- Add support for negate operator (operator!) to cudaq::control. by @schweitzpgi in #81
- Improve the ExecutionManager Extension Point by @amccaskey in #33
- Performance enhancements: observe_n and sample_n broadcast functions by @amccaskey in #74
- spin_op performance enhancement by @amccaskey in #115
- Implement chemistry domain sub-package. by @amccaskey in #112
- [optimizer] Decomposition pass by @boschmitt in #143
- Increase performance of quantum allocation and deallocation in simulation by @amccaskey in #167
- Basis translation pass by @boschmitt in #144
- Implement runtime quantum operation tracing by @amccaskey in #92
- [optimizer] Multicontrol decomposition by @boschmitt in #194
- Add Server Helper for Quantinuum backends by @amccaskey in #176
- Expose SWAP gate to c++ and python builder by @anthony-santana in #200
- [opt] Add memtoreg and regtomem passes. by @schweitzpgi in #233
- Added forward difference gradient evaluation. by @poojarao8 in #107
- Local emulation of remote qpu execution by @amccaskey in #262
- Implement MPI support in CUDA Quantum by @amccaskey in #237
- [pass] Add a loop normalization pass. by @schweitzpgi in #313
- Linux support for pip installation by @anthony-santana in #304
Bug Fixes 🐛
- Add overload to handle the case when the user writes: by @schweitzpgi in #32
- Do not allow operator! on target qubits. by @schweitzpgi in #6
- Temporary fix for AST visitor reentrancy bugs. by @schweitzpgi in #22
- Fix bug 69, no expval attached to
observe_result
when shots aren't provided by @amccaskey in #70 - Fix
QuakeValue
Lifetime Bug andkernel_builder::to_quake
Handling by @amccaskey in #67 - Adding r-val overload (QuakeValue &&) for kernel_builder adjoint modifier by @1tnguyen in #99
- [CircuitCheck] Handle qvec as controls by @boschmitt in #128
- [common-ops] Fixes some matrices (row-major vs col-major) issues by @boschmitt in #133
- [quake] Fixes some matrices (row-major vs col-major) issues by @boschmitt in #140
- Fix #129, Make kernel_builder::qalloc(1) explicitly return a qvec. by @amccaskey in #136
QuakeBridgeVisitor
to handlecphase
by @1tnguyen in #132- cudaq-ensmallen not export BLAS symbols by @1tnguyen in #185
- Fixed a subtle bug in
QppCircuitSimulator::observe
by @1tnguyen in #189 - Bind r1 gate to python by @anthony-santana in #198
- Fixed
QppCircuitSimulator
shotsExecutionResult.expectationValue
by @1tnguyen in #208 - Fixing segfault crashes when using measure/reset ops. by @1tnguyen in #217
- Fix #250: linkage of top-level (global) function. by @schweitzpgi in #267
- Reset and parametric gates in
kernel_builder
by @1tnguyen in #269 - Fix #251: Base profile should handle single qubit allocations. by @schweitzpgi in #273
- Fix #281: let canonicalization pattern work with IndexType. by @schweitzpgi in #282
- Fix #286: Add canonicalization to hoist invariants cc.loop arguments. by @schweitzpgi in #289
- Fix #296: issue processing if-statements in JIT compilation by @schweitzpgi in #298
- [pass] Fix #291: don't erase non-controlled ops by @boschmitt in #292
- Fix #325: Bridge had some bugs with callable instances. by @schweitzpgi in #326
- Fix issue with qreg of dynamic size and disappearing instructions by @schweitzpgi in #358
- Fix #344 - add support for std::uint8_t kernel argument by @amccaskey in #356
- Fix kernel_builder nested function call bug, #332 by @amccaskey in #334
- Fix #338: Work on implementation of cudaq::adjoint. by @schweitzpgi in #374
Breaking Changes 🛠
- Remove qpud by @amccaskey in #91
- Delete qtx-translate and references to same. by @schweitzpgi in #102
- Remove outdated functions from cudaq.py by @anthony-santana in #105
- [CircuitCheck] Remove QTX support by @boschmitt in #118
- [quake] Universally replace the QRef type name with Ref. by @schweitzpgi in #160
- [quake] Universal conversion of QVec to Veq. by @schweitzpgi in #163
- Removes the QTX dialect by @boschmitt in #157
- NVQ++ Targets by @amccaskey in #147
- Update python command line flags by @amccaskey in #187
- [nfc] Remove the raise to affine (stub) pass. by @schweitzpgi in #235
Documentation Updates ✏️
- Refer to GitHub for building from source instructions, by @bettinaheim in #40
- Documentation update for control qubit negation by @schweitzpgi in #86
- Fixes to common operations definitions by @boschmitt in #120
- Update circuit simulator documentation to reflect the latest refactoring by @amccaskey in #90
- Update the documentation to reflect the new unified dialect by @schweitzpgi in #153
- Make the CC ops documentation more uniform. by @schweitzpgi in #150
- [docs] Small fixes to quake dialect example by @boschmitt in #165
Other Changes
- Revert change to disable jump branching. by @schweitzpgi in #5
- Replace the old deallocation pass. by @schweitzpgi in #30
- Make use of the various math dialect power operations. by @schweitzpgi in #71
- [nvq++] Add RPATH flags only to the final binary by @boschmitt in #52
- CircuitSimulator Refactor by @amccaskey in #12
- Add a wire type to the quake dialect. by @schweitzpgi in #101
- Add new ops to quake. by @schweitzpgi in #109
- Link to correct version of custatvec libs by @hamidelmaazouz in #88
- [CircuitCheck] Run canonicalizer before checking by @boschmitt in #122
- Convert the quake dialect ops to support both memory and register forms. by @schweitzpgi in #124
- Change qextract to extract_ref everywhere. by @schweitzpgi in #138
- Add types for structs and arrays to CC by @schweitzpgi in #146
- [quake] OperatorInterface method to get negated controls by @boschmitt in #154
- [CircuitCheck] Handle negated controls by @boschmitt in #159
- Fold constant into extract_ref op by @schweitzpgi in #164
- [CircuitCheck] Handle raw index in ExtractRefOp by @boschmitt in #168
- [cc] Start adding some LLVM-like operations. by @schweitzpgi in #192
- [CircuitCheck] Handle local qubits by @boschmitt in #190
- [quake, cc] Improved alloca ops by @schweitzpgi in #193
- Fixes for macOS by @boschmitt in #213
- [bridge, runtime] Replace use of LLVM-IR dialect in the bridge and python interface with CC dialect operations. by @schweitzpgi in #201
- [cc] Add a folder to compute_ptr op. by @schweitzpgi in #220
- [cg] Move GenKernelExecution to CC dialect. by @schweitzpgi in #225
- Remove the use of the MLIR Memref dialect. by @schweitzpgi in #226
- Load available simulators and platforms lazily in Python by @amccaskey in #239
- [opt] Expand loop unrolling to autodetect counted loops. by @schweitzpgi in #265
- [pass] Decompose aggregate quantum allocations into multiple individual qubit allocations by @schweitzpgi in #280
- [opt] Flag to raise an error if cannot unroll a loop by @boschmitt in #295
- Preserve the line information in the source code for JIT compilation. by @schweitzpgi in #299
- Fix #324: Update the old aggressive early inlining pass. by @schweitzpgi in #331
- Callable Kernel Arguments Passed QuakeSynthesizer. by @amccaskey in #355
New Contributors
- @1tnguyen made their first contribution in #73
- @hamidelmaazouz made their first contribution in #88
- @poojarao8 made their first contribution in #107
- @tlubowe made their first contribution in #59
- @Gistbatch made their first contribution in #110
- @splch made their first contribution in #134
Full Changelog: 0.3.0...841d7332db45d716aa18d5d33eaeb116b748068efb506bdfa0e7ed018bc9b553