5 releases (breaking)
0.5.0 | Sep 13, 2019 |
---|---|
0.4.0 | May 29, 2019 |
0.3.0 | Apr 10, 2019 |
0.2.0 | Feb 27, 2019 |
0.1.0 | Jan 30, 2019 |
#313 in Simulation
Used in q1tsim-logic-gates
540KB
13K
SLoC
q1tsim
A simple, efficient, quantum computer simulator.
Overview
q1tsim is a simulator library for a quantum computer, written in Rust. Its goal is to be an easy to use, efficient simulator for the development and testing of quantum algorithms.
Features
- Easy implementation and simulation of quantum circuits
- Supports the creation of arbitrary quantum gates
- Most common quantum gates already included
- Measurement in
X
,Y
, orZ
basis - Possibility of measurement without affecting the quantum state
- Creation of histograms of measurement results over multiple runs
- Operations conditional on classical values
- Export of circuits to Open QASM and c-QASM for running your programs on other computers or simulators
- Export of circuits to LaTeX, for drawing pictures of your circuit
- Efficient simulation of stabilizer circuits
Usage
To use q1tsim in your Rust application, add the following to your Cargo.toml
file:
[dependencies]
q1tsim = "0.4"
As an example, here is a 3-qubit quantum Fourier transform of the |000⟩ quantum state:
extern crate q1tsim;
use q1tsim::{circuit, gates};
fn main()
{
// The number of times this circuit is evaluated
let nr_runs = 8192;
// Create a quantum circuit with 3 quantum bits and 3 classical (measurement)
// bits. The circuit starts by default with all quantum bits in the |0⟩ state,
// so in this case |000⟩.
let mut circuit = circuit::Circuit::new(3, 3);
// Set up a 3-qubit quantum Fourier transform
// There is no predefined method on Circuit that implements a controlled
// `S` or `T` gate, so we use the `add_gate()` method for those.
circuit.h(2);
circuit.add_gate(gates::CS::new(), &[1, 2]);
circuit.add_gate(gates::CT::new(), &[0, 2]);
circuit.h(1);
circuit.add_gate(gates::CS::new(), &[0, 1]);
circuit.h(0);
circuit.add_gate(gates::Swap::new(), &[0, 2]);
// Measure all quantum bits in the Pauli `Z` basis
circuit.measure_all(&[0, 1, 2]);
// Actually calculate the resulting quantum state and perform the measurements,
// averaging over `nr_runs` runs.
circuit.execute(nr_runs);
// And print the results.
let hist = circuit.histogram_string().unwrap();
for (bits, count) in hist
{
println!("{}: {}", bits, count);
}
}
The result should be a more or less equal distribution over the eight possible states (000, 001, ..., 111).
Read the complete API documentation on docs.rs.
Dependencies
~8.5MB
~159K SLoC