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模拟

MIT 许可证

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 许可证定义,将按照上述双许可协议进行许可,不附加任何额外的条款或条件。

依赖项

~4–10MB
~160K SLoC