pytc.vmc.moves._one_electron_move¶
- pytc.vmc.moves._one_electron_move(ansatz, walker, step_size, key, params, batch_ansatz=None)[source]¶
Move one randomly selected electron for each walker.
Uses Sherman-Morrison rank-1 updates to avoid full O(N³) determinant recomputation for the proposal. The current ψ is read from the walker cache (log_psi / psi_sign). Only the proposal determinant is updated via a cheap O(N²) rank-1 update + single-electron AO evaluation.
For SlaterJastrow ansatze, the Jastrow factor is updated by recomputing only the N-1 pairs involving the moved electron.
- Parameters:
ansatz – Wavefunction object (SlaterDet or SlaterJastrow)
walker – Walker dataclass with current state (batched). Must have valid log_psi, psi_sign, and log_jastrow fields.
step_size – Standard deviation of Gaussian proposal
key – PRNG key
params – Parameters for the ansatz
batch_ansatz – Ignored (kept for API compatibility; rank-1 path does not use a batched ansatz call).
- Returns:
Wavefunction (sign, log|ψ|) for current walker (from cache) new_psi_values: Wavefunction (sign, log|ψ|) for proposals walker_updated: Current walker (unchanged) proposals: Walker with proposed new positions and all Slater fields
updated via rank-1 Sherman-Morrison.
- Return type:
psi_values