Changelog#
Git master branch#
2026-01-14#
I/O#
Accelerate func:\(~ase.io.lammpsrun.read_lammps_dump_text\) using a NumPy structured array (mr:\(3939\))
GUI#
Move and Rotate modes no longer turn on if no atoms are selected.
An indicator is added to the bottom right corner that shows that a movement mode is active. This indicator also includes a contextual hint about modifier keys.
Rotation vectors are transformed to give a more intuitive pitch/yaw/roll experience in rotate mode which is also consistent with mouse movements.
Bugfixes#
Fixed
ase.optimize.optimize.Optimizer.todict()to returnNoneforrestartwhen not set (MR: !3923)Ctrl/Shift key handling is refactored in the GUI to try and combat a bug where Num Lock would continuously register as a modifier. This was causing the arrow keys to behave incorrectly in “Move” and “Rotate” modes.
Fixed
BandStructurelegend plotting for figures with multiple axes (MR: !3935)Fixed
BandStructureto save the figure associated with the axes (MR: !3935)Fixed
read_vasp_xml()to get not the enthalpy but the energy without PV to be consistent withread_vasp_out()(MR: !2685)
Version 3.27.0#
I/O#
Add support for reading Mulliken charges in
read_gamess_us_out()andread_gamess_us_punch()(MR: !3761)Add support to parse general triclinic boxes in
read_lammps_data(),read_lammps_dump_text(), andread_lammps_dump_binary()(MR: !3797)Add support for reading the energy and the dipole moment from “external” in
ase.io.gaussian.read_gausian_out()(MR: !3801)ASE now follows the EON convention for handling cell geometries.
Update
write_lammps_data()to parse atom types read byread_lammps_data()(MR: !3847)Breaking Trajectories and logfiles passed as filenames are not kept open during simulations. Instead, the file is opened, written to (generally by appending), then closed again. This improves IO safety and prevents resource leaks in many cases. It is still possible to pass trajectories and logfiles that are already open, and then the caller is responsible for closing them. Doing so may be beneficial in fast runs on slow file systems. (MR: !3899, MR: !3930)
Updated
read_lammps_data()andwrite_lammps_data()to parseAtom Type Labels(MR: !3916)
Calculators#
Add LAMMPSlib features to support arbitrary startup flags (e.g. to enable kokkos) and arbitrary initialization callbacks (e.g. calling \(lammps.mliap.activate_mliappy\))
The \(Vasp\) calculator now has a more generic way of handling pseudopotentials. If the user specifies the \(pp_version\) keyword argument or equivalent \(VASP_PP_VERSION\) environment variable, the calculator will look for pseudopotentials in the corresponding VASP-provided pseudopotential directory. Simply download the pseudopotential folders provided by VASP and put them in one parent directory, defined by \(VASP_PP_PATH\). If \(pp_version\) is \(None\) (default), the \(Vasp\) calculator will only look for \(potpaw\) (LDA) and \(potpaw_PBE\) (PBE) to maintain backwards compatability. If \(pp_version="64"\) (for instance), the calculator will look for pseudopotentials in the \(potpaw.64\) and \(potpaw_PBE.64\), respectively.
The \(potpaw_GGA\) (PW91) pseudpotential folder has been removed. This means setting \(xc="PW91"\) will no longer use the deprecated PW91 pseudopotential folder. It is recommended the PBE pseudopotentials are used for the PW91 functional instead.
Updated
LAMMPSto recognize the LAMMPSvelocitycommand (MR: !3805)
Optimizers#
All optimizers (except GPMin) can now work with flat position and gradient arrays.
Gradients now have the correct sign in the Optimizable API. The Optimizable API is still experimental and may change. (MR: !3908)
Molecular dynamics#
The “NPT” thermostat has been renamed to “MelchionnaNPT” for clearer comparison with alternatives, and to avoid giving the impression that this is a generally recommended default choice for NPT.
For backward compatibility an
ase.md.npt.NPTclass remains in place, which aliases the renamed class at its new locationase.md.melchionna.MelchionnaNPT.The alias is marked as “deprecated” and will be removed in a future ASE version.
New LangevinBAOAB variable-cell Langevin integrator with Leimkhler’s BAOAB method
GUI#
Added a history feature, i.e. undo/redo, to the ASE GUI.
Documentation#
Move database introduction tutorial to sphinx gallery
Move Surface adsorption study using the ASE database tutorial to sphinx gallery
Move Move “Calculating Delta-values tutorial” to examples/deltacodesdft sphinx gallery
Other changes#
Fixed backward-compatibility of
FixedLineandFixedPlanemade before ASE 3.23.0 to be read withdict2constraint()after ASE 3.23.0 (MR: !3786)
ASE now requires Python 3.10+.
Fix deprecated SQL syntax MR: !3815.
Added
ase.lattice.match_to_lattice()which matches an input cell to a specific Bravais lattice and returns a list of matching representations.
The
ase.gamodule has been moved to the standalone ase-ga project.
Improved efficiency of
get_rdf()usingNeighborList(MR: !3888)
Bugfixes#
Remove subscripting of images iterable in extxyz writer so it works with non-subscriptable iterables when “move_mask” key is present in \(atoms.arrays\) (MR: !3795)
Fix
write_extxyz()to ignore constraints other thanFixAtomsandFixCartesianwhenmove_maskis present incolumns(default since ASE 3.26.0) (MR: !3808)Fix
write_extxyz()to handle multipleFixAtomscorrectly (MR: !3812)Fix
write_extxyz()to handle unconstrained atoms inAtomswithFixCartesiancorrectly (MR: !3812)Make
Vaspcalculator INCAR reader use first instance of each tag, to be same as VASP code itself (MR: !3842)Fix constraints from first frame being applied to all frames (leading to errors) in
write_extxyz()(MR: !3920)Fixed partial RDFs in
get_rdf()to be conssitent with the common definition in, e.g., LAMMPScompute rdf(MR: !3921)Fixed
LAMMPSto be robust against LAMMPS log files with non-ASCII characters (MR: !3925)Fixed
LAMMPSto not run the default \(fix nve\) command when users set \(fix\) explicitly (MR: !3805)
Version 3.26.0#
I/O#
Added communicator argument to parprint, which defaults to world if None, analogous as for paropen
Added single float encoding for
jsonio(MR: !3682)Changed
write_extxyz()to storeFixAtomsandFixCartesianby default without explicitly specifyingmove_maskincolumns(MR: !3713)Breaking change: Removed IOFormat.open() method. It is untested and appears to be unused. MR: !3738
Fix
read_vasp()to correctly read both atomic and lattice velocities if present in POSCAR (MR: !3762)
Calculators#
Added per-atom
energiesconsistent with LAMMPS toTersoff(MR: !3656)Added toggles between analytical and numerical forces/stress in
FiniteDifferenceCalculator(MR: !3678)Added calculators
mattersimandmace_mpto theget_calculator()functionDFTD3 no longer warns about systems that are neither 3D periodic nor 0D, because there is no way to adapt the code that resolves the condition warned about. (MR: !3740)
Optimizers#
Logfile and trajectory inputs now accept both string and Path objects.
Breaking change: The
Optimizableinterface now works in terms of arbitrary degrees of freedom rather than Cartesian (Nx3) ones. Please note that the interface is still considered an internal feature and may still change significantly. (MR: !3732)
Molecular dynamics#
Added anisotropic NpT with MTK equations (MR: !3595).
Fixed bug in Nose-Hoover chain thermostat which would inconsistently update extended variables for the thermostat.
GUI#
Atomic spins can now be visualized as arrows
Mouse button 2 and 3 are now equivalent in the GUI, which simplifies life on particularly MacOS (MR: !3669).
Menu shortcut keys now work as expected on MacOS.
In Rotate and Translate mode, Ctrl + arrow key now works as intended on MacOS. Left alt and Command now have the same effect (MR: !3669).
Changed Alt+X, Alt+Y, Alt+Z to Shift+X, Shift+Y, Shift+Z to view planes from “other side”
Changed views into basis vector planes to I, J, K, Shift+I, Shift+J, Shift+K
Added general window to view and edit data on atoms directly in the same style as the cell editor. The window currently edits symbols and Cartesian positions only (MR: !3790).
Development#
Enable ruff on all scripts inside documentation
Documentation#
Web page now uses sphinx book theme (MR: !3684).
Documentation moved to ase-lib.org.
Other changes#
Bugfixes#
Fixed
Tersoffto compute properties correctly (MR: !3653, MR: !3655, MR: !3657).Enable
ase.io.magres.read_magres()to handle cases from CASTEP < 23 where indices and labels are “munged” together if the index exceeds 99. If an index exceeds 999 the situation remains ambiguous and an error will be raised. (MR: !3530)Fix duplicated transformation (e.g. rotation) of symmetry labels in
bz_plot()(MR: !3617).Fixed bug in
io.utils.PlottingVariableswhere automatic bounding boxes were incorrectly centered due the image center not being scaled for paper space (MR: !3769).Fixed bug in
io.pov.POVRAYwhere unspecified image (canvas) dimensions would use defaults with an incorrect aspect ratio (MR: !3769).
Structure tools#
Added
score_key='metric'tofind_optimal_cell_shape()for scoring a cell based on its metric tensor (MR: !3616)
Version 3.25.0#
I/O#
Moved Postgres, MariaDB and MySQL backends to separate project: ase/ase-db-backends. Install from PyPI with
pip install ase-db-backends(MR: !3545).BREAKING ase.io.orca
read_orca_outputnow returns Atoms with attached properties.ase.io.readwill use this function. The previous behaviour (return results dictionary only) is still available from functionread_orca_outputs. (MR: !3599)Added
write_castep_geom()andwrite_castep_md()(MR: !3229)Fixed
ase.data.pubchemmodule to convert#in SMILES to HEX%23for URL (MR: !3620).ase.db: Unique IDs are now based on UUID rather than pseudorandom numbers that could become equal due to seeding (MR: !3614).ase.db: Fix bug where unique_id could be converted to float or int (MR: !3613).Vasp: More robust reading of CHGCAR (MR: !3607).
Lammpsdump: Read timestep from lammpsdump and set element based on mass (MR: !3529).
Vasp: Read and write velocities (MR: !3597).
DB: Support for LMDB via \(ase-db-backends\) project (MR: !3564, MR: !3639).
Espresso: Fix bug reading \(alat\) in some cases (MR: !3562).
GPAW: Fix reading of total charge from text file (MR: !3519).
extxyz: Somewhat restrict what properties are automatically written (MR: !3516).
Lammpsdump: Read custom property/atom LAMMPS dump data (MR: !3510).
Calculators#
More robust reading of Castep XC functional (MR: !3612).
More robust saving of calculators to e.g. trajectories (MR: !3610).
Lammpslib: Fix outdated MPI check (MR: !3594).
Morse: Optionally override neighbor list implementation (MR: !3593).
EAM: Calculate stress (MR: !3581).
A new Calculator
ase.calculators.tersoff.Tersoffhas been added. This is a Python implementation of a LAMMPS-style Tersoff interatomic potential. Parameters may be passed directly to the calculator as aase.calculators.tersoff.TersoffParametersobject, or the Calculator may be constructed from a LAMMPS-style file using itsfrom_lammpsclassmethod. (MR: !3502)
Optimizers#
Molecular dynamics#
Merged
self.communicatorintoself.comm(MR: !3631).Improved random sampling in countour exploration (MR: !3643).
Fix small energy error in Langevin dynamics (MR: !3567).
Isotropic NPT with MTK equations (MR: !3550).
Bussi dynamics now work in parallel (MR: !3569).
Improvements to documentation (MR: !3566).
Make Nose-Hoover chain NVT faster and fix domain decomposition with Asap3 (MR: !3571).
NPT now works with cells that are upper or lower triangular matrices (MR: !3277) aside from upper-only as before.
Fix inconsistent
irun()for NPT (MR: !3598).
GUI#
Development#
Other changes#
standard_form()can convert to upper triangular (MR: !3623).Bugfix:
get_duplicate_atoms()now respects pbc (MR: !3609).Bugfix: Constraint masks in cell filters are now respected down to numerical precision. Previously, the constraints could be violated by a small amount (MR: !3603).
Deprecate
lazyproperty()andlazymethod()since Python now providesfunctools.cached_property()(MR: !3565).Remove
nomad-uploadandnomad-getcommands due to incompatibility with recent Nomad (MR: !3563).Fix normalization of phonon DOS (MR: !3472).
PlottingVariablestowards rotating the camera rather than the atoms (MR: !2895).
Version 3.24.0#
Requirements#
Atoms#
New method
get_number_of_degrees_of_freedom()(MR: !3380)New methods
get_kinetic_stress(),get_kinetic_stresses()(MR: !3362)Prevent truncation when printing Atoms objects with 1000 or more atoms (MR: !2518)
DB#
Ensure correct float format when writing to Postgres database (MR: !3475)
Structure tools#
Add atom tagging to
ase.build.general_surface(MR: !2773)Fix bug where code could return the wrong lattice when trying to fix the handedness of a 2D lattice (MR: !3387)
Major improvements to
find_optimal_cell_shape(): improve target metric; ensure rotationally invariant results; avoid negative determinants; improved performance via vectorisation (MR: !3404, MR: !3441, MR: !3474). Thenormargument toget_deviation_from_optimal_cell_shape()is now deprecated.Performance improvements to
ase.spacegroup.spacegroup.Spacegroup(MR: !3434, MR: !3439, MR: !3448)Deprecated
ase.spacegroup.spacegroup.get_spacegroup()as results can be misleading (MR: !3455).
Calculators / IO#
Amber: Fix scaling of velocities in restart files (MR: !3427)
Amber: Raise an error if cell is orthorhombic (MR: !3443)
CASTEP
EAM: Fix calculations with self.form = “eam” (MR: !3399)
FHI-aims
FileIOSocketClientLauncher: Fix an unintended API change (MR: !3453)
FiniteDifferenceCalculator: added new calculator which wraps other calculator for finite-difference forces and strains (MR: !3509)
GenericFileIOCalculator fix interaction with SocketIO (MR: !3381)
LAMMPS
MixingCalculator: remove requirement that mixed calculators have common
implemented_properties(MR: !3480)MOPAC: Improve version-number parsing (MR: !3483)
MorsePotential: Add stress (MR: !3485)
NWChem: fixed reading files from other directories (MR: !3418)
Octopus: Improved IO testing (MR: !3465)
ONETEP calculator: allow
pseudo_pathto be set in config (MR: !3385)Orca: Only parse dipoles if COM is found. (MR: !3426)
Quantum Espresso
Siesta: support version 5.0 (MR: !3464)
Turbomole: fixed formatting of “density convergence” parameter (MR: !3412)
VASP
Fixed a bug handling the ICHAIN tag from VTST (MR: !3415)
Fixed bugs in CHG file writing (MR: !3428) and CHGCAR reading (MR: !3447)
Fix parsing POSCAR scale-factor line that includes a comment (MR: !3487)
Support use of unknown INCAR keys (MR: !3488)
Drop “INCAR created by Atomic Simulation Environment” header (MR: !3488)
Drop 1-space indentation of INCAR file (MR: !3488)
Use attached atoms if no atom argument provided to
ase.calculators.vasp.Vasp.calculate()(MR: !3491)
GUI#
Refactoring of
ase.gui.view.Viewto improve API for external projects (MR: !3419)Force lines to appear black (MR: !3459)
Fix missing Alt+X/Y/Z/1/2/3 shortcuts to set view direction (MR: !3482)
Fix incorrect frame number after using Page-Up/Page-Down controls (MR: !3481)
Fix incorrect double application of
repeattoenergyin GUI (MR: !3492)
Molecular Dynamics#
Added Bussi thermostat
ase.md.bussi.Bussi(MR: !3350)Added Nose-Hoover chain NVT thermostat
ase.md.nose_hoover_chain.NoseHooverChainNVT(MR: !3508)Improve
force_temperatureto work with constraints (MR: !3393)Add
**kwargsto MolecularDynamics, passed to parent Dynamics (MR: !3403)Support modern Numpy PRNGs in Andersen thermostat (MR: !3454)
Optimizers#
Phonons#
Fix scaling of phonon amplitudes (MR: !3438)
Implement atom-projected PDOS, deprecate
ase.phonons.Phonons.dos()in favour ofase.phonons.Phonons.get_dos()(MR: !3460)Suppress warnings about imaginary frequencies unless
ase.phonons.Phonons.get_dos()is called with new parameterverbose=True(MR: !3461)
Pourbaix (MR: !3280)#
New module
ase.pourbaixwritten to replacease.phasediagram.PourbaixImproved energy definition and diagram generation method
Improved visualisation
Spectrum#
BREAKING
ase.spectrum.band_structure.BandStructurePlot: theplot_with_colors()has been removed and its features merged into theplot()method.
Misc#
Cleaner bandgap description from
ase.dft.bandgap.GapInfo(MR: !3451)
Documentation#
Testing#
Units#
Maintenance and dev-ops#
Earlier releases#
Releases earlier than ASE 3.24.0 do not have separate release notes and changelog. Their changes are only listed in the Release notes.