quantum
Advanced Rust quantum computer simulator.
Motivation
Quantum is a quantum computer simulator written with the following design goals in mind:

Utility: we can simulate a 5qubit register, enough to run interesting algorithms.

Efficiency: we implement all important operations from scratch using primitives

Educational Value: the documentation is a prose description of how to implement a quantum computer in Rust.

Correctness: it's entirely written in safe Rust with welldefined states.
A good place to start reading the theory behind this is the Wikipedia article, and you can follow the documentation for our implementations of gates, kets, common operations, and quantum registers.
Usage
# Cargo.toml
[dependencies]
quantum = "0.1.3"
// main.rs
use computer::QuantumComputer;
use algorithms::deutsch;
use gates;
// Let's do something simple of a 3qubit system.
let mut c1 = QuantumComputer::new(3);
c1.initialize(5);
c1.apply(gates::identity(3));
c1.collapse();
assert_eq!(5, c1.value());
// Now let's perform a coin flip using the Hadamard transform.
let mut c2 = QuantumComputer::new(1);
c2.initialize(0);
c2.apply(gates::hadamard(1));
c2.collapse();
let result = if 1 == c2.value() { "heads" } else { "tails" };
println!("coin flip: {}", result);
// Finally let's determine whether f: {0, 1} > {0, 1} is constant
// or balanced using Deutsch's algorithm.
// (see http://physics.stackexchange.com/q/3400)
let mut c3 = QuantumComputer::new(2);
c3.initialize(1);
c3.apply(gates::hadamard(2));
c3.apply(deutsch::deutsch_gate(f));
c3.apply(gates::hadamard(2));
c3.collapse();
let result = if 1 == c3.value() { "constant" } else { "balanced" };
println!("f is: {}", result);
Gates
We provide the following quantum gates:
 Identity
 Hadamard
 PauliX
 PauliY
 PauliZ
 Phase Shifts
 Swap
 Sqrt(Swap)
 Controlled Not
 General ControlledU
 ControlledX
 ControlledY
 ControlledZ
 Toffoli
 Fredkin
 Quantum Fourier Transform
Contributing
 Create or take ownership of an issue
 Fork development branch
 Write code and tests
rust test
 Commit with a reasonable message and push
 Submit a pull request