### 5 releases (breaking)

✓ Uses Rust 2018 edition

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 |

#**3** in #quantum

**57** downloads per month

**Apache-2.0**

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`

, or`Y`

basis`Z` - 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

file:`Cargo .toml`

`[``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

~4.5MB

~103K SLoC