# CHANGELOG

## [0.9.14.3] - 2025-11-25

This is a bugfix release patching the following issues:

* The benchmarking tool formerly named `bsqale` has been renamed to `scarab` (@ndsieki, #685)
* Bugfix for drift report generation caused by incorrect Plotly syntax. (@liuyichao82 #688)
* Fix for a ReadTheDocs build failure that caused the documentation generation to fail. (#691)

Development-related change: Pushes to the `bugfix` branch no longer trigger automatic merges into `develop`, and these changes will need to be merged in manually going forward.

## [0.9.14.2] - 2025-11-08

This is a bugfix release patching the following issues:

* Bugfixes for diamond-distance wildcard budget computation in the context of leakage-aware analysis as reported in #652. (#671)
* Changes to default behavior of leakage-aware gauge optimization suite to address the manner in which relational leakage errors are attributed to each gate. Additional correctness checks/unit tests for leakage GST modeling. (#671)
* Bugfix for issue reported in #644 where it was found that when gauge-optimizing models with instruments using fidelity or trace distance as cost functions the instrument parameters were being ignored. Note that it was originally reported/thought that this applied to frobenius distance as well, but that turned out not to be true and this was working correctly. (#672)
* Fix for issue #600, which found the `Model.is_equivalent` method did not work for 'full TP' models. (#657)
* tqdm added as proper dependency (#653, #656)
* Shared memory bugs in objective function computation when parallelizing across parameters. (#660, #674) 
* Fixes a bug in DataSet count retrieval and adds unit tests. (#663)

## [0.9.14.1] - 2025-08-30

This is a bugfix release patching two issues: 

- Bugfix for issue reported in #636 with dataframe construction from experiment designs and VB results related to recent changes in newer versions of pandas in conjunction with python 3.12. (#646, @enielse)
- Fixes for regressions (a visual issue with overlapping plots in tables, and a performance regression in operation matrix plots) in HTML report generation introduced in 0.9.14. These issues became apparent in multi-qubit GST contexts.


## [0.9.14] - 2025-08-25

This release introduces a series of new major features: 

- Fast simulation of noisy clifford circuits using error generator propagation.
- A brand new module for performing mirror circuit fidelity estimation (MCFE) and subcircuit volumetric benchmarking.
- Significant advances in pyGSTi's leakage modeling capabilities.

As well as numerous enhancements to existing functionality:

- Checkpointing and serialization for FOGI models.
- Visual/UI improvements for HTML reports, as well as associated performance improvements.
- Checkpointing and serialization of `IBMQExperiment`s, along with associated quality of life improvements to associate experiment design classes.  

In addition to these changes, this release includes a number smaller changes, bugfixes, expired deprecations, and developer maintenance/CI improvements. For more details on these changes please see below. 

### Added
* **Error Generator Propagation Module** (#538, #625): This module implements the algorithm developed in [https://arxiv.org/abs/2504.15128](https://arxiv.org/abs/2504.15128) for efficiently simulating noisy clifford circuits under general (small) Markovian noise using an analytic technique called error generator propagation. This includes the ability to compute approximate circuit outcome probabilities, expectation values of pauli observables, as well as effective noise process aggregating the impact of noise on an entire quantum circuit. Please see the linked paper, and the new [tutorial](https://github.com/sandialabs/pyGSTi/blob/master/jupyter_notebooks/Tutorials/algorithms/ErrorGeneratorPropagation.ipynb) for more on these capabilities and their use. 
* **Mirror Circuit Fidelity Estimation** and scalable algorithmic benchmarks using subcircuit sampling (#628, @ndsieki): This module adds support for the construction and analysis of holistic and application-oriented benchmarks based on a family of techniques called mirror circuit benchmarking. Mirror circuits provide a method for constructing efficient proxy circuits from which one can take essentially any circuit of interest and construct reliable estimates for the fidelity of circuit. Also included with this module is:
    * Initial support for randomized compiling.
    * Support for subcircuit volumetric benchmarking (SVB), a method for constructing fidelity estimates for application circuits at scales larger than existing devices based on the analysis of smaller subcircuits sampled from the full one. This technique will be discussed in greater detail in an upcoming publication.
    * Initial introduction of scarab, a tool which will eventually enable end-to-end construction of scalable mirror circuit fidelity estimation experiments from an application circuit of interest. Please see [https://arxiv.org/abs/2511.02134](https://arxiv.org/abs/2511.02134) for more information.
   * Direct interfaces for conversion to and from qiskit circuits (w/o needing to go through OpenQASM as an intermediary).   
 * **Leakage-aware GST** (#410, #616, @rileyjmurray): pyGSTi's capabilities for modeling leakage and quantifying its impact have been significantly enhance with new capabilities for performing what we're calling leakage aware GST. For more on using these new capabilities in practice please see the new example [notebook](https://github.com/sandialabs/pyGSTi/blob/master/jupyter_notebooks/Examples/Leakage-automagic.ipynb). This includes:
    * New leakage-targeted bases for representing quantum process matrices which naturally delineate between computational space and leakage space dynamics. 
    * Several new metrics for quantifying leakage, and new metrics for quantifying computational space gate performance in the presence of leakage.
    * New algorithms for performing leakage aware gauge optimization (LAGO), which addresses a previously known shortcoming in traditional gauge optimization approaches in the presence of leakage where a well-defined target action for a gate on the leakage space is not available.
    * Significant improvements to usability. In many cases these new leakage-aware analyses can be enabled in a nearly turn key fashion, from model construction to report generation, with just a few lines of code, or with just one additional keyword argument to many functions (see tutorial to see more).


### Fixed

* Certain LGST circuits missing from per-sequence detail plots when using FPR (Color Boxplot Fix) (#561 
* Fixed issue whch resulted in nondeterminism in the construction of FOGI models (#580 @juangmendoza19)
* Fixed a bug in the reparameterization of models when converting to an error-generator based parameterization at a point in parameter space other than the target model. (#480, @juangmendoza19) 
* Fix issue related to deprecations in Ipython 9.0 (#594, @liuyichao82)
* Serialization issue with PlaquetteGridCircuitStructure from issue #484, (#591)
* Plotly 6 Per-Sequence Detail Plot Rendering Bugfix (#603)
* Fixed a bug in fiducial selection which would often result in an extra (unnecessary) measurement fiducial being included in the final set. With this patch users this should result in slightly smaller GST experiment designs when using default settings. (#563) 
*Fixed build issue related to version file directive in pyproject.toml (#602)
* Fix for circuit to OpenQASM conversion when using ECR gates (#609, @judealnas) 
* Fix dictionary comprehension for gate unitary renaming in QuditProcessorSpec (#610, @judealnas)
* Fixed incorrect (the incorrect ones were still IC, but had inadvertantly effectively doubled up one fiducial pair) XZ Modelpack (#618)
* Fixed per-sequence detail plot threshold and miscellaneous QI serialization fixes (#626, @pcwysoc)
* Patched bug which resulted in gpindices for layers and their gate referents becoming out of sync when using `ImplicitOpModel`s (#612,  @nkoskelo)


### Changed
* Significant quality-of-life improvements have been made to the `IBMQExperiment` class, as well as to the `FreeformDesign` and `CombinedExperimentDesign` classes, aimed at improving the usability and reliability of deploying characterization and benchmarking experiments on IBM hardware (though the improvements to the `FreeformDesign` and `CombinedExperimentDesign` classes are more broadly useful too).  This includes (#379, @sserita):
    * Compatibility with qiskit 2.x (@tjproct)
    * `IBMQExperiments` are now serializable, and checkpointing functionality now exists to enable better recovery in the event of errors during expensive jobs (transpilation, etc.). 
    * Backend changes to  `FreeformDesign` and `CombinedExperimentDesign` which drastically reduce their size when serialized and written to disk.
    * A new suite of unit/integration tests. (@tjproct, @pcwysoc)
* UI and performance improvements for HTML reports, changes include (#572):
    * Updated UI to improve readability and utility of per-sequence detail plots.
    * Updated error generator tables. Improvements to figures when generating reports with error bars (many figures now have this information more readily available (previously you needed to mouse over many plots to see the error bars). New TVD histogram plot. SPAM estimates now include their Hilbert-Schmidt vector representation. The display of SPAM operations no longer uses an idiosyncratic format.
    * Bugfix for#569.
    * Report generation for high-depth experiment designs should be somewhat improved (~40% faster at depth 2048)
    * Thanks to @pcwysoc, @kmrudin and @robinbk for their valuable feedback and discussions regarding these improvements! 
* Additional built-in gate names have been added for all single-qubit cliffords. (#574, @omaupin) 
* Improved compatibility with unitary state spaces. (#584, @nkoskelo) 
* Wildcard models now work with `LocalNoiseModel`s, and error reporting has been improved to enable better debugging. (#597, @enielse)
* New `merge_with` method added to CircuitListsDesign, ByDepthDesign, BenchmarkingDesign, and MirrorRBDesign so make it easy to combine multiple of these experiment designs. (#597, @enielse)
* The ability to directly add and validate compilations rules with a `CliffordCompilationRules` object has been added. A new built-in compilation rule for iSWAP->CNOT has been added. (#597, @enielse)
* GST reports can now be constructed in an à la carte fashion, with the option to exclude undesired or unnecessary sections of the report added to the `construct_standard_report function`. Additionally, report generation has been made more robust with additional exception handling for computing metrics. (#615, @rileyjmurray) 
* FOGI model are now natively serializable, and the performance of FOGI model construction has been significantly improved (reducing FOGI parameterization construction by multiple orders-of-magnitude for two-qubits). (#598, @juangmendoza19) 
* The default behavior for the 'stdgaugeopt' suite has changes to convert to a 'full' model rather than a 'full TP' model before performing gauge optimization. While this will result in the type of parameterization changing for gauge-optimized models vs. 0.9.13, the actual gauge groups used have remained the same and so the actual model should be effectively the same as before. (#622, @rileyjmurray)
* Replaced certain explicity checks with truthy ones to make them less fragile. (#639, @nkoskelo)
* Improved readability by adding implicit zero to fractions where applicable. (#635, @sandialabs/hemlock 
* The default gauge optimization suite for the function-based GST routines, `run_long_sequence_gst` and `run_long_sequence_gst_base` have been changes to 'stdgaugeopt', bringing their behavior in line with their OOP counterpart in the `GateSetTomography` protocol class.

#### Developer-Oriented Changes

* We have begun the process of trying to incrementally improve the readability of the pyGSTi source code by adding in type annotations and flagging their absence as part of the regular review process. Thank you to @nkoskelo for their effort spearheading this. See PRs #617, #621, #605, #629 for examples of this process, and discussions on their deployment.

* CLI options for controlling Cython extension compliation have been added. While primarily aimed at improving our CI unit test coverage, this will also enable users to more easily control their build settings in situations where building cython extensions is not possible. (#567, @sserita)
* We now show the top 25 test durations in continuous integration runs for additional profiling and debugging context. (#624, @rileyjmurray) 

### Expired Deprecations
* The dependency on CVXOPT for diamond distance calculations has been expired. We now use the solver CLARABEL, available by default with newer versions of cvxpy. Users may still choose to use CVXOPT if desired and installed on their system, but we no longer require it. (#588)
* Support for serialization using the deprecated legacy json and msgpack options have been expired. (#640)


## [0.9.13.3] - 2025-07-06
This is a bugfix/developer maintenance release addressing configuration errors with the pyproject.toml file which resulted in missing auto-generated _version.py files on 0.9.13.2. See the release notes for v0.9.13.1 for the most recent substantive release.

## [0.9.13.2] - 2025-06-20
This is a bugfix/developer maintenance release addressing configuration errors which resulted in incomplete deployment of the pyGSTi source distribution and certain pre-built wheels associated with the 0.9.13.1. This resulted in users who pip installed pyGSTi from pypi defaulting back to the older 0.9.13 release when using newer versions of pyGSTi. See the release notes for v0.9.13.1 for the most recent substantive release.


## [0.9.13.1] - 2025-03-18

### Added
* Wildcard support for instruments (#463, 527)
* Parity benchmarking protocol (#532)
* RNG seeding for BinaryRBDesign (#546, #547)

### Fixed
* Germ selection with ComposedOp (#481)
* Basis cast in report error generator projection (#455)
* Germ selection circuit line labels (#507, #540)
* NumPy 2.2 deprecation fix (#514)
* Various unit test fixes (#519, #530)
* Plotly 0.6 API changes in reports (#533)
* DataSet outcome label misordering with add_count_list (#535, #536)
* Guard for fastcalc causing ImportError (#540, #541)
* Per-germ global FPR simulator properly set (#545)

### Changed
* Simplify the TimeIndependentMDCObjectiveFunction class (#515)
* Package configuration updates (#530)
    * Name from pyGSTi to pygsti for PEP 625 compliance
    * Configuration migrated mostly from setup.py to pyproject.toml
    * Python versions bumped from 3.8 - 3.11 to 3.9 - 3.12
    * setuptools_scm updates more verbose version names for local/editable installs

## [0.9.13] - 2025-01-16

### Added
* PyTorch-backed forward simulation (#390)
* Support for ECR gates in QASM translation (#440, #457)
* Interleaved RB (#296, #468)
* Pared-down Levenberg-Marquardt for nonlinear least-squares (#500)
* Fisher information for quantum instruments (#464, #503)
* Wildcard and Hessians for non-ExplicitOpModels (#511)

### Fixed
* Kraus operator decomposition with degenerate Choi matrix bugfix (#423)
* NumPy improvements and fixes (#430, #431, #451, #458, #470, #518)
* Model parameter desync bugfix (#456, #482)
* FOGI parameter label accumulation bugfix (#486, #488)
* Guarding `signal` to allow PyGSTi usage with Dask (#489)
* Docstring escape and mismatch bugfixes (#502, #504)
* CPTP deserialization sign flip bugfix (#341, #509)
* LindbladErrorgen Hessian with dense representation bugfix (#512)
* Test file updates (#510)
* ProcessorSpec state space label bugfix (#474, #521)

### Changed
* Circuit primitive performance upgrades (#445)
* Refactors for matrixtools.py and the Basis class (#429, #442, #493)
* Layout and MDCStore creation performance upgrades (#448)
* Major 2Q GST performance improvements (#496, #517)

### Deprecated
* We are deprecating the CVXOPT backend for CVXPY in favor of Clarabel (#437). Although pyGSTi will not warn you if you continue to use the CVXOPT backend, this change will occur with no additional warning in a future release.

### Removed
* Removed explicit dependency on CVXOPT for wildcard optimization (#444)
* Removed deprecated QIBO interface (#262, #490)
* Large "spring cleaning" of unused/commented out code (#424, #452)

## [0.9.12.3] - 2024-06-11

### Added
* Deterministic Clifford compilation and native gate count statistics for `CliffordRBDesign` (#314, #315, #443)


### Fixed
* Truncation bugfix in `BenchmarkingDesign` objects with "paired" lists to `circuit_list` attribute (#408, #443)
* Fixes and efficiency improvements for various linear algebra calls (#432)
* `densitymx_slow` evotype hotfix (#438, #439)


## [0.9.12.2] - 2024-04-16

### Added
* Updated Cirq parsing capabilities (#411)
* Added ability for reports to use CircuitListDesigns and results without gauge optimizations (#412, #415)
* Indicator that figure/title headings can be clicked for expanded details (#416)


### Fixed
* Several tutorial updates and fixes (#282, #317, #421)
* Fixed fiducial selection with wrong qubit labels (#396, #418)
* Casting operators to dense matrices to avoid type errors in `pygsti.tools.optools` (#406, #414)
* LGST fitting with sparse dataset (#420)


### Changed
* Increased the speed of unit/integration tests in GitHub Actions (#380, #403)

## [0.9.12.1] - 2024-02-07

### Added
* Warnings for JupyterLab incompatibility (#328)
* Warning for modifying static DataSets (#340)
* Keyword argument to change ForwardSim types at Protocol runtime (#358)
* Flag to drop new `delay` instructions in QASM2 circuit output (#377)
* Warning for non-TP gauge transformations on CPTPLND-parameterized objects (#378)
* Code owner assignments (#384)
* A new AffineShiftOp modelmember (#386)

### Fixed
* Several tutorial updates and fixes (#247, #395)
* LGST fitting with various model parameterizations (#366)
* Deprecated convolve import in scipy 1.12 (#391, #392)

### Changed
* Stricter enforcement of line labels when using "*" in circuits (#373)
* Reimplementation of ProtectedArray (#386)
* GitHub runner updates for faster runs on development branches (#388)

## [0.9.12] - 2023-11-28

### Added
* Checkpointing for GST experiments (#347)
* Binary randomized benchmarking (BiRB) protocol (#348)
* Utility module for generating UML graphs of pyGSTi class inheritance structure (#353)
* Support for non-standard POVMs and qudits in write_empty_protocol_data (#370)
* Experimental support for updating model state spaces (#375)

### Fixed
* Numpy deprecation warnings (#325)
* Updated deprecated code in the README (#325)
* Finish migration of tests to pytest (#344, #362)
* Bugfixes for instruments in pspecs (#349)
* Remove mutable defaults (#357)
* Reparameterize model member dicts with model (#365, #367)
* Compute product of editable circuit (#368)
* Error handling for single-parameter wildcard with no CVXPY (#375)

### Changed
* Enhances EmbeddingOpFactory to be used to create target-qubit-dependent operation factories (#338)
* More efficient use of CVXPY when computing the diamond norm (#345)
* Improved (germ-aware) global fiducial pair reduction (#350)
* MPI-enabled Fisher information matrix calculation (#350)
* Report compatibility with the `MapForwardSimulator` (#350)
* Introduced new `ExperimentDevice` in `pygsti.extras.devices` as a replacement for (now legacy) device config files (#359)
* Refactored and improved unit test performance (#372)
* Removed Python 3.7 support and added Python 3.11 support (#374)

### Deprecated
* The `pygsti.algorithms.directx` module
* The `qibo` evotype (#363)

## [0.9.11.2] - 2023-08-11

### Fixed

- Fixed FAQ hyperlinks (#304)
- Removed deprecated functions for NumPy 1.25+ (#335)
- Fixed pickling of TPPOVM objects (#336)
- Updated the ReadTheDocs builds (#331)
- Fixed dataset pickling (#326)
- Removed deprecated functions for notebook 7+ (#337)

### Changed

- Slight performance improvements for GST fitting (#305)

## [0.9.11.1] - 2023-05-19

### Fixed

- Guarded an optional markupsafe import for report generation

## [0.9.11] - 2023-05-16

### Added

- WeakForwardSimulator class and Kraus operator representation to facilitate weak simulation via "unraveling" (#255)
- Experimental forward simulator interface with the qibo<=0.1.7 package (#257)
- Support for single-parameter wildcard models and serialization of wildcard models (#267)
- MongoDB serialization support (#276, #284)
- Modelpacks for Molmer-Sorenson gates (#281)
- Utility functions for mapping qubit labels and padding ExperimentDesigns (#283, #290)
- CI integration for example and tutorial Jupyter notebooks

### Fixed

- Various fixes to enable forward simulation with CHP for many qubits (#241)
- Various fixes in report generation (#242)
- Various circuit mirroring fixes (#243)
- Various RNG seeding fixes (#246, #254)
- Various fixes for fiducial selection, germ selection, and fiducial pair reduction (#261, #292)
- Improved performance of entanglement fidelity calculations (#263)
- Various linear algebra routine exception handling fixes (#268)
- Various wildcard model fixes (#279, #294)
- Various NumPy deprecations and fixes for Windows (#285, #287, #288)

### Changed

- Updates to first-order gauge-invariant (FOGI) model parameterizations (#258)
- Moved to jinja2>=3.0 (#259)
- Significant performance enhancements for fiducial selection, germ selection, and fiducial pair reduction (#270, #274, #280)
- Python 3.6 support dropped and 3.10 support added
- Testing framework moved from nose to pytest

### Deprecated

- Serialization functions with prefix 'load_' are deprecated for 'read_' versions for consistency

### Removed

- CHPForwardSimulator has been removed in favor of WeakForwardSimulator with 'chp' evotype
- install_locally.py script has been removed

## [0.9.10.1] - 2022-03-15

### Added

- adds tools to estimating the wall time needed to execute an experiment design on a quantum processor.
- adds "pad_1Q" implicit idle mode, which pads empty space in a circuit with 1-qubit idle operations.
- adds SPAM and instrument elements to processor specifications.
- adds QuditProcessorSpec object, so that processors containing multiple qudits can be readily modeled.

### Fixed

- fixes Windows-specific problems related to 32- vs 64-bit integers.
- fixes issues with extras.interpygate so that germ selection works and the number of gauge parameters can be specified manually.
- fixes bugs and adds functionality to first-order-gauge-invariant (FOGI) analysis routines.
- fixes a bug in Hessian projection that affects (and corrects) error bar computation.

### Changed

- improves circuit simulation performance when using operation factories (e.g., for modeling continuously parameterized gates)
- revamps elementary error generator functionality to closely match arXiv:2103.01928, where there are H, S, C, and A type elementary generators.
- default gauge optimization workflow changed for Lindblad-constrained models: now these models are converted to TP and gauge optimized over the entire TP gauge group (unitary group optimization was seen to be problematic for Lindblad-constrained models).

## [0.9.10] - 2021-08-03

A significant update, which primarily updates the package’s API to become more consistent, uniform, and following PEP8 style guidance. This unfortunately breaks backward compatibility with previous releases, but brings the package substantially closer to the future version 1.0 when the API will be stabilized. Most of the changes needed to update existing scripts should be straightforward, as names themselves are similar (though their location within the package may have changed) and now conform, for the most part, to the PEP8 style. Updated documentation and tutorials can also provide help to users seeking to update code that uses version 0.9.9.3 and lower. Note that pickle files are not compatible between any prior version of pyGSTi and this one (though most dataset files are). In addition to the many name and sub-package location updates, additional functionality has been added.

### Added

- Adds a new interface for external circuit simulators. This should allow pyGSTi to provide access to more powerful circuit simulation algorithms in the future. In this release, the interface has been used to incorporate the CHP Clifford-circuit simulator as an option. This update was made possible through an extensive refactoring and development “evolution types” in pyGSTi, which are also simpler to use now.
- Adds support for distributed and shared memory.. This more efficiently splits many computations among multiple processors, avoiding the need to gather memory to a single processor and thereby reducing the memory requirement by a factor of up to the processor count. This update also allows pyGSTi to take advantage of the fact that multiple cores on a single machine (node) can share memory. The new implementation automatically detects when processors can share memory and utilizes this feature by default, avoiding copying in favor of access to shared memory.
- Adds ability to serialize (read from & write to disk) most of pyGSTi’s object types using a robust and JSON-compatible format. Most objects now possess read and write methods for this purpose. This, by design, largely obviates the need to store data in Python pickle files, which are both fragile and pose security risks.
- Adds a new flexible type of data set (FreeformDataset) and simulator (FreeformSimulator) objects that allow arbitrary data to be computed for and associated with circuits.
- Adds a means of directly running experiments on IBMQ hardware when provided with proper credentials (see the pygsti.extras.ibmq package).
- Adds initial support interpolating the results of computationally intensive physics simulations to create and optimize “physical models”. This functionality exists in pygsti.extras.interpygate.
- Add the ability to place simple bounds on a model’s parameters when it is optimized. This is particularly relevant for restricting the aforementioned “physical models” to the region where their interpolation is valid.
- Adds additional support for fitting data to time-dependent models (time dependent gate set tomography).

### Fixed

- Fixes many bugs and addresses or resolves many issues.

### Changed

- Enhancements to model creation routines. ProcessorSpec objects now play a central role, as they define the API of a quantum processor. Processor specification objects are used to construct models and experiment designs. Model construction routines have been revamped, and allow noise to be more easily added to models. The construction of different model types (explicit, local, or cloud-noise) is much more unified by construction routines having similar argument lists and behaviors. The use of “implied idle” gates in models and circuits cleaner and simpler to understand.
- Model parameterization is more transparent. Known how a model is parameterized is easier thanks to the ability to label parameters and print them out more straightforwardly. More sophisticated parameterization is possible by “collecting” parameters or by constructing models from the ground up. The parameter allocation framework is updated to be more robust. (For example model members don’t need to be added to models before their number of parameters can be queried.) When testing models, the number of parameters of the model can be specified manually, using the new num_modeltest_params attribute.
- Improves randomized and volumetric benchmarks. Increased incorporation of Pandas dataframes makes analysis of data from multiple benchmarking experiments possible.
- Improves and expands the interface with Google’s Cirq package. The new DataSet.add_cirq_trial_result method can be used to import Cirq.TrialResult objects, and supports using cirq.WaitGate within the conversion method Circuit.convert_to_cirq.
- Updates wildcard error computations, adding options and more robust optimization methods.
- The package’s deployment process has updated from providing only a source distribution (requiring users to compile the C-extensions on their own if they wanted to use them) to building wheels for several common platforms and python versions. This update should save many users time and effort installing pyGSTi.

## [0.9.9.3] - 2020-09-23

### Fixed

- Fixes a bug affecting the generation of drift reports.

## [0.9.9.2] - 2020-06-02

### Added

- Adds no_mpi target, which installs all extras except for mpi4py

### Fixed

- Fixes a number of other (rarely used) install target names.

## [0.9.9.1] - 2020-02-19

### Fixed

- fixes bugs in setup scripts that resulted in pip install failing to copy some essential files and users getting a "missing replib" error when trying to import pygsti.
- fixes compatibility issues with the more recent Numpy versions that caused flags.writeable errors when using MPI (see issue 119).
- fixes compatibility issues with the recently released msgpack package version 1.0 (and higher).

## [0.9.9] - 2020-02-17

### Added

- adds a new API which centers around Protocol objects, and makes it easier to run one or multiple protocols on a many-qubit quantum processor. See the new 00-Protocols.ipynb tutorial for more details.
- new benchmarking protocols, including volumetric benchmarks and mirror randomized-benchmarking.
- more gauge-invariant metrics are available within reports.

### Changed

- improvements to multi-qubit GST capabilities.
- performance improvements, particularly in the area of working with large data-sets.
- HTML reports have been updated to by default use a new AJAX-free framework that eliminates many of the browser compatibility problems that users experienced in the past.
- Python version 2 support has been dropped. Python 3.5 and higher are now the only python versions pyGSTi officially supports.\
- the root package directory has been updated for greater simplicity and standardization with other packages. If you "install" new pyGSTi versions by running "git pull", you'll also need to run pip -e install . again or you'll get a warning message the pyGSTi cannot be found.

## [0.9.8.3] - 2019-10-23

### Fixed

- Fixed the issue of weird ('\*',) line labels in circuit construction routines when used with multi-qubit notation circuits, e.g. (0,)-labeled circuits getting erroneous ('\*',0)-labeled circuits created.
- Fixed bug in optools.fidelity for special case of trace-reducing rank-1 ops.
- Now handling sqrtm failure in optools._hack_sqrt as a warning instead of assertion error.

## [0.9.8.2] - 2019-09-06

### Fixed

- adds compensation for a scaling factor in matrixtools.unitary_superoperator_matrix_log which would cause an assertion to fail in some circumstances.

## [0.9.8.1] - 2019-07-24

### Changed

- pyGSTi is distributed with the Apache License version 2.0, included in LICENSE.

## [0.9.8] - 2019-06-29

### Added

- framework for time-dependent models and continuously-parameterized gates.
- added support for simple Pauli-stochastic noise operators.
- new tutorials for: idle tomgraphy, drift characterization, time-dependent GST, simulating RB data, continuously-parameterized gates, building implicit models (updated with crosstalk-free and cloud-crosstalk constructions)

### Changed

- revamped drift detection code
- expanded Circuit objects can include arguments and time durations.
- expanded ability to create implicit models (local- and cloud-noise models) makes this process easier and more intuitive. Related to this, the error generators of LindbladOp objects can more easily be constructed and modified.
- more robust support for different bases (adds a new hierarchy of basis objects).
- updated documentation and bug fixes

## [0.9.7.5] - 2019-05-29

### Fixed

- adds the package pygsti.extras.idletomography which was missing from setup.py.

## [0.9.7.4] - 2019-04-23

### Fixed

- fixes a bug in running GST (in evaluating the log-likelihood) when the data contains zero-counts for some/all of the outcomes of a circuit.

## [0.9.7.3] - 2019-04-18

### Fixed

- Fixes pip installation issue caused by latest version of plotly (v3.8), which manifests itself as an inability to import _plot_html. This hotfix simply pins the required Plot.ly version to < 3.7.1; compatibility with Plot.ly version 3.8 will be included in the next non-hotfix release.

## [0.9.7.2] - 2019-03-19

### Fixed

- Minor bug fixes are also included.

### Changed

- updates and extends pyGSTi's drift-detection protocols.

## [0.9.7.1] - 2019-01-31

### Fixed

- fixes an issue whereby copied Model objects aren't given new UUIDs. This is relevant when generating reports which view multiple models.

## [0.9.7] - 2019-01-21

A significant update which shifts pyGSTi's focus to multiple qubits. Previous version, treated 1- and 2-qubit systems as the "normal" case, and n-qubit systems as the "special" case (evidenced by object and function naming and features, i.e. pyGSTi's API). This version takes a big step toward treating 1- and 2-qubit systems as special cases of a single, more general, n-qubit case.

This update breaks backward compatibility, which can mostly (often completely) be restored by running the included pyGSTi/scripts/update2v0.9.7.py script on old scripts and/or notebooks.

This update also revamps the tutorials, giving them into an intuitive network of hyper-linked notebooks. The updates will make both broadly learning what pyGSTi can do and located detailed guidance of specific topics much easier than it was in past versions. Begin by opening the pyGSTi/jupyter_notebooks/START_HERE.ipynb notebook.

### Added

- Adds beta-level implementation of "Idle Tomography" (a new multi-qubit characterization protocol)
- Adds ability to compose gates by adding together their error generators.
- Adds support for exporting Circuit objects to IBM's OpenQASM specification and Rigetti Quantum Computing's Quil specification (more coming soon).
- Adds new "implicit" noise models designed for multi-qubit processors.

### Fixed

- Bug fixes (particularly in the computation of gauge-invariant fidelities).

### Changed

- the drift-detection sub-module is amidst an upgrade and is not completely functional in this release.

## [0.9.6] - 2018-10-10

### Added

- Updated and expanded data set comparison tools (e.g., more sophisticated hypothesis testing)
- adds Lindblad-parameterized SPAM operators.
- adds more gate & SPAM operator parameterizations, including affine and depolarization errors.

## [0.9.5] - 2018-07-30

### Added

- Direct Randomized Benchmarking (DRB) method. Includes sequence selection and data analysis routines (see new tutorials 17-18).
- Improved Clifford Randomized Benchmarking support (see tutorial 16).
- support for multi-qubit circuits (new Circuit object; see tutorial 15).
- ability to easily create LGST-only reports (see new example notebook).

### Changed

- improvements to the DataSet object: you can now store "sparse" counts (where not every outcome is observed) and add meta-data to lines after a '#' symbol.
- compatibility with plotly v3.0+ and cvxpy v1.0+.

## [0.9.4.4] - 2018-03-28

### Fixed

- Updates setup script so that newer versions of pip correctly identify and install dependencies when installing via pip.

## [0.9.4.3] - 2018-03-20

### Fixed

- Fixes remaining "module not found" errors that may occur when trying to import pygsti after installing from PyPi.

## [0.9.4.2] - 2018-03-20

### Fixed

- Fixes some of the "module not found" errors that may occur when trying to import pygsti after installing from PyPi.

## [0.9.4.1] - 2018-03-19

### Fixed

- fixes PyPi install error regarding "fastcalc.pyx not found".

## [0.9.4] - 2018-03-02

### Added

- new do_stdpractice_gst driver facilitates multiple GST estimates.
- support for multiple state preparations and POVMs.
- adds tutorial, example, and FAQ notebooks.
- many more pre-loaded "standard" gate sets.

### Changed

- switches to HTML reports and plotly plots (vs. PDF reports and matplotlib plots).
- updated Results object stores multiple estimates instead of just one.
- improved multi-qubit support (richer gate set models possible).

## [0.9.3] - 2017-02-06

### Added

- adds Robust Phase Estimation (RPE) capability
- adds initial support for qutrit reports
- adds tutorials for parallel processing (MPI), gate string reduction, and RPE

### Changed

- comments in data set text files can now be carried through to reports
- metadata tables have been added at the end of 'full' and 'general' reports

## [0.9.2] - 2016-12-24

### Added

- adds Randomized Benchmarking support.

### Changed

- optimizes and enhances MPI performance.
- improves "general" report to include more analysis.
- updates gauge optimization to be more flexible.
- updates the "standard" 2-qubit germs and fiducials.

## [0.9.1.1] - 2016-07-21

### Added

- adds timing info and other tweaks to stdout messages

### Changed

- performance optimization of reports
- more robust fake data generation

## [0.9.1] - 2016-07-16

### Added

- new "fiducial pair reduction" protocol reduces the number of gate sequences required by GST.

### Changed

- converted to Python3 (but backward compatible with Python2.7)
- improvements to germ and fiducial selection algorithms
- expanded options for gauge optimization
- improved code stability & maintenance
- unified stdout printing & progress indicators
- minor bug fixes & performance enhancements

## [0.9.1-beta] - 2016-06-14

### Added

- support for 2-qubit gate set tomography (2Q-GST).
- initial support for parameterized gates & SPAM operations.
- initial support for MPI.

### Changed

- cleaner interfaces to objects (GateSet, DataSet, etc.).

## [0.9.1-alpha] - 2016-02-17

### Added

- created to test zenodo DOI creation and integration for this project.