QuTech-Delft / OpenQL

OpenQL: A Portable Quantum Programming Framework for Quantum Accelerators. https://dl.acm.org/doi/10.1145/3474222
https://openql.readthedocs.io
Other
97 stars 44 forks source link

OpenQL Framework

Documentation Status Travis Build Status GitHub Actions Build Status PyPI Anaconda

OpenQL is a framework for high-level quantum programming in C++/Python. The framework provides a compiler for compiling and optimizing quantum code. The compiler produces the intermediate quantum assembly language and the compiled micro-code for various target platforms. While the microcode is platform-specific, the quantum assembly code (in cQASM format) is hardware-agnostic and can be simulated on the QX simulator.

OpenQL's source code is released under the Apache 2.0 license.

For detailed user and contributor documentation, please visit the ReadTheDocs page.

Dependencies

The following utilities are required to compile OpenQL from sources:

Python build specific dependencies

ARM specific dependencies

We are having problems when using the m4 and zulu-opendjk Conan packages on an ARMv8 architecture. m4 is required by Flex/Bison and zulu-openjdk provides the Java JRE required by the ANTLR generator. So, for the time being, we are installing Flex/Bison and Java manually for this platform.

Build

This version of OpenQL can only be compiled via the conan package manager. You'll need to create a default profile before using it for the first time.

The installation of OpenQL dependencies, as well as the compilation, can be done in one go.

git clone https://github.com/QuTech-Delft/OpenQL.git
cd OpenQL
conan profile detect
conan build . -pr=conan/profiles/tests-debug -b missing

Notice:

Build profiles

A group of predefined profiles is provided under the conan/profiles folder. They follow the [tests-](debug|release)[-unitary] naming convention. For example:

All the profiles set the C++ standard to 23.

Build options

Profiles are a shorthand for command line options. The command above could be written as well as:

conan build . -s:h compiler.cppstd=23 -s:h openql/*:build_type=Debug -o openql/*:build_tests=True -o openql/*:disable_unitary=True -b missing

These are the list of options that could be specified whether in a profile or in the command line:

Install

From Python

Install from the project root directory as follows:

python3 -m pip install -v .

You can test if it works by running:

python3 -m pytest -v

From C++

The CMakeLists.txt file in the root directory includes install targets:

conan create --version 0.11.2 . tests-debug -b missing

You can test if it works by doing:

cd test/Debug
ctest -C Debug --output-on-failure

Use from another project

From Python

After installation, you should be able to use the bindings for the original API by just import openql as ql. The new API doesn't have Python bindings yet.

From C++

The easiest way to use OpenQL in a CMake project is to fetch the library and then link against it.

include(FetchContent)
FetchContent_Declare(OpenQL
    GIT_REPOSITORY https://github.com/QuTech-Delft/OpenQL.git
    GIT_TAG "<a given cqasm git tag>"
)
FetchContent_MakeAvailable(OpenQL)
target_include_directories(<your target> SYSTEM PRIVATE "${OpenQL_SOURCE_DIR}/include")
target_link_libraries(<your target> PUBLIC ql)

Note that the following dependencies are required for OpenQL to build: