Skip to content

Releases: QTechTheory/QuESTlink

v0.9

02 Apr 10:36
Compare
Choose a tag to compare

New features

  • SetAmp[] to modify an individual amplitude of a statevector or density matrix.
  • KrausNonTP[] to specify Kraus maps which are not necessarily trace-preserving
  • CalcPauliExpressionMatrix[] to produce an analytic matrix from any symbolic Pauli expression as interpretable by SimplifyPaulis[].

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 symbol Id
  • CalcPauliSumMatrix[], ApplyPauliSum[] and CalcExpecPauliSum[] now accept Id, will not accept lone scalars, and give an error when a Pauli product therein targets non-unique qubits.
  • GetPauliSumFromCoeffs[] will now include the Id operator, in lieu of a lone scalar.

Bug fixes

  • (a6aa904) Patched how delayed device-specification Aliases were handled (previously they prematurely evaluated).
  • (bc3bcd8) Patched how two-qubit X gates were rendered by DrawCircuit[]. They previously rendered like generic two-qubit gates, but now look the same as many-qubit X gates.

v0.8

03 Sep 04:25
Compare
Choose a tag to compare

New features

  • CalcProbOfAllOutcomes (see related QuEST doc)
  • multi-controlled and multi-target forms of gates X, R, Rx, Ry and Rz (available in ApplyCircuit[], DrawCircuit[] and CalcCircuitMatrix[])
  • 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

01 Sep 22:45
Compare
Choose a tag to compare

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[] and GetRecordedQASM[].

v0.6

16 Apr 11:33
Compare
Choose a tag to compare

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
  • 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 scalar e^(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

Extended functions:

  • DrawCircuit[] now automatically compactifies circuits (via GetCircuitColumns[])
  • DrawCircuit[] now accepts sub-circuits, specified as a list of lists (or list of Circuit[]). These are drawn separately (do not merge under compactification) with partitions in-between.
  • DrawCircuit[] now accepts schedules (output from GetCircuitSchedule[]) and noisy schedules (output from InsertCircuitNoise[]), which are drawn as time-stamped sub-circuits.
  • DrawCircuit[] can now draw gates with >2 target qubits
  • DrawCircuit[] can now draw controlled Pauli gadgets
  • ApplyCircuit[] 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, like ApplyCircuit[]
    • QuEST`Option`* contains the optional arguments to the API functions
    • QuEST`Gate`* contains the operator symbols recognised by ApplyCircuit[], DrawCircuit[] and CalcCircuitMatrix[]
    • 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

20 May 17:40
Compare
Choose a tag to compare

Overview

This release adds PlotDensityMatrix, a function for plotting a density matri(x)(ces) as 3D columns. See ?PlotDensityMatrix for details.

v0.4

12 Apr 23:31
Compare
Choose a tag to compare

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 optional WithBackup -> False argument, which will disable the automatic backup up of the passed Qureg. This removes the memory overhead, but means that if the circuit contains a user-error and the function aborts, the Qureg will be left in an unknown state. Removing the memory overhead is necessary in order to simulate as large a possible Qureg as can fit in the user's machine.
  • ApplyCircuit now accepts an optional ShowProgress -> 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 an Id 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

15 Mar 00:38
Compare
Choose a tag to compare

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 and questlink.qtechtheory.org/QuEST.m URLs (they now issue a deprecation warning)
  • extended SetWeightedQureg to include more overloads (for convenience)

v0.2

03 Mar 23:59
a2dfc27
Compare
Choose a tag to compare

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[] and ApplyPauliSum[]
  • 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

28 Feb 23:24
67b7e79
Compare
Choose a tag to compare
v0.1 Pre-release
Pre-release

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