PREPARE–SELECT 分解(PREPARE–SELECT Decomposition)¶
English · 简体中文
类别 C5/C1 · 模块
oracq.algorithms.common.prepare_select· 阶段 V4
概述¶
LCU 分解 \(H = \sum_i c_i P_i\) 的块编码标准组装(Low & Chuang 2019;Babbush et al. 2018,模块 docstring 引用;input model 词汇中的 BE / HAM):
PREPARE 在 selector 寄存器上制备振幅 \(\propto \sqrt{|c_i|}\) 的态,SELECT 按 selector 值对 target 施加第 \(i\) 个 Pauli 字。系数相位按仓库惯例进 SELECT(经 global_phase 施加),PREPARE 只编码模长。本页覆盖通用分解与 gate / QRAM / abstract 三层 PREPARE;alias 采样路线单独成页(见 Alias 采样制备)。
接口与输入模型¶
abstract_prepare(coefficients, *, work_width=0, name=None)
gate_prepare(coefficients, *, name=None)
qram_prepare(coefficients, *, angle_width=8)
select_pauli(terms)
lcu_prepare_select(terms, *, prepare=None)
API 入口:abstract_prepare、gate_prepare、qram_prepare、select_pauli
coefficients:至少两个有限复系数、不全为零(单项请直接用scale)。abstract_prepare:开放声明,系数写入声明属性,work_width须与后续绑定实现的 work 宽度一致(gate 为 0,QRAM 为 selector 位宽加角度位宽)。qram_prepare:返回QramPreparation(preparation, memory),角表memory = {"angles": ...}由调用方作为 QRAM 数据绑定(angle_width2..32)。select_pauli/lcu_prepare_select的terms:(系数, Pauli 字)序列或PauliHamiltonian;字仅允许IXYZ且各项等宽,SELECT 至少两项。lcu_prepare_select:prepare缺省gate_prepare,也可传 abstract / QRAM / alias 句柄(经as_state_preparation适配);单项退化为scale(c, pauli_word)。
返回对象属性:
对象 |
属性 |
|---|---|
PREPARE 各版( |
|
|
寄存器 |
|
|
实现要点¶
gate 版直接复用 gate_state_prep 的多路复用 Ry 旋转树(幅度 \(\sqrt{|c_i|/\alpha}\) 补零到 \(2^{\text{selector}}\));QRAM 版复用 qram_state_prep 旋转树,角表由 qram_state_angles 生成。块编码的 signal 寄存器布局:低 selector_width 位是 selector,高位是 PREPARE 的 work(alias 版为纯化 junk);PREPARE 需满足 zero_input 契约且目标宽度与 selector 位宽一致,否则生成期拒绝。
SELECT 的控制条件按 selector 二进制值用 RIR Control 原语表达;需要一元迭代时由后端把多比特控制降级实现,生成阶段不展开。产物可直接交给 transforms.qubitization_walk。适用边界:gate PREPARE 门数随项数指数增长;QRAM 版有角表量化误差(分布对拍容差 0.02)。
验证方案¶
类别 C5/C1:PREPARE / SELECT oracle 属数据访问层(C5),块编码组装的 (0,0) 块按 C1 与稠密矩阵逐点对拍(判定准则见 ../development/validation-plan.md §2)。三层证据位于 tests/core/test_prepare_select.py:PrepareSelectTests(4 项测试哈密顿量 TERMS,α = 2.2):
结构:
test_gate_and_qram_prepare_bindings_agree的声明与槽位断言;test_pauli_hamiltonian_input_and_single_term_shortcut(PauliHamiltonian输入、单项 scale 捷径);test_bad_inputs_fail_at_generation(单项 / 全零 / 非有限系数、SELECT 项数与字宽与字母违例、PREPARE 宽度不匹配等生成期拒绝)。数值:
test_select_applies_indexed_pauli_word_with_phase——SELECT 逐 selector 值与稠密 Pauli 矩阵 × 系数相位逐元对拍(places = 11);test_block_encoding_recovers_hamiltonian_over_alpha——BE 的 (0,0) 块乘 α 后与稠密哈密顿量对拍(places = 10,经witness.assert_block_equals);test_qram_prepare_block_encoding_approaches_hamiltonian(QRAM PREPARE 版 delta = 0.02);test_qubitization_walk_composition(直接接qubitization_walk,signal = 0 块 = H/α,places = 10)。绑定:
test_gate_and_qram_prepare_bindings_agree——gate 版 selector 幅度与 \(\sqrt{|c|/\alpha}\) 对拍(places = 11),abstract 槽经bind绑定 gate 实现后分布精确不变,QRAM 绑定经Binding挂角表后幅度对拍(delta = 0.02);abstract → gate 在块编码内部的绑定由test_abstract_prepare_binds_inside_block_encoding覆盖(绑定后块不变,places = 10)。
已知缺口与计划阶段¶
模块级缺口集中在 alias 路线(见 Alias 采样制备);此外统一的三绑定一致性参数化(同一声明逐绑定对拍,oracles / prepare_select / graph_walks / data_loading 铺开)待 V4,现有 gate / QRAM / abstract 各自独立见证。与 validation-coverage.md 的 prepare_select.py 行一致。
相关链接¶
源码:
src/oracq/algorithms/common/prepare_select.py同组页面:Alias 采样制备、态制备 Oracle、XOR 数据库
API 参考:PREPARE-SELECT 分解
概念:Oracle 与算子表示
验证矩阵:验证覆盖矩阵
数值验证¶
论文级数值验证脚本:tests/verification/verify_blockencoding.py(真实后端执行,无 mock、无 skip;2026-09-16 共 73 个案例全部通过),产物 out/verification/blockencoding.json。本页对应 gate-prepare-*、select-pauli-*、lcu-prepare-select-*、qram-prepare-*、alias-prepare-*、abstract-prepare-* 共 12 个案例。
实验设计:
gate PREPARE 的 selector 振幅与 \(\sqrt{|c_i|/\alpha}\) 逐点对拍(4 项与 5 项补零两组,补零槽位振幅须为零),reference / rir-pysparq / adapter-pysparq 三路径交叉;
select_pauli逐 selector 值读出末态,与 \(e^{i\varphi_i}P_i\) 的稠密矩阵逐元对拍;lcu_prepare_select的 (0,0) 块乘 α 后与 numpy 独立组装的 \(\sum_i c_i P_i\) 对拍:w1 两项、w2 实/复系数、w3 六项多规模,w1/w2 另走 OriginIR-ext + UniQCto_matrix全幺正提取;QRAM PREPARE 的角表量化:angle_width 8→12 的 TVD 收敛(reference 与 rir 逐振幅一致);
alias 采样 PREPARE:target 边缘分布 TVD 对照解析界 \(2^{\text{selector}}\cdot 2^{-\text{precision}}\),alias 版 PREPARE–SELECT 块编码的块误差同界控制;
开放声明
abstract_prepare经bind在块编码内部绑定 gate 实现后,块与直接组装逐振幅一致。
案例 |
规模 |
后端路径 |
指标 |
数值 |
|---|---|---|---|---|
|
4 项,selector 2 |
三路径 |
最大振幅误差 |
0 |
|
5 项(补 3 零槽) |
三路径 |
最大振幅误差 |
1.1e-16 |
|
4 项(含复相位 0.2j) |
reference |
max_error |
0 |
|
1 位 2 项,α=1.4 |
to_matrix + 三路径 |
max_error |
3.5e-16 |
|
2 位 3 项,α=2.2 |
to_matrix + 三路径 |
max_error |
2.2e-16 |
|
2 位 4 项复系数,α=2.14 |
三路径 |
max_error |
1.7e-16 |
|
3 位 6 项,α=2.35 |
三路径 |
max_error |
2.3e-16 |
|
4 项 |
reference + rir |
TVD |
4.9e-3 / 4.0e-4 |
|
4 项 |
reference + rir |
TVD(界 6.3e-2 / 3.9e-3) |
3.9e-3 / 2.4e-4 |
|
α=2.2,precision 10 |
reference + rir |
块误差(界 3.9e-3) |
3.9e-4 |
|
3 项,α=2.2 |
reference |
max_error / bind_deviation |
2.2e-16 / 0 |
复现命令:
PYTHONPATH=src <含 pysparq+uniqc 的解释器> tests/verification/verify_blockencoding.py
产物:out/verification/blockencoding.json。