v3.2.0
Overview
This release adds a new encapsulation for representing Hamiltonians in the Pauli basis, adds efficient representation of diagonal operators, adds continuous time simulation through Trotter-Suzuki decompositions, and enables multiplying arbitrary complex matrices directly onto quantum states.
New features
Added a new type, PauliHamil
, representing a weighted sum of Pauli strings; a common basis for representing Hamiltonians.
createPauliHamil()
createPauliHamilFromFile()
initPauliHamil()
destroyPauliHamil()
reportPauliHamil()
applyPauliHamil()
calcExpecPauliHamil()
Added the ability to generate Trotter circuits, including higher order 'symmetrized' Suzuki decompositions. This can be used to unitarily evolve a state in time, under a given PauliHamil
. The gates prescribed by the decomposition can be captured with QASM logging.
applyTrotterCircuit()
Added a new type, DiagonalOp
, which can represent non-unitary and even non-Hermitian diagonal operators acting on the full Hilbert space. The data for this operator is distributed, and persists in GPU memory, for rapid simulation.
createDiagonalOp()
destroyDiagonalOp()
initDiagonalOp()
syncDiagonalOp()
applyDiagonalOp()
calcExpecDiagonalOp()
Added support for directly multiplying arbitrary complex matrices onto a state-vector or density-matrix.
applyMatrix2()
applyMatrix4()
applyMatrixN()
applyMultiControlledMatrixN()
Bug fixes
- fixed OpenMP linking on MacOS (by external contributor, Drew Silcock @drewsilcock)
- fixed CUDA compiling with CMake (by external contributor, @SachinCompton)
- fixed multithreading with gcc-9 (with help from external contributor, Zach van Rijn @zv-io)
- tweaked unit testing precision tolerances