Releases: sandialabs/pyGSTi
Version 0.9.14.1
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. (#648)
Full Changelog: v0.9.14...v0.9.14.1
Version 0.9.14
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 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 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 B-Sqale (name subject to change), a tool which will eventually enable end-to-end construction of scalable mirror circuit fidelity estimation experiments from an application circuit of interest.
- 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. 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 should find this 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 theFreeformDesign
andCombinedExperimentDesign
classes, aimed at improving the usability and reliability of deploying characterization and benchmarking experiments on IBM hardware (though the improvements to theFreeformDesign
andCombinedExperimentDesign
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
andCombinedExperimentDesign
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 explicit checks with truthy ones to make them less fragile. (#639, @nkoskelo)
- Improved readability by adding implicit zero to fractions where applicable. (#635, @nkoskelo)
- The default gauge optimization suite for the function-based GST routines,
run_long_sequence_gst
andrun_long_sequence_gst_base
have been changes to 'stdgaugeopt', bringing their behavior in line with their OOP counterpart in theGateSetTomography
protocol class.
Developer-Oriented Changes
v0.9.13.3
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.
v0.9.13.2
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.
v0.9.13.1
Minor release with the addition of parity benchmarking, wildcard for instruments, and many bugfixes. This also includes several package configuration and GitHub runner changes; notably, a change in supported Python versions from 3.8 - 3.11 to 3.9 - 3.12, tracking the EOL of Python 3.3.
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
Contributors
@sserita, @enielse, @coreyostrove, and @rileyjmurray want to thank @eendebakpt and @pcwysoc for their continued contributions.
Full Changelog: v0.9.13...v0.9.13.1
Version 0.9.13
Notable changes include the implementation of the interleaved RB (IRB) protocol, a new PyTorch forward simulator, minor IBMQ updates, significant performance and code maintenance changes, and more (including the usual bugfixes and minor updates).
BLUF for performance results: Thanks to @coreyostrove's herculean efforts, we expect end-to-end 2Q GST runs to be 6x faster with default settings compared to previous versions of pyGSTi.
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.
- We are also deprecating the
DenseOperatorInterface
. This interface previously allowed for interacting with certain classes of densely parameterized states and operations as if they were numpy ndarrays. In a future minor release we will add deprecation warnings indicating the future removal, and we will be targeting full removal in version 0.9.14. See #447 for more.
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)
Spring Cleaning Notes
Some of the code removed in the "spring cleaning" were features that we may want to revisit in the future. We flag some of the more likely features that we may want to revive in the future here (potentially even just as unit tests for the current/more sophisticated versions of code with the same functionality):
- Original versions of the RB mirroring, random circuit generation, fitting, and plotting code
- A reference Polynomial class (to be turned into a unit test)
- Tensor product state representations for the CHP evotype
- Dense POVM effect representations
- Non-static marginalized POVMs
- TermForwardSimulator cache generation code for modelpacks
- Experimental optimizer implementations
- Volumetric benchmarking grids
A big thank you to @rileyjmurray for spearheading this effort!
Contributors
@sserita, @enielse, @coreyostrove, and @rileyjmurray want to thank @eendebakpt for their continued bug reporting/fixing efforts and @pcwysoc, @adhumu, @tjproct, and @jordanh6 for their roles as code owners.
Full Changelog: v0.9.12.3...v0.9.13
v0.9.12.3
Hotfix for no Cython installations using the densitymx_slow
evotype and some RB bugfixes/feature updates.
Added
- Deterministic Clifford compilation and native gate count statistics for
CliffordRBDesign
(#314, #315, #443)
Fixed
- Truncation bugfix in
BenchmarkingDesign
objects with "paired" lists tocircuit_list
attribute (#408, #443) - Fixes and efficiency improvements for various linear algebra calls (#432)
densitymx_slow
evotype hotfix (#438, #439)
Contributors
@sserita, @enielse, @coreyostrove, and @rileyjmurray want to thank @tjproct and @pcwysoc for their efforts as code owners.
Full Changelog: v0.9.12.2...v0.9.12.3
Version 0.9.12.2
Minor bugfixes and updates, notably including Cirq integration and increased report capabilities.
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) - Deprecations for NumPy 2.0 (#413)
- LGST fitting with sparse dataset (#420)
Changed
Contributors
@sserita, @enielse, @coreyostrove, and @rileyjmurray want to thank @eendebakpt and @Timo1104 for their contributions!
Full Changelog: v0.9.12.1...v0.9.12.2
Version 0.9.12.1
Notable changes include a new AffineShiftOp operation, a variety of tutorial updates, minor bugfixes, and new warning messages, and several changes to our GitHub workflows (including code owners and streamlined Actions pipelines).
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)
Contributors
@sserita, @enielse, and @coreyostrove want to thank @eendebakpt and @rileyjmurray for their contributions!
Full Changelog: v0.9.12...v0.9.12.1
Version 0.9.12
Notable changes include the release of the binary randomized benchmarking (BiRB) protocol, the deprecation of Qibo integration, and more (including the usual bugfixes and minor updates).
Notice of API clarifications: One of the goals of the pyGSTi team over the next few releases is to solidify a public/private API with the goal of moving towards a 1.0 release. This will start as simple tagging of the exposure level of different parts of the code and may eventually lead to restructuring/visibility changes for primarily internal parts of the code with minimal exposure. This process will be open to community feedback - if you notice comments in part of the code that indicate "minimal" exposure but you use frequently, please let us know! You can track the discussion on #354 and view current progress on #371.
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
inpygsti.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 (as part of API clarifications, see #371) - The
qibo
evotype (#363)
Contributors
@sserita, @enielse, and @coreyostrove want to thank @eendebakpt, @rileyjmurray, @dhothem, and @jordanh6 for their contributions!
Full Changelog: v0.9.11.2...v0.9.12