快速开始
本页通过 Bell 态线路说明安装、线路构建、纯态执行和线路测量。后端调优、密度矩阵和编译接口在对应参考页中说明。
本地模拟使用 execute();混态和噪声使用 execute_density(shots=..., seed=...)。导出 CUDA-Q 源码使用 to_python(framework="cudaq")。真机 submit() 返回任务对象,再由 job.result() 单次查询,详见对应参考页。
安装与导入
pip install unitarylabfrom 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 绘图器将线路保存为图片。
下一步
最后更新于