从原始结果追踪到视图和报告¶
检查 Hadamard 线路的结果,再从同一份记录生成结果视图和标准 Digital 报告。请先阅读 Backend 与 Job及读懂结果,使用安装好的环境。
运行前先预测:0 和 1 的概率各占一半。脚本请求 16 次采样,同时返回状态概率,因此可以区分状态本身的性质和有限次样本。
将原始结果与诊断一起保存¶
"""对照 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()
python3 examples/user/tracks/sdk_platform_engineer/02_foundation_result_diagnostics_zh.py
ResultIR 保存执行结果。build_result_view(result) 将公开结果字段复制到视图中;visualize(result, profile='digital') 把保存的事实组织成报告章节。这两步都不会调用后端,另算一份替代结果。
{
"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"
}
查看 view_source_matches、view_counts_match 和 source_unchanged。前两项核对来源标识和计数,第三项比较生成视图和报告前后的结果哈希。状态概率应仍然各为一半。
metadata_only 描述视图的生成方式:读取公开结果数据,不解析外部产物文件,也不执行程序。它不表示视图中没有计数或概率。view_backend_called 应为 false。
诊断不全是错误。需要结合严重程度、代码、发生阶段、对象路径和建议一起阅读。这个成功的 Digital 运行也包含完成和结果一致性的提示信息。如果接入程序把非空诊断列表一律视为失败,就会拒绝正常结果。反过来,报告能正常画图,也不能消除警告或不符合物理预测的问题。
发现差异后追溯来源¶
- 打印
result.counts和view.counts。两类计数不均匀,是否表示视图出错? - 设置
return_probabilities=False。还有哪些数据可用?应用应如何展示缺失的概率? - 用
visualize(result, output='artifacts/result-check.html', profile='digital', language='zh')保存报告,不重跑线路,重新打开文件并与原始计数核对。
原始结果和视图的计数应完全一致,即使计数不是 8/8。不返回概率时,计数和诊断仍可使用;概率应显示为不可用,不能补成零。HTML 报告适合展示和审阅,但复现时仍应保留结构化结果与源码。
来源 ID 用于定位记录,来源哈希可以帮助发现记录变化。它们都不能单独证明线路、单位或解码在科学上正确。接口见结果诊断与可视化。下一课查看一个汇总任务中的多个扫描结果。