Release notes#
[v2.10.1] - 2026-02-18#
This is a bug-fix release. There are no API or configuration changes.
Bug Fixes#
Eigen storage-order regression#
The v2.10.0 commit 6e8461c3 replaced the EIGEN_DEFAULT_TO_ROW_MAJOR
preprocessor macro with a constexpr constant and explicit row-major aliases
for AtomMatrix and RotationMatrix. However, ~135 bare Eigen::MatrixXd
uses across the codebase were not updated, causing them to revert to Eigen’s
default column-major layout.
Row-major layout is required so that .data() yields
[x0, y0, z0, x1, y1, z1, ...], which is what the Fortran potentials and
VectorXd::Map round-trips expect. The column-major matrices stored
[x0, x1, ..., y0, y1, ..., z0, z1, ...] instead, silently corrupting force
projections and causing the NEB to diverge from the first step.
The fix removes using namespace Eigen; from client/Eigen.h (which would
shadow the explicit row-major aliases with Eigen’s column-major defaults) and
replaces it with selective using declarations for vector types that are
unaffected by storage order (VectorXd, VectorXi, Vector3d). All bare
Eigen::MatrixXd, Eigen::Matrix3d, and Eigen::Matrix4d uses are replaced
with eOn’s row-major aliases.
See Type system for the full type-system documentation.
Python 3.10 compatibility#
client/get_version.py used datetime.UTC, an alias added in Python 3.11.
Replaced with datetime.timezone.utc for compatibility with the conda-forge
Python 3.10 builds.
Developer#
CI-NEB XTB regression test#
A new Catch2 test (CINEBXTBTest.cpp) runs a 10-image climbing-image NEB with
GFN2-xTB on a 9-atom C2H4ON2 molecule. The test converges in ~64 NEB steps
(under 2 seconds wall time) and will fail immediately if a storage-order
regression reappears.