| Literature DB >> 30571700 |
Mark Fingerhuth1,2, Tomáš Babej1, Peter Wittek3,4,5,6.
Abstract
Open source software is becoming crucial in the design and testing of quantum algorithms. Many of the tools are backed by major commercial vendors with the goal to make it easier to develop quantum software: this mirrors how well-funded open machine learning frameworks enabled the development of complex models and their execution on equally complex hardware. We review a wide range of open source software for quantum computing, covering all stages of the quantum toolchain from quantum hardware interfaces through quantum compilers to implementations of quantum algorithms, as well as all quantum computing paradigms, including quantum annealing, and discrete and continuous-variable gate-model quantum computing. The evaluation of each project covers characteristics such as documentation, licence, the choice of programming language, compliance with norms of software engineering, and the culture of the project. We find that while the diversity of projects is mesmerizing, only a few attract external developers and even many commercially backed frameworks have shortcomings in software engineering. Based on these observations, we highlight the best practices that could foster a more active community around quantum computing software that welcomes newcomers to the field, but also ensures high-quality, well-documented code.Entities:
Mesh:
Year: 2018 PMID: 30571700 PMCID: PMC6301779 DOI: 10.1371/journal.pone.0208561
Source DB: PubMed Journal: PLoS One ISSN: 1932-6203 Impact factor: 3.240
Fig 1Visualization of a typical quantum algorithm workflow on a gate-model quantum computer.
First, the problem is defined at a high-level and based on the nature of the problem a suitable quantum algorithm is chosen. Next, the quantum algorithm is expressed as a quantum circuit which in turn needs to be compiled to a specific quantum gate set. Finally, the quantum circuit is either executed on a quantum processor or simulated with a quantum computer simulator.
Fig 2Visualization of a typical quantum algorithm workflow on a quantum annealer.
First, the problem is defined at a high-level and is then encoded into an Ising-type Hamiltonian which can be visualized as a graph. Next, via minor graph embedding the problem Hamiltonian needs to be embedded into the quantum hardware graph. Finally, either a quantum annealer or a classical solver is used to sample low-energy states corresponding to (near-)optimal solutions to the original problem.
Fig 3Flow diagram with selection criteria.
Decision tree used to select quantum open source software projects for consideration in this study. The acronym PR stands for pull request which is a form of code contribution on software hosting websites.
Overview of all projects considered in this review.
The table shows the tagline (description), the programming language(s) used, the licence and the supported operating systems (OS) for each project.
| Name | Tagline | Programming language | Licence | Supported OS |
|---|---|---|---|---|
|
| Framework for creating, editing, and invoking Noisy Intermediate Scale Quantum (NISQ) circuits. | Python | Apache-2.0 | Windows, Mac, Linux |
|
| Efficient calculation of Clifford circuits in Julia. | Julia | MIT | Windows, Mac, Linux |
|
| Shared API for Ising/quadratic unconstrained binary optimization samplers. | Python | Apache-2.0 | Windows, Linux, Mac |
|
| Basic API for easily incorporating the D-Wave system as a sampler in the D-Wave Ocean software stack. | Python | Apache-2.0 | Linux, Mac |
|
| Open source software for analyzing fermionic quantum simulation algorithms. | Python | Apache-2.0 | Windows, Mac, Linux |
|
| Simple yet powerful toolkit for writing hybrid quantum-classical programs. | Python | Apache-2.0 | Windows, Mac, Linux |
|
| The electronic structure package for quantum computers. | Python | Apache-2.0 | Windows, Mac, Linux |
|
| An open source software framework for quantum computing. | Python, C++ | Apache-2.0 | Windows, Mac, Linux |
|
| Python library for quantum circuit rewriting and optimisation using the ZX-calculus. | Python | GPL-3.0 | Windows, Mac, Linux |
|
| A performance orientated QGL compiler. | Julia | Apache-2.0 | Windows, Mac, Linux |
|
| Decomposing solver that finds a minimum value of a large quadratic unconstrained binary optimization problem by splitting it into pieces. | C | Apache-2.0 | Windows, Linux, Mac |
|
| Quantum Information Science Kit for writing experiments, programs, and applications. | Python, C++ | Apache-2.0 | Windows, Mac, Linux |
|
| A collection of Jupyter notebooks using Qiskit. | Python | Apache-2.0 | Windows, Mac, Linux |
|
| Quantum Information Science Kit for JavaScript. | JavaScript | Apache-2.0 | Windows, Mac, Linux |
|
| Comprehensive, GPU accelerated framework for developing universal virtual quantum processors. | C++ | GPL-3.0 | Linux, Mac |
|
| Python tools for analyzing both classical and quantum Bayesian networks. | Python | BSD-3-Clause | Windows, Mac, Linux |
|
| A modern C++11 quantum computing library. | C++, Python | MIT | Windows, Mac, Linux |
|
| Python tools for reading, writing, compiling, simulating quantum computer circuits. | Python, C++ | BSD-3-Clause | Windows, Mac, Linux |
|
| Drag-and-drop quantum circuit simulator for your browser to explore and understand small quantum circuits. | JavaScript | Apache-2.0 | Windows, Mac, Linux |
|
| A reference implementation for a Quantum Virtual Machine in Python. | Python | Apache-2.0 | Windows, Mac, Linux |
|
| Compilation, analysis and optimization framework for the Scaffold quantum programming language. | C++, Objective C, LLVM | BSD-2-Clause | Linux, Mac |
|
| Full-stack library for designing, simulating, and optimizing continuous variable quantum optical circuits. | Python | Apache-2.0 | Windows, Mac, Linux |
|
| eXtreme-scale Accelerator programming framework. | C++ | Eclipse PL-1.0 | Windows, Mac, Linux |
|
| Variational quantum eigensolver built on XACC for distributed, and shared memory systems. | C++ | BSD-3-Clause | Windows, Mac, Linux |
Feature overview of selected projects.
Overview of the projects and how their features align with the typical quantum algorithms workflow shown in Figs 1 and 2. Note, that the workflow is different in the quantum annealing paradigm as indicated by the reassigned column headings. Postprocessing is an additional feature used in quantum annealing to improve solution quality [18]. Data obtained in August 2018.
| Name | Quantum computing paradigm | Quantum algorithms | Quantum circuits | Quantum compiler | Quantum computer simulator | QPU backend | Full-stack |
|---|---|---|---|---|---|---|---|
|
| Discrete gate model | ✔ | ✔ | ✔ | ✔ | ✘ | ✔ |
|
| Discrete gate model | ✘ | ✔ | ✘ | ✔ | ✘ | ✘ |
|
| Discrete gate model | ✔ | ✘ | ✘ | ✘ | ✘ | ✘ |
|
| Discrete gate model | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
| Discrete gate model | ✔ | ✔ | ✘ | ✘ | ✘ | ✘ |
|
| Discrete gate model | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
| Discrete gate model | ✘ | ✘ | ✔ | ✘ | ✘ | ✘ |
|
| Discrete gate model | ✘ | ✘ | ✔ | ✘ | ✘ | ✘ |
|
| Discrete gate model | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
| Discrete gate model | ✔ | ✘ | ✘ | ✘ | ✘ | ✘ |
|
| Discrete gate model | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
| Discrete gate model | ✘ | ✔ | ✔ | ✔ | ✘ | ✘ |
|
| Discrete gate model | ✔ | ✔ | ✘ | ✘ | ✘ | ✘ |
|
| Discrete gate model | ✘ | ✔ | ✘ | ✔ | ✘ | ✘ |
|
| Discrete gate model | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
| Discrete gate model | ✔ | ✔ | ✘ | ✔ | ✘ | ✘ |
|
| Discrete gate model | ✘ | ✔ | ✘ | ✔ | ✘ | ✘ |
|
| Discrete gate model | ✘ | ✘ | ✔ | ✘ | ✘ | ✘ |
|
| Continuous gate model | ✔ | ✔ | ✔ | ✔ | ✘ | ✔ |
|
| Discrete gate model | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
| Discrete gate model | ✔ | ✘ | ✘ | ✘ | ✘ | ✘ |
| Name | Hardware platform | Hamiltonian generation | Minor embedding | Post- processing | Classical solver | QPU backend | Full-stack |
|
| Quantum annealing | ✘ | ✔ | ✔ | ✔ | ✔ | ✘ |
|
| Quantum annealing | ✘ | ✔ | ✔ | ✔ | ✔ | ✘ |
|
| Quantum annealing | ✘ | ✘ | ✘ | ✔ | ✔ | ✘ |
Fig 4Heatmap of documentation analysis results.
The heatmap shows the evaluation results for source code documentation, README files, changelogs, user documentation and tutorials on a scale from 1 (bad) to 5 (good). The evaluation rubrik used for scoring can be found in S1 Table. Data was obtained in August 2018.
Evaluation results for the community analysis.
For each project, we indicate if a public development roadmap exists and if the software is published in form of releases. Additionally, we report the GitHub community profile score, the total number of contributors, the type of user- and developer-centric discussion channel and the type of public code review process—specifically if it applies to internal (I) and/or external (E) contributors. Data obtained in August 2018.
| Project | Roadmap | Releases | Contributors | User-discussion channels | Developer-discussion channels | Public review processs | Community profile |
|---|---|---|---|---|---|---|---|
| ✘ | ✔ | 28 | Stack Exchange | - | E+I | 4/7 | |
| ✘ | ✔ | 7 | - | - | E | 3/7 | |
| ✘ | ✔ | 11 | Forum | - | E+I | 5/7 | |
| ✘ | ✔ | 6 | Forum | - | E+I | 4/7 | |
| ✘ | ✔ | 10 | - | - | E+I | 3/7 | |
| ✘ | ✔ | 24 | Slack | Slack | E+I | 3/7 | |
| ✘ | ✔ | 46 | Slack | Slack | E+I | 3/7 | |
| ✘ | ✔ | 26 | - | - | E+I | 3/7 | |
| ✘ | ✔ | 10 | - | - | E+I | 3/7 | |
| ✘ | ✘ | 3 | - | - | - | 3/7 | |
| ✘ | ✘ | 3 | - | - | E+I | 3/7 | |
| ✘ | ✔ | 18 | Forum | - | E+I | 5/7 | |
| ✘ | ✔ | 14 | Forum | - | E+I | 7/7 | |
| ✔ | ✔ | 67 | Forum, Slack | Slack | E+I | 7/7 | |
| ✘ | ✘ | 37 | - | - | E+I | 3/7 | |
| ✘ | ✔ | 4 | Forum | - | E | 7/7 | |
| ✘ | ✔ | 2 | - | - | E+I | 3/7 | |
| ✘ | ✘ | 2 | - | - | E | 3/7 | |
| ✘ | ✔ | 3 | Gitter | - | E | 5/7 | |
| ✘ | ✘ | 2 | - | - | E | 3/7 | |
| ✘ | ✔ | 3 | - | - | E | 4/7 | |
| ✘ | ✔ | 8 | - | - | E+I | 3/7 | |
| ✘ | ✔ | 7 | - | - | E | 3/7 | |
| ✘ | ✔ | 5 | Slack | Slack | E+I | 7/7 | |
| ✘ | ✘ | 6 | - | - | E | 4/7 | |
| ✘ | ✘ | 2 | - | - | E | 3/7 |
Evaluation results for the static analysis of each project and its source code.
We report the version control and issue tracking systems as well as the total number, attention rate and average response time for all open and closed issues and pull requests (PRs). Next, we analyze the existence of a test suite and report the resulting code coverage for most projects. Code complexity is only reported for projects written in Python since other languages do not allow for fast retrieval of this metric. Data obtained in August 2018.
| Name | Version control system | Issue tracking system | Issues/PRs | Attention rate | Average response time (days) | Test suite | Code coverage | Complexity |
|---|---|---|---|---|---|---|---|---|
| Git | GitHub | 448/686 | 0.54 | 2.6 | ✔ | 94% | 2.99 | |
| Git | GitHub | 6/12 | 0.33 | <1 | ✔ | - | - | |
| Git | GitHub | 110/201 | 0.30 | 5.3 | ✔ | 94% | 2.96 | |
| Git | GitHub | 54/72 | 0.24 | 8.2 | ✔ | 87% | 3.47 | |
| Git | GitHub | 24/134 | 0.31 | <1 | ✔ | 99% | 2.43 | |
| Git | GitHub | 53/130 | 0.51 | 17.7 | ✔ | 72% | 3.25 | |
| Git | GitHub | 293/385 | 0.41 | 10.6 | ✔ | 88% | 2.65 | |
| Git | GitHub | 137/345 | 0.61 | 1.3 | ✔ | 100% | 2.46 | |
| Git | GitHub | 84/198 | 0.75 | 4.0 | ✔ | 100% | 4.02 | |
| Git | GitHub | 6/2 | 0.80 | <1 | ✔ | 51% | 4.42 | |
| Git | GitHub | 17/13 | 0.75 | 130.6 | ✔ | - | - | |
| Git | GitHub | 50/85 | 0.17 | 22.2 | ✔ | 95% | - | |
| Git | GitHub | 43/141 | 0.20 | 1.8 | ✔ | 67% | 3.04 | |
| Git | GitHub | 526/713 | 0.11 | 16.0 | ✔ | 76% | 2.56 | |
| Git | GitHub | 94/274 | 0.40 | 8.6 | ✘ | - | - | |
| Git | GitHub | 19/8 | 0.33 | 4.4 | ✔ | 66% | - | |
| Git | GitHub | 7/78 | 0.07 | 8.7 | ✔ | 87% | - | |
| Git | GitHub | 17/1 | 1.00 | <1 | ✘ | 0% | 3.32 | |
| Git | GitHub | 8/45 | 0.88 | <1 | ✔ | 72% | - | |
| Git | GitHub | 14/3 | 0.75 | <1 | ✘ | 0% | - | |
| Git | GitHub | 286/131 | 0.96 | <1 | ✔ | - | - | |
| Git | GitHub | 6/14 | 0.44 | 75.6 | ✔ | 80% | 3.99 | |
| Git | GitHub | 15/11 | 0.18 | 10.1 | ✔ | - | - | |
| Git | GitHub | 16/20 | 0.73 | 1.2 | ✔ | 97% | 2.70 | |
| Git | GitHub | 65/14 | 0.65 | <1 | ✔ | - | - | |
| Git | GitHub | 22/4 | 0.33 | 8.8 | ✔ | - | - |