Skip to content
This repository has been archived by the owner on Jun 20, 2022. It is now read-only.

QE-Lab/dqcsim

Repository files navigation

DQCsim

PyPi Crates.io Rust workflow Python workflow C++ workflow Documentation workflow Codecov.io

DQCsim, short for Delft Quantum & Classical simulator, is a framework that can be used to tie components of quantum computer simulators together in a standardized yet flexible, developer-friendly, and reproducible way. Click here for more information!

Install

The recommended method to install DQCsim is through Python's package manager:

sudo pip3 install dqcsim

This installs DQCsim's core files and plugins. More information is available in the Installation section of the documentation.

Getting started

Users

New users are encouraged to check out the documentation.

Plugin developers

Plugin developers can check out the examples, existing plugins and refer to the API documentation:

Plugins

Frontend

Plugin Description Download License Platforms Language
openqasm OpenQASM 2.0 frontend Crates.io Apache-2.0 Linux, macOS Rust
cqasm cQASM 1.0 frontend PyPi Apache-2.0 Linux, macOS C++
null No-op frontend PyPi Apache-2.0 Linux, macOS Rust

Operator

Plugin Description Download License Platforms Language
openql-mapper OpenQL mapper operator PyPi Apache-2.0 Linux C++
null No-op operator PyPi Apache-2.0 Linux, macOS Rust

Backend

Plugin Description Download License Platforms Language
quantumsim Quantumsim backend PyPi GPL-3.0 Linux, macOS Python
qx QX backend PyPi Apache-2.0 Linux, macOS C++
null No-op backend PyPi Apache-2.0 Linux, macOS Rust
iqs Intel QS backend GitHub Apache-2.0 Linux, macOS C++

Please open a PR to have your plugin added to this list.

Build and test from source

Setup

The core of DQCsim is written in Rust. The crate defines a set of C-bindings to support plugin development in other languages. DQCsim is distributed as a batteries included Python package that includes the shared library and headers for C and C++ plugin development.

Requirements

Python support:

C/C++ tests:

Documentation:

Python

To build the dqcsim Python package:

python3 setup.py bdist_wheel

This builds a release wheel to target/python/dist/. For debug builds set the DQCSIM_DEBUG environment variable.

C/C++

To build the C and C++ headers build the dqcsim Rust crate with the bindings feature enabled:

cargo build --manifest-path=rust/Cargo.toml --features=bindings

The generated headers are stored in target/include.

Rust

The dqcsim crate can be built with the following (non-default) features:

  • cli: the command-line interface binary
  • null-plugins: the null (no-op) plugin binaries
  • bindings: genertion of headers required for C, C++ and Python plugin development

To build all targets and features:

cargo build --all-targets --all-features

Add --release for release builds.

Documentation

To build the documentation use the Makefile in the doc directory directly from the root of the repository:

make -C doc

Documentation output is stored in target/book.

Test

Rust

To test all targets and features:

cargo test --all-targets --all-features

C/C++

To test the C-bindings and C++ wrapper:

mkdir build
cd build
cmake .. -DBUILD_TESTS=ON
make
CTEST_OUTPUT_ON_FAILURE=1 make test

Add -DCMAKE_BUILD_TYPE=DEBUG to CMake for debug builds.

Python

To test the Python package:

python3 setup.py build test