app qvnt-i

Advanced quantum computation simulator

4 releases

0.4.4 Mar 10, 2023
0.4.3 Nov 9, 2022
0.4.2 Aug 2, 2022

#902 in Math

GPL-3.0-or-later

45KB
1K SLoC

QVNT

build rustc crates.io docs.rs

Advanced quantum computation simulator, written in Rust

Features

  1. Ability to simulate up to 64 qubits. Common machine with 4-16 Gb of RAM is able to simulate 26-28 qubits, which is enough for several study cases;
  2. Set of 1- or 2-qubits operations to build your own quantum circuits;
  3. Quantum operations are tested and debugged to be safe in use;
  4. Circuit execution is accelerated using multithreading Rayon library;
  5. Complex quantum registers manipulations: tensor product of two registers and aliases for qubit to simplify interaction with register.

QVNT interpreter

About

It is REPL interpreter, that could be used to process quantum operation without compiling code.

Installation:

cargo install qvnt-i

How to

Now, you are able to 'run' quantum simulator with OpenQASM language. *.qasm files should be passed to interpreter via cli:

qvnt-i ./cirquit.qasm
|Q> :go

or via interpreter:

qvnt-i
|Q> :load ./cirquit.qasm
|Q> :go

Another way of running simulator is writing cirquit on OpenQASM language directly in REPL:

qvnt-i
|Q> qreg q[4];
|Q> creg c[4];
|Q> h q;
|Q> measure q -> c;
|Q> :go
|Q> :class
  • :go - process the simulation;
  • :class - acquire the result from classical register.

REPL is lazy: it only starts computation, if it encounters :go. This example will shows the single number every time:

|Q> qreg q[4];
|Q> creg c[4];
|Q> h q;
|Q> measure q -> c;
|Q> :go
|Q> :class
|Q> :class
|Q> :class
|Q> :class
...

Unlike that, repeating :go will proceed with different result every time:

|Q> qreg q[4];
|Q> creg c[4];
|Q> h q;
|Q> measure q -> c;
|Q> :go
|Q> :class
|Q> :go
|Q> :class
|Q> :go
|Q> :class
...

Commands

All commands should be preceeded with :. Otherwise, REPL considers to parse line as OpenQASM source. The full list of commands:

loop N     Repeat following commands N time
tags TAG   Create TAG with current state
goto TAG   Swap current state to TAG's state
class      Show state of classical registers
polar      Show state of quantum registers in polar form
prob       Show state of quantum registers in probability form
ops        Snow current quantum operations queue
go         Start modulating quantum computer
reset      Clear current state
names      Show aliases for quantum and classical bits
load FILE  Load state from FILE according to QASM language script
help       Show this reference
quit       Exit interpreter

License

Licensed under MIT License

Dependencies

~13–22MB
~290K SLoC