Skip to content

v3.2.0

Compare
Choose a tag to compare
@TysonRayJones TysonRayJones released this 21 Jul 20:46
· 138 commits to master since this release

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