跳转至

检查离散化改变了哪些控制值

用公开的模拟目标规格校验 Analog 程序,再应用明确的网格策略,逐项检查数值变化。请先完成参数投影和物理单位,使用安装好的环境。

输入幅度为 0.8004 rad/us,失谐为 −0.3004 rad/us,两者时长均为 0.2004 us。这些偏差是有意设置的,便于观察允许的连续数值与网格数值之间的区别。

先校验,再检查转换

"""分别检查校验和离散化两个编译阶段。

校验先检查程序语义与公开的 Target 约束,离散化再按指定策略量化受支持字段。
输出保留原值、目标值、误差、单位和对象路径,但不代表已经完成硬件 preflight。
"""

from __future__ import annotations

import json

from cascaqit import AHSProgram, AtomRegister, MockNeutralAtomTarget, Waveform


def main() -> None:
    """基于公开 mock target 校验并离散化一个 waveform。"""
    target = MockNeutralAtomTarget.v0_1()
    program = (
        AHSProgram(
            AtomRegister.line(count=1, spacing=5.0),
            program_id="lesson.compiler.discretization",
        )
        .drive(
            rabi=Waveform.constant(0.8004, duration=0.2004),
            detuning=Waveform.constant(-0.3004, duration=0.2004),
            phase=0.0,
        )
        .measure()
    )
    validated = program.validate(target, shots=16)
    discretized, report = validated.discretize(target, policy="nearest")

    payload = {
        "track": "compiler_engineer",
        "level": "advanced",
        "lesson": "validation_discretization",
        "facts": {
            "validation_errors": [
                item.code for item in validated.diagnostics if item.severity == "error"
            ],
            "policy": report.policy,
            "changed": report.original_program_hash != report.discretized_program_hash,
            "field_changes": [item.to_dict() for item in report.field_reports],
            "field_paths": [item.path for item in report.field_reports],
            "lifecycle": discretized.program_ir.lifecycle_state,
            "hardware_preflight_performed": False,
        },
        "boundaries": {
            "hardware_execution": False,
            "cloud_execution": False,
            "network_accessed": False,
            "credentials_loaded": False,
        },
    }
    print(json.dumps(payload, sort_keys=True))


if __name__ == "__main__":
    main()

下载完整脚本

python3 examples/user/tracks/compiler_engineer/04_advanced_validation_discretization_zh.py

校验检查程序及公开 SDK 能看到的目标约束;离散化则按策略将支持的字段映射到网格,并返回新程序和报告。校验通过不表示全部数值已经落在网格上。

{
  "boundaries": {
    "cloud_execution": false,
    "credentials_loaded": false,
    "hardware_execution": false,
    "network_accessed": false
  },
  "facts": {
    "changed": true,
    "field_changes": [
      {
        "absolute_error": 0.0004,
        "discretized_value": 0.8,
        "original_value": 0.8004,
        "path": "hamiltonian.terms.rabi.values[0]",
        "unit": "rad/us"
      },
      {
        "absolute_error": 0.0004,
        "discretized_value": 0.2,
        "original_value": 0.2004,
        "path": "hamiltonian.terms.rabi.duration",
        "unit": "us"
      },
      {
        "absolute_error": 0.0004,
        "discretized_value": -0.3,
        "original_value": -0.3004,
        "path": "hamiltonian.terms.detuning.values[0]",
        "unit": "rad/us"
      },
      {
        "absolute_error": 0.0004,
        "discretized_value": 0.2,
        "original_value": 0.2004,
        "path": "hamiltonian.terms.detuning.duration",
        "unit": "us"
      }
    ],
    "field_paths": [
      "hamiltonian.terms.rabi.values[0]",
      "hamiltonian.terms.rabi.duration",
      "hamiltonian.terms.detuning.values[0]",
      "hamiltonian.terms.detuning.duration"
    ],
    "hardware_preflight_performed": false,
    "lifecycle": "discretized",
    "policy": "nearest",
    "validation_errors": []
  },
  "lesson": "validation_discretization",
  "level": "advanced",
  "track": "compiler_engineer"
}

使用 nearest 时,幅度变为 0.8,失谐变为 −0.3,两个时长均变为 0.2,各自单位不变。每项绝对变化为 0.0004。Rabi 和失谐分别记录时长,因此共有四个变化字段;两个时长条目不是两个连续时间段。

field_changes 给出原值、新值、绝对误差、单位和路径。程序哈希变化表示转换确实改变了输入,但哈希或 discretized 状态标签都不能证明这种修改适合当前实验,还需要检查报告和诊断。

这里的 absolute_error 是控制数值的变化量,不是积分误差、采样标准误、门不保真度或最终量子态误差的上界。要判断物理影响,应在可比较的模拟设置下分别运行原控制和转换后的控制,再比较关心的可观测量。

尝试其他策略

  1. 改为 floor,负失谐会怎样变化?
  2. 改为 ceil,幅度和时长会变成什么?
  3. 改为 strict,接口会悄悄舍入,还是需要调用者读取诊断?

对这个模拟目标网格,floor 得到幅度 0.8、失谐 −0.301、时长 0.2。负数向下取整时会到更负的网格点。ceil 得到 0.801、−0.3、0.201。strict 保留偏离网格的值,并报告 DISCRETIZATION_STRICT_GRID_MISMATCH,不会自动替换为最近网格值。此时 field_reports 为空,也不能证明成功。

目标来自公开模拟规格。检查通过不表示具有当前设备校准、私有硬件预检或生产脉冲调度。校验中的 16 次采样只是输入约束,本课不会进行测量。更多规则见校验与离散化。下一课通过参考编译追踪转换后的输入。

English version

SDK 1.0.8a · `6eff6362`