Welcome to OpenQL’s documentation!

OpenQL is a framework for high-level quantum programming in C++/Python. The framework provides a compiler for compiling and optimizing quantum code. Compared to competing frameworks, such as Qiskit, OpenQL’s focus lies more on retargetability and compiling all the way down to assembly code for the various control (micro)architectures used by QuTech, and less on high-level constructs such as circuit conjugation: in general, the input you provide is a complete circuit and a platform description, and the output is an equivalent circuit that complies to platform constraints and/or machine code for running that circuit on a real quantum computer.

How to read the documentation

The documentation is roughly split into three main parts:

  • the user manual;

  • the user reference; and

  • the developer documentation.

The user manual portion is intended to be read like a book, to give new users an overview of how to use OpenQL and build intuition for what does what. It culminates in a few tutorials that take you from a basic algorithm all the way to simulation of the compiled algorithm. The reference may then be used for more exhaustive information about particular topics of interest to you, such as particular API functions, passes, architectures, and so on. Note that most of the contents of the reference section are also available from within Python using the various dump_*() functions; this document only provides a more pleasingly laid-out version of the same information.

The developer documentation is only intended for (new) contributors. That is to say: unless you’re intending to understand or change OpenQL’s internal C++ implementation, the information here is not relevant to you. Rather, the section provides an overview of the codebase and the conventions used, and includes internal interface documentation as generated by Doxygen. Note however, that the intention is that the code is “self-documenting,” in the sense that the relevant documentation is placed inside the code as long comment blocks, to incentivize keeping the code and documentation synchronized. Ideally this would all be generated into the Doxygen documentation, but not everything has been converted to Doxygen-recognized docstrings yet.


Indices and tables