Mitiq is an open source toolkit for implementing error mitigation techniques on most current intermediate-scale quantum computers.
Project description
Mitiq is a Python toolkit for implementing error mitigation techniques on quantum computers.
Current quantum computers are noisy due to interactions with the environment, imperfect gate applications, state preparation and measurement errors, etc. Error mitigation seeks to reduce these effects at the software level by compiling quantum programs in clever ways.
Want to know more? Check out our documentation and chat with us on Discord.
Do you use near-term quantum hardware? Have you tried Mitiq? Either way, take our survey and help make Mitiq better! bit.ly/mitiq-survey
Quickstart
Installation
pip install mitiq
Example
Define a function which inputs a circuit and returns an expectation value you want to compute, then use Mitiq to mitigate errors.
import cirq
from mitiq import zne, benchmarks
def execute(circuit: cirq.Circuit, noise_level: float = 0.001) -> float:
"""Returns Tr[ρ |0⟩⟨0|] where ρ is the state prepared by the circuit with depolarizing noise."""
noisy_circuit = circuit.with_noise(cirq.depolarize(p=noise_level))
return cirq.DensityMatrixSimulator().simulate(noisy_circuit).final_density_matrix[0, 0].real
circuit: cirq.Circuit = benchmarks.generate_rb_circuits(n_qubits=1, num_cliffords=50)[0]
true_value = execute(circuit, noise_level=0.0) # Ideal quantum computer.
noisy_value = execute(circuit) # Noisy quantum computer.
zne_value = zne.execute_with_zne(circuit, execute) # Noisy quantum computer + Mitiq.
print(f"Error (w/o Mitiq): %0.4f" %abs((true_value - noisy_value) / true_value))
print(f"Error (with Mitiq): %0.4f" %abs((true_value - zne_value) / true_value))
Sample output:
Error (w/o Mitiq): 0.0688
Error (with Mitiq): 0.0002
See our guides and examples for more explanation, techniques, and benchmarks. The examples and other notebooks can be run interactively on the cloud with mybinder.org.
Quick Tour
Error mitigation techniques
Technique | Documentation | Mitiq module | Paper Reference(s) |
---|---|---|---|
Zero-noise extrapolation | ZNE | mitiq.zne | 1611.09301 1612.02058 1805.04492 |
Probabilistic error cancellation | PEC | mitiq.pec | 1612.02058 1712.09271 1905.10135 |
(Variable-noise) Clifford data regression | CDR | mitiq.cdr | 2005.10189 2011.01157 |
Digital dynamical decoupling | DDD | mitiq.cdd | 9803057 1807.08768 |
Readout-error mitigation | REM | mitiq.rem | 1907.08518 2006.14044 |
See our roadmap for additional candidate techniques to implement. If there is a technique you are looking for, please file a feature request.
Interface
We refer to any programming language you can write quantum circuits in as a frontend, and any quantum computer / simulator you can simulate circuits in as a backend.
Supported frontends
Cirq | Qiskit | pyQuil | Braket | PennyLane |
---|---|---|---|---|
Note: Cirq is a core requirement of Mitiq and is installed when you pip install mitiq
.
Supported backends
You can use Mitiq with any backend you have access to that can interface with supported frontends.
Benchmarks
Mitiq uses asv
to benchmark the core functionalities of the project.
They are found in the benchmarks/
directory and their changes can be seen overtime at https://benchmarks.mitiq.dev/.
Citing Mitiq
If you use Mitiq in your research, please reference the Mitiq whitepaper using the bibtex entry found in CITATION.bib
.
A list of papers citing Mitiq can be found on Google Scholar / Semantic Scholar.
License
Contributing
We welcome contributions to Mitiq including bug fixes, feature requests, etc. To get started, check out our contribution guidelines and/or documentation guidelines. An up-to-date list of contributors can be found here and below.
Contributors ✨
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind are welcome!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.