跳转至

从原始结果追踪到视图和报告

检查 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 运行也包含完成和结果一致性的提示信息。如果接入程序把非空诊断列表一律视为失败,就会拒绝正常结果。反过来,报告能正常画图,也不能消除警告或不符合物理预测的问题。

发现差异后追溯来源

  1. 打印 result.counts 和 view.counts。两类计数不均匀,是否表示视图出错?
  2. 设置 return_probabilities=False。还有哪些数据可用?应用应如何展示缺失的概率?
  3. 用 visualize(result, output='artifacts/result-check.html', profile='digital', language='zh') 保存报告,不重跑线路,重新打开文件并与原始计数核对。

原始结果和视图的计数应完全一致,即使计数不是 8/8。不返回概率时,计数和诊断仍可使用;概率应显示为不可用,不能补成零。HTML 报告适合展示和审阅,但复现时仍应保留结构化结果与源码。

来源 ID 用于定位记录,来源哈希可以帮助发现记录变化。它们都不能单独证明线路、单位或解码在科学上正确。接口见结果诊断与可视化。下一课查看一个汇总任务中的多个扫描结果。

English version

SDK 1.0.8a · `8b227bff`