v3.4.0
Overview
This release refactors QuEST for native Windows support, and adds some initialisation and seeding utilities mostly useful for simulators which use QuEST as a backend.
New features
Deterministically project a qubit into a classical outcome without renormalising the state.
applyProjector()
Density matrices, like state-vectors, can now be directly initialised from arrays of all amplitudes.
initStateFromAmps()
Users can now view and keep track of the seeds to QuEST's random number generator.
getQuESTSeeds()
Native Windows support! QuEST can now be compiled directly in MSVC, without needing to use MinGW. An MSVC build test is now part of the Github CI, although unit tests do not yet run automatically.
- compile with CMake and NMake in the
build
folder viacmake .. -G "NMake Makefiles" nmake
- or, compile directly with GNUMake from the root directory via
cp examples/makefile . make COMPILER=cc COMPILER_TYPE=MSVC
API breaking changes
seedQuEST()
andseedQuESTDefault()
now require a pointer to the activeQuESTEnv
instance.- Previously,
SCALED_INVERSE_SHIFTED_DISTANCE
inapplyNamedPhaseFunc()
computedcoeff/sqrt( (x2-x1-dx)^2 + ... )
, but now computescoeff/sqrt( (x1-x2-dx)^2 + ...
(x1
andx2
have swapped), to be more in-line with the expected behaviour. - Previously,
SCALED_INVERSE_SHIFTED_NORM
andSCALED_INVERSE_SHIFTED_DISTANCE
inapplyNamedPhaseFunc()
used their divergence parameter when their denominators were precisely zero. Now, the divergence parameter is used whenever the denominator is withinREAL_EPS
to zero. This catches the scenario when a divergence has been translated only a very small distance from a sampled point.