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