All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
- Integrate with libqasm 0.6.6 release.
- Allow multiple qubit/bit (register) definitions and mid-circuit measurements.
- Update
conanfile.py
to requestlibqasm/0.6.6
and usetools.build.skip_test
. - Update GitHub workflows with some improvements taken from
libqasm
.
- Integrate with libqasm 0.6.3 release.
- Rename
tests
folder totest
. - Update GitHub workflows.
- cQasm 1.x support.
circuits
folder.
- Python 3.12 support.
- Uses Conan.
- New GitHub workflows.
- Working ARM runners in the CI.
- Meaningful error message when parsing or simulation fails.
- Does not crash when too many qubits asked.
- Address sanitizer CMake mode.
- C++23.
- Manage dependencies via CMake FetchContent.
- gtest instead of doctest.
- Various fixes to GitHub actions.
- Fixed bug in bitset due to bool automatic casting to 32 bits.
- Documentation formatting fixes.
- Doc chapter about internals.
- Submodules and
deps
folder.
depolarizing_channel
error model and docs.- Ability to pass constant seed for deterministic simulation.
RandomTest
doing Kolmogorov-Smirnov statistical test to match random numbers with their ideal probability distribution.
- Fixed docs.
- Source files use .hpp/.cpp extensions.
- Random number distributions (integer min/max and real 0-1) are done in-house for portability and consistency of results.
- Linux arm64 Python wheel and Linux arm64 test workflow (GCC-Release).
classical not
gate is back.state
section in JSON now contains a new entrynorm
which is the square of the modulus of the complex number.- C++ integration test.
- All gates can be controlled (including
prep
,measure
). This is not new but was accidentally removed in 0.6.0. - New Python API
execute_string
andexecute_file
without having to createqxelarator.QX()
and returning user-friendly Python type.
- Fixed README.
results
section in JSON contains integers instead of floats (those integers being the number of occurrences).- In relation to previous point,
results
only relates to measurement register averaging, and no longer to quantum state when doing a single shot. For that, use the "state" section in the JSON. - Output float precision is 8 decimals instead of 6.
- Most Python tests. Already covered in C++ integration test, and they didn't check much anyway.
Almost a complete rewrite. No functional change except it's faster.
- Ability to easily implement any quantum gate by simply giving an arbitrary unitary matrix in
Gates.h
. - Performance speedup using a single thread.
- Some proper linear algebra primitives using template metaprogramming.
abseil-cpp
dependency forflat_hash_map
.- Ability to compile the simulator with a maximum number of qubits. In the future this will be using templates as well to switch data structures based on the input quantum circuit.
- Quantum state is stored as a sparse array implemented using a
flat_hash_map
fromabseil-cpp
. - C++20 in place of C++14.
- Code style: camel case.
- OpenMP and multithreading.
- SSE, AVX and other intrinsics.
get_measurement_outcome
andget_state
methods. Now accessible via JSON output.
set_string
method to parse a cQASM string directly instead of a cQASM file.
- Fixed issue #118: quantum state is always displayed, as well as measurement register averaging.
- Tests for
measure
gate.
- Fixed issues #91 and #114.
- As part of #114, switch to sequential/simple
measure
gate.
- QFT implementation (never instantiated, so no functional change).
- qx-server no longer exists, together with the network libraries.
- "Microcode" generation functions (never used either).
- Parallel gates in
gate.h
(they were executed sequentially). - Some non-needed and/or obsolete code.
- Python 3.11 support.
- Fixed version number incorrectly set in previous release.
- ReadTheDocs documentation.
- Fixed Python versions on Linux.
- Updated README with new API functions.
- Tidy tests and circuits folder.
- Python 3.6 support.
-j <filename>
CLI option to output JSON to a file.- Possible to use the simulator without OpenMP.
measure_all
gate added. Does no longer measure each qubit separately.- Move to C++11: smart pointers, etc.
- Format of output has been changed.
You no longer need to add a
display
gate to output the quantum state at the end of the circuit. - Now uses the new libqasm API instead of the old one.
- Output complex amplitudes when not averaging measurement register.
- Do not add automatically a measure_all when doing measurement averaging. Average the measurement register only.
- Most preprocessor macros. E.g., for gate creation.
- A lot of old and useless code was removed. A lot of dead code removed.
- Close input file when done.
- Code style has been completely fixed automatically with clang-format.
- Headers no longer include
.cc
file. - Moved implementations to
.cc
files instead of headers.
- Wheels no longer require exotic CPU extensions to work.
- Continuous integration for as far as automated tests exist.
- Automated release build and distribution logic for PyPI.
- Installation logic in build system.
- qxelarator wheels include qx-simulator binary (and friends).
- Build on MacOS.
- Build on Windows using MSVC.
- Python build process on various platforms.
- Replaced XPU-based threading with OpenMP.
- Various bugs and inefficiencies related to multithreading.
- qxelerator to support cqasm v1.0.
- setup instructions in README.md.
- Fixed issue with libqasm submodule, this release is now with the correct version.
- Removed
-u 0
in Jenkins file again.
- Single qubit operations now accept integers as arguments, previously it required floats.
- Updated the libqasm to get the hotfix.
- Fixed pthread mutex locking bug in XPU worker.
- Fixed bug in measurement and preparation implementation for large number of qubits.
- Fixed verbose GNU Compiler warnings under Linux.
- Enabled quantum noise simulation using the Depolarizing Error Model.
- Added multi-shot simulation mode to save simulation time on the Quantum Inspire web platform.
- Enabled Identity gate support.
- Initial cQASM 1.0 support.
- Integrated with libqasm 0.1.1 release.
- Added support for new quantum gates:
- Flexible controlled phase shift (
CR
andCRK
) - Measurement and Preparation in X/Y/Z basis: added
measure_x
,measure_y
,prep_x
andprep_y
.
- Flexible controlled phase shift (
- Added support for Single Gate Multiple Qubits (SGMQ).
- Added a new set of unit tests.
- Re-implemented classical NOT gate for full binary-controlled gate support.
- Fixed overflow bug when simulating more than 31 qubits.
- Fixed bug in qubit register measurement ("measure_all" instruction).