Releases: cda-tum/mqt-qmap
Release v1.7.0: Bugfixes and Modernization
This release fixes several bugs:
- Circuits containing measurements and barriers could not be mapped due to the non-unitary nature of these gates
- A bug in the heuristic mapper prevented it from correctly tracking the number of additional gates
- Circuits containing only single-qubit gates could not be mapped by the exact mapper
- Execution was not properly halted whenever the exact mapper did not return a valid result (timeout or unsat)
- The search space limitation feature had a serious bug that prevented it from creating proper SAT instances in some cases
- If the exact mapper found a solution that requires no overhead, it still tried out every possible combination of possible subsets.
sx
andsxdg
gates in.qasm
files were not natively supported
In addition, this release modernizes the build and deployment configurations to be up-to-date with our other projects:
- the README is updated with the new TUM information
- the license is updated
- z3 has been updated to version 3.8.16
- versioning is now handled with
setuptools-scm
- ninja is now used per default for building the python package
What Else Has Changed
- Bump actions/checkout from 2 to 3 by @dependabot in #33
- Bump actions/cache from 2 to 3 by @dependabot in #36
- Bump codecov/codecov-action from 2.1.0 to 3.0.0 by @dependabot in #42
- Bump actions/upload-artifact from 2 to 3 by @dependabot in #44
- Bump actions/download-artifact from 2 to 3 by @dependabot in #43
- Bump codecov/codecov-action from 3.0.0 to 3.1.0 by @dependabot in #47
- Bump github/codeql-action from 1 to 2 by @dependabot in #49
Full Changelog: v1.6.0...v1.7.0
Release v1.6.0: MQT QMAP
This release marks the transition from the JKQ
framework to the Munich Quantum Toolkit (MQT).
What's Changed
- Bump extern/qfr from
49f5923
to2ab280b
by @dependabot in #22 - Bump extern/qfr from
2ab280b
to34b5811
by @dependabot in #24 - Bump extern/qfr from
34b5811
todca7f1f
by @dependabot in #25 - Bump extern/qfr from
dca7f1f
to250e721
by @dependabot in #28 - Bump extern/qfr from
250e721
to6bb07d6
by @dependabot in #29 - Bump actions/setup-python from 2 to 3 by @dependabot in #31
- Rebranding to MQT by @burgholzer in #30
Full Changelog: v1.5.1...v1.6.0
Release 1.5.1: Bugfixes and Apple Silicon Support
What's Changed
- Portable wheels for Apple Silicon by @burgholzer in #14
- Bump DoozyX/clang-format-lint-action from 0.12 to 0.13 by @dependabot in #19
- Bump codecov/codecov-action from 1 to 2.1.0 by @dependabot in #18
- Bump extern/qfr from
e7fcb02
to49f5923
by @dependabot in #20 - Compile flag and z3 dependency fixes by @katringoogoo in #21
New Contributors
- @dependabot made their first contribution in #19
- @katringoogoo made their first contribution in #21
Full Changelog: v1.5.0...v1.5.1
Release 1.5.0: Limiting the Search Space
This release adds the functionality to limit the search space during optimal circuit mapping introduced in:
L. Burgholzer, S. Schneider, and R. Wille. Limiting the Search Space in Optimal Quantum Circuit Mapping. In Asia and South Pacific Design Automation Conference (ASP-DAC), 2022.
Furthermore, it brings the following additions and changes:
- ♻️ refactored Python bindings that are now easier to use
- ⚡ actually enables -march=native -mtune=native for source builds via pip
- ⚡ setup.py now runs on as many threads as available
- 🏗️ switch to PEP 517
pyproject.toml
- 💚 switch cibuildwheel configuration to
pyproject.toml
- 🚀 Python 3.10 wheels
- ⬆️ updates for all external submodules
- 📝 updated documentation
Release v1.4.0: Internal Representation Update
This release updates QMAP to use the latest version of the QFR library. Notable changes:
- updated Qiskit
QuantumCircuit
import (cda-tum/mqt-core#7) - bugfixes for several optimization passes (cda-tum/mqt-core#9)
- shortcuts for applying gates (cda-tum/mqt-core#11)
- fixes for iSWAP and Peres OpenQASM export (cda-tum/mqt-core#12)
- improved OpenQASM parser that now supports even more gates natively (cda-tum/mqt-core#14)
Release v1.3.2: Bindings Bugfix
Fixes some issues and bugs in the bindings code and updates CI Pipeline to always test bindings.
Version 1.3.1 Release
Fix an issue with the teleportation.
Version 1.3 Release
This release adds the option to use quantum teleportation to complement swaps in the mapping process.
Version 1.2.1 Release
This minor release mainly fixes three issues
- The initial layout and output permutation were not tracked correctly in the heuristic mapper
- The
initial_layout
andlayering
settings of thecompile
function where not passed correctly to the underlying Python bindings - Wheels were built with
-march=native -mtune=native
. This caused incompatibilities/invalid instructions whenever used under a different architecture. These settings are now only used when building on the host system.
It also includes major under-the-hood changes to the CMake structure of the project.
Version 1.2 Release
This release adds Python bindings to the JKQ QMAP project. Using the tool from Python is now as easy as calling
from jkq import qmap
qmap.compile(circ, arch, ...)
where circ
is either a Qiskit QuantumCircuit
object or the path to an input file (supporting various formats, such as .qasm
, .real
,...)
and arch
is either one of the pre-defined architectures (see below) or the path to a file containing the number of qubits and a line-by-line enumeration of the qubit connections. (Note that circuits are still assumed to be already decomposed into 1- and 2-qubit gates.)
Architectures that are available per default (under qmap.Arch.<...>
) include:
- IBM_QX4 (5 qubit, directed bow tie layout)
- IBM_QX5 (16 qubit, directed ladder layout)
- IBMQ_Yorktown (5 qubit, undirected bow tie layout)
- IBMQ_London (5 qubit, undirected T-shape layout)
- IBMQ_Bogota (5 qubit, undirected linear chain layout)
Whether the heuristic (default) or the exact mapper is used can be controlled by passing method=qmap.Method.heuristic
or method=qmap.Method.exact
to the compile
function.
All available parameters are shown in the README.md.
Note that in order for the bindings to work the SMT Solver Z3 >= 4.8.3 has to be installed on the system and the dynamic linker has to be able to find the library.
- Under Ubuntu 20.04 and newer:
sudo apt-get install z3
- Under macOS:
brew install z3
- Alternatively:
pip install z3-solver
and then append the corresponding path to the library path (LD_LIBRARY_PATH under Linux, DYLD_LIBRARY_PATH under macOS), e.g. via
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(python -c "import z3; print(z3.__path__[0]+'/lib')")
- Download pre-built binaries from https://github.com/Z3Prover/z3/releases and copy the files to the respective system directories
- Build Z3 from source and install it to the system