Releases: QTechTheory/QuESTlink
v0.9
New features
SetAmp[]
to modify an individual amplitude of a statevector or density matrix.KrausNonTP[]
to specify Kraus maps which are not necessarily trace-preservingCalcPauliExpressionMatrix[]
to produce an analytic matrix from any symbolic Pauli expression as interpretable bySimplifyPaulis[]
.
Changes
ApplyCircuit[]
now returns the probabilities of projector gates as top-level numbers, among the existing measuring outcomes in sub-lists.DrawCircuit[]
now renders many-qubit generic gates on contiguous qubits as a single block.DrawCircuit[]
can now render multi-qubit decoherence channels with any number of qubits.SimplifyPaulis[]
now recognises identity operators, with symbolId
CalcPauliSumMatrix[]
,ApplyPauliSum[]
andCalcExpecPauliSum[]
now acceptId
, will not accept lone scalars, and give an error when a Pauli product therein targets non-unique qubits.GetPauliSumFromCoeffs[]
will now include theId
operator, in lieu of a lone scalar.
Bug fixes
v0.8
New features
CalcProbOfAllOutcomes
(see related QuEST doc)- multi-controlled and multi-target forms of gates
X
,R
,Rx
,Ry
andRz
(available inApplyCircuit[]
,DrawCircuit[]
andCalcCircuitMatrix[]
) ApplyQFT
(see related QuEST doc)
Changes
This change is not backwards compatible!
The order of the arguments to ApplyCircuit[]
have changed to:
ApplyCircuit[ qureg, circuit ]
ApplyCircuit[ inQureg, circuit, outQureg ]
This is for greater consistency with the rest of the API. Use of the old argument order will issue an error, and show a warning about the change.
v0.7
New features
-
Device specifications can now contain variable-dependent gate constraints. This means that gates can be specified as valid only after a certain time, or after a certain number of prior gates; or any custom user variable!
-
added
ApplyPhaseFunc[]
to simulate a diagonal unitary upon a register, specified as a general multi-variable exponential-polynomial phase function, or as one of several named phase functions. -
QASM can be logged and accessed via
StartRecordingQASM[]
,StopRecordingQASM[]
,ClearRecordedQASM[]
andGetRecordedQASM[]
.
v0.6
Overview
This is a substantial release which introduces device specifications for precise simulation of the nuances and limitations of realistic hardware devices. This release also includes utilities for analytically simplifying expressions of Pauli operators, plotting qubit connectivity graphs of circuits, and multi-control multi-target phase and general unitary gates.
See release_summary_v06.nb
for full details of the release, and guide_creating_device_spec.nb
for more information about the power and syntax of device specifications.
New functions:
SimplifyPaulis[]
GetCircuitColumns[]
DrawCircuitTopology[]
InsertCircuitNoise[]
ViewCircuitSchedule[]
ExtractCircuit[]
GetUnsupportedGates[]
GetCircuitSchedule[]
CheckCircuitSchedule[]
ViewDeviceSpec[]
CheckDeviceSpec[]
New gates:
(supported by ApplyCircuit[]
, DrawCircuit[]
, CalcCircuitMatrix[]
)
- Multi-qubit general unitary
U[m]
- new support for
n>2
target qubits (up to memory limit!) - supports any number of control qubits
- new support for
- Phase gate
Ph[x]
- single-qubit form is
diag(1, e^(i x))
- multiple target qubits will induce the (order independent) operator
diag(1, ..., 1, e^(i x))
. This multiplies scalare^(i x)
onto the amplitudes of all states where all target qubits are in|1>
. - controlled qubits (
C[Ph[x]]
) are interchangeable with target qubits
- single-qubit form is
Extended functions:
DrawCircuit[]
now automatically compactifies circuits (viaGetCircuitColumns[]
)DrawCircuit[]
now accepts sub-circuits, specified as a list of lists (or list ofCircuit[]
). These are drawn separately (do not merge under compactification) with partitions in-between.DrawCircuit[]
now accepts schedules (output fromGetCircuitSchedule[]
) and noisy schedules (output fromInsertCircuitNoise[]
), which are drawn as time-stamped sub-circuits.DrawCircuit[]
can now draw gates with >2 target qubitsDrawCircuit[]
can now draw controlled Pauli gadgetsApplyCircuit[]
can now accept an empty circuit/list (to do nothing)
Changes:
- Previous
QuEST`*
namespace is now divided into four sub-namespaces, for clarity.QuEST`*
contains the QuESTlink API functions, likeApplyCircuit[]
QuEST`Option`*
contains the optional arguments to the API functionsQuEST`Gate`*
contains the operator symbols recognised byApplyCircuit[]
,DrawCircuit[]
andCalcCircuitMatrix[]
QuEST`DeviceSpec`*
contains the keys used in device specifications
Bug fixes:
GetAllQuregs[]
no longer causes a segmentation fault (in a rare but frustrating use-case)CalcQuregDerivs[]
no longer throws an error when control qubits (on any gate) are specified in a list. For example,Subscript[C, {0,1,2}][...]
DrawCircuit[]
optional arguments (for styling graphics) are now processed correctly- The error message for Kraus channels specified with an incompatible number of qubits and matrices is now correct for >1 qubit channels.
- The error message for controlled Pauli gadgets in
ApplyCircuit[]
has been corrected (from gibberish to"not yet supported"
) ApplyCircuit[]
validation errors are now more specific
v0.5
Overview
This release adds PlotDensityMatrix
, a function for plotting a density matri(x)(ces) as 3D columns. See ?PlotDensityMatrix
for details.
v0.4
Overview
This release adds some optional arguments to ApplyCircuit
, allows greater tweaking of DrawCircuit
diagrams, improves Windows compatability, and fixes the GPU build process on Linux and Windows.
Changes
ApplyCircuit
now accepts an optionalWithBackup -> False
argument, which will disable the automatic backup up of the passedQureg
. This removes the memory overhead, but means that if the circuit contains a user-error and the function aborts, theQureg
will be left in an unknown state. Removing the memory overhead is necessary in order to simulate as large a possibleQureg
as can fit in the user's machine.ApplyCircuit
now accepts an optionalShowProgress -> True
argument, which will display a progress bar to indicate what percentage of gates in the circuit have been simulated so far. This is a useful quick litmus test of the simulation's expected duration.DrawCircuit
now recognises anId
gate, which is invisible in the rendered circuit, but can be used to push subsequent gates to the right. This is useful for tweaking gate positions.
Bug fixes
- patched the
makefile
to support GPU builds on Windows and Linux
v0.3
Overview
This release overhauls how QuESTlink files are served to the user's machine. Now, precompiled binaries for Windows, MacOS and Linux are now automatically updated, and safely served from github. Error handling is also improved. QuESTlink is now more secure, and easier to update.
Changes
- added native support for Windows (32 and 64 bit).
- added precompiled binaries for all of Windows, MacOS and Linux
- all binaries and QuESTlink package code is now served directly from github (by redirecting
qtechtheory.org/questlink.m
) - set up continuous deployment; updates to the
master
branch triggers recompilation of the binaries - set up continuous integration; changes and pull requests to
develop
branch trigger a test that QuESTlink still compiles on every operating system (badges now in README) - QuESTlink now throws an error if a 'function' call goes unevaluated. Previously, a call like
ApplyCircuit[];
with invalid arguments went silently un-evaluated, causing a logical bug in the user's code. Now, the user is notified immediately if their call does not match any definition. This alleviates a major user pitfall from QuESTlink. - retired
quest.qtechtheory.org/QuESTlink.m
,questlink.qtechtheory.org/QuESTlink.m
andquestlink.qtechtheory.org/QuEST.m
URLs (they now issue a deprecation warning) - extended
SetWeightedQureg
to include more overloads (for convenience)
v0.2
Overview
This release is a substantial refactor of QuESTlink, to overhaul how user-validation errors are handled both internally, and reported to the user. This refactor drastically improves the usability and stability of QuESTlink. The repo layout was also tidied, and the doc improved. Finally, we add analytic capabilities to QuESTlink!
Changes
- core QuEST validation failures are now caught as exceptions, and don't kill QuESTlink
- errors are now reported to Mathematica as Message (canonical way to present errors), no longer as Echo - they're now red, and can be stack-traced!
- fixed all memory leaks
- fixed all pipeline crashes
- removed all bespoke error-codes from functions, greatly simplifying code
- increased catching of user-errors (e.g. fixes #54, #62, and qureg-creation checking now done in all functions)
- removed overlap of core-QuEST and QuESTlink validation (e.g. removes #36)
- QuESTlink is now C++11, making further development significantly easier
- Created doc for compiling QuESTlink from source
- Tidied the repository
- Added
CalcCircuitMatrix
which returns a symbolic, analytic expression of the input circuit, which can contain undefined variables
Bug fixes
- patched
CalcExpecPauliProd
which previously didn't run (at all). - patched memory leaks in
ApplyCircuit[]
,CalcQuregDerivs[]
,CalcExpecPauliSum[]
,CalcPauliSumMatrix[]
andApplyPauliSum[]
- patched crashing of QuESTlink process when core QuEST validation was triggered
- patched freezing of QuESTlink when front-end validation was triggered (affected only some functions)
v0.1
Overview
This is the first release (a pre-release), so that early adopters can version their existing usage.
Supported OS
- MacOS
- Ubuntu
- Windows (currently separate branch)
Build
- GNUMake
Platforms
- serial
- multithreaded
- GPU-accelerated