Clifford+T branching simulator¶
模块¶
fieldqkit.sim.clifford_t
概览¶
该模块在 Clifford 稳定子模拟器 的基础上扩展支持任意非 Clifford 门——t/tdg、任意角度的 rx/ry/rz/u/u3、rxx/ryy/rzz、cp 等——采用 海森堡 Pauli 分支演化:
将可观测量保持为 Pauli 串的加权和
$$ O = \sum_i c_i\, P_i $$
并逐门反向共轭。对于 Clifford 门,每一项仍是单个 Pauli(走稳定子快通道,O(n) 一次);对于非 Clifford 门,单个 Pauli 会分裂为若干 Pauli 的线性组合(例如 T^\dagger X T = (X - Y)/\sqrt{2}),算法对所有分支保持精确的复系数与去重。
设非 Clifford 门数量为 k,最坏情况下分支数为 O(4^k);当 k 较小或 Pauli 串相互合并时实际开销远低于上界。复杂度上界 O(4^k · g · n),与状态向量法 O(g · 2^n) 互补:
| 场景 | 推荐 |
|---|---|
| 纯 Clifford | simulate_clifford_expectation(s) |
少量非 Clifford(k ≲ 15),比特数大(n 大) |
本模块 |
比特数小(n ≲ 18),非 Clifford 门多 |
simulate_statevector + expectation_pauli |
支持的门¶
- 所有 Clifford 门(直接继承
clifford.md列表); - 单比特任意旋转:
rx,ry,rz,u/u3,t,tdg; - 两比特旋转:
rxx,ryy,rzz,cp(分解为rzz+rz后处理)。
关键函数¶
simulate_clifford_t_expectation(qc, pauli, *, num_qubits=None, max_terms=None) -> float¶
- 反向逐门将 Pauli
pauli共轭到电路起点;非 Clifford 门触发分支。 - 终态读取
⟨0|·|0⟩:累加所有「只含I/Z」的分支项系数实部。 max_terms:若给出则在分支总数超过该阈值时抛出RuntimeError("...max_terms..."),用于守护内存与时间开销。num_qubits:稀疏物理布局场景下显式声明 Pauli 串长度。
simulate_clifford_t_expectations(qc, paulis, *, num_qubits=None, max_terms=None) -> Dict[str, float]¶
- 批量版本。
count_t_gates(qc) -> int¶
- 统计
t/tdg门数量。
count_non_clifford_gates(qc) -> int¶
- 统计所有非 Clifford 门数量(含任意旋转),可用于估算分支上界。
算法说明¶
- 状态用
Dict[Tuple[str, ...], complex]维护:键是 Pauli 串(长度n的I/X/Y/Z元组),值是复系数。 - 单比特旋转分支公式(围绕
Z轴的例子;X/Y同理):
$$ R_z^\dagger(\theta) X R_z(\theta) = \cos\theta\, X - \sin\theta\, Y $$
$$ R_z^\dagger(\theta) Y R_z(\theta) = \cos\theta\, Y + \sin\theta\, X $$
T/T†分支:
$$ T^\dagger X T = \tfrac{1}{\sqrt 2}(X - Y),\quad T^\dagger Y T = \tfrac{1}{\sqrt 2}(X + Y),\quad T^\dagger Z T = Z $$
(Tdg 翻转 Y 上的符号。)
U(θ, φ, λ)直接构造对应 SU(2) 矩阵,按矩阵元素分解为 4 个 Pauli 的线性组合。- 每步处理后对同 Pauli 串系数做去重合并,避免分支爆炸。
- 每应用一个 Clifford 门时优先走稳定子快通道(
conjugate_clifford_gate),仅当抛出CliffordError才走分支路径。
常见报错¶
RuntimeError("...max_terms exceeded..."):分支总数超过max_terms,应增大上限或改用simulate_statevector。ValueError:Pauli 串长度与num_qubits不一致;不支持的门。
关联用法¶
- 在
fieldqkit.algorithms.optimizer_utils._ideal_expectations_clifford_aware中作为 Clifford fitting 校准的可扩展理想期望路径:先尝试sim.clifford的稳定子快通道,遇到非 Clifford 门时回退到本模块的分支扩展,仍不可行时再退回 statevector。 - 闭环示例见
examples/demo_clifford_fitting.ipynb(8 比特Baihua真机线路 +run_auto自动校准)。
相关¶
clifford.md:纯 Clifford 快通道;statevector.md:稠密状态向量模拟;interface.md:自动后端选择。