Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
559d50f
Water densities analysis
Feb 22, 2026
7fdbfab
change thresholds
Feb 22, 2026
18dc038
Water density app
Feb 22, 2026
48f74ec
Water density docs
Feb 22, 2026
2983367
3dTMV benchmark (#380)
kuryla Mar 2, 2026
9273e62
Update MACE (#398)
ElliottKasoar Mar 3, 2026
64a07ba
Tidy 3dTMV benchmark (#399)
ElliottKasoar Mar 3, 2026
cb849a5
Fix setting MACE default dtype (#400)
ElliottKasoar Mar 3, 2026
58c07d9
Add mace-polar models (#401)
ElliottKasoar Mar 3, 2026
1e97659
Bump version for release 0.3.1
ElliottKasoar Mar 4, 2026
ee54957
Add BMIM Cl bond formation benchmark (#334)
PythonFZ Mar 4, 2026
e366e1a
Add QUID benchmark (#402)
kuryla Mar 4, 2026
4766cf6
Add silicon interstitial NEBs benchmark (#326)
zwei-beiner Mar 4, 2026
f7b2bf2
Float64 precision for static tests (#408)
kuryla Mar 5, 2026
7df6ce6
ACONFL (#389)
kuryla Mar 5, 2026
954b429
Add loading wheels to site load and tab switching (#414)
joehart2001 Mar 9, 2026
b6f2af1
Update pre-commit (#418)
ElliottKasoar Mar 9, 2026
ff648f5
Show structure file path in WEAS app (#417)
joehart2001 Mar 9, 2026
8d0bada
Add structure visualisation for density scatter plots (#416)
joehart2001 Mar 9, 2026
e0a20cd
Update and add bounds for dependencies (#419)
ElliottKasoar Mar 9, 2026
ec090d4
Replace trained_on_d3 with trained_on_dispersion (#413)
joehart2001 Mar 9, 2026
77d0008
Allow custom options to be passed to calculations
Mar 12, 2026
291fa13
Water density calc
Mar 12, 2026
9ce882c
Rename test and compute mean density from log
Mar 12, 2026
9adbfec
Water density app
Mar 12, 2026
2aede59
Water density app
Mar 12, 2026
a314850
Reset default equilib time and log interval in analysis
Mar 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# pre-commit install
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
rev: v6.0.0
hooks:
- id: end-of-file-fixer
- id: mixed-line-ending
Expand All @@ -11,7 +11,7 @@ repos:

- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.11.13
rev: v0.15.5
hooks:
# Run the linter.
- id: ruff-check
Expand All @@ -20,7 +20,7 @@ repos:
- id: ruff-format

- repo: https://github.com/numpy/numpydoc
rev: v1.8.0
rev: v1.10.0
hooks:
- id: numpydoc-validation
files: ^ml_peg/
42 changes: 42 additions & 0 deletions docs/source/user_guide/benchmarks/conformers.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
==========
Conformers
==========

ACONFL
======

Summary
-------

Performance in predicting relative conformer energies of 12 C12H26,
16 C16H34 and 20 C20H42 conformers. Reference data from PNO-LCCSD(T)-F12/ AVQZ calculations.

Metrics
-------

1. Conformer energy error

For each complex, the the relative energy is calculated by taking the difference in energy
between the given conformer and the reference (zero-energy) conformer. This is
compared to the reference conformer energy, calculated in the same way.

Computational cost
------------------

Low: tests are likely to take minutes to run on CPU.

Data availability
-----------------

Input structures:

* Conformational Energy Benchmark for Longer n-Alkane Chains
Sebastian Ehlert, Stefan Grimme, and Andreas Hansen
The Journal of Physical Chemistry A 2022 126 (22), 3521-3535
DOI: 10.1021/acs.jpca.2c02439

Reference data:

* Same as input data
* :math:`PNO-LCCSD(T)-F12/ AVQZ` level of theory: a local, explicitly
correlated coupled cluster method.
2 changes: 2 additions & 0 deletions docs/source/user_guide/benchmarks/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,5 @@ Benchmarks
bulk_crystal
lanthanides
non_covalent_interactions
tm_complexes
conformers
50 changes: 50 additions & 0 deletions docs/source/user_guide/benchmarks/molecular.rst
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,53 @@ Reference data:

* Same as input data
* DLPNO-CCSD(T)/CBS


BMIM Cl RDF
===========

Summary
-------

Tests whether MLIPs incorrectly predict covalent bond formation between chloride
anions (Cl⁻) and carbon atoms in 1-butyl-3-methylimidazolium (BMIM⁺) cations.
Such Cl-C bonds should NOT form in the ionic liquid under normal conditions.

This benchmark runs NVT molecular dynamics simulations of BMIM Cl at
353.15 K and analyses the Cl-C RDF to detect any unphysical bond formation.


Metrics
-------

1. Cl-C Bonds Formed

Binary metric indicating whether unphysical Cl-C bonds formed during the MD simulation.

The Cl-C RDF is computed from the MD trajectory. If the RDF shows a peak (g(r) > 0.1)
at distances below 2.5 Å, this indicates bond formation and the model fails the test.

* 0 = no bonds formed (correct physical behaviour)
* 1 = bonds formed (unphysical, model failure)


Computational cost
------------------

Medium: tests require running 10,000 steps of Langevin MD for a system of 10 ion
pairs, which may take tens of minutes on GPU.


Data availability
-----------------

Input structures:

* Generated using molify from SMILES representations of BMIM⁺ (CCCCN1C=C[N+](=C1)C)
and Cl⁻ ions, packed to experimental density of 1052 kg/m³ at 353.15 K.
* Zills, F. molify: Molecular Structure Interface. Journal of Open Source Software
10, 8829 (2025). https://doi.org/10.21105/joss.08829
* Density from: Yang, F., Wang, D., Wang, X. & Liu, Z. Volumetric Properties of
Binary and Ternary Mixtures of Bis(2-hydroxyethyl)ammonium Acetate with Methanol,
N,N-Dimethylformamide, and Water at Several Temperatures. J. Chem. Eng. Data 62,
3958-3966 (2017). https://doi.org/10.1021/acs.jced.7b00654
38 changes: 38 additions & 0 deletions docs/source/user_guide/benchmarks/molecular_dynamics.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@

==================
Molecular dynamics
==================

Water density
================

Summary
-------

Performance in predicting the density of water at temperatures of 270, 290, 300, and 330 K.
The water systems consist of 333 molecules.

Metrics
-------

1. Density error

For each system, the density is calculated by taking the average density of an NPT molecular
dynamics run. The initial part of the simulation, here 500 ps, is omitted from the density
calculation. This is compared to the reference density, obtained from experiment.

Computational cost
------------------

Low: tests are likely to take several days to run on GPU.

Data availability
-----------------

Input structures:

*

Reference data:

* Experiment
57 changes: 57 additions & 0 deletions docs/source/user_guide/benchmarks/nebs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,60 @@ Reference data:

* Manually taken from https://doi.org/10.1149/1.1633511.
* Meta-GGA (Perdew-Wang) exchange correlation functional


Si defects
==========

Summary
-------

Performance in predicting DFT singlepoint energies and forces along fixed nudged-elastic-band
(NEB) images for a silicon interstitial migration pathway.

Metrics
-------

For each of the three NEB datasets (64 atoms, 216 atoms, and 216 atoms di-to-single), MLIPs are
evaluated on the same ordered NEB images as the reference.

1. Energy MAE

Mean absolute error (MAE) of *relative* energies along the NEB, shifting image 0 to 0 eV
for both the DFT reference and the MLIP predictions.

2. Force MAE

Mean absolute error (MAE) of forces across all atoms and images along the NEB.

Computational cost
------------------

Medium: tests are likely to take several minutes to run on CPU.

Data availability
-----------------

Input/reference data:

* Reference extxyz trajectories (including per-image DFT energies and forces) are distributed as a
separate zip archive and downloaded on-demand from the ML-PEG data store.
The calculation script uses the public ML-PEG S3 bucket to retrieve these inputs.
* The reference DFT energies/forces come from Quantum ESPRESSO (PWscf) single-point calculations
with:

- Code/version: Quantum ESPRESSO PWSCF v.7.0
- XC functional: ``input_dft='PBE'``
- Cutoffs: ``ecutwfc=30.0`` Ry, ``ecutrho=240.0`` Ry
- Smearing: ``occupations='smearing'``, ``smearing='mv'``, ``degauss=0.01`` Ry
- SCF convergence/mixing: ``conv_thr=1.0d-6``, ``electron_maxstep=250``, ``mixing_beta=0.2``,
``mixing_mode='local-TF'``
- Diagonalization: ``diagonalization='david'``
- Symmetry: ``nosym=.false.``, ``noinv=.false.`` (symmetry enabled)
- Pseudopotential: ``Si.pbe-n-kjpaw_psl.1.0.0.UPF`` (PSLibrary)

K-points by case:

- 64 atoms: Γ-only (``K_POINTS automatic 1 1 1 0 0 0``)
- 216 atoms: Γ-only (``K_POINTS gamma``)
- 216 atoms di-to-single: Γ-only (``K_POINTS gamma``)
42 changes: 42 additions & 0 deletions docs/source/user_guide/benchmarks/tm_complexes.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
==========================
Transition Metal Complexes
==========================

3dTMV
=======

Summary
-------

Performance in predicting vertical ionization energies for 28 transition metal
complexes.

Metrics
-------

1. Ionization energy error

For each complex, the ionization energy is calculated by taking the difference in energy
between the complex in its oxidized state and initial state, which differ by one electron
and spin multiplicity. This is compared to the reference ionization energy, calculated in the same way.

Computational cost
------------------

Low: tests are likely to take minutes to run on CPU.

Data availability
-----------------

Input structures:

* Toward Benchmark-Quality Ab Initio Predictions for 3d Transition Metal
Electrocatalysts: A Comparison of CCSD(T) and ph-AFQMC Hagen Neugebauer, Hung T.
Vuong, John L. Weber, Richard A. Friesner, James Shee, and Andreas Hansen Journal of
Chemical Theory and Computation 2023 19 (18), 6208-6225,
DOI: 10.1021/acs.jctc.3c00617

Reference data:

* Same as input data
* ph-AFQMC level of theory: Auxiliary-Field Quantum Monte Carlo.
10 changes: 7 additions & 3 deletions ml_peg/analysis/conformers/37Conf8/analyse_37Conf8.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,18 @@
import pytest

from ml_peg.analysis.utils.decorators import build_table, plot_parity
from ml_peg.analysis.utils.utils import build_d3_name_map, load_metrics_config, mae
from ml_peg.analysis.utils.utils import (
build_dispersion_name_map,
load_metrics_config,
mae,
)
from ml_peg.app import APP_ROOT
from ml_peg.calcs import CALCS_ROOT
from ml_peg.models.get_models import load_models
from ml_peg.models.models import current_models

MODELS = load_models(current_models)
D3_MODEL_NAMES = build_d3_name_map(MODELS)
DISPERSION_NAME_MAP = build_dispersion_name_map(MODELS)

EV_TO_KCAL = units.mol / units.kcal
CALC_PATH = CALCS_ROOT / "conformers" / "37Conf8" / "outputs"
Expand Down Expand Up @@ -113,7 +117,7 @@ def get_mae(conformer_energies) -> dict[str, float]:
filename=OUT_PATH / "37conf8_metrics_table.json",
metric_tooltips=DEFAULT_TOOLTIPS,
thresholds=DEFAULT_THRESHOLDS,
mlip_name_map=D3_MODEL_NAMES,
mlip_name_map=DISPERSION_NAME_MAP,
)
def metrics(get_mae: dict[str, float]) -> dict[str, dict]:
"""
Expand Down
Loading
Loading