Skip to content

Releases: unitaryfund/mitiq

v0.41.0

07 Nov 15:23
45778e8
Compare
Choose a tag to compare

(Full Changelog)

Highlights

📓 The Layerwise Richardson Extrapolation (LRE) user guide is complete! The user guide contains information about both the ins and outs of using the implementation, as well as covering the theory behind the technique so you can make judgements about when to apply the technique. In addition to finishing the user guide, we also have a new tutorial comparing both the performance and overhead needed for LRE and ZNE. Big thanks to @purva-thakre and @FarLab for the documentation!

📹 As part of launching LRE we made a short tutorial video to showcase the technique, along with how to use it. Check it out here!

🧑‍🔬 First time contributor @jpacold recreated results from a paper on phase transitions in the Ising model. Both the paper authors, and @jpacold both used Mitiq's ZNE module to apply error mitigation. This is both an informative tutorial on turning physics problems into something amenable on a quantum computer, and a class in applying error-mitigation.

✨ Enhancements

🧑🏽‍💻 Developer Improvements

📞 Call for ideas

We're currently looking into what features we could add to make Mitiq more noise-aware. If you have ideas and features requests in this area, do make a post on the GitHub discussion here!

v0.40.0

11 Oct 09:53
445af55
Compare
Choose a tag to compare

(Full Changelog)

Highlights

🔉 A new quantum error-mitigation technique is available in Mitiq! Layerwise Richardson Extrapolation is now available through mitiq.lre.execute_with_lre. Documentation is also available in the user guide, with more advanced docs and demonstrations coming in the next release. Special thanks to Purva Thakre for this contribution!

🥇 We had two first time contributions from @ecarlander and @mbrotos! Thank you both for your contributions!

🛡️ A helpful error message is raised when passing data of the incorrect type to the MeasurementResult class, where before it silently gave confusing results.

✨ Enhancements

📓 Documentation

🧑🏽‍💻 Developer Improvements

📦 Dependency Updates

v0.39.0

07 Aug 00:30
febde1b
Compare
Choose a tag to compare

Highlights

We've made updates to our documentation, beginning with the completion of the first section of the Pauli Twirling user guide, which offers a comprehensive introduction to this feature. Additionally, we've added a new tutorial on CDR (Clifford Data Regression) using Qrack as an efficient near-Clifford simulator. This demonstrates a workflow that harnesses the speed of Qrack in the CDR training phase, while providing users with an in-depth look at how to integrate Mitiq and Qrack effectively.

📓 Documentation

🧑🏽‍💻 Developer Improvements

📦 Dependency Updates

  • Update scipy requirement from <=1.13.1,>=1.10.1 to >=1.10.1,<=1.14.0 (#2420) [@dependabot]

(Full Changelog)

v0.38.0

02 Jul 05:28
07bb958
Compare
Choose a tag to compare

Changelog

Version 0.38.0

(Full Changelog)

Highlights

🚀 As of this release, thanks to @natestemen, we are officially supporting Python 3.12 and dropping Python 3.9.

🌉 As part of UnitaryHack 2024, new contributor @NnguyenHTommy fixed a Qiskit to Cirq gate conversion error by implementing a fallback mechanism to decompose and transpile the Qiskit circuit into native Cirq gates.

🌀 Another Unitary Hacker, @EmilianoG-byte added functionality to simulate noise specifically on CNOT and CZ gates when using the Pauli Twilring technique to symmetrize errors.

🔉 As hinted in last release's spoilers, @purva-thakre has implemented the noise scaling functionality required for the Layerwise Richardson Extrapolation (LRE) technique, which allows a more fine-grained control over the amount of noise in circuits compared to the standard unitary folding method.

✨ Enhancements

🛠️ Maintenance and Upkeep Improvements

🧑🏽‍💻 Dev Environment Improvements

📦 Dependency Updates

v0.37.0

04 Jun 17:49
32b53c2
Compare
Choose a tag to compare

Highlights

✨ Stacking quantum error mitigation techniques is a primary area of focus in Mitiq. In this release, @jordandsullivan introduced a Tutorial on composing Digital Dynamical Decoupling (DDD) and Zero Noise Extrapolation (ZNE).

🗒️ »Download Notebook«: Users have now the option to download tutorials in Jupyter .ipynb format directly from our documentation. We hope this will encourage experimentation with existing tutorials.

🤐 Lastly, a spoiler on what's upcoming: a Request for Comments document by @purva-thakre on adding Layerwise Noise-Scaling and Multivariate Richardson Extrapolation has been reviewed and approved. These techniques will soon make their way into Mitiq, stay tuned!

Enhancements

Maintenance and upkeep improvements

Dev environment improvements

📦 Dependency updates

v0.36.0

02 May 13:20
d35b7aa
Compare
Choose a tag to compare

Version 0.36.0

(Full Changelog)

Highlights

Support for Qiskit 1.0: Mitiq now fully supports programs written in Qiskit 1.0, thanks to the contributions of André Alves!

Enhanced Package Requirements: We've clarified the requirements for frontend packages. Each frontend is now available as an "extra" within the Mitiq package. For instance, to use Mitiq with Qiskit, simply run:

pip install mitiq[qiskit]

and similarly for all other supported integrations.
This ensures compatibility between all dependency packages required by Mitiq for frontend integration and those in the user's environment.

Quantum Error Mitigation methods: Users can now discover the available quantum error mitigation techniques by executing:

mitiq.qem_methods()

This function provides an accessible way to understand the module naming of each technique supported by Mitiq.

Thanks to @andre-a-alves, @cosenal, @jordandsullivan, @Misty-W, @purva-thakre for the PRs in this milestone.

Enhancements

Maintenance and upkeep improvements

Dev environment improvements

📦 Dependency updates

  • Bump myst-parser from 2.0.0 to 3.0.1 (#2333) [dependabot[bot]]
  • Bump bqskit and scipy (#2262) [dependabot[bot]]
  • Bump qibo from 0.2.4 to 0.2.7 (#2268) [dependabot[bot]]

🧑‍💻 Dev Dependency updates

v0.35.0

02 Apr 16:29
8ed510e
Compare
Choose a tag to compare

Version 0.35.0

In this milestone, we've continued our work to support Qibo by providing a new tutorial, adding related Qibo-conversion functionality to the API-doc, and added Qibo to our main list of supported frontends. We've also added the capability to use rotated randomized benchmarking circuits as part of the calibrator. These circuits provide expectation values ranging from 0 to 1 when measuring the probability that the output state is in the ground state. Having circuits with a wide range of expectation values is an important benchmarking task, and make a great test for finding the correct error mitigation technique/parameters. If you find any bugs/inconveniences in working with these updates make sure to open an issue so we are able to fix it ASAP!

This release also contains contributions from two new Mitiq contributors, and Unitary Fund team members Alessandro and Jordan! Welcome both, and looking forward to many more contributions! Well done making your first contribution so quickly 🏎️💨!

Commits

📦 Dependency updates

🧑‍💻 Dev Dependency updates

v0.34.0

16 Feb 18:42
c5afbd4
Compare
Choose a tag to compare

Changelog

Version 0.34.0

Announcing support for Qibo, a newly integrated frontend in Mitiq! 📣 Qibo is an "end-to-end open source platform for quantum simulation, self-hosted quantum hardware control, calibration and characterization".

Thank you to new contributor Francesc Sabater for excellent work integrating Qibo and Mitiq! Thanks also to new contibutor Sam Burdick for fixing our readme.

This release also includes a refactoring of part of the Mitiq shadows module, mitiq.shadows.classical_postprocessing, for speed of execution and code readability.

📓 Documentation

We've continued to enhance our (legendary!) documentation with:

  1. Addition of a security policy document
  2. Faster execution of the learning-based PEC tutorial in CI

Commits

📦 Dependency updates

v0.33.0

20 Dec 23:24
f58920f
Compare
Choose a tag to compare

Version 0.33.0

Minor update from 0.32.0 to fix a bug 🐛 in the mitiq.shadows module where an incorrect index was being used.

All changes

  • Changed to use the split for b_list_shadow (#2137) [@bdg221]

v0.32.0

19 Dec 19:11
3733bec
Compare
Choose a tag to compare

Version 0.32.0

Happy holidays, and happy (almost) new year!! ❄️☃️🎄🎊 This will be our last release of the year, and we'd like to thank everyone who has contributed to Mitiq over the past 12 months. We've accomplished so much in the way of error mitigation this year, and we couldn't have done it without the support and time given by the volunteers.
Thank you!

The calibrator logs have been revamped for to support result discovery and analysis. The Calibrator.run method now support two options: flat and cartesian to display the experiment results in either a linear fashion, or grid-like. Results here have been truncated for brevity.

>>> calibrator.run(log="flat")
┌──────────────────────────┬────────────────────────────────────┬────────────────────────────┐
│ benchmarkstrategyperformance                │
├──────────────────────────┼────────────────────────────────────┼────────────────────────────┤
│ Type: ghzTechnique: ZNE                     │ ✔                          │
│ Num qubits: 2Factory: LinearNoisy error: 0.04          │
│ Circuit depth: 2Scale factors: 1.0, 2.0, 3.0Mitigated error: 0.02      │
│ Two qubit gate count: 1Scale method: fold_gates_at_randomImprovement factor: 2.0    │
├──────────────────────────┼────────────────────────────────────┼────────────────────────────┤
│ Type: ghzTechnique: ZNE                     │ ✘                          │
│ Num qubits: 2Factory: LinearNoisy error: 0.04          │
│ Circuit depth: 2Scale factors: 1.0, 3.0, 5.0Mitigated error: 0.0658    │
│ Two qubit gate count: 1Scale method: fold_globalImprovement factor: 0.6076 │
├──────────────────────────┼────────────────────────────────────┼────────────────────────────┤
│ Type: ghzTechnique: ZNE                     │ ✘                          │
│ Num qubits: 2Factory: RichardsonNoisy error: 0.98          │
│ Circuit depth: 33Scale factors: 1.0, 3.0, 5.0Mitigated error: 1.03      │
│ Two qubit gate count: 14Scale method: fold_globalImprovement factor: 0.9515 │
└──────────────────────────┴────────────────────────────────────┴────────────────────────────┘
>>> calibrator.run(log="cartesian")
┌────────────────────────────────────┬────────────────────────────┬────────────────────────────┐
│ strategy\benchmarkType: ghzType: mirror               │
│                                    │ Num qubits: 2Num qubits: 2              │
│                                    │ Circuit depth: 2Circuit depth: 33          │
│                                    │ Two qubit gate count: 1Two qubit gate count: 14   │
├────────────────────────────────────┼────────────────────────────┼────────────────────────────┤
│ Technique: ZNE                     │ ✘                          │ ✘                          │
│ Factory: RichardsonNoisy error: 0.03Noisy error: 1.0           │
│ Scale factors: 1.0, 2.0, 3.0Mitigated error: 0.09Mitigated error: 1.03      │
│ Scale method: fold_globalImprovement factor: 0.3333Improvement factor: 0.9709 │
├────────────────────────────────────┼────────────────────────────┼────────────────────────────┤
│ Technique: ZNE                     │ ✘                          │ ✔                          │
│ Factory: RichardsonNoisy error: 0.03Noisy error: 1.0           │
│ Scale factors: 1.0, 3.0, 5.0Mitigated error: 0.0563Mitigated error: 0.97      │
│ Scale method: fold_globalImprovement factor: 0.5333Improvement factor: 1.0309 │
├────────────────────────────────────┼────────────────────────────┼────────────────────────────┤
│ Technique: ZNE                     │ ✘                          │ ✔                          │
│ Factory: LinearNoisy error: 0.03Noisy error: 1.0           │
│ Scale factors: 1.0, 3.0, 5.0Mitigated error: 0.0417Mitigated error: 0.9975    │
│ Scale method: fold_globalImprovement factor: 0.72Improvement factor: 1.0025 │
└────────────────────────────────────┴────────────────────────────┴────────────────────────────┘

New benchmarking circuits: mitiq.benchmarks now contains a function generate_random_clifford_t_circuit which does what it says on the tin. Special shoutout to new UF team member Farrokh Labib (@FarLab) for this contribution.

from mitiq.benchmarks import generate_random_clifford_t_circuit

clifft = generate_random_clifford_t_circuit(
    num_qubits=2,
    num_oneq_cliffords=5,
    num_twoq_cliffords=5,
    num_t_gates=5
)
print(clifft)
# 0: ───────────@───S───T───@───H───T───X───T───T───@───@───────
#               │           │           │           │   │
# 1: ───S───T───@───────────X───────────@───S───────@───X───S───

The Executor.run method now supports a single circuit instance in addition to a list for ease of use when working with a single circuit.

- executor.run([circuit])
+ executor.run(circuit)

Faster Tests! Working on Mitiq has never been easier to develop with a faster (by 36%) test suite.

📓 Documentation

This release contains quite a few documentation improvements, including

  1. New workflow images to elucidate the workflow for for using the mitiq.shadows module (available here)
  2. A reorganized API-doc which should be easier to navigate
  3. General clean up of the CDR user guide pages

Commits

📦 Dependency updates

🧑‍💻 Dev Dependency updates