XACC provides a system-level software infrastructure for heterogeneous quantum-classical computing architectures. This initial 1.0.0 release provides the first iteration of the core XACC API which decomposes the quantum-classical programming workflow into frontend, middle-end, and backend architectural layers. The frontend contributes interfaces for mapping existing and future quantum languages to a core intermediate representation (IR). The middle-end defines the interfaces that make up this IR as well as optimizations and transformations of it. The backend defines the interfaces necessary for describing backend quantum computers (and simulators/emulators) in a hardware agnostic fashion.
This release also provides implementations of these core XACC interfaces for gate and adiabatic/annealing model quantum computation. We provide support for IBM, Rigetti, and D-Wave quantum computers. We further extend the core XACC API with support for error mitigation, circuit optimization, quantum language transpilers/compilers, quantum observables, and classical optimizers. Moreover, this release provides a prototype Python API wrapping the core C++ infrastructure.
The project leadership certifies that the APIs in this release are "Eclipse Quality".
The XACC architecture builds off the CppMicroServices C++ native, partial implementation of the OSGi specification. XACC is therefore extensible in a large number of critical quantum programming workflow phases. Developers are able to extend core interfaces, build them via CMake into standard UNIX shared objects/libraries, and drop them into a pre-defined folder for XACC to pick up and register at runtime. This flexibility enables sophosticated quantum applications that are by default able to run on a number of quantum computing backends.
Most of the user documentation for XACC is hosted at https://xacc.readthedocs.io.
Conforms To UI/UX Guidelines:
Not applicable (project doesn't provide UI)
XACC provides a core C++ API for the programming, compilation, and execution of quantum-classical applications. Usability is enabled via an interface-based programming model, whereby concrete implementations are hidden behind core XACC interfaces. XACC is customizable in the sense that users/developers can extend these core interfaces for various aspects of the quantum programming workflow, and drop shared libraries containing the concrete implementation into a pre-ordained plugins folder for XACC to register and make available. XACC further enables usability and productivity through a prototype Python API exposing the same functionality available in the C++ API using pybind11.
We have engaged the quantum programming community by hosting hands-on tutorials, conference talks, and documentation development. We have started the Eclipse Quantum Computing Software Working Group and hosted virtual meetings with experts in the field. We have published peer-reviewed papers on XACC.