"""构建 Bell 线路并解释本地采样结果。

示例使用链式 ``Circuit`` API 添加量子门和终端测量。读取 counts 时要同时查看
bit order，否则无法判断 bitstring 的每一位对应哪个量子比特。
"""

from __future__ import annotations

import json

from cascaqit import Circuit


def main() -> None:
    """使用固定随机种子执行一个两量子比特纠缠线路。"""
    # H 门创建叠加态，CX 门让 q1 与 q0 产生关联。
    circuit = Circuit(2, program_id="lesson.digital.beginner")
    circuit.h(0).cx(0, 1).measure_all(key="readout")

    # 对第一次 Digital 实验而言，Circuit.run 是最短的本地执行路径。
    result = circuit.run(shots=32, seed=201, return_probabilities=True)
    program = circuit.to_program()

    payload = {
        "track": "digital_developer",
        "level": "beginner",
        "lesson": "bell_circuit",
        "facts": {
            "gate_names": [
                operation.definition.name
                for operation in program.circuit.operations
                if operation.definition.name != "measure"
            ],
            "counts_total": sum(result.counts.values()),
            "probability_states": sorted((result.probabilities or {}).keys()),
            "bit_order": result.metadata["bitstring_ordering"]["qubit_order"],
            "measurement_key": program.circuit.classical_registers[0].register_id,
        },
        "boundaries": {
            "hardware_execution": False,
            "cloud_execution": False,
            "network_accessed": False,
            "credentials_loaded": False,
        },
    }
    print(json.dumps(payload, sort_keys=True))


if __name__ == "__main__":
    main()
