16个版本 (5个重大更改)

0.6.0 2024年7月21日
0.5.1 2024年2月4日
0.4.0 2023年12月22日
0.3.0 2023年11月17日

#10 in 模拟

Download history 135/week @ 2024-05-05 8/week @ 2024-05-12 11/week @ 2024-05-19 3/week @ 2024-05-26 1/week @ 2024-06-02 123/week @ 2024-07-21 94/week @ 2024-07-28

每月217次下载

EUPL-1.2

155KB
2.5K SLoC

quantr

Crates.io Static Badge GitHub Workflow Status (with event) GitHub Workflow Status (with event) docs.rs Crates.io Crates.io

此crate尚未准备好用于生产,因此不应被视为稳定,也不会产生正确答案。它仍在积极开发中,需要进行更多优化。如果您打算使用quantr进行项目,请务必使用其他模拟来检查答案。

一个专注于内存效率和可访问性的基于门的量子电路模拟的Rust库crate。

此crate允许用户通过添加各种方法中的门列来构建量子电路。一旦构建了电路,就可以对其进行模拟,这将附加寄存器|00..0>,从而产生可以测量的叠加态。Quantr主要针对纯态的模拟。

有关使用quantr的简要示例,请参阅快速入门指南,该指南通过Grover算法的实现进行操作。

定义特性

  • 旨在使Rust初学者易于访问。
  • 物理可观测量与非物理可观测量的区别,后者可以从电路中提取出来是明确的,后者仍然是可检索的。
  • 将电路图打印到终端或保存为UTF-8字符串的文本文件。
  • 可以通过提供其在乘积状态上的显式映射来轻松实现自定义门。这使用户可以避免将门表示为矩阵。
  • 自定义门不必是幺正的,允许实现某些量子信道。
  • 可以在可处理的时间内模拟多达~16个比特的电路。
  • 只使用安全的Rust代码,唯一依赖项是fastrand (2.1.0) crate、num_complex (0.4.6)以及它们的子依赖项。

用法

模拟和打印两个比特电路的示例

use quantr::{Circuit, Gate, Printer, Measurement::Observable};

fn main() {
    let mut quantum_circuit: Circuit = Circuit::new(2).unwrap();

    quantum_circuit
        .add_gates(&[Gate::H, Gate::Y]).unwrap()
        .add_gate(Gate::CNot(0), 1).unwrap();

    let mut printer = Printer::new(&quantum_circuit);
    printer.print_diagram();
    // The above prints the following:
    // ┏━━━┓     
    // ┨ H ┠──█──
    // ┗━━━┛  │  
    //
    // ┏━━━┓┏━┷━┓
    // ┨ Y ┠┨ X ┠
    // ┗━━━┛┗━━━┛

    let simulated_circuit = quantum_circuit.simulate();

    // Below prints the number of times that each state was observered
    // over 500 measurements of superpositions.

    if let Observable(bin_count) = simulated_circuit.measure_all(500) {
        println!("[Observable] Bin count of observed states.");
        for (state, count) in bin_count {
            println!("|{}> observed {} times", state, count);
        }
    }
}

有关使用quantr的更详细示例,请参阅快速入门指南

限制(目前)

  • 不考虑噪声,然而这可以通过自定义门(尽管很繁琐)实现。
  • 没有并行化选项。
  • 无法添加经典线或测量量子电路中单个线的门。只有一个方法,即在所有量子位线的末尾附加一个测量门。
  • 主要用于纯态向量的模拟。虽然,通过使用自定义门,可以实现一些量子通道。例如,请参阅examples/post_select.rs

约定

在计算基中标记乘积状态的线的顺序定义为

|a⟩ ──── 
|b⟩ ────  ⟺ |a,b,c,⋯⟩ ≡ |a⟩⊗|b⟩⊗|c⟩⊗⋯ 
|c⟩ ────
 ⋮    ⋮

当定义一个依赖于控制节点位置以定义门的自定义函数(如CNot和Toffoli门)时,必须定义为最右侧的乘积状态被认为是“激活”的门。通常,最好假设自定义函数不定义控制节点,而是扩展函数的定义域。最后,需要注意的是,自定义门没有进行有效量子通道的检查。

文档

Quantr 书籍计划作为 quantr 的扩展文档,例如解释选择算法背后的动机。目前,它只包含入门指南和一些 quantr 的内存效率的初步结果。

对于在线代码文档,请参阅crates.io。这也可以通过克隆项目、进入目录并运行以下命令在本地构建和打开:cargo doc --open

其他量子计算机模拟器

另一个更稳定的Rust编写的量子电路模拟器是Spinoza

网站Are We Quantum Yet(检查日期:2023年10月24日)列出了所有使用Rust的量子计算内容。

Quirk 是一个实用且非常实用的量子计算学习模拟器Quirk。它是一个实时在线模拟器,通过拖放门进行接口。请注意,与 quantr 的标签相比,Quirk 中的计算基中状态的标签是相反的。

许可证

Quantr 根据 EUPL-1.2 或更高版本授权。您可以在https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12获得许可证副本。英文版的 EUPL-1.2 许可证在LICENCE.txt中提供,该文件位于本存储库的根目录中。第三方软件的许可证和 quantr 项目的详细信息可以在COPYRIGHT.txt中找到。

依赖项

~300KB