Mitiq [mitt β’ tick] 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.
- For code, repo, or theory questions, especially those requiring more detailed responses, submit a Discussion.
- For casual or time sensitive questions, chat with mitiq developers on the
#mitiqchannel on Discord. - Contributions to Mitiq are eligible for compensation! More details here, and all payouts can be found on our wiki!
pip install mitiqDefine a function which takes a circuit as input 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, noise_level=0.005):
"""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 = 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: {abs((true_value - noisy_value) / true_value):.3f}")
print(f"Error w Mitiq: {abs((true_value - zne_value) / true_value):.3f}")Sample output:
Error w/o Mitiq: 0.264
Error w Mitiq: 0.073
Unsure which error mitigation technique or parameters to use? Try out the calibration module demonstrated below to help find the best parameters for your particular backend!
See our guides and examples for more explanation, techniques, and benchmarks.
You can check out currently available quantum error mitigation techniques by calling
mitiq.qem_methods()| 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.ddd |
9803057 1807.08768 |
| Readout-error mitigation | REM | mitiq.rem |
1907.08518 2006.14044 |
| Quantum Subspace Expansion | QSE | mitiq.qse |
1903.05786 |
| Robust Shadow Estimation π§ | RSE | mitiq.shadows |
2011.09636 2002.08953 |
| Layerwise Richardson Extrapolation | LRE | mitiq.lre |
2402.04000 |
| Probabilistic Error Amplification π§ | Coming soon | mitiq.pea |
Nature |
| Virtual Distillation π§ | Coming soon | mitiq.vd |
APS |
π§: Technique is currently a work in progress or is untested and may have some rough edges. If you try any of these techniques and have suggestions, please open an issue!
In addition, we also have Pauli Twirling which is a noise tailoring technique:
| Noise-tailoring Technique | Documentation | Mitiq module | Paper Reference(s) |
|---|---|---|---|
| Pauli Twirling | PT | mitiq.pt |
1512.01098 |
If there is a technique you are looking for not listed here, please file a feature request.
We refer to any python quantum programming SDK you can write quantum circuits in as a frontend, and any quantum computer / simulator you can simulate circuits on as a backend.
| Cirq | Qiskit | pyQuil | Braket | PennyLane | Qibo | OpenQASM 3 |
|---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
You can install Mitiq support for these frontends by specifying them during installation, as optional extras, along with the main package. To install Mitiq with one or more frontends, you can specify each frontend in square brackets as part of the installation command.
For example, to install Mitiq with support for Qiskit and Qibo:
pip install mitiq[qiskit,qibo]Here is an up-to-date list of supported frontends.
Note: Currently, Cirq is a core requirement of Mitiq and is installed when you pip install mitiq.
You can use Mitiq with any backend you have access to that can interface with supported frontends.
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.
We welcome contributions to Mitiq including bug fixes, feature requests, etc. To get started, check out our contribution guidelines and/or documentation guidelines.
Contributions of all kinds are welcome!
Thank you to all of the wonderful people that have made this project possible. Non-code contributors are also much appreciated, and are listed here. Thank you to
- @francespoblete for much of Mitiq's design work/vision






