Initially, we worked in two frameworks: a team using Qiskit and another, Qrisp. Each framework was built to optimize for zero SWAPs but used different compilation techniques.
Having built a minimal pipeline in each framework, we decided to build a very general command-line tool. Our final tool is a full end-to-end pipeline with customizable compilation track (Qiskit vs. Qrisp), noise model, decoder, quantum computer selection (including fully local simulation of Garnet and Emerald), round and shot counts, basis selection, dynamic decoupling, and logical qubit dimension. We also have extra tools for customizable optimization (you can manually exclude bad qubits with “--exclude” and enable an automated optimization loop with “--optimize-qubits”), and some extra tools for data analysis.
We also explored different decoder models beyond our original selection of PyMatching (minimum-weight perfect matching) and expanded our tool to implement maximum-likelihood decoding with a lookup table. New decoders can be easily added to decoding.py and selected with “--decoder [decoder-name]”.
Throughout the project, we learned about the quantum computing hardware-software interface, the importance of surface codes, geometry of the qubits in the surface code, basics of noise in quantum gates, and various decoder strategies for error correction.
Built With
- iqm
- matplotlib
- numpy
- pymatching
- qiskit
- qrisp
- stim
Log in or sign up for Devpost to join the conversation.