quantum2 0.1.3

Advanced Rust quantum computer simulator, forked from "quantum".
Documentation
  • Coverage
  • 100%
    97 out of 97 items documented0 out of 81 items with examples
  • Size
  • Source code size: 58.43 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 1.02 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 16s Average build duration of successful builds.
  • all releases: 16s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Homepage
  • ijt/quantum2
    3 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • ijt

quantum Build Status License

Advanced Rust quantum computer simulator.

Motivation

Quantum is a quantum computer simulator written with the following design goals in mind:

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

  2. Efficiency: we implement all important operations from scratch using primitives

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

  4. 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.

Usage

# Cargo.toml

[dependencies]
quantum2 = "0.1.3"
// main.rs

use computer::QuantumComputer;
use algorithms::deutsch;
use gates;

fn main() {
	// Let's do something simple of a 3-qubit 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
  • 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

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