跳转至

QCIS 原生指令

概览

  • 模块fieldqkit.circuit.qcis
  • 源文件qcis.py
  • 作用:提供 QCIS 原生指令原语,以及将 QuantumCircuit 直接转换为 QCIS 指令字符串的能力
  • QCIS 原生门集X2PX2MY2PY2MRZCZ(以及 I 用于 delay)

注意:本模块直接读取 QuantumCircuit.gates(tuple IR),不经过 QASM 文本中转。


核心类

Instruction(dataclass)

表示一条 QCIS 指令。

@dataclass
class Instruction:
    name: str                                          # 指令名(小写,如 'x2p', 'rz', 'cz')
    qubit_index: List[int]                             # 作用 qubit 索引列表
    arguments: Optional[List[Union[int, float]]] = None  # 参数列表(如旋转角),默认 None
属性 类型 说明
name str 指令名称
qubit_index List[int] 作用的 qubit 索引列表
arguments Optional[List[Union[int, float]]] 指令参数(角度、delay 时长等),默认 None

__str__ 方法生成标准 QCIS 格式字符串,例如:

  • Instruction("x2p", [0])"X2P Q0"
  • Instruction("rz", [1], [1.5708])"RZ Q1 1.5708"
  • Instruction("cz", [0, 1])"CZ Q0 Q1"

NativeQcisRules

将标准量子门分解为 QCIS 原生门序列的规则集。每个方法为 @staticmethod,输入一条 Instruction,返回 list[Instruction]

类常量

常量 说明
pi round(math.pi, 6) 使用 6 位精度的 π
i_duration 60 默认 identity delay 时长

分解规则一览

单比特离散门

方法 QCIS 分解
x(inp) X X2P · X2P
y(inp) Y Y2P · Y2P
z(inp) Z RZ(π)
h(inp) H Y2M · RZ(π)
sx(inp) √X X2P
sxdg(inp) √X† X2M
s(inp) S RZ(π/2)
sdg(inp) S† RZ(−π/2)
t(inp) T RZ(π/4)
tdg(inp) T† RZ(−π/4)
id(inp) I I(60)

单比特参数门

方法 QCIS 分解
rx(inp) Rx(θ) Y2M · RZ(θ) · Y2P
ry(inp) Ry(θ) X2P · RZ(θ) · X2M
rz(inp) Rz(θ) RZ(θ)(直通)
u(inp) U(θ,φ,λ) RZ(λ) · X2P · RZ(θ) · X2M · RZ(φ)

延时

delay 门由 circuit_to_qcis 直接处理,不经过 NativeQcisRulesQuantumCircuit.delay() 以秒存储时长;circuit_to_qcis 自动转换为纳秒后写入 QCIS I 指令。

双比特门

方法 QCIS 分解
cx(inp) CX Y2M(target) · CZ · Y2P(target)
cz(inp) CZ CZ(直通)
cy(inp) CY X2P(target) · CZ · X2M(target)
swap(inp) SWAP CX · CX(反向) · CX

三比特门

方法 QCIS 分解
ccx(inp) CCX (Toffoli) 标准 H-CX-T-T† 分解(15 条原生指令)

主转换函数

circuit_to_qcis(qc: QuantumCircuit) -> str

QuantumCircuit 直接转换为 QCIS 指令字符串,无需经过 QASM 文本中转。

参数 类型 说明
qc QuantumCircuit 待转换线路。应已完成 transpile(仅含 basis 门)。

返回:QCIS 指令字符串(每条指令一行)。

异常: - NotImplementedError:线路含 NativeQcisRules 未覆盖的门。

功能门处理

gate tuple QCIS 输出
('measure', [q...], [c...]) 每个 qubit 生成 M Q<i>
('reset', q) RST Q<q>
('barrier', qubits) B Q<q0> Q<q1> ...
('delay', t, qubits) 每个 qubit 生成 I Q<i> <t>

示例

基本用法

from fieldqkit.circuit import QuantumCircuit
from fieldqkit.circuit.qcis import circuit_to_qcis

qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()

print(circuit_to_qcis(qc))
# Y2M Q0
# RZ Q0 3.141593
# Y2M Q1
# CZ Q0 Q1
# Y2P Q1
# M Q0
# M Q1

分解规则

QCIS 的门分解规则集中定义在 NativeQcisRules 中(每个门对应一个静态方法,返回 Instruction 列表)。

from fieldqkit.circuit.qcis import NativeQcisRules, Instruction

# NativeQcisRules 中每个门的分解形如:
# @staticmethod
# def h(inp):
#     return [Instruction("y2m", inp.qubit_index),
#             Instruction("rz", inp.qubit_index, [NativeQcisRules.pi])]

相关页面