跳转到主要内容

将OpenQASM 3字符串解析为Qiskit电路的导入器

项目描述

从OpenQASM 3到Qiskit的导入器

LicenseReleaseDownloads

此存储库提供了Python包qiskit_qasm3_import,这是一个从OpenQASM 3到Qiskit的QuantumCircuit的基本和临时导入器。

Qiskit本身如果安装了此包,将其视为可选依赖项。在这种情况下,Qiskit公开了函数qiskit.qasm3.loadqiskit.qasm3.loads,它们是qiskit_qasm3_import.parse的包装器。本项目是一个权宜之计,直到可以正确解决各种技术决策;Terra在其接口中提供强大的稳定性和支持保证,我们尚未准备好为此项目做出这一承诺,因此有最小化的包装。

示例

该包的主要入口点是顶层的parse函数,它接受一个包含完整OpenQASM 3程序的字符串。这个复杂的示例展示了导入器的大量功能。

OPENQASM 3.0;
// The 'stdgates.inc' include is supported, and the gates are only available
// if it has correctly been included.
include "stdgates.inc";

// Parametrised inputs are supported.
input float[64] a;

qubit[3] q;
bit[2] mid;
bit[3] out;

// Aliasing and re-aliasing are supported.
let aliased = q[0:1];

// Parametrised gates that make use of the stdlib.
gate my_gate(a) c, t {
  gphase(a / 2);
  ry(a) c;
  cx c, t;
}

// Gate modifiers work as well; this gate is equivalent to `p(-a) c;`.
gate my_phase(a) c {
  ctrl @ inv @ gphase(a) c;
}

// We handle mathematical expressions on gate creation and complex indexing
// of temporary collections.
my_gate(a * 2) aliased[0], q[{1, 2}][0];
measure q[0] -> mid[0];
measure q[1] -> mid[1];

while (mid == "00") {
  reset q[0];
  reset q[1];
  my_gate(a) q[0], q[1];
  // We support the builtin mathematical symbols.
  my_phase(a - pi/2) q[1];
  mid[0] = measure q[0];
  mid[1] = measure q[1];
}

// The condition resolver can also handle simple cases that don't look
// _exactly_ like equality conditions.
if (mid[0]) {
  // There is limited support for aliasing within nested scopes.
  let inner_alias = q[{0, 1}];
  reset inner_alias;
}

out = measure q;

假设此程序存储在变量program中的字符串,然后我们可以通过以下方式将其导入到QuantumCircuit

from qiskit_qasm3_import import parse
circuit = parse(program)

circuit现在是一个完整的QuantumCircuit,因此我们可以确切地看到它变成了什么

circuit.draw()
       ┌───────────────┐┌─┐   ┌─────────────┐┌──────────┐┌─┐
  q_0: ┤0              ├┤M├───┤0            ├┤0         ├┤M├───
       │  my_gate(2*a) │└╥┘┌─┐│             ││          │└╥┘┌─┐
  q_1: ┤1              ├─╫─┤M├┤1            ├┤1         ├─╫─┤M├
       └──────┬─┬──────┘ ║ └╥┘│             ││  If_else │ ║ └╥┘
  q_2: ───────┤M├────────╫──╫─┤  While_loop ├┤          ├─╫──╫─
              └╥┘        ║  ║ │             ││          │ ║  ║
mid_0: ════════╬═════════╩══╬═╡1            ╞╡0         ╞═╬══╬═
               ║            ║ │             │└──────────┘ ║  ║
mid_1: ════════╬════════════╩═╡0            ╞═════════════╬══╬═
               ║              └─────────────┘             ║  ║
out_0: ════════╬══════════════════════════════════════════╩══╬═
               ║                                             ║
out_1: ════════╬═════════════════════════════════════════════╩═
               ║
out_2: ════════╩═══════════════════════════════════════════════

安装

从pip安装最新的qiskit_qasm3_import包版本

pip install qiskit_qasm3_import

如果尚未安装,这会自动安装所有依赖项(例如OpenQASM 3解析器)。或者,您可以直接使用此包作为可选依赖项安装Qiskit Terra

pip install qiskit-terra[qasm3-import]

开发

如果您想为此项目做出贡献,请首先阅读我们的贡献指南

使用pip安装开发需求来设置您的开发环境

pip install -r requirements-dev.txt tox

这会安装比包运行时依赖项更多的几个包,因为还包括了我们用于测试的一些工具,例如toxpytest

开发需求安装后,您可以使用以下命令安装包的可编辑版本

pip install -e .

在此之后,您对库代码的任何更改都会在您打开新的Python解释器会话时立即生效。

构建文档

开发需求安装完成后,将执行以下命令:

tox -e docs

将构建HTML文档,并将其放置在docs/_build/html。该存储库main分支的文档状态已发布到https://qiskit.github.io/qiskit-qasm3-import

代码风格和代码审查

该存储库的Python组件使用black格式化。您可以通过运行以下命令在所需的文件上执行此操作:

tox -e black

可以通过以下命令运行完整的代码审查套件:

tox -e lint

许可

本项目采用Apache许可证2.0版许可。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

qiskit_qasm3_import-0.5.0.tar.gz (34.1 kB 查看哈希值)

上传时间: 源代码

构建分发

qiskit_qasm3_import-0.5.0-py3-none-any.whl (27.6 kB 查看哈希值)

上传时间: Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面