Skip to content

Transpiler ​

Transpiler 用于把逻辑量子程序映射到目标拓扑,统一完成 layout、路由、门分解和优化。

创建 ​

python
from pyqpanda3.transpilation import Transpiler

transpiler = Transpiler()

transpile 重载 ​

基于边列表的重载 ​

python
Transpiler.transpile(
    prog: QProg,
    chip_topology_edges: list[list[int]] = [],
    init_mapping: dict[int, int] = {},
    optimization_level: int = 2,
    basic_gates: list[str] = [],
) -> QProg

当你想显式传入拓扑边列表和目标门集时,使用这个重载。

参数类型说明
progQProg需要转译的量子程序。
chip_topology_edgeslist[list[int]]物理耦合边,例如 [[0, 1], [1, 2]]。
init_mappingdict[int, int]可选的初始虚拟到物理映射。
optimization_levelint优化等级,通常为 0、1 或 2。
basic_gateslist[str]分解后的目标门集,例如 ["U3", "CZ"]。

基于 ChipBackend 的重载 ​

python
Transpiler.transpile(
    prog: QProg,
    backend: ChipBackend,
    init_mapping: dict[int, int] = {},
    optimization_level: int = 2,
) -> QProg

当目标设备已经由 ChipBackend 描述时,使用这个重载。

带 layout_method 的 ChipBackend 重载 ​

python
Transpiler.transpile(
    prog: QProg,
    backend: ChipBackend,
    init_mapping: dict[int, int] = {},
    optimization_level: int = 2,
    layout_method: str = "default",
) -> QProg
参数类型说明
layout_methodstrlayout 策略。传入 "fidelity" 时,会根据后端拓扑和保真度数据自动计算初始映射。

virtual_z ​

python
virtual_z(prog: QProg) -> QProg

把已经分解到 X1 / RZ / CZ / RPhi 门族的程序转换成 RPhi / CZ 形式,同时保留测量操作。对于需要把虚拟 Z 相位折叠进 RPhi 的指令导出流程,这个函数是关键桥接步骤。

fidelity_layout ​

python
fidelity_layout(
    prog: QProg,
    chip_topology_edges: list[list[int]],
    single_gate_fidelity: dict[int, float] = {},
    readout_fidelity: dict[int, float] = {},
    double_gate_fidelity: dict[tuple[int, int], float] = {},
    max_candidate_blocks: int = 32,
    max_mappings_per_block: int = 256,
    distance_penalty_weight: float = 1.0,
) -> dict[int, int]

计算一个虚拟到物理的初始映射,优先选择连通且单比特、读出、双比特保真度更高的物理区域。

参数类型说明
progQProg用于驱动布局搜索的量子程序。
chip_topology_edgeslist[list[int]]物理耦合边。
single_gate_fidelitydict[int, float]每个物理量子比特的单门保真度。
readout_fidelitydict[int, float]每个物理量子比特的读出保真度。
double_gate_fidelitydict[tuple[int, int], float]每条物理耦合边上的双比特门保真度。
max_candidate_blocksint最多评估多少个候选连通区域。
max_mappings_per_blockint每个区域最多尝试多少种映射。
distance_penalty_weightfloat非邻接交互的距离惩罚权重。

ChipBackend 中的保真度字段 ​

启用 fidelity-aware layout 时,ChipBackend 可以携带下面这些校准数据:

字段类型说明
single_gate_fidelitydict[int, float]每个物理量子比特的单比特门保真度。
readout_fidelitydict[int, float]每个物理量子比特的读出保真度。
double_gate_fidelitydict[tuple[int, int], float]每条物理耦合边的双比特门保真度。
gate_fidelitydict[tuple[str, tuple[int, ...]], float]逐指令的保真度,键为 (门名, 有序量子比特元组)。transpilation_metrics() 与保真度驱动近似会优先匹配这里的数据,命中即走精确分支。设置时校验每个键的门名与比特数;任意条目超出 [0, 1] 抛出 ValueError。

这些字段既可以手动填写,也可以通过 service.backend(...).chip_info().get_chip_backend() 从 QCloud 元数据中获取(云端元数据会填充 gate_fidelity)。

可运行示例 ​

python
from pyqpanda3.core import QProg, H, CZ, measure
from pyqpanda3.transpilation import ChipBackend, Transpiler, fidelity_layout

prog = QProg()
prog << H(0) << CZ(0, 1) << measure(0, 0) << measure(1, 1)

backend = ChipBackend()
backend.chip_topology_edges = [[0, 1], [1, 2]]
backend.basic_gates = ["RPhi", "CZ"]
backend.single_gate_fidelity = {0: 0.99, 1: 0.99, 2: 0.99}
backend.readout_fidelity = {0: 0.90, 1: 0.90, 2: 0.99}
backend.double_gate_fidelity = {(0, 1): 0.90, (1, 2): 0.99}

mapping = fidelity_layout(
    prog,
    backend.chip_topology_edges,
    backend.single_gate_fidelity,
    backend.readout_fidelity,
    backend.double_gate_fidelity,
)

transpiled = Transpiler().transpile(
    prog,
    backend,
    {},
    1,
    "fidelity",
)

print(mapping)
print(len(transpiled.operations()) > 0)

相关页面 ​

Released under the MIT License.