Skip to content

时间调度 ​

本文是 QProg.to_instruction 生成的指令调度数据的解析与绘图 API 参考。

导入 ​

python
from pyqpanda3.visualization import (
    InstructionScheduleItem,
    parse_instruction_schedule,
    parse_instruction_schedules,
    draw_time_scheduling,
)

InstructionScheduleItem ​

InstructionScheduleItem 是一个冻结 dataclass,用于表示归一化后的单条指令。

字段类型说明
namestr门或标记名称,例如 RPhi、CZ、IDLE 或 Measure。
qubitstuple[int, ...]指令流中的物理量子比特编号,尚未应用显示偏移。
start_timeint开始周期。
durationfloat持续周期。持续时间为 0 时会绘制为标记。
paramstuple[float, ...]保留下来的门参数,用于检查和合并判断。
orderint指令在原始流中的索引,用作稳定排序依据。
is_markerbool是否绘制为零持续时间标记。
end_timefloat计算属性,等于 start_time + duration。

指令 JSON 格式 ​

解析器接受 QProg.to_instruction 生成的指令格式。每条指令都是单键对象:

指令Payload
RPhi[qubit, angle, phi, start_time]
CZ[q0, q1, start_time]
MS[q0, q1, start_time]
IDLE[qubit, duration, start_time]
ECHO[qubit, param, start_time]
Measure[[q0, q1, ...], start_time]

单个调度流可以写成 [{...}, {...}],也可以包裹为 [[{...}, {...}]]。多个调度流必须写成 [[{...}], [{...}]]。

parse_instruction_schedule ​

python
parse_instruction_schedule(
    instruction: str | Sequence,
    durations: Mapping[str, float] | None = None,
    backend: Any | None = None,
    strict: bool = True,
) -> list[InstructionScheduleItem]

解析恰好一个指令流。如果输入包含多个指令流,该函数会抛出 ValueError;此时请使用 parse_instruction_schedules。

parse_instruction_schedules ​

python
parse_instruction_schedules(
    instruction: str | Sequence,
    durations: Mapping[str, float] | None = None,
    backend: Any | None = None,
    strict: bool = True,
) -> list[list[InstructionScheduleItem]]

接受 [{...}]、[[{...}]] 或 [[{...}], [{...}]],并为每个指令流返回一个归一化调度列表。

draw_time_scheduling ​

python
draw_time_scheduling(
    instruction,
    durations=None,
    backend=None,
    output="mpl",
    qubits=None,
    title="QProg Instruction Schedule",
    width=None,
    height=None,
    show_labels=True,
    label_policy="auto",
    max_qubits_per_panel=None,
    time_window=None,
    qubit_offset=-1,
    merge_common_instructions=False,
    gate_filter=None,
    filter_measure=False,
    time_range=None,
    plotly_lane_height=None,
    strict=True,
)

当 output="mpl" 时返回 Matplotlib Figure,当 output="plotly" 时返回 Plotly Figure。如果输入包含多个指令流,则返回图对象列表。

持续时间来源 ​

持续时间按以下优先级解析:

  1. 显式传入的 durations,例如 {"RPhi": 40, "CZ": 40}。
  2. 后端时间属性:single_gate_timing 用于 RPhi,double_gate_timing 用于 CZ 和 MS,echo_gate_timing 用于 ECHO。
  3. IDLE 指令 payload 中的持续时间。
  4. 缺失持续时间的指令会作为零持续时间标记。

示例 ​

python
from pyqpanda3.visualization import parse_instruction_schedule, draw_time_scheduling

instruction = [
    {"RPhi": [20, 270.0, 90.0, 0]},
    {"RPhi": [29, 270.0, 90.0, 0]},
    {"CZ": [20, 29, 40]},
    {"RPhi": [29, 72.76854713789294, 90.0, 80]},
    {"Measure": [[29, 20], 120]},
]

items = parse_instruction_schedule(instruction, durations={"RPhi": 40, "CZ": 40})
print(items[0].name, items[0].end_time)
# 输出:RPhi 40.0

fig = draw_time_scheduling(
    instruction,
    durations={"RPhi": 40, "CZ": 40},
    title="Two-Qubit Schedule",
)
fig.savefig("schedule.png", dpi=160)

python
from pyqpanda3.visualization import draw_time_scheduling

multi_stream = [
    [
        {"RPhi": [20, 270.0, 90.0, 0]},
        {"RPhi": [29, 270.0, 90.0, 0]},
        {"CZ": [20, 29, 40]},
        {"RPhi": [29, 72.76854713789294, 90.0, 80]},
        {"Measure": [[29, 20], 120]},
    ],
    [
        {"RPhi": [20, 270.0, 90.0, 0]},
        {"RPhi": [29, 270.0, 90.0, 0]},
        {"CZ": [20, 29, 40]},
        {"RPhi": [29, 72.76854713789294, 90.0, 80]},
        {"Measure": [[29, 20], 120]},
    ],
]

figures = draw_time_scheduling(
    multi_stream,
    durations={"RPhi": 40, "CZ": 40},
    output="plotly",
    qubit_offset=-1,
)
for index, fig in enumerate(figures):
    fig.write_html(f"schedule-{index}.html")

参见 ​

Released under the MIT License.