将OpenQASM 3字符串解析为Qiskit电路的导入器
项目描述
从OpenQASM 3到Qiskit的导入器
此存储库提供了Python包qiskit_qasm3_import
,这是一个从OpenQASM 3到Qiskit的QuantumCircuit
的基本和临时导入器。
Qiskit本身如果安装了此包,将其视为可选依赖项。在这种情况下,Qiskit公开了函数qiskit.qasm3.load
和qiskit.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
这会安装比包运行时依赖项更多的几个包,因为还包括了我们用于测试的一些工具,例如tox
和pytest
。
开发需求安装后,您可以使用以下命令安装包的可编辑版本
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d8d39ac176eaa7f2414dab897ff449ea1e5d854230b262b21724d138939a6476 |
|
MD5 | 2e369af2b4f34552e0748d5ae87a264b |
|
BLAKE2b-256 | 6940e6ea9dc59d50bbf5ca61e695cd986ded1386ab65f6bfb0181144555d7c1f |
qiskit_qasm3_import-0.5.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 137f98e870160dc274eb920603c1c0032f2534b5e365b0243e57b25dfee46f61 |
|
MD5 | 0fac377154833bbd2e874f9f935ef6be |
|
BLAKE2b-256 | cd1d12529a4ab9910ab15409ac79fff32a729cf54d65187b386954a52fd84f2b |