Skip to Content

快速开始

本页通过 Bell 态线路说明安装、线路构建、纯态执行和线路测量。后端调优、密度矩阵和编译接口在对应参考页中说明。

本地模拟使用 execute();混态和噪声使用 execute_density(shots=..., seed=...)。导出 CUDA-Q 源码使用 to_python(framework="cudaq")。真机 submit() 返回任务对象,再由 job.result() 单次查询,详见对应参考页。

安装与导入

pip install unitarylab
from unitarylab import Circuit

支持的 Python 版本和可选组件见手册概览。

创建并执行 Bell 态线路

import numpy as np from unitarylab import Circuit circuit = Circuit(2) circuit.h(0) circuit.cx(0, 1) result = circuit.execute() assert result.state.shape == (4,) assert np.isclose(result.probability("00"), 0.5) assert np.isclose(result.probability("11"), 0.5) assert np.isclose(result.probability("01"), 0.0) assert np.isclose(result.probability("10"), 0.0)

Circuit(2) 创建两个量子比特以及同等大小的默认经典寄存器。h(0) 和 cx(0, 1) 生成 Bell 态

浮点输出会随 dtype 和后端产生微小舍入差异,因此示例使用 np.isclose() 验证概率,不依赖固定的小数文本。

查询状态和概率

print(result.state) print(result.probabilities) print(result.marginal_probabilities(qubits=[0])) print(result.expectation("ZZ", qubits=(0, 1)))
  • state 是最终状态向量。
  • probabilities 是完整计算基概率字典,包含零概率项。
  • 概率比特串采用 little-endian 表示,最右侧对应 qubit 0。
  • expectation() 返回指定可观测量的期望值。

上述查询不改变结果对象持有的量子态。

添加线路测量

measured = Circuit(2) measured.h(0) measured.cx(0, 1) measured.measure([0, 1], [0, 1]) shot_result = measured.execute(shots=1000, seed=7) assert set(shot_result.counts).issubset({"00", "11"}) assert sum(shot_result.counts.values()) == 1000 print(shot_result.counts)

measure([0, 1], [0, 1]) 将两个量子比特分别映射到经典比特 0 和 1。Bell 态只会产生相关结果 00 或 11,但两者的具体计数取决于随机采样。

shots 表示整条含测量线路的独立执行次数。counts 汇总全部执行,state 和 classical_results_map 对应最后一次执行。seed 为非负整数时采样可复现;seed=None 时不固定随机种子。

无线路测量的采样

未调用 Circuit.measure() 时,可从最终状态分布采样:

samples = result.sample(shots=10, qubits=[0, 1], seed=7) assert set(samples).issubset({"00", "11"})

sample() 不坍缩结果对象的状态。result.measure() 会执行投影测量并更新结果对象内部状态,两者用途不同。

绘制线路

text_diagram = measured.draw(output="text") print(text_diagram) measured.draw(filename="bell.png", title="Bell State")

文本输出适合终端;指定 filename 时,默认 Matplotlib 绘图器将线路保存为图片。

下一步

最后更新于