Releases: munich-quantum-toolkit/qmap
Release 2.0.0
What's Changed
This major release marks the first big addition to QMAP that goes beyond quantum circuit mapping: (Optimal) Clifford Circuit Synthesis. See https://mqtqmap.readthedocs.io/en/latest/Synthesis.html for further details.
✨ New Features
- Optimal Clifford circuit synthesis based on
S. Schneider, L. Burgholzer, and R. Wille. A SAT Encoding for Optimal Clifford Circuit Synthesis. In Asia and South Pacific Design Automation Conference (ASP-DAC), 2023. (arXiv:2208.11713)
- QMAP can now natively handle circuits with more than 128 qubits by dropping some technical restrictions and modernizing the project structure.
♿ Accessibility
- ⚙️ Push-button solution for quantum circuit mapping and Clifford circuit synthesis
- 🐧/🍎/🏁 pre-built Python wheels for Linux, macOS (incl. Apple Silicon), and Windows
- 🐍 Python 3.7 to 3.11 support
- ⚛️ Seamless integration with Qiskit
🎨 Code Quality
- 🗃️ follow the LLVM coding standards for C++
- 🐍 follows best practices for developing Python projects and packages from the popular Scikit-HEP project
- 🧪 extensive unit tests for C++ and Python
- 🪝 pre-commit checks
📝 Project documentation hosted at ReadTheDocs.
- 🚀 Quickstart and User Guide
- 🧑💻 Development Guide
- 👥 Contributing Guide
- 📄 API documentation
Full Changelog: v1.12.1...v2.0.0
Release 1.12.1: Add missing macOS x86 wheels
What's Changed
Due to a misconfiguration, x86 wheels for macOS have not been built and distributed for the latest releases.
With this release, all wheels are available again.
Full Changelog: v1.12.0...v1.12.1
Release 1.12.0: Infrastructure Modernisation and Cleanup
What's Changed
This release updates many underlying aspects of the QMAP infrastructure to the latest best practices within the Munich Quantum Toolkit (MQT). See the respective PRs for more detailed descriptions:
- 📦 Support Versioning in Git Archives by @burgholzer in #172
- 🔧 (Mostly) follow LLVM's C++ format guidelines by @burgholzer in #173
- 📦🔧 Switch to PEP 621
pyproject.tomlconfiguration by @burgholzer in #171 - 🔥 Drop deprecated JKQ shim by @burgholzer in #175
- 🔥 Drop LGTM by @burgholzer in #176
- 🔥 Drop CLI Apps by @burgholzer in #174
- 🔧 Only cancel repeated CI jobs for Pull Requests by @burgholzer in #178
- ♻️ consistently use
#pragma onceby @burgholzer in #179 - ✏️ Consistent file headers by @burgholzer in #180
- 🐍🔧 Improve Python Testing Infrastructure by @burgholzer in #177
- 📝 Add Jupyter Notebook to Docs by @burgholzer in #181
- ♻️ Extract Clifford Synthesis-independent Changes from #78 by @burgholzer in #182
- ✨ Stabilizer Tableaus by @burgholzer in #184
- 🍱 Add MQT Logo and support Dark-Mode on RtD by @burgholzer in #197
- 🚨🐛 Disable opinionated bugbear warning by @burgholzer in #198
- 🔥 Remove Z3 from build dependencies by @burgholzer in #199
Full Changelog: v1.11.2...v1.12.0
Release 1.11.2: Bugfix Release
This release mainly drops the requirement on retworkx and uses the (newly renamed) rustworkx library.
This follows suit with the recent QCEC release and, in combination, allows to use the most recent version of Qiskit in combination with both tools.
What's Changed
- ⬆️🪝 update pre-commit hooks by @pre-commit-ci in #166
- Bump extern/qfr from
78a3608to64aa806by @dependabot in #167 - ⬆️ Replace
retworkxwithrustworkxby @dependabot in #164
Full Changelog: v1.11.1...v1.11.2
Release 1.11.1: Bugfix Release
This release mainly consists of a couple of bugfixes related to Qiskit compatibility (#165) and overall compilation requirements (#159).
What's Changed
- ⬆️🪝 update pre-commit hooks by @pre-commit-ci in #158
- 🐛 Fix Qiskit compatibility by @burgholzer in #165
- Bump extern/LogicBlocks from
58c0daato89d81d2by @dependabot in #162 - Bump pypa/cibuildwheel from 2.11.1 to 2.11.2 by @dependabot in #161
- Fix compile issues by @EliasLF in #159
Full Changelog: v1.11.0...v1.11.1
Release 1.11.0: Subarchitectures, Docs, and Internals
What's Changed
- ✨ Determining Optimal Sub-Architectures by @pehamTom in #106 based on https://arxiv.org/abs/2210.09321
- 🐍 Python Testing by @burgholzer in #110
- 📝 Proper Documentation by @pehamTom, @EliasLF and @burgholzer in #114, #148, #149, #151, #152, #156
- ⬆️ Support for qiskit-terra
0.22.0by @dependabot in #145 - 🐛 temporary workaround for retworkx failure by @burgholzer in #142
- 👷 Streamline Z3 Configuration by @burgholzer in #112
- 🔧 Codecov Config Update by @burgholzer in #137, #150, #154, #155
- 🚨 Further flake8 checks by @burgholzer in #118
- 📦 Leaner source distribution by @burgholzer in #119
New Contributors
- @pre-commit-ci made their first contribution in #115
- @pehamTom made their first contribution in #114
- @EliasLF made their first contribution in #148
Full Changelog: v1.10.1...v1.11.0
Release 1.10.1: Infrastructure Updates
This release mostly updates or introduces internal code quality measures.
It also updates Z3 to the latest version and introduces an option to disable the inclusion of measurements in the returned circuits.
What's Changed
- 📝 Initialize Documentation on ReadTheDocs by @burgholzer in #98
- 🐛 Fix Editable Installations by @burgholzer in #100
- ✨ Add pre-commit configuration by @burgholzer in #101
- 🔧 Proper Versioning in Deploy CI by @burgholzer in #104
- 🔧 Add in-progress cancellation to CI workflows by @burgholzer in #108
- 🔧 Update CodeQL configuration by @burgholzer in #107
- ⬆️ Update Z3 from version
4.8.17to4.11.2by @burgholzer in #109 - ✨ Optionally disable measurements by @burgholzer in #103
Full Changelog: v1.10.0...v1.10.1
Release 1.10.0: LogicBlocks Integration
This release marks the addition of the LogicBlocks submodule in QMAP as a drop-in replacement for Z3 that abstracts away most of the technical aspects related to Z3 (see #79 for more details on this change).
Please report any bugs that you encounter by creating an issue. Make sure to check whether the problem also occurs using previous versions (specifically v1.9.1). This helps in quickly isolating the problem.
Release 1.9.1: Dependency Update and Python 3.11 Wheels
This minor release contains almost only dependency updates. The most notable change is the addition of wheels for Python 3.11 (introduced by #93).
This also marks the last release before the LogicBlocks project (https://github.com/IsFairy/LogicBlocks) is being added to QMAP in #79.
What's Changed
- Update qiskit-terra requirement from ~=0.20.2 to >=0.20.2,<0.22.0 by @dependabot in #81
- Bump extern/qfr from
2c0c3d6to091d869by @dependabot in #82, #83, #86, #88, #91, #94, #95 - Bump pypa/cibuildwheel from 2.7.0 to 2.9.0 by @dependabot in #84, #87, #93
Full Changelog: v1.9.0...v1.9.1
Release 1.9.0: Improved Qiskit Integration
This release brings improved and tighter integration with Qiskit.
First of all, QMAP now natively supports mapping to Qiskit Backends (such as FakeLondon, etc.).
In addition, QMAP now returns a Qiskit QuantumCircuit that explicitly contains layout information (how the original circuit's logical qubits are initially assigned to the device's physical ones) and measurements (indicating the output permutation of logical qubits).
from mqt import qmap
from qiskit import QuantumCircuit
from qiskit.providers.fake_provider import FakeLondon
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)
qc.measure_all()
qc_mapped, results = qmap.compile(qc, arch=FakeLondon())This allows to conveniently verify the correctness of the resulting circuits using our mqt.qcec tool.
from mqt import qcec
result = qcec.verify(qc, qc_mapped)
print(result.equivalence())Finally, QMAP is now also capable of parsing calibration data/properties from Qiskit Backends or from Qiskit BackendProperties/Target objects themselves. While this information is currently not used in the mapping itself, it serves as a preparation for future developments.
When providing such properties, an architecture need not be defined necessarily as it is deduced from the calibration data.
from mqt import qmap
from qiskit import QuantumCircuit
from qiskit.providers.fake_provider import FakeLondon
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)
qc.measure_all()
props = FakeLondon().properties()
qc_mapped, results = qmap.compile(qc, arch=None, calibration=props)What's Changed
- Architecture extensions by @IsFairy in #62
- 🔧 Small Infrastructure Update by @burgholzer in #74
- ✨ Native Support for Qiskit Backends by @burgholzer in #75
- ✨ Portable Layout Information by @burgholzer in #76
- 🐛 Fixed a bug in the Qiskit
Layoutimport (munich-quantum-toolkit/core#133) - 🐛 Fixed a bug in the CNOT cancellation optimization pass (munich-quantum-toolkit/core#134)
- 🐛 Fixed a bug where measurements in the heuristic mapper were not appended correctly (#76)
Full Changelog: v1.8.2...v1.9.0