Iteration 0005 — ccc6bedc3559 (accepted)

GitHub commit: ccc6bedc3559 Published branch: fermilink-optimize/pyscf-davidson

Change summary

Correct real TDDFT Davidson preconditioning to pass the full lower LR residual block by using -R_y in _lr_eig.real_eig

Acceptance rationale

Primary metric improved 23.1% vs incumbent with correctness passing, no hard reject, and no forbidden-path edits.

Guardrails & metrics

field

value

decision

ACCEPTED

correctness

ok

correctness mode

field_tolerances

hard reject

no

guardrail errors

0

incumbent commit

e159c73ee967

candidate commit

ccc6bedc3559

incumbent metric

58.7037

candidate metric

45.1467

baseline metric

128.753

Δ vs incumbent

+23.094% (lower-is-better sign)

changed files

pyscf/tdscf/_lr_eig.py

Diffstat

pyscf/tdscf/_lr_eig.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

Diff

download full diff

diff --git a/pyscf/tdscf/_lr_eig.py b/pyscf/tdscf/_lr_eig.py
index 87fdadfea..e9a3b6656 100644
--- a/pyscf/tdscf/_lr_eig.py
+++ b/pyscf/tdscf/_lr_eig.py
@@ -693,7 +693,7 @@ def real_eig(aop, x0, precond, tol_residual=1e-5, nroots=1, x0sym=None, pick=Non
             break

         r_index = r_norms > tol_residual
-        XY_new = precond(np.vstack([R_x[:,r_index], R_y[:,r_index]]).T, w[r_index])
+        XY_new = precond(np.vstack([R_x[:,r_index], -R_y[:,r_index]]).T, w[r_index])
         X_new = XY_new[:,:A_size].T
         Y_new = XY_new[:,A_size:].T
         if x0sym is None: