# eOn 3.3.1 A patch on `v3.3.0`. See monorepo `CHANGELOG.md` section 3.3.1 for the full list: 92 fixes, 47 changes, 44 removals and 4 additions. ## Build The `v3.3.0` tag does not build eonclib: plugin sources used `Parameters` with nothing but a forward declaration in scope. They now include `Parameters.h`. Potential constructors that take `Parameters` move to eoncbase, so plugin `.so` files do not link eonclib. The MPI potential links against MPI. Wheels pin nanobind to `>=2.2,<3`, and wheel repair finds `librgpot.so*` next to `libreadcon_core`. The vendored copy goes in as `libeon_rgpot.so.3`, so the pip `rgpot` wheel imports beside pyeonclient in either order. ## Nudged elastic band (NEB) - `minimize_endpoints` defaults to `false`, matching SVN and the pyeonclient NEB API. - Fixed atoms carry no projected force. When the endpoints placed a fixed atom differently, the spring force leaked onto it and the norm convergence metric counted it. - Reactant and product with different atom counts are rejected before the path interpolation. - The default L-BFGS takes the two-loop step, and the NEB L-BFGS no longer runs the `auto_scale` finite-difference probe. - Energy-weighted springs set `E_ref` to the higher endpoint energy. - OCI-NEB restores a climbing image that ends a min-mode walk at positive curvature. `ci_mmf_restore_unhelpful` extends the restore to alignment rejects and force increases. - Non-periodic images pass a zero cell into `forceBatch`. The NEB regression tests run between two LJ13 minima joined by a saddle, so the climbing-image case converges at `-O2` with `NDEBUG` as well as at `-O3`. ## Basin hopping, saddle searches and dynamics Basin hopping applies the Metropolis factor to uphill hops at a positive temperature and rejects them at zero or below. It keeps the minimized energy as the reference and takes the dimer direction from the minimum image. The classic dimer keeps the orientation its torque check accepted. ARTn keeps its library mutex locked from create to destroy and passes the cell to pARTn untransposed. Parallel replica keeps its bond boost across trajectory copies. Langevin and Nose-Hoover dynamics count and move each free Cartesian component on its own, so a partly fixed atom stays fixed in its frozen direction. ## Optimizers `opt_method = xtsci` selects the xtsci-optimize engine, and `[Xtsci] method` picks the solver inside it: L-BFGS, BFGS, SR1/SR2, Newton, RFO, NLCG, Adam or PSO. One session persists across the host loop, so L-BFGS pairs and NLCG conjugacy survive between steps. ## Runtime and Python `eonc::Runtime` is a composition root that moves but does not copy. `ClientEON` builds one and moves it into `Job`, and pyeonclient's `Session` owns it. The Python server and tools use `pathlib` for path I/O throughout. ## Channels PyPI project is `eon-akmc`. conda-forge package is `eon`, built from the GitHub fat tarball `eon-v3.3.1.tar.xz`.