5 个稳定版本
1.3.1 | 2023 年 11 月 6 日 |
---|---|
1.3.0 | 2023 年 3 月 21 日 |
1.2.0 | 2021 年 11 月 28 日 |
1.1.0 | 2020 年 5 月 25 日 |
1.0.0 | 2020 年 5 月 23 日 |
#16 在 模拟
230KB
5K SLoC
qasmsim
Rust 中的 QASM 解释器和量子模拟器。
先决条件
确保已安装 cargo
。要编译 WASM 版本,请确保已安装 wasm-pack
。
缺少什么?
寻找新功能?请参阅 RELEASE_NOTES。
缺少的很少,但最重要的功能是允许通过 include
指令包含外部库,并改进错误报告。尽管如此,由于解释器自带,因此可以通过 包括 qelib1.inc
来实现。
未来版本计划
- 允许包含外部源。
- 在本地库中。
- 在 WASM 版本中。
- 添加一个语义检查器,以检查程序在运行前是否正确。
- 处理不透明门。目前它们被忽略,调用不透明门会导致错误,就像尝试调用未定义的门一样。
一个示例 QASM 程序可以在以下位置找到
OPENQASM 2.0;
include "qelib1.inc";
qreg q[2];
h q[0];
cx q[0], q[1];
完整的规范可以在 QASM 仓库 下找到。
qasmsim 命令行界面
使用以下命令安装 qasmsim
$ cargo install --git https://github.com/delapuente/qasmsim
并使用以下命令模拟 QASM 程序
$ qasmsim source.qasm
使用以下命令查看更多选项
$ qasmsim --help
qasmsim 1.2.0
A QASM interpreter and quantum simulator in Rust.
USAGE:
qasmsim [FLAGS] [OPTIONS] [source]
FLAGS:
-b, --binary Prints the binary representation of the values
-h, --help Prints help information
-x, --hexadecimal Prints the hexadecimal representation of the values
-i, --integer Prints the interger representation of the values. Default option
--probabilities Prints the probabilities vector of the simulation. Ignored if shots is set
--statevector Prints the state vector of the simulation. Ignored if shots is set
-t, --times Prints times measured for parsing and simulating
-V, --version Prints version information
-v Verbosity of the output
OPTIONS:
--info <info> Show gate-related information
--out <out> Output files prefix, print in the stdout if not present. The output format of each file is
CSV. At most, three files are created with the names out.memory.csv, out.state.csv and
out.times.csv
--shots <shots> Specify the number of simulations
ARGS:
<source> QASM program file, read from stdin if not present
qasmsim 库
qasmsim
也是一个库,包括 QASM 解析器,它生成 QASM AST、解释器和量子状态向量模拟器。命令行工具只是库的多个消费者之一。如果您只想安装库功能,请在安装时删除 default
功能。
$ cargo install --no-default-features
测试项目
您可以通过查看(位于 src
文件夹下的)单元测试和集成测试(位于 tests
文件夹下)来确定已实现了什么。要运行项目的测试,您可以这样做
$ cargo test
WASM 版本
qasmsim
可以在网页中使用,如果您将其编译为 Web Assembly。这样做很简单,只需下载源代码,确保您已安装 wasm-pack
并运行
$ wasm-pack build -- --features="serde"
它将编译您的项目并将它打包在 pkg
文件夹中。现在进入 www
目录,使用以下命令安装依赖项(您只需要运行一次)
$ npm install
然后使用以下命令启动网络服务器
$ npm start
浏览第二个命令提供的 URL,您将看到一个空白页面。转到您浏览器的开发者工具并尝试运行一个小测试
var result = qasmsim.run(`
OPENQASM 2.0;
include "qelib1.inc";
qreg q[2];
h q[0];
cx q[0], q[1];
`);
该模块默认以 qasmsim
对象的形式导出至 window
,并实现了以下接口
interface qasmsim {
run: (input: string, shots?: number) => Execution,
simulate: (program: OpenQasmProgram, shots?: number) => Computation,
parseAndLink: (source: string) => OpenQasmProgram,
parseProgram: (source: string) => OpenQasmProgram,
parseLibrary: (source: string) => OpenQasmLibrary,
parseExpression: (source: string) => Expression,
parseProgramBody: (source: string) => Statement[],
parseStatement: (source: string) => Statement
getGateInfo: (source: string, gateName: string) => GateInfo
}
interface Computation {
histogram?: Histogram,
probabilities: Float64Array,
statevector: { bases: Float64Array, qubitWidth: number },
memory: Memory
}
interface Execution extends Computation {
times: ExecutionTimes
}
type Memory = { [key: string]: Array[number] }
type Histogram = { [key: string]: Array[[number, number]] }
type ExecutionTimes = {
parsing: number,
simulation: number,
serialization: number
}
type GateInfo = {
docstring: string,
name: string,
realParameters: Array[string],
quantumParameters: Array[string]
}
许可证
许可协议为以下之一
- Apache 许可证 2.0 版(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您提交的任何有意用于包含在作品中的贡献,根据 Apache-2.0 许可证定义,将按照上述双许可协议进行许可,不附加任何额外的条款或条件。
依赖项
~4–10MB
~160K SLoC