OpenQASM 与 Python 导入导出
线路可以在内存字符串、文件和 Python 重建代码之间转换。OpenQASM 适合与其他工具交换线路;Python 导出适合生成可读的 UnitaryLab 构造代码。
from unitarylab import Circuit
qc = Circuit(2)
qc.h(0)
qc.cx(0, 1)
qasm3 = qc.to_qasm()
qasm2 = qc.to_qasm2()
restored = Circuit.from_qasm(qasm3)
qc.to_qasm_file("circuit.qasm")
restored_from_file = Circuit.from_qasm_file("circuit.qasm")to_qasm() 默认导出 OpenQASM 3.0,from_qasm() 根据版本声明解析 2.0 或 3.0。decompose 控制块门展开,transpile=True 在导出前转译基础门集。
公共接口
| 接口 | 作用 |
|---|---|
to_qasm(...) | 返回 OpenQASM 3.0 字符串 |
to_qasm2(qreg_name="q", creg_name="c") | 返回 OpenQASM 2.0 字符串 |
from_qasm(code, gate_storage="python") | 解析版本声明并创建线路 |
from_qasm_file(path, gate_storage="python") | 从文件读取线路 |
to_qasm_file(path, ...) | 将 OpenQASM 3.0 写入文件 |
to_python(...) / to_python_file(...) | 生成重建线路的 Python 代码 |
decompose=True 等价于展开一层,也可以传入正整数指定层数。transpile_basis 和 gates_to_unroll 用于控制导出前的门基转译。
底层 unitarylab.backend.qasm 提供 gate_sequence_to_qasm*、qasm*_to_gate_sequence 和 circuit_from_gate_sequence,仅建议在直接处理 GateSequence 时使用。
支持范围
- 覆盖常用单比特门、参数门、受控门、SWAP、测量和自定义
gate。 - 参数必须是数值,不支持
if、while等经典控制流。 - 携带矩阵的
unitary门使用 UnitaryLab 扩展格式,可由自身还原,但不是标准互操作格式。 - 非连续块门可能内联展开,并非所有自定义门都能完整往返。
- OpenQASM 输入应来自可信来源,并在使用前限制文件大小;解析线路不会执行其中的 Python 代码,但超大线路仍可能消耗大量内存。
Python 源码
to_python() 当前只覆盖 rx、ry、rz、p、cx。包含 h 等其他门时会抛出 RuntimeError,默认 transpile() 也不保证满足这一门集合限制。
import numpy as np
codegen_qc = Circuit(2)
codegen_qc.p(np.pi, 0)
codegen_qc.ry(np.pi / 2, 0)
codegen_qc.cx(0, 1)
print(codegen_qc.to_python())导出后建议执行一次往返验证:比较门数量、测量映射,并在小型无测量线路上比较矩阵。
相关页面
最后更新于