检查离散化改变了哪些控制值¶
用公开的模拟目标规格校验 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 是控制数值的变化量,不是积分误差、采样标准误、门不保真度或最终量子态误差的上界。要判断物理影响,应在可比较的模拟设置下分别运行原控制和转换后的控制,再比较关心的可观测量。
尝试其他策略¶
- 改为
floor,负失谐会怎样变化? - 改为
ceil,幅度和时长会变成什么? - 改为
strict,接口会悄悄舍入,还是需要调用者读取诊断?
对这个模拟目标网格,floor 得到幅度 0.8、失谐 −0.301、时长 0.2。负数向下取整时会到更负的网格点。ceil 得到 0.801、−0.3、0.201。strict 保留偏离网格的值,并报告 DISCRETIZATION_STRICT_GRID_MISMATCH,不会自动替换为最近网格值。此时 field_reports 为空,也不能证明成功。
目标来自公开模拟规格。检查通过不表示具有当前设备校准、私有硬件预检或生产脉冲调度。校验中的 16 次采样只是输入约束,本课不会进行测量。更多规则见校验与离散化。下一课通过参考编译追踪转换后的输入。