#quantum-simulation #quantum-circuit #quantum #quantum-simulator #physics #hpc

quest-rs

QuEST(量子精确模拟工具包)的Rust安全封装

4个版本

0.2.8 2020年3月27日
0.2.7 2020年3月27日
0.2.5 2020年3月26日
0.2.0 2020年3月26日

模拟分类中排名260

每月下载量21

MIT许可

2MB
17K SLoC

C 6K SLoC // 0.2% comments C++ 4.5K SLoC // 0.2% comments JavaScript 3K SLoC // 0.1% comments CUDA 2K SLoC // 0.1% comments Rust 1.5K SLoC // 0.0% comments Shell 27 SLoC // 0.6% comments

QuEST Rust封装

Build Docs License: MIT

简介

量子精确模拟工具包(QuEST)是通用量子电路、状态向量和密度矩阵的高性能模拟器。QuEST是用C语言编写的,结合了OpenMP和MPI,并可以在GPU上运行。QuEST只需编译即可运行,易于在笔记本电脑和超级计算机(C和C++)上运行,可以利用多核、GPU加速和网络化机器快速模拟多量子比特的电路。

此库为QuEST提供了一个具有惯用Rust API的安全封装。

用法

要在Rust代码库中使用quest-rs,首先运行

cargo add quest-rs

或手动将quest-rs添加到您的Cargo.toml中。

API很简单

use quest_rs::{QuestEnv, QuReg};

let env = QuestEnv::new();
let mut qubits = QuReg::new(2, &env);
qubits.init_plus_state().hadamard(0).controlled_not(0, 1);
println!(
    "Probability amplitude of |11> *before* measurement is: {}",
    qubits.probability_amplitude(0b11)
);
qubits.measure(1);
println!(
    "Probability amplitude of |11> *after* measurement is: {}",
    qubits.probability_amplitude(0b11)
);

流畅的API使得创建更复杂的电路变得容易

use quest_rs::{Complex, ComplexMatrix2, ComplexMatrixN, QReal, QuReg, QuestEnv, Vector};

let env = QuestEnv::new();

let mut qubits = QuReg::new(3, &env);
qubits.init_zero_state();

println!("Out environment is:");
qubits.report_params();
env.report();

// Set up the circuitry

let unitary_alpha = Complex::new(0.5, 0.5);
let unitary_beta = Complex::new(0.5, -0.5);

let unitary_matrix = ComplexMatrix2 {
    real: [[0.5, 0.5], [0.5, 0.5]],
    imag: [[0.5, -0.5], [-0.5, 0.5]],
};

let mut toffoli_gate = ComplexMatrixN::new(3);
for i in 0..6 {
    toffoli_gate.set_real(i, i, 1.0);
}
toffoli_gate.set_real(6, 7, 1.0);
toffoli_gate.set_real(7, 6, 1.0);

qubits
    .hadamard(0)
    .controlled_not(0, 1)
    .rotate_y(2, 0.1)
    .multi_controlled_phase_flip(vec![0, 1, 2])
    .unitary(0, unitary_matrix)
    .compact_unitary(1, unitary_alpha, unitary_beta)
    .rotate_around_axis(2, (3.14 / 2.0) as QReal, Vector::new(1.0, 0.0, 0.0))
    .controlled_compact_unitary(0, 1, unitary_alpha, unitary_beta)
    .multi_controlled_unitary(vec![0, 1], 2, unitary_matrix)
    .multi_qubit_unitary(vec![0, 1, 2], toffoli_gate);

// Study the output

println!("Circuit output:");
println!("---------------");
println!("Probability amplitude of |111> is: {}", qubits.probability_amplitude(0b111));
println!(
    "Probability of qubit 2 being in state 1: {}",
    qubits.calculate_probability_of_outcome(2, 1)
);
println!("Qubit 0 was measured in state: {}", qubits.measure(0));
let (outcome, outcome_probability) = qubits.measure_with_stats(2);
println!(
    "Qubit 2 collapsed to {} with probability {}",
    outcome, outcome_probability
);

模板

要获取一个使用此封装的执行项目的基本模板,请参阅:https://github.com/drewsilcock/quest-rs-template

待办事项

C QuEST库有几个编译选项标志,应使用Cargo功能支持。这些包括

  • 操作精度(单精度、双精度或四精度)
  • 是否启用OpenMP、MPI、OpenMP+MPI或GPU

还应扩展文档,包括QuEST文档中的所有相关信息。

无运行时依赖项