OriginIR、OriginIR-ext 与 OpenQASM 2.0 的关系¶
概览¶
UnifiedQuantum 支持三种量子线路描述语言,它们之间存在明确的超集-子集关系:
┌─────────────────────────────────────────────────────────────┐
│ OriginIR-ext (超集) │
│ UnifiedQuantum 的默认本地编程语言 │
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ OriginIR (官方子集) │ │
│ │ 本源量子云服务接受的格式 │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────┐ │ │
│ │ │ 两者共有的基础门集 │ │ │
│ │ │ H, X, Y, Z, S, SX, T, I │ │ │
│ │ │ RX, RY, RZ, U1, U2, U3 │ │ │
│ │ │ CNOT, CZ, SWAP, TOFFOLI, CSWAP │ │ │
│ │ └──────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ OriginIR-ext 额外支持: │
│ 门: ECR, ISWAP, XX, YY, ZZ, XY, PHASE2Q, UU15 │
│ RPhi, RPhi90, RPhi180 │
│ 特性: DEF/ENDDEF, error channels │
│ 语法: inline dagger, controlled_by │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ OpenQASM 2.0 (跨平台) │
│ IBM / Quafu / Quark 平台的提交格式 │
│ 与 OriginIR 有部分重叠,但非超集关系 │
└─────────────────────────────────────────────────────────────┘
三种语言的定位¶
语言 |
定位 |
使用场景 |
|---|---|---|
OriginIR-ext |
UnifiedQuantum 默认本地语言 |
本地编程、模拟、开发调试。 |
OriginIR (官方) |
本源量子云服务接受的语言 |
提交到 OriginQ 云平台时自动转换为此格式 |
OpenQASM 2.0 |
跨平台标准 |
提交到 IBM、Quafu、Quark 平台 |
OriginIR-ext 相对 OriginIR 的扩展¶
扩展门集¶
以下门在 OriginIR-ext 中可直接使用,提交到 OriginQ 云时会自动分解为官方门:
门 |
类型 |
分解为 |
|---|---|---|
|
2q, 0p |
X, RX, CNOT, S |
|
2q, 0p |
S, H, CNOT |
|
2q, 1p |
H, CNOT, RZ |
|
2q, 1p |
RX, CNOT, RZ |
|
2q, 1p |
CNOT, RZ |
|
2q, 1p |
XX, YY (递归分解) |
|
2q, 3p |
U1, CU1 |
|
2q, 15p |
U3, XX, YY, ZZ (KAK 分解) |
|
1q, 2p |
RZ, RX |
|
1q, 1p |
RZ, RX |
|
1q, 1p |
RZ, RX |
扩展特性¶
DEF/ENDDEF: 子程序定义块,支持参数化复用
Error Channels: 噪声模拟通道(Depolarizing, BitFlip, PhaseFlip 等)
Inline 语法:
dagger后缀、controlled_by(q[...])子句(替代 DAGGER/CONTROL 块)
转换路径¶
OriginIR-ext ──convert_originir_ext_to_originir()──▶ OriginIR (官方)
│ │
│ │
├──circuit.qasm──────────────────────────────────▶ QASM 2.0
│ │
│ │
OriginIR ──convert_qasm_to_oir()──────────────────────◀ QASM 2.0
编程接口¶
from uniqc import Circuit
from uniqc.compile import convert_originir_ext_to_originir
c = Circuit(2)
c.h(0)
c.iswap(0, 1) # OriginIR-ext 扩展门
c.xx(0, 1, 0.5) # OriginIR-ext 扩展门
# 本地使用:OriginIR-ext 格式(默认)
print(c.originir)
# 提交到 OriginQ 云:自动转换为官方 OriginIR
print(c.originir_official)
# 手动转换
official_str = convert_originir_ext_to_originir(c.originir)
编译器管线中的转换¶
from uniqc.compile import compile
# output_format="originir" → 输出官方 OriginIR(已分解扩展门)
result = compile(circuit, output_format="originir")
# output_format="originir-ext" → 输出 OriginIR-ext(保留扩展门)
result = compile(circuit, output_format="originir-ext")
# output_format="auto" → 根据输入自动选择(OriginIR 输入默认输出 originir-ext)
result = compile(circuit, output_format="auto")
何时使用哪种格式¶
日常开发: 使用 OriginIR-ext。通过
CircuitAPI 构建线路,circuit.originir即为 OriginIR-ext 格式提交到 OriginQ 云: 使用
circuit.originir_official或compile(output_format="originir"),扩展会自动分解提交到 IBM/Quafu/Quark: 使用 QASM 格式,
compile(output_format="qasm")或circuit.qasm本地模拟: 接受 OriginIR-ext 格式,无需转换
官方 OriginIR 的完整规范见 OriginIR 官方规范。 OriginIR-ext 的完整规范见 OriginIR-ext 规范。