# True-Q™ Changelog¶

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

## [2.6.13] - 2020-06-05¶

### Added¶

Added

`trueq.Config.basic`

as a way to construct a simple`Config`

object.Added

`trueq.Simulator.add_relaxation`

as a way to add relaxation errors to the simulator.Added helper functions

`trueq.utils.auto_twirl()`

and`trueq.backend.api.random_twirl()`

.

### Fixed¶

`trueq.utils.optional_import`

now handles edge cases where`setup.py`

of a package is incorrectly configured.Fixed a bug in

`Simulator.run()`

in the case where a measurement error is defined (e.g. via`Simulator.add_readout_error()`

) on a qubit not appearing in a circuit.Added

`trueq.Results`

to API documentation.Fixed a shape bug in

`trueq.math.tensor.OperatorTensor.upgrade()`

.

### Removed¶

Removed

`get_cur_mem()`

,`get_max_mem()`

, and`set_max_mem()`

from`trueq.backend.api`

.

## [2.6.12] - 2020-05-08¶

### Added¶

Added

`trueq.visualization.Graph`

for embedding device topology graphs in figures.

### Changed¶

Bumped required Cirq version to 0.7.0 and made compatible with version 0.8.0.

## [2.6.11] - 2020-05-01¶

### Added¶

Updated documentation.

### Changed¶

Changed the sort order of cycles; gate count at each size is now most important.

`trueq.compilation.Merge`

no longer removes identity gates.Changed Qiskit required version to

`>=0.19`

due to upstream changes.

### Fixed¶

Fixed a bug in conversion to the Cirq

`PhasedXPow`

gate.

## [2.6.10] - 2020-04-28¶

### Added¶

Added

`abs_max`

option to`trueq.visualization.plot_mat()`

(and other functions which call this plotter) which sets the opacity scale of colors.Added

`trueq.compilation.DecomposeRRZ`

, a compilation pattern to decompose single qubit gates into 2`R(a) = Z(a)X(90)Z(-a)`

gates and 1 final`Z(t)`

gate.Added support for the

`PhasedXPow`

gate to the Cirq interface.

## [2.6.9] - 2020-04-13¶

### Added¶

Added

`trueq.compilation.InvolvingRestrictions`

pattern which enforces involving restrictions as defined in a config through a greedy algorithm.

### Fixed¶

Fixed a bug in

`trueq.Cycle.__getitem__()`

in the presence of a single-qubit block.

## [2.6.8] - 2020-04-09¶

### Added¶

Added an inequality comparison operator to

`trueq.Cycle`

.Updated documentation.

### Fixed¶

Switched deprecated SciPy functions to their NumPy equivalents.

## [2.6.7] - 2020-04-06¶

### Added¶

Added the method

`trueq.Results.plot()`

that makes a bar plot of the results.Added the compiler pattern

`trueq.compilation.PhaseTrack`

to accumulate virtual phases through a circuit and use them to parameterize native gates.Updated documentation.

### Changed¶

Renamed

`trueq.math.Tensor.dag()`

to`trueq.math.Tensor.adj()`

.Dimension on

`trueq.Result`

will now increase if new ditstrings contain higher numbers than the existing stored dimension; previously this raised an exception.

### Fixed¶

Fixed an ordering bug in

`trueq.results.merge_results()`

.Fixed a bug that occurred while averaging CB results.

## [2.6.6] - 2020-03-27¶

### Fixed¶

Fixed a bug in

`trueq.compilation.Relabel`

, where relabeling would only work on permutations, it now works for any valid arbitrary labels.

## [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.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.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.