MQT YAQS (pronounced "yaks") is a Python library for simulating quantum systems and studying their interaction with the environment. It supports analog evolution, noisy quantum circuits, circuit equivalence checking, and characterization of environmental memory and noise models. It is part of the Munich Quantum Toolkit (MQT).
YAQS primarily uses tensor networks and quantum trajectories, with statevector and density matrix backends available for smaller simulations. Tensor network simulation cost depends strongly on entanglement and accuracy settings, which can make systems far larger than those accessible to statevector or density matrix methods practical to simulate. We encourage you to explore larger system sizes with our package, as we have put thought and effort into making these methods scalable.
YAQS selects simulation methods from your inputs and provides presets that balance speed and numerical accuracy. You can get started without tuning every numerical setting, while still having control over individual settings when needed.
Analog, digital, and analog–digital simulations support both noiseless and noisy dynamics.
| Capability | What users can do |
|---|---|
| Analog simulation | Simulate large quantum systems using tensor networks and Monte Carlo methods. |
| Digital simulation | Simulate quantum circuits using tensor networks and sample measurement outcomes. |
| Analog–digital simulation | Combine analog evolution and quantum circuits in one simulation. |
| Equivalence checking | Check whether two quantum circuits behave the same, measure differences, and study the effects of noise on compilation. |
| Environmental memory | Study a system's environment and understand memory effects from past interactions. |
| Surrogate models | Train models to predict dynamics that depend on past interactions (non-Markovian dynamics; requires PyTorch). |
| Noise characterization | Learn a system's noise model from its observed dynamics. |
| Hardware modeling | Use device Hamiltonians together with realistic noise models. |
If you have any questions, feel free to create a discussion or an issue on GitHub.
MQT YAQS requires Python 3.11 or newer and runs on Linux, macOS, and
Windows. Install it from PyPI in a virtual
environment using uv:
uv pip install mqt.yaqsOr use pip:
python -m pip install mqt.yaqsSee the installation guide for environment setup and development installation.
Optional extras support
OpenQASM 3 input
(qasm3) and
surrogate training and prediction
(torch). The linked guides include installation steps.
Evolve a 50-site Ising chain with local damping and print the final mean ⟨Z₀⟩.
from mqt.yaqs import AnalogSimParams, Hamiltonian, NoiseModel, Observable, Simulator, State
if __name__ == "__main__":
length = 50
state = State(length, initial="zeros")
hamiltonian = Hamiltonian.ising(length, J=1.0, g=0.5)
noise = NoiseModel([{"name": "lowering", "sites": [site], "strength": 0.05} for site in range(length)])
params = AnalogSimParams(
observables=[Observable("z", sites=0)],
elapsed_time=1.0,
dt=0.1,
)
simulator = Simulator()
result = simulator.run(state, hamiltonian, params, noise)
print(f"Final mean <Z_0>: {result.expectation_values[0][-1]:.3f}")For more information, read the analog simulation guide.
Prepare a 50-qubit GHZ circuit with local damping and print sampled bitstring counts.
from qiskit.circuit import QuantumCircuit
from mqt.yaqs import DigitalSimParams, NoiseModel, Simulator, State
if __name__ == "__main__":
length = 50
state = State(length, initial="zeros")
circuit = QuantumCircuit(length)
circuit.h(0)
for site in range(1, length):
circuit.cx(site - 1, site)
circuit.measure_all()
noise = NoiseModel([{"name": "lowering", "sites": [site], "strength": 0.05} for site in range(length)])
params = DigitalSimParams(shots=1024)
simulator = Simulator()
result = simulator.run(state, circuit, params, noise)
print({format(outcome, f"0{length}b"): count for outcome, count in result.counts.items()})For more information, read the shot-readout guide.
Probe environmental memory in a 50-site chain and print the memory diagnostics.
from mqt.yaqs import AnalogSimParams, Hamiltonian, MemoryCharacterizer
if __name__ == "__main__":
hamiltonian = Hamiltonian.ising(length=50, J=1.0, g=1.0)
params = AnalogSimParams(dt=0.1)
characterizer = MemoryCharacterizer()
result = characterizer.characterize(
hamiltonian,
params,
num_interventions=6,
preset="quick",
)
print(result.summary())For more information, read the memory characterization guide.
Trajectory count, time-step size, and MPS truncation affect numerical accuracy; see the simulation parameter guide.
The examples use default parallel execution. See the execution guide for worker controls.
Documentation: Quickstart · API reference · Full documentation
The Munich Quantum Toolkit (MQT) is developed by the Chair for Design Automation at the Technical University of Munich and supported by MQSC. Among others, it is part of the Munich Quantum Software Stack (MQSS) ecosystem, which is being developed as part of the Munich Quantum Valley (MQV) initiative.
Thank you to all the contributors who have helped make MQT YAQS a reality!
The MQT will remain free, open-source, and permissively licensed—now and in the future. We are firmly committed to keeping it open and actively maintained for the quantum computing community.
To support this endeavor, please consider:
- Starring and sharing our repositories: https://github.com/munich-quantum-toolkit
- Contributing code, documentation, tests, or examples via issues and pull requests
- Citing the MQT in your publications (see Cite This)
- Citing our research in your publications (see References)
- Using the MQT in research and teaching, and sharing feedback and use cases
- Sponsoring us on GitHub: https://github.com/sponsors/munich-quantum-toolkit
If you use YAQS in academic work, please cite both the YAQS software and the MQT Handbook. Also cite the papers for the methods you use.
We expect to replace this software citation with a dedicated YAQS publication. Please use the citation below for now.
@misc{YAQS,
author = {Aaron Sander},
title = {{YAQS}: Yet Another Quantum Simulator},
year = {2025},
howpublished = {\url{https://github.com/munich-quantum-toolkit/yaqs}}
}[8] R. Wille et al. The MQT Handbook: A Summary of Design Automation Tools and Software for Quantum Computing. IEEE International Conference on Quantum Software (QSW) (2024).
When citing the underlying methods and research, please reference the most relevant publications from the list below:
[1] A. Sander, M. Fröhlich, M. Eigel, J. Eisert, P. Gelß, M. Hintermüller, R. M. Milbradt, R. Wille, C. B. Mendl. Large-scale stochastic simulation of open quantum systems. Nature Communications 16, 11074 (2025).
[2] A. Sander, L. Burgholzer, and R. Wille. Equivalence checking of quantum circuits via intermediary matrix product operator. Phys. Rev. Research 7, 023261 (2025).
[3] A. Sander, M. Fröhlich, M. Ali, M. Eigel, J. Eisert, M. Hintermüller, C. B. Mendl, R. M. Milbradt, R. Wille. Quantum circuit simulation with a local time-dependent variational principle. arXiv:2508.10096 (2025).
[4] A. Sander, S. Cichy, M. Eigel, J. Eisert, M. Fröhlich, T. Peham, R. Wille. Computational regimes in matrix-product-state-based quantum trajectory simulations. arXiv:2606.13779 (2026).
[5] M. Fröhlich, A. Sander, M. Eigel, R. Wille, M. Hintermüller. Noisy quantum circuit simulation with the tensor jump method. arXiv:2607.01323 (2026).
[6] A. R. Ramos Ramos, M. Fröhlich, A. Sander, R. Wille, M. Eigel, P. Gelß, S. Pokutta. Scalable Lindblad Noise Learning via Stochastic Tensor-Network Simulation. arXiv:2608.24668 (2026).
[7] M. Fröhlich, R. M. Milbradt, M. Eigel, A. Sander, R. Wille, C. B. Mendl. Basis-update and Galerkin time integration in canonical matrix-product-state form. arXiv:2608.16994 (2026).
The Munich Quantum Toolkit has been supported by the European Research Council (ERC) under the European Union's Horizon 2020 research and innovation program (grant agreement No. 101001318), the Bavarian State Ministry for Science and Arts through the Distinguished Professorship Program, as well as the Munich Quantum Valley, which is supported by the Bavarian state government with funds from the Hightech Agenda Bayern Plus.