Advanced Rust quantum computer simulator.
Quantum is a quantum computer simulator written with the following design goals in mind:
Utility: we can simulate a 5-qubit 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 well-defined 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.
# Cargo.toml
[dependencies]
quantum = "0.1.3"// main.rsuse computer::QuantumComputer;use algorithms::deutsch;use gates;// Let's do something simple of a 3-qubit system.letmut 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.letmut c2 = QuantumComputer::new(1);
c2.initialize(0);
c2.apply(gates::hadamard(1));
c2.collapse();let result = if1 == 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)letmut 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 = if1 == c3.value(){"constant"}else{"balanced"};println!("f is: {}", result);We provide the following quantum gates:
- Identity
- Hadamard
- Pauli-X
- Pauli-Y
- Pauli-Z
- Phase Shifts
- Swap
- Sqrt(Swap)
- Controlled Not
- General Controlled-U
- Controlled-X
- Controlled-Y
- Controlled-Z
- Toffoli
- Fredkin
- Quantum Fourier Transform
- 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