QDA-tridiagonal 工作流¶
QDA-tridiagonal 是当前 pyqres 中最重要的 register-level 算法工作流之一。
它不使用 QRAM,而是通过 BlockEncodingTridiagonal 编码三对角矩阵。
组件¶
BlockEncodingTridiagonal手写 Python composite,位于
pyqres.algorithms.block_encoding。 它使用SplitRegister、Rot_GeneralStatePrep、PlusOneOverflow、Reflection_Bool等 primitive 构造三对角矩阵 block encoding。WalkS_Primitive手写 QDA walk operator,位于
pyqres.algorithms.qda_solver。QDALinearSolverYAML 生成的 composite,位于
pyqres.generated。 它接收encode_A/encode_boperation 参数,并在 adiabatic steps 中调用WalkS_Primitive。
最小 QEC lowering 示例¶
from pyqres.algorithms.block_encoding import BlockEncodingTridiagonal
from pyqres.core.lowering import to_abstract_circuit
from pyqres.core.metadata import RegisterMetadata
from pyqres.generated import QDALinearSolver
rm = RegisterMetadata.get_register_metadata()
rm.declare_register("main", 2, "UnsignedInteger")
rm.declare_register("anc_UA", 4, "UnsignedInteger")
rm.declare_register("anc_1", 1, "Boolean")
rm.declare_register("anc_2", 1, "Boolean")
rm.declare_register("anc_3", 1, "Boolean")
rm.declare_register("anc_4", 1, "Boolean")
def make_enc_A(reg_list=None, param_list=None):
return BlockEncodingTridiagonal(
reg_list=reg_list,
main_reg=reg_list[0],
anc_UA=reg_list[1],
alpha=0.5,
beta=0.3,
)
op = QDALinearSolver(
reg_list=["main", "anc_UA", "anc_1", "anc_2", "anc_3", "anc_4"],
param_list=[2.0, 1.0],
operations=[make_enc_A],
)
circuit = to_abstract_circuit(op)
矩阵尺寸¶
main register 的 bit 数决定矩阵维度:
|
矩阵维度 |
当前测试状态 |
|---|---|---|
1 |
2 x 2 |
可自动 lowering 到 |
2 |
4 x 4 |
可自动 lowering 到 |
3 |
8 x 8 |
可自动 lowering 到 |
验证命令¶
PYTHONPATH=../QEC-compiler/src:. .venv/bin/pytest \
tests/test_qec_lowering.py -q
相关测试包括:
test_walks_with_tridiagonal_compilestest_generated_qda_tridiagonal_lowers_for_matrix_sizestest_block_encoding_tridiagonal_produces_gates
注意事项¶
当前 QDA-tridiagonal 测试是 compile/lowering smoke,不等价于完整 QDA 数值正确性证明。
encode_b如果未传入,会走WalkS_Primitive的 Hadamard fallback。QRAM-based QDA 当前不属于支持路径。