CBMD¶
English · 简体中文
Category C2 · Module
oracq.algorithms.qode.cbmd· Stage V2
Overview¶
Matrix-function and evolution assembly based on contour decomposition: write \(e^{-At}\) of \(u'=-Au\) (\(A=L+iH\), \(L\succeq 0\)) as a finite weighted sum of Hermitian branches \(H+qL\) (\(q\) taken on real nodes), with the weights from a residue discretization of the contour identity. The main series and the truncation follow QST 11 035027 (2026), Eq. 12–13, as cited by the source’s ContourPlan.metadata (arXiv:2511.10267v3).
The implementation stance is “explicitly record omissions”: the non-Hermitian evolution branches contributed by the auxiliary poles and the infinite-series tail terms are currently not generated; both are kept explicitly in the omitted list of metadata(), and the validity premise L>=0 and norm(integral L dt) <= 2*pi*a is likewise written into the metadata.
Interface and input model¶
cbmd_qode(model, time, *, plan=None, hamiltonian_function=taylor_hamiltonian)
ContourPlan(a=1.0, cutoff=2, poles=(2j, -1 + 1j, 1j, 1 + 1j))
cbmd_function(a, nodes, residue_weights, hermitian_function)
API entries: cbmd_qode, ContourPlan, cbmd_function
model:LinearODE(HermitianParts(L, H), initial), the input model is an ODE (the same input surface as LCHS).ContourPlan: the contour parametera > 0, the truncationcutoff >= 0, and finitely many distinct non-real auxiliary poles avoiding \(-i\). Derived quantities: the main-series nodes \(q_k=k/a\) (\(k=-J..J\)), the node weights, and the auxiliary-pole coefficients.hamiltonian_functionandtimeofcbmd_qodefollow the same conventions as LCHS.cbmd_function(a, nodes, residue_weights, hermitian_function): the generic \(f(A)\) assembly point;ais an operator BE, and the nodes/residue weights are provided by the caller per the contour identity.
cbmd_qode returns a StateOracle (target/signal) with module attributes:
Attribute |
Meaning |
|---|---|
|
|
|
the finite-sum LCU normalization and the node count |
|
JSON of |
|
|
|
|
cbmd_function returns a BlockEncoding with attributes algorithm="cbmd_matrix_function", correctness="pending", and residue_sign_convention="caller supplies target-side weights from contour identity".
Implementation notes¶
The main-series node weights are given by the closed form
and the auxiliary-pole coefficients analogously (with the denominator replaced by \((e^{-2\pi i p a}-1)\prod_{p'\neq p}\frac{p-p'}{-i-p'}\)). The generation of cbmd_qode shares _lcu_dynamics with LCHS: per-node \(K_k=H+q_kL\), the replaceable hamiltonian_function, LCU combination, and apply_be_to_state applied to the initial state; the only differences are the plan type and the recorded metadata.
The branch-combination order of cbmd_function is lcu([(node, parts.h), (1, parts.hermitian)]), i.e. \(qH+L\) (different from the \(H+qL\) convention of cbmd_qode); it keeps the Hermitian-function protocol open, does not secretly substitute matrix inversion, and does not claim to have verified the residue sign direction.
Applicability boundary: beyond LCHS’s dissipation/autonomous/homogeneous declarations, the contour premise \(\lVert\int L\,dt\rVert\le 2\pi a\) is also required; the omitted auxiliary-pole branches and the infinite-series tail mean the current output is only the finite part of the main series, not a complete approximation of \(e^{-At}\).
Validation approach¶
Category C2 (approximately continuous semantics; the acceptance criteria are in ../development/validation-plan.md §2). Three layers of evidence:
Structure: the cbmd subtest of
tests/core/test_differential.py:DifferentialStructureTests.test_four_methods_keep_input_oracles— with abstract BE/SP inputs the open slots are kept, thealgorithmattribute is correct, and a serialization round trip holds.Numerical:
tests/core/test_differential.py:DifferentialStructureTests.test_cbmd_plan_records_omitted_terms—ContourPlan(cutoff=2)has 5 weights, the auxiliary coefficients match the pole count, and theomittedlist ofmetadata()containsauxiliary_nonhermitian_evolutions.Binding: same-type registration and contract checks (sharing the
_dynamicscontract path; see the contract-chain witness on LCHS).
Known gaps and planned stages¶
A unified “analytically solvable ODE family” convergence benchmark is missing (stage V2); implementing the auxiliary-pole branches and the infinite-series tail is follow-up work at the algorithm layer, currently declared explicitly through the omitted metadata and not counted in the gap column, consistent with the cbmd.py row of validation-coverage.md.
Numerical validation¶
Paper-grade numerical experiments are in tests/verification/verify_ode.py (the ode group; this file covers the parts of cbmd.py). All classical references are independent: ContourPlan derived quantities recomputed directly from the Eq. 12–13 closed forms, the \(t=0\) contour-identity residual, a numpy per-branch truncated-Taylor sum, and the exact solution from scipy.linalg.expm; the quantum programs run on the real backends reference, rir-pysparq, and OriginIR-ext.
Experiment design: (a) plan substructure — the nodes/weights/auxiliary-pole coefficients of ContourPlan(a=1, cutoff=2..8) against an independent closed-form recomputation, plus the truncation-residual trend of the \(t=0\) identity main+aux→1; (b) end to end — the same non-commuting \(2\times2\) problem as LCHS (\(L=[[1,0.3],[0.3,0.5]]\), \(H=[[0.2,0.1],[0.1,-0.1]]\)), with ContourPlan(a=1.0, cutoff=2), Taylor degree 3, \(t=0.2\); the post-selected block is compared against the independent simulation and the exact solution; (c) cross-check on the same problem — the quantum physical blocks of the two methods are reused to compare the solution direction.
Key metrics:
Case |
Scale |
Paths |
Metric |
Value |
|---|---|---|---|---|
cbmd-contour-plan-formula-and-identity |
cutoff 2/4/8 |
plan object |
maximum deviation of weights/auxiliary coefficients vs the closed forms |
0.0 |
ditto |
\(t=0\) identity residual (informational) |
3.73e-2 / 3.20e-3 / 1.59e-4 |
||
cbmd-parts-noncommuting |
15 qubits |
reference, originir |
implementation error (vs independent simulation) |
1.1e-16 |
ditto |
method error (omitted terms, informational) |
9.1e-3 |
||
cbmd-vs-lchs-direction |
same problem |
reference |
solution-direction error: CBMD / LCHS |
3.0e-3 / 4.5e-2 |
The identity residual decreases stably with the truncation, consistent with infinite_series_tail in the omitted metadata; the end-to-end method error is exactly the contribution of the auxiliary-pole branches declared omitted in the documentation (about 1% in this instance). On the same problem, the solution-direction error of the CBMD main series (3.0e-3) is significantly smaller than the Cauchy quadrature remainder of LCHS (4.5e-2).
Reproduction:
PYTHONPATH=src /home/agony/projects/qcfd-dev/quantum-cfd-software/.venv/bin/python tests/verification/verify_ode.py
Artifacts: out/verification/ode.json (3 cbmd-* cases in total).