Skip to content

Releases: unitaryfund/qook

separate() and normalize()

19 Oct 18:56
Compare
Choose a tag to compare

This adds the methods separate() and normalize() to QrackSimulator. separate() forces entanglement-breaking between the target subsystem and all other qubits (without condition). normalize() is a necessary component to achieve separate() manually via decompose().

A bug was fixed in QUnit::Decompose() in the course of testing separate().

Full Changelog: v0.12.0...v0.13.0

out_probs()

05 Oct 17:50
Compare
Choose a tag to compare

This release adds out_probs() to the simulator API, which outputs all basis state probabilities in the same order as out_ket().

Full Changelog: v0.11.2...v0.12.0

sha1sum result:
cb5a4c0ac3142220ff8265923369efcf1a0c52be qook-0.12.0.crate

Optional noisy simulation

04 Aug 16:22
Compare
Choose a tag to compare

This release enables the option (off by default) to simulate with depolarizing single-qubit noise, for every gate.

Full Changelog: v0.11.1...v0.11.2

sha1sum result:
3bf39c3d0a9452b134b8fcbda47da4d65df01462 qook-0.11.2.crate

Debugging patch for v0.11.0

03 Aug 13:36
Compare
Choose a tag to compare

Primarily, in this release, matrix expectation value variants have been debugged to accept the correct number of arguments: they should take 2 Float components for each component of a 2x2 matrix, for 8 Float components in total. Documentation has also been updated.

sha1sum result:
9175831dee7c6c11ba6bd3f20fc01a307021f42b qook-0.11.1.crate

Expectation value API

02 Aug 20:35
Compare
Choose a tag to compare

This release adds the newer API for many different types of expectation value and variance. It also allows 32-bit vs. 64-bit floating-point precision to be controlled by a build option.

sha1sum result:
300436c0196108833cb91ff232799498bd9aa99b qook-0.11.0.crate

QrackCircuit improvements

10 Sep 14:43
Compare
Choose a tag to compare

This adds inverse() and past_light_cone() methods to QrackCircuit. (inverse() returns a new QrackCircuit that is the exact overall inverse of the original, while past_light_cone() accepts a vector of qubits and returns a new QrackCircuit with just the gates on the "past light cone" of those qubits, i.e., having any potential causal influence.)

Stabilizer weak sampling

16 Jul 15:37
Compare
Choose a tag to compare

This release add support for stabilizer weak sampling.

QrackCircuit and QrackNeuron

29 May 14:47
Compare
Choose a tag to compare

This release adds QrackCircuit and QrackNeuron to the public Qook classes. (QrackNeuron was distributed as v0.6.0).

set_sdrp()

04 Apr 19:58
Compare
Choose a tag to compare

There's no particular reason why SDRP level can't be changed mid-circuit. Several historical design issues made this difficult, in the past, but these are no longer relevant as of late. This is particularly desirable given the recent addition of automatic fidelity calculation when using SDRP in QUnit.

Therefore, this release adds SetSdrp() to the QInterface API, and it also exposes it to the shared library interface. Qook consumes it as set_sdrp(f64).

get_unitary_fidelity() and reset_unitary_fidelity()

30 Mar 16:57
Compare
Choose a tag to compare

This release adds get_unitary_fidelity() and reset_unitary_fidelity() to the simulator API.

It was noted by Andrea Mari of Unitary Fund that, from first principles, for a discarded probability "ɛ" in any rounding event, the worst case limit for fidelity loss from "Schmidt decomposition rounding parameter" ("SDRP") methods in QUnit should go like

F = Π (1-ɛ_j) (for j events where ɛ less than SDRP threshold).

Implementing this model, Daniel Strano found it to be very pessimistic, but through trial and error it was noticed that

F = Π (1-ɛ_j / 2)^(1/2) (for j events where ɛ less than SDRP threshold)

was very close to "gold standard" results. Collecting tens of thousands of data points on different circuit widths, depths, and SDRP levels, the second model was found to explain >99% of variance among gold standard results, (without a theoretical argument, for now, explaining why this should be close to or exactly the average case behavior).

More than 99% of variance was explained for random circuits that are basically a "nearest-neighbor quantum volume" variant; other cases might not be as well described. This calculation is done automatically by QUnit, and the result can be accessed through get_unitary_fidelity(), or the calculation might be reset to identically 1 fidelity by reset_unitary_fidelity().