1 个不稳定版本
使用旧Rust 2015
0.1.3 | 2019年10月24日 |
---|
#180 in 模拟
55KB
1K SLoC
quantum
高级Rust量子计算机模拟器。
动机
Quantum是一个量子计算机模拟器,以下是设计目标:
-
实用性:我们可以模拟一个5量子比特寄存器,足以运行有趣算法。
-
效率:我们从头开始使用原语实现所有重要操作。
-
教育价值:文档是对如何在Rust中实现量子计算机的散文描述。
-
正确性:完全使用安全Rust编写,具有明确定义的状态。
阅读此理论的良好起点是维基百科文章,您可以遵循我们的门、基、常见操作和量子寄存器的实现文档。
使用方法
# 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);
}
门
我们提供以下量子门
- 单位
- Hadamard
- Pauli-X
- Pauli-Y
- Pauli-Z
- 相移
- 交换
- 交换平方根
- 控制非
- 通用控制-U
- 控制-X
- 控制-Y
- 控制-Z
- 托夫利
- 弗雷德金
- 量子傅里叶变换
贡献
- 创建或拥有一个问题
- 分支 开发 分支
- 编写代码和测试
rust测试
- 提交一个带有合理信息的提交并推送
- 提交一个拉取请求
依赖关系
~0.5–0.8MB
~12K SLoC