#quantum-computing

rusq

Quantum computing simulator library in Rust

2 releases

0.1.1 Feb 7, 2018
0.1.0 Feb 7, 2018

#17 in Simulation

Download history 10/week @ 2018-11-05 6/week @ 2018-11-12 4/week @ 2018-11-19 4/week @ 2018-11-26 4/week @ 2018-12-03 7/week @ 2018-12-10 4/week @ 2018-12-17 14/week @ 2018-12-24 2/week @ 2018-12-31 32/week @ 2019-01-14

20 downloads per month

MIT license

20KB
428 lines

Rusq

crates.io docs.rs Build Status

Quantum computing simulator in Rust

Overview

Rusq is a library to simulate a gate-type quantum computer written purely in Rust.

The Rusq design is highly inspired by Q#. Basically, only "physically safe" operation is implemented - no non-physical information like the amplitude of a wavefunction can be obtained by default.

Feature

  • Measurement and projection
  • Basic quantum gates
    • $X, Y, Z$, Hadamard, identity, CNOT, CCNOT

How to use

First, add the following to Cargo.toml

[dependencies]
rusq = { version = "*", git = "https://github.com/hajifkd/rusq.git" }

For example codes, check out the following section.

Examples

For instance, you can make EPR pair like this:

extern crate rusq;

use rusq::prelude::*;

fn set(sim: &mut QuantumSimulator, qubit: &Qubit, r: MeasuredResult) {
    if sim.measure(qubit) != r {
        sim.X(qubit);
    }
}

fn main() {
    let mut sim = QuantumSimulator::new(2);
    let qubits = sim.get_qubits();
    let measure_count = 10000;

    for _ in 0..measure_count {
        set(&mut sim, &qubits[0], MeasuredResult::Zero);
        set(&mut sim, &qubits[1], MeasuredResult::Zero);

        sim.H(&qubits[0]);
        sim.CNOT(&qubits[0], &qubits[1]);

        assert_eq!(sim.measure(&qubits[0]), sim.measure(&qubits[1]));
    }
}

For other kinds of examples, check tests directory. Pull requests to implement another examples of quantum computation is welcome.

License

MIT

Dependencies

~2MB
~28K SLoC