True-Q™ Changelog

All notable changes to True-Q™ will be documented in this file.

[2.6.5] - 2020-03-17

Added

  • Added interface support for Qiskit based gates which do not define a .to_matrix().

Changed

  • Custom keys are now preserved when the circuits which contain them are passed to analysis or randomized compiling.

  • Changed default priority list for the Qiskit interface.

[2.6.4] - 2020-03-09

Added

  • Added the trueq.math.Superop class for representing superoperators.

  • Added the function trueq.math.random_density() to generate random density matrices.

Changed

  • trueq.compilation.RemoveId can now optionally remove the identity gate from immutable cycles.

  • trueq.compilation.DEFAULT_PATTERNS final RemoveId now removes all identities, even in immutable cycles.

[2.6.3] - 2020-02-27

Fixed

  • Fixed a bug in setup.py which was introduced in the previous release.

[2.6.2] - 2020-02-26

Added

  • Added axis_size option to the nr_bar() plotting function.

  • Added support to trueq.Simulator for subsystem dimensions greater than 2, thereby adding support for leakage noise models.

  • Added dim attribute to trueq.Circuit.

  • Added function trueq.math.embed_unitary().

  • Added support for pip and wheel installations.

  • Updated documentation.

Changed

  • Changed the internals of trueq.Cycle to reduce memory usage (this should not change any behaviour).

[2.6.1] - 2020-02-20

Changed

  • trueq.compilation.Native1Q and Native2Q have been optimized slightly for speed.

  • trueq.CircuitCollection.append() now returns itself after appending.

  • Improved the performance of protocol generation functions, e.g. trueq.make_knr().

Fixed

  • Fixed a backwards compatibility bug with trueq.load().

  • Made trueq.save() more robust by first saving to a temporary location.

  • Fixed issue with set_priority_list where it could result in an empty list.

[2.6.0] - 2020-02-14

Added

  • Added labels option to the infidelity_comparison() plotting function.

Changed

  • Significant refactor of trueq.interface interfaces, which fixes ambiguities in the gate conversion process (run help(trueq.interface) for details).

  • Moved trueq.circuits.Cycle to a new module, trueq.cycle.Cycle.

  • Moved trueq.math.NUM_PRECISION constant to trueq.utils.NUM_PRECISION.

  • trueq.make_readout_calibration() now flattens input labels to avoid confusion.

  • Default compiler patterns tweaked slightly; the final Justify step has been removed. See trueq.compilation.DEFAULT_PATTERNS for the default compiler steps.

  • Reduced default value of n_bodies argument in trueq.make_knr() to 1.

  • Improved internal logic of trueq.config.GateFactory for future changes in compilation and interface code.

  • Updated documentation.

Fixed

  • Fixed trueq.math.find_kak_equivalent and added tests.

[2.5.0] - 2020-02-11

Added

  • Added trueq.math.Frame.plot_arr() and trueq.math.Frame.plot_superoperator() for plotting matrices expressed in different bases.

  • Added trueq.Gate.is_identity for checking if a gate is identity.

  • Added trueq.Cycle.is_equivalent for checking if two cycles are equivalent.

  • Added options ignore_imm and ignore_id to trueq.compilation.CycleSandwich.

Changed

  • trueq.config.fsim_factory fSim definition now matches Cirq definition.

  • circuits.plot.nr_bar() now shows error contributions in the legend instead of below the x-labels.

Fixed

  • Fixed a bug in trueq.Circuit.update_keys().

  • Fixed rich display of trueq.Operation, trueq.Gate, trueq.NativeGate, trueq.Cycle, and trueq.Circuit in Colab.

  • Fixed the efficiency of trueq.make_tnr() for many input targeted errors.

  • Fixed rare conversion error in PyQuil interface where single qubit identity gates could have potentially failed to convert after altering default behavior.

[2.4.5] - 2020-02-06

Added

  • Added more caching to portions of trueq.interface to speed up conversion.

  • Added trueq.Cycle.to_dict() and trueq.Cycle.from_dict().

  • Added trueq.Results.to_dict() and trueq.Results.from_dict().

Fixed

  • Cycles and results in circuits are now properly serialized.

[2.4.4] - 2020-02-05

Added

  • Added compatibility with Python 3.8.

Fixed

  • Fixed minor CSS bugs in _repr_html_().

  • Fixed a rare DLL loading bug.

[2.4.3] - 2020-02-04

Added

  • Added assets to MANIFEST.in.

Fixed

  • Fixed a bug in trueq.Circuit.to_dict().

[2.4.2] - 2020-02-04

Added

  • Added trueq.Gate.random(dim), which creates a random unitary gate of size dim.

  • Added trueq.Gate.adj, which returns the adjoint of the existing Gate as a new Gate.

  • Added trueq.Gate.plot(), which plots the matrix representation of a Gate.

  • Added trueq.math.random_unitary which generates Haar random unitary matrix.

  • Added _repr_html_() to trueq.Operation, trueq.Gate, trueq.NativeGate, trueq.Cycle, and trueq.Circuit for rich display in Jupyter notebooks.

Changed

  • Simplified trueq.visualization.plotters.PlottingSuite mechanics.

  • Added a flag, join_meas=True, to Cirq conversion so parallel measurements can optionally be combined into single Cirq measurement object inside of a moment.

  • Changed the way trueq.Cycle is serialized by trueq.Key.to_dict().

Removed

  • Removed unused function trueq.utils.cycle_to_str.

Fixed

  • Fixed ordering of subplots in CircuitCollection.plot.nr_bar().

  • Solved division by zero error when no data present in plotters.

  • Fixed behavior of trueq.Gate.generators when called on identity gates.

  • Cirq conversion now casts angles to real values, where previously complex 0.0 were potentially being passed.

  • Cirq conversion now assigns qubits to a device consistently.

  • Fixed a bug in troubleshoot.py.

[2.4.1] - 2020-01-23

Added

  • Added trueq.compilation.CycleSandwich compiler pattern.

  • Added the convenience attributes Cycle.gates_single and Cycle.gates_multi.

Changed

  • trueq.inteface.qiskit.Executor now adds backend=backendname to each circuit key.

  • trueq.inteface.qiskit.Executor now has default n_shots=128 (previously 1024).

Fixed

  • Fixed bug in Gate.is_unitary.

  • Fixed superfluous CircuitCollection.fit() warnings.

[2.4.0] - 2020-01-17

Added

  • Added trueq.compilation.Relabel pattern that relabels qubits in a circuit.

  • Added trueq.compile(), which enables simple standard compilation and transpilation.

  • Added the option to select noisy labels and gates in many of the simulator’s noise models, e.g. Simulator().add_depolarizing(0.1, noisy_labels=[0, 3, 5]).

  • Added trueq.Circuit.n_meas property, equal to len(circuit.meas_locs).

  • Added support to Cycle.add() for inserting multiple like 1-qubit gates.

  • Added trueq.Config.connectivity property which gives the connectivity graph associated with the factories in the config.

  • Added trueq.Results.decompiled_results() to undo the effect of a compiled pauli.

  • Added the convenience function trueq.CircuitCollection.sum_results().

  • Added the convenience function trueq.CircuitCollection.update_keys().

  • Added clip=False option to trueq.math.Tensor.to_results().

  • Added xlabels and ylabels options to trueq.visualization.plot_mat().

  • Added trueq.math.int_base() for integer solutions to b ** n == x for b.

  • Added the trueq.Cycle.dim attribute.

  • Added common_ylim=True option to Circuit.plot.nr_bar().

Changed

  • make_readout_calibration() now makes mutable instead of immutable cycles.

  • Refactored some portions of the interface code for Qiskit, Cirq, and PyQuil for simplicity and improved customization.

  • Renamed trueq.compilation.SubstitutionCompiler to trueq.compilation.Compiler

  • Generalized allowed input type to Results.marginal().

  • Updated documentation.

  • Changed underlying datatype of trueq.Gate from dict to np.ndarray.

  • Qiskit Executor now has a default max_submissions=5 down from 25, to match upstream changes from IBM.

  • Modified trueq.math.int_log() to be faster, to have no default value, and to return None rather than error when no solution is found.

  • Removed attributes trueq.Gate.n_sys and trueq.Gate.dim; a major step toward gates containing no label information whatsoever.

Fixed

  • Fixed ordering bug in Tensor.to_results() and Tensor.sample().

  • Fixed return type bug for void backend functions.

  • Fixed PyQuil interface for pyquil>=2.16.0.

[2.3.0] - 2019-12-10

Changed

  • Removed nr_cmap() and nr_bar() plotting for circuits with key.protocol="TNR".

  • Added input validation to nr_cmap() and nr_bar().

  • Compiler speed improvements.

  • Various improvements to the documentation and examples.

  • Bumped qiskit-terra optional dependency to >=0.11.

Fixed

  • Fixed simulator probability clipping issue.

  • Fixed compiler to accept lists of cycles.

[2.2.3] - 2019-11-19

Changed

  • Simulator.run accepts n_shots=float("inf") as a possible input.

  • Speed improvements to Simulator.run() for many shots.

[2.2.2] - 2019-11-06

Added

  • Added circuits.plot.irb_summary() to plot parameters related to IRB.

[2.2.1] - 2019-11-01

Added

  • Added aliases for single qubit clifford gates, available through e.g. Gate.cliff0.

  • Added make_qcap() and qcap_bound() for Quantum Capacity (QCAP) assessment.

  • Added Tensor.to_results() which returns a Results object.

  • Added Results.tvd() to compute total variation distance (TVD) between results.

  • Added circuits.plot.timestamps() plotter showing Results.last_modified.

  • Added case to trueq.compilation.Native1Q that will now directly compile into a fixed angle gate if there is one present in the config file.

  • Added TotalTime for estimating experiment time based on gate lengths, etc.

Changed

  • Moved make_crosstalk_diagnostics() to trueq.assessments.

  • Modified the arguments of CircuitCollection.batch().

Fixed

  • Fixed an exponential blowup in the analysis of make_knr() circuits.

  • Fixed a bug in readout calibration.

  • Fixed a memory reporting bug in macOS (enterprise version only).

[2.2.0] - 2019-10-21

Added

  • Added make_knr() for K-body noise reconstruction (KNR).

  • Added make_tnr() for Targeted noise reconstruction (TNR).

  • Added interface.qiskit.Executor for submission of circuits to a Qiskit backend.

  • Added convenient specification of twirling groups using P, C, SU, etc.

  • Added CircuitAggregator context to build circuit collections from multiple protocols using only one call to the backend.

Changed

  • Changed return type of randomly_compile() to a circuit collection of randomizations, and removed its ability to accept circuit collections as input.

  • Improved plotting and saving functions.

  • Updated documentation.

Removed

  • Removed make_nr().

  • Removed reconstruct_pauli_errors() (its functionality was intergrated into fit()).

Fixed

  • Fixed bugs in Cirq and Qiskit interfaces.