#quantum-computer-simulator #gate #register #wikipedia #forked #states #kets

quantum2

高级Rust量子计算机模拟器,从"quantum"分支而来

1 个不稳定版本

使用旧Rust 2015

0.1.3 2019年10月24日

#180 in 模拟

MIT 许可证

55KB
1K SLoC

quantum 构建状态 许可证

高级Rust量子计算机模拟器。

动机

Quantum是一个量子计算机模拟器,以下是设计目标:

  1. 实用性:我们可以模拟一个5量子比特寄存器,足以运行有趣算法。

  2. 效率:我们从头开始使用原语实现所有重要操作。

  3. 教育价值:文档是对如何在Rust中实现量子计算机的散文描述。

  4. 正确性:完全使用安全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