Skip to content

Releases: unitaryfund/mitiq

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, @jordandsulliva, @mistywahl, @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

Release v0.31.0

02 Nov 22:49
638e31b
Compare
Choose a tag to compare

Changelog

Version 0.31.0

Released November 2, 2023

Summary

This release contains several documentation improvements and some new additions. Quantum subspace expansion (QSE) is added to the user guide (thanks @bubakazouba). Thanks to our first time contributors @dubeyPraY for a new tutorial on using PennyLane and Mitiq in calculating the energy landscape of a simple variational circuit and @kozhukalov for adding the PEC noise level and calculated error to the calibration logs. We also removed support for python 3.8.

All changes

Dependency updates

New Contributors

Full Changelog: v0.30.0...v0.31.0

Release v0.30.0

13 Oct 17:10
68b2b12
Compare
Choose a tag to compare

Changelog

Version 0.30.0

Released October 13, 2023

Summary

This release contains several documentation improvements and some new additions.
The classical shadows documentation has been improved (including a tutorial!) by @Min-Li. The Pauli Twirling method is added to the user guide (thanks @Aaron-Robertson and @purva-thakre). There is a new tutorial applying both zero-noise extrapolation (ZNE) and Clifford Data Regression (CDR) to quantum simulation, for the 1D Ising chain, in Cirq, by @farzadkianvash, a new contributor! The documentation has been further improved and unified by @Misty-W and @natestemen.

In terms of additions, a new type of benchmark quantum circuits, "rotated" randomized benchmarking (RB) quantum circuits have been added by @Misty-W, for more general benchmarks.

All changes

Dependency updates

What's Changed

New Contributors

Full Changelog: v0.29.0...v0.30.0

v0.29.0

09 Sep 00:22
ee85edf
Compare
Choose a tag to compare

Version 0.29.0

Summary

Update Pauli Twirling

Thanks to @purva-thakre for updating Mitiq's PT functions, clarifying that PT is a noise tailoring technique and for consolidating utilities to be shared between PT and other techniques.
This release replaces the execute_with_pt function with pauli_twirl_circuit.

from mitiq.pt.pt import pauli_twirl_circuit

pauli_twirl_circuit(circuit)

Classical Shadows

Top-level functions and tests for classical shadows estimation are now available in Mitiq.
Congrats @Min-Li on completing the main functionality for this technique!
Note that documentation for classical shadows estimation is not yet available but coming soon.

from mitiq.shadows.shadows import shadow_quantum_processing, classical_post_processing

shadow_outcomes = shadow_quantum_processing(circuit, executor, num_total_measurements_shadow)
results = classical_post_processing(shadow_outcomes)

Stim + Mitiq tutorial

Added a tutorial demonstrating a method of combining quantum error mitigation (QEM) and quantum error correction (QEC), reducing the effective logical error rate of the computation.
This tutorial also introduces the use of Mitiq’s ZNE functions with a new backend, the Stim stabilizer simulator.

Calibration, Testing, and Documentation

Streamlined formatting of calibration logs, removed redundant test cases, and fixed documentation issues.
Thanks @natestemen for these improvements and for reviewing many of the PRs in this release!

Also, congrats to our new contributor @bdg221 for closing their first Mitiq PR! 🎉

All changes

Dependency updates

v0.28.0

02 Aug 01:20
703fe7f
Compare
Choose a tag to compare

Summary

Quantum Subspace Expansion

With the main functionaly implemented, quantum subspace expansion is now available in Mitiq! The technique requires a sequence of check operators, a Hamiltonian, and an observable in addition to the typical circuit and executor that Mitiq needs to operate.

from mitiq.qse import execute_with_qse

execute_with_qse(circuit, executor, check_operators, code_hamiltonian, observable)

This feature is still in flux, and would greatly benefit from further testing. Do give a try, and let us know if you have feedback! More details can be found in our API-doc. Congratulations to @bubakazouba for the great work here.

PEC Calibration

Last release we added support to run PEC experiments within the calibration module. This release we made two improvements:

  1. Calibration experiments now represent all two-qubit gates by default (previously this was just $\mathrm{C}X$ and $\mathrm{C}Z$ gates.)
  2. When running calibrator.run(log=True) you will now find results from your PEC pretty-printed alongside any ZNE experiments.

Installation

Our core dependencies (NumPy, Cirq, SciPy) are now less tightly specified which means easier installs for users!

Robust Shadow Estimation

@Min-Li has been hard at work bringing shadows to Mitiq. The shadows module is not quite ready for use, but you can get a sneak peak of what's to come in the Classical Shadows section of our API-doc.

All changes

Dependency updates

  • Update pennylane requirement from ~=0.30.0 to ~=0.31.0 (#1888) [@dependabot]
  • Update cirq requirement from ~=1.1.0 to ~=1.2.0 (#1922) [@dependabot]
  • Update qiskit requirement from ~=0.43.3 to ~=0.44.0 (#1935) [@dependabot]
  • Update amazon-braket-sdk requirement from ~=1.51.0 to ~=1.52.0 (#1933) [@dependabot]
  • Update qiskit-ibm-provider requirement from ~=0.6.1 to ~=0.6.2 (#1932) [@dependabot]
  • Update amazon-braket-sdk requirement from ~=1.50.0 to ~=1.51.0 (#1928) [@dependabot]
  • Update qiskit requirement from ~=0.43.2 to ~=0.43.3 (#1925) [@dependabot]
  • Update amazon-braket-sdk requirement from ~=1.49.1 to ~=1.50.0 (#1926) [@dependabot]
  • Update amazon-braket-sdk requirement from ~=1.49.0 to ~=1.49.1 (#1916) [@dependabot]
  • Update amazon-braket-sdk requirement from ~=1.46.0 to ~=1.49.0 (#1915) [@dependabot]

v0.27.0

06 Jul 12:09
8180b50
Compare
Choose a tag to compare

Changelog

Version 0.27.0

Summary

Highlights from this release include adding new benchmark quantum circuits: Mirror Quantum Volume Circuits (@purva-thakre) and adding PEC as technique supported by calibration (@Misty-W). After approval of the related RFC on quantum subspace expansion technique, the first utils have been added (@bubakazouba). Other improvements include a new tutorial on quantum many body scars (@DHuybrechts); issues solved during unitaryHACK such as improvement to the cost estimation for Calibrator (@YuNariai), Qiskit Upgrade and Deprecation Warnings (@andre-a-alves), and a new function to register user defined Mitiq converters (@Aaron-Robertson).

All changes