从结果中提取数据与诊断¶
先保存 ResultIR,再用它生成表格或报告。图表是结果的展示方式;修改图表不会重新运行实验,也不会改变原来的采样。
| 你要读什么 | 检查方式 |
|---|---|
| 测量统计 | 读取 counts,先求总数,再结合位序解释每个字符串 |
| 状态概率 | 读取可选的 probabilities;没有请求或结果空间不适用时可能为 None |
| 期望值 | 读取对应观测量结果,不能把采样频率直接当作任意 Observable 的期望值 |
| 位序 | 读取本次结果的顺序记录;不要由 Bell 态的对称计数猜顺序 |
| 警告和错误 | 按 diagnostics 的 severity、code、object_path 与 suggestion 定位 |
| 数值设置与成本 | 查看实际执行配置、求解器记录和资源用量,而非只看请求值 |
结果、视图和报告怎样对应¶
这个例子保存源结果摘要,建立只读视图,再生成报告对象。它检查源结果是否保持不变,以及视图的计数和结果标识是否对应。
"""对照 Result、Diagnostics、ResultView 和标准报告。
``ResultIR`` 保存原始结果;ResultView 和 visualization report 都从它派生,用于查询
或展示。创建这些视图不会重跑 Job,也不会产生另一份权威结果。
"""
from __future__ import annotations
import json
from cascaqit import Circuit, build_result_view, visualize
def main() -> None:
"""创建一个结果,并检查它的源表示和派生表示。"""
result = (
Circuit(1, program_id="lesson.platform.result")
.h(0)
.measure_all()
.run(shots=16, seed=402, return_probabilities=True)
)
source_hash = result.stable_hash()
view = build_result_view(result)
report = visualize(result, profile="digital")
payload = {
"track": "sdk_platform_engineer",
"level": "foundation",
"lesson": "result_diagnostics",
"facts": {
"result_id": result.result_id,
"source_unchanged": source_hash == result.stable_hash(),
"view_counts_match": view.counts == result.counts,
"view_backend_called": view.backend_called,
"probabilities": result.probabilities,
"diagnostic_severities": [item.severity for item in result.diagnostics],
"diagnostic_codes": [item.code for item in result.diagnostics],
"view_metadata_only": view.metadata_only,
"view_source_matches": view.result_id == result.result_id,
"report_profile": report.profile,
"report_sections": [section.section_id for section in report.sections],
},
"boundaries": {
"hardware_execution": False,
"cloud_execution": False,
"network_accessed": False,
"credentials_loaded": False,
},
}
print(json.dumps(payload, sort_keys=True))
if __name__ == "__main__":
main()
python examples/user/tracks/sdk_platform_engineer/02_foundation_result_diagnostics_zh.py
{
"boundaries": {
"cloud_execution": false,
"credentials_loaded": false,
"hardware_execution": false,
"network_accessed": false
},
"facts": {
"diagnostic_codes": [
"DIGITAL_SIMULATION_COMPLETED",
"DIGITAL_RESULT_ALIGNMENT_VALID"
],
"diagnostic_severities": [
"info",
"info"
],
"probabilities": {
"0": 0.5,
"1": 0.5
},
"report_profile": "digital",
"report_sections": [
"experiment.design",
"experiment.validate",
"experiment.plan",
"experiment.execute",
"experiment.state",
"experiment.measure",
"experiment.analyze"
],
"result_id": "result.lesson.platform.result",
"source_unchanged": true,
"view_backend_called": false,
"view_counts_match": true,
"view_metadata_only": true,
"view_source_matches": true
},
"lesson": "result_diagnostics",
"level": "foundation",
"track": "sdk_platform_engineer"
}
source_unchanged、view_counts_match 和 view_source_matches 应为 true,view_backend_called 为 false。诊断中出现 info 并不等于失败;反过来,没有 error 也不能证明你的实验假设正确。
保存与复查¶
result.to_json() 返回 JSON 文本,不自动写文件。保存时同时记录程序、绑定值、seed、SDK 提交、方法和采样预算。需要图形展示时,用 visualize 指定 HTML 输出,并保留原始结果。
遇到结果缺字段,先确认本次请求和后端是否会提供它。原子丢失的结果可能含擦除状态,普通二进制概率分布不一定适用。扫描结果则应先逐点判断成功与失败,再读取各点 ResultIR。