Quantum computing simulator in Rust
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
tests
.gitignore
.rustfmt.toml
.travis.yml
Cargo.toml
LICENSE
README.md

README.md

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 = "0.1"

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