Open-Source Quantum Software Projects
There is a curated list of open-source quantum software projects available on GitHub maintained by the Quantum Open Source Foundation. It is organized by type of software and the language the tool was written in and provides links to the location of the tool. The list contains many of the tools listed below, but has even more including experimental, fun, and abandoned projects.
There is also an overview article that provides a comparison of characteristics such as documentation, discussion channels, issue tracking, version control, licenses, automated test suites, etc. in various open source quantum computing software tools that you can find on the PLOS web site here.
Microsoft Quantum Development Kit
Microsoft has released a preview version of their Quantum Development Kit that appears to supercede their earlier LIQUi|> software. This kit features a newly named quantum programming language called Q#, integration with their Visual Studio development environment, simulators that run on either a local system or their powerful Azure cloud platform, and rich libraries and code samples that can be used as building blocks. You can down this software here.
IBM Quantum Experience
IBM has put an experimental 5 qubit gate-level quantum processor on the web and is allowing members of the public to apply to get access to it. At the IBM Quantum Experience website there are four modules; a short tutorial that explains the basics of quantum computation and instructions on how to use it, a quantum composer that allows one to configure quantum gates for the qubits, a simulator which allows one to simulate their configuration before running it on the actual machine, and finally access to the machine itself which allows one to run their configuration and view the results. You can access the IBM Quantum Experience website here and you can also see my “First Looks” review of it here. IBM has also released an associated software API called QISKIT that can be used with the IBM Quantum Experience and you can access it on GitHub here.
Rigetti Forest and Cloud Computing Services (QCS)
The Rigetti Forest suite consists of a quantum instruction language called Quil, an open source Python library for construction Quil programs called pyQuil, a library of quantum programs called Grove, and a simulation environment called QVM standing for Quantum Virtual Machine. pyQuil and Grove are open source programs available on GitHub. You can access the Forest home page which contains documentation, GitHub links and other information. QCS provides a virtual classical computing environment that is co-located with the Rigetti quantum hardware. It comes pre-configured with Rigetti’s Forest SDK and provides a single access point to their QVM and QPU backends.
CAS-Alibaba Quantum Computing Laboratory – Superconducting Quantum Computer
The CAS-Alibaba Quantum Company Laboratory is providing access to an 11-qubit superconducting quantum computing that is hosted on the Alibaba cloud. The hardware system is available through an online interface where users can write quantum circuits, remotely execute them, and download the results over the cloud. The website supports running a circuit on both the 11 bit quantum computer as well as a simulator. We have not found a manual for this system yet, but it uses a graphical interface which is mostly self-explanatory. You can view a video demo showing usage of the system here and access the sign-up page to get on the system here.
ProjectQ is an open-source software framework for quantum computing implemented in Python. It allows users to implement their quantum programs in Python using a powerful and intuitive syntax. ProjectQ can then translate these programs to any type of back-end, be it a simulator run on a classical computer or an actual quantum chip including the IBM Quantum Experience platform. Other hardware platforms will be supported in the future. Links to all the code and documentation as well as well as a library called FermiLib to analyze fermionic quantum simulation problems can be found at the ProjectQ web site here.
Cirq is an open source Python library for writing, manipulating, and optimizing Noisy Intermediate Scale Quantum (NISQ) circuits and running them against quantum computers and simulators. It is currently in an alpha release state and can also be used with OpenFermion-Cirq, a platform for developing quantum algorithms for chemistry problems. Several other software companies are also working with Cirq as early adopters. Cirq is being promoted by members of the Google AI Quantum Team, but it is not an official Google product.
CirqProject Q is a port between ProjectQ and Cirq that provides two main functions. First, it is a ProjectQ backend that converts a ProjectQ algorithm to a cirq.Circuit. And second, it can decompose ProjectQ common gates to native Xmon gates that can be used to simulate a Google quantum computer with ProjectQ.
PennyLane and Strawberry Fields from Xanadu
Xanadu provides two different software products for programming quantum computers. The first is called PennyLane and is a cross-platform Python library for quantum machine learning, automatic differentiation, and optimization of hybrid quantum-classical computations. PennyLane is interesting because it not only supports Xanadu’s continuous various photonic technology, but it also has plug-ins to support gate based platforms including ProjectQ and IBM’s Qiskit. The second product is called Strawberry Fields and is a full-stack Python library for designing, simulating, and optimizing continuous variable (CV) quantum optical circuits such as the quantum hardware that Xanadu is developing.
Open Controls from Q-CTRL
Q-CTRL Open Controls is an open-source Python package that makes it easy to create and deploy established error-robust quantum control protocols from the open literature. The aim of the package is to be the most comprehensive library of published and tested quantum control techniques developed by the community, with easy to use export functions allowing users to deploy these controls on custom quantum hardware, publicly available quantum cloud computers or the Q-CTRL product suite.
QCircuits is a quantum circuit simulation Python library designed to be easy for students to learn to use. It simulates the operation of small-scale quantum computers, based on the quantum circuit model. It uses type (d, 0) and type (d, d) tensors to represent state vectors for and operators on d-qubit systems, rather than using straight vectors and matrices produced by Kronecker products, as is more typical. The GitHub library is available here and full documentation is available here.
Yao is an extensible, efficient open-source framework for quantum algorithm design. Yao features generic and differentiable programming of quantum circuits. It achieves state-of-the-art performance in simulating small to intermediate sized quantum circuits that are relevant to near-term applications. It is written in the Julia language and provides very competitive performance when compared to other software platforms, at least for simulations in the 5-25 qubit range. For more information on Yao, you can view the website here, the GitHub repository here, the benchmarking comparison report here, and an arXiv paper that provides a full summary here.
Qulacs is a python/C++ library developed at Kyoto University and maintained by QunaSys for fast simulation of large, noisy, or parametric quantum circuits. They provide a graph on the GitHub site that shows Qulacs has better performance than Cirq, ProjectQ, pyQuil, Q#, Qiskit Terra, and QuPy due to the C/C++ backend. (At least, at the time these were tested in October 2018). Additional documentation is available on the qulacs.org site.
Bayesforge is a Linux machine image that curates the very best open source software for the data scientist who needs advanced analytical tools, as well as for quantum computing and computational mathematics practitioners who seek to work with one of the major QC frameworks. The image combines common machine learning frameworks, such as TensorFlow, PyTorch and PyMC, with open source QC software from D-Wave, Rigetti, the IBM Quantum Experience, Google’s quantum computing language Cirq, as well as other advanced QC frameworks. Bayesforge also allows one to create Jupyter Notebooks in Python, R and Octave and is available as a docker image on the Amazon cloud and also available on the Tencent cloud.
Blueqat is a Python based software framework for universal quantum computing designed for both professionals and beginners. It is also designed to connect the Blueqat backend to the Nvidia CUDA based universal model simulator. Blueqat includes popular simulation algorithms like VQE and QAOE that are easy to use with just for a simple command. It also contains a function to convert quantum annealing QUBO/Ising model problems to Pauli operator simulations that can be run on universal gate model platforms.
Quantum Programming Studio
The Quantum Programming Studio is a web based graphical user interface designed to allow users to construct quantum algorithms and obtain results by simulating directly in browser or by executing on real quantum computers. Circuit can be exported to multiple quantum programming languages and can be executed on various simulators and quantum computers including the Rigetti QCS and IBM Qiskit platforms.
Atos/SFTC Hartree Centre – Quantum Learning as a Service (QLaaS)
Atos is teaming up with the UK’s Science & Technology Facilities Council (SFTC) Hartree Centre to offer cloud access to the Atos Quantum Learning Machine. This is a high performance classically based simulator that can simulate up to 38 qubits and can include quantum noise models to understand how a program would run on an actual quantum machine. Their tools provide easy quantum programming through python HL Atos Quantum Assembler (AQASM), and quantum libraries such as Jupyter notebooks. Additional details can be found on an Atos web page here and their QLaaS brochure here.
Quantum User Interface (QUI)
The University of Melbourne has developed an intuitive programming and simulation environment called QUI which is designed to enable users to visualize and understand the inner workings of a quantum computer. It has a very easy-to-use interface that allows a user to drag-and-drop quantum gates for creating a circuit. One of the key features of the program is its ability to display visualizations of the quantum computer’s state at every stage in the program. The program appears to support up to five qubits, has very good graphics and allows a user to see results using Bloch spheres, tables, and probability graphs. QUI is hosted on a remote cluster of servers at the university and is openly available to anyone who registers to be a user.
Quirk is a drag-and-drop simulator that runs in your web browser. It continuously re-simulates as you edit the circuit, providing immediate feedback. It is very good at small-scale iterative experimentation and provides excellent, intuitive graphics for a maximum of 16 qubits.
Qibo is an open-source high-level API provided by Qilimanjaro, written in Python and capable of running a quantum algorithms on top of different quantum computers and simulators. It currently supports the IBM real and virtual machines, the Rigetti virtual machine, and Qilimanjaro’s virtual machine called VQMlite. A key goal is to provide a standard interface that can be applied to many different backends and we expect other backends to be supported in the future. Qibo is currently in an Alpha release and you can apply to get access to it here. For more details, you can view Qilimanjaro’s blog posting here.
XACC (eXtreme-scale ACCelerator) is a programming model and software framework that enables quantum acceleration within standard or HPC software workflows. XACC follows a coprocessor machine model that is independent of the underlying quantum computing hardware, thereby enabling quantum programs to be defined and executed on a variety of QPUs types through a unified application programming interface. XACC currently supports the IBM, Rigetti, and D-Wave quantum processors, as well as a number of quantum computer simulators. You can download XACC from GitHub here, read the documentation here and view a paper posted on arXiv here.
Quantum++ is a modern general-purpose multi-threaded quantum computing library written in C++11 and composed solely of header files. The library is not restricted to qubit systems or specific quantum information processing tasks, being capable of simulating arbitrary quantum processes. The main design factors taken in consideration were the ease of use, portability, and performance. The library’s simulation capabilities are only restricted by the amount of available physical memory. On a typical machine (Intel i5 8Gb RAM) Quantum++ can successfully simulate the evolution of 25 qubits in a pure state or of 12 qubits in a mixed state reasonably fast.
Quantum Inspire (QI) is a quantum computing platform designed and built by QuTech. The goal of Quantum Inspire is to provide users access to various technologies to perform quantum computations and learn insights into the principles of quantum computing. It has a variety of ways for users to program quantum algorithms, execute these algorithms and examine the results including a graphical interface to program in QASM (Quantum Assembly Language) and visualize operations in circuit diagrams. With the QI Editor non-quantum experts can learn writing quantum algorithms with support of automatic bug identification and auto complete. Quantum Inspire supports simulations of up to 37 qubits on Cartesius, the Dutch national supercomputer, and has recently implemented an integration with IBM’s Qiskit that enables one to run QI developed programs on IBM’s Qiskit simulators as well as IBM’s quantum hardware.
QUCAT stands for QUantum Circuit Analyzer Tool. This open source Python library provides standard analysis tools for superconducting electronic circuits, built around at least one Josephson junction. A user will first build a circuit programmatically or using the graphical user interface. Working in the basis of normal modes, one can then compute normal mode frequencies, dissipation rates, anharmonicities, and cross-Kerr couplings. These normal modes can also be visualized graphically. Finally, one can compute the Hamiltonian of the circuit, for further processing in QuTiP.
QuTiP: Quantum Toolbox in Python
QuTiP is open-source software for simulating the dynamics of open quantum systems. The QuTiP library depends on the excellent Numpy, Scipy and Cython numerical packages. In addition, graphical output is provided by Matplotlib QuTiP aims to provide user-friendly and efficient numerical simulations of a wide variety of Hamiltonians, including those with arbitrary time-dependence, commonly found in a wide range of physics applications such as quantum optics, trapped ions, superconducting circuits, and quantum nanomechanical resonators. QuTiP is freely available for use and/or modification on all major platforms such as Linux, Mac OSX, and Windows. Being free of any licensing fees, QuTiP is ideal for exploring quantum mechanics and dynamics in the classroom.
OpenFermion is an open source chemistry package for quantum computers. It can be used as a tool for generating and compiling physics equations which describe chemical and material systems into representations which can be interpreted by a quantum computer. The most effective quantum algorithms for these problems build upon and extend the power of classical chemistry packages such as Psi4 and PySCF used and developed by research chemists across government, industry and academia. The software includes several plug-ins to run on these packages and also is able to run on the Rigetti Forest and ProjectQ frameworks to run on a variety of different quantum computers. You can download the software from GitHub here.
Quipper is a scalable functional programming language for quantum computing based on Quantum Lambda Calculus. Quipper is based on a classical programming language called Haskell, which is particularly suited to programming for physics applications. It provides a high-level circuit description language that includes gate-by-gate descriptions of circuit fragments, as well as powerful operators for assembling and manipulating circuits. The Quipper distribution libraries for quantum integer and fixed-point arithmetic, Quantum Fourier transform, an efficient Qram implementation, simulation of pseudo-classical circuits, Stabilizer circuits, and arbitrary circuits, exact and approximate decomposition of circuits into specific gate sets and other quantum algorithms.
QX Quantum Computing Simulator
The QX Simulator is a universal quantum computer simulator developed at QuTech. The QX allows quantum algorithm designers to simulate the execution of their quantum circuits on a quantum computer. The simulator defines a low-level quantum assembly language namely Quantum Code which allows the users to describe their circuits in a simple textual source code file. The source code file is then used as the input of the simulator which executes its content.
Quantum Algorithm Zoo
Stephen Jordan from NIST has cataloged dozens of different algorithms that could theoretically offer substantial speedup when run on a quantum computer. Each algorithm is described in a single paragraph that also includes an estimate of the speedup and links to references and technical papers that described the algorithm in more detail. The link to this comprehensive catalog is here.
ScaffCC is a compiler and scheduler for the Scaffold programing language. It is written using the LLVM open-source infrastructure for the purpose of writing and analyzing code for quantum computing applications. It enables users to compile quantum applications written in Scaffold to a low-level quantum assembly format (QASM), apply error correction, and generate time and area metrics. ScaffCC is written to be scalable up to problem sizes where quantum algorithms outperform classical ones, and provides valuable insight into the overheads involved and possible optimizations for a realistic implementation on a future quantum device. ScaffCC includes one of the most extensive quantum application benchmark suites and the beta release can be found on GitHub here.
TriQ is the backend compiler for the Scaffold quantum programming language. TriQ takes two inputs: 1) a gate sequence produced by ScaffCC and 2) qubit connectivity and calibration data for the target machine. It compiles the program gate sequence by choosing a good initial placement of the program qubits on the hardware qubits, reducing communication, and by applying gate optimization techniques. It has a flexible architecture that can support multiple platforms and generates optimized quantum assembly code for both superconducting and ion trap quantum computers. A technical paper that describes TriQ in more detail and its use to compare seven different quantum computers can be found in a recently published paper titled Full-Stack, Real-System Quantum Computer Studies: Architectural Comparisons and Design Insights.
Qbsolv from D-Wave
D-Wave has released a tool that takes large Quadratic Unconstrained Binary Optimization (QUBO) problems and partitions them into smaller sub-QUBOs. The sub-QUBOs are sized to fit into the capacity and topological constraints of the D-Wave quantum processor. The sub-QUBOs can also be solved classically using a tabu search algorithm built into the Qbsolv. Since the D-Wave processor is currently limited to 1000 qubits moving to 2000 qubits later in 2017, this program helps users tackle problems that are many times larger than would fit in a single D-Wave quantum processor. D-Wave has made this software open source so that users can modify it for their own needs. The software along with source code and a technical manual are available from GitHub here.
Quantum Computing Playground
Quantum Computing Playground was developed in 2014 by a group of Google engineers as a browser-based WebGL Chrome Experiment. It features a GPU-accelerated gate level quantum computer with a simple IDE interface, and its own scripting language with debugging and 3D quantum state visualization features. Quantum Computing Playground can efficiently simulate quantum registers up to 22 qubits, run Grover’s and Shor’s algorithms, and has a variety of quantum gates built into the scripting language itself. You can access this program by clicking here but it does assume that the user is already familiar with quantum computers and programming techniques. There is a Help page that provides some documentation and a Step-by-step Demo button that gives you a quick video demo of how to use it. The web page strongly recommends that you run Quantum Playground with the Google Chrome browser.
Microsoft has released a software architecture and tool suite for quantum computing. This tool suite is available without charge and it includes a programming language, optimization and scheduling algorithms, and quantum simulators. The tool is called LIQUi|> which stands for Language-Integrated Quantum Operations (and yes, the last two characters are the ket symbol). LIQUi|> can be used to translate a quantum algorithm written in the form of a high-level program into the low-level machine instructions for a quantum device. Microsoft has this overview Help page that describes the basic functionality of LIQUi|>. The overview web page also contains an excellent video tutorial that shows you how to install and operate LIQUi|>. The software suite itself can be downloaded from the GitHub site here. Although LIQUi|> is still available on GitHub, it appears to have been superseded by the Microsoft Quantum Development kit mentioned above.
Quantum in the Cloud
The University of Bristol will make available access to a four qubit photonic quantum computer. You can start by using their web interface available here to create a configuration, simulate your configuration and then run the configuration on their four qubit photonic chip. The simulator is available to everyone, but in order to get access to the actual hardware you will need to request an Access Token. Once it is granted, you can then run your configuration on their hardware. Additional documentation on this tool is available here and here.