DQCsim
The Delft Quantum & Classical simulator
DQCsim is a framework that can be used to tie components of quantum computer simulators together in a standardized yet extensible, developer-friendly, and reproducible way.
Framework | Components | Developer-friendly |
DQCsim only provides interfaces to tie simulator components together. That is, it does not contain any simulation code on its own. DQCsim is all the boilerplate code that you don't want to write when you're developing a new way to simulate qubits, a microarchitecture simulator, an error model>, etc. | DQCsim abstracts a quantum computer simulation into four components: hosts, frontends, operators, and backends. These components are separate operating system processes that each fulfill a well-defined function within the simulation, thus splitting the simulation up into more manageable parts. | All the components can be written in Python, C, C++, or Rust. Just use whichever language you prefer – or any combination of those languages! DQCsim will automatically tie everything together for you at runtime, so you can focus on writing quantum algorithms instead of fighting CPython. |
Standardized | Extensible | Reproducible |
DQCsim fully specifies a set of core features that each component needs to support, as well as the interfaces used to drive them. Therefore, as long as the components don't rely on any user-defined extra features in other components, they can be swapped out without breaking anything. | Besides standardizing the basic features of each component, DQCsim provides an interface for users to implement their own features, without needing to change anything in DQCsim's codebase. So don't panic about DQCsim being written in Rust: you shouldn't need to read or write a single line of code in here! | While quantum mechanics are inherently stochastic, simulating it needs not be. DQCsim provides a random generator to the components that should be more than random enough for simulation purposes, while being reproducible when this is desirable, such as while debugging. |