Changelog#
Unreleased#
Documentation#
0.8.0#
Breaking changes#
-
Rename
ParameterisationSettingstoParamSettingsand theparameterisation_settingsfield toparam_settingsthroughout. This avoids confusion between British/American spellings. YAML configs must update the key fromparameterisation_settings:toparam_settings:. In #62. -
Replace flat ML potential settings with nested
mlp_settingsin sampling and MSM settings in #58. Legacy flat fields such asml_potentialandml_potential_kwargsare no longer accepted. - Remove
AvailableModelsandvalidate_model_charge_compatibility.prestonow accepts any OpenMM-ML model identifier supported by the local OpenMM-ML install and trusts the user to pick a model compatible with their system. Also in #58. - Add runtime-object placeholder handling for
mlp_settings.ml_system_kwargs: non-serializable values (e.g ASE Calculator objects) are written as placeholders and loading fails withInvalidSettingsErroruntil placeholders are replaced (for example withfrom_yaml(..., overwrite=...)) before validation. Again, in #58.
Documentation#
- Rewrite documentation with Diátaxis structure: Get started, How-to, Concepts, and Reference sections.
- Add new pages: installation guide, quickstart, bespoke SMIRNOFF primer, sampling protocols, type generation, MLP guide, output layout, troubleshooting, and glossary. Add Python API walk-through notebook. - Polish Pydantic Field descriptions in settings to improve auto-generated API reference. Add example invocations to CLI subcommand docstrings. Add Python API examples for running fitting via
get_bespoke_force_field(...), including optional OpenMM-ML ASE calculator usage throughml_system_kwargs. In #61. - Clarify charge behavior: automatic molecular charge propagation applies to non-ASE MLPs; for
ml_potential="ase"charge must be passed explicitly inml_system_kwargs.
Maintenance#
- Update the default env to use Python 3.12 to avoid dm-tree (an Orb dep) build issues. In #60.
0.7.0#
Fixes#
- Guard against lack of any constaints in the input force field in #56. This allows use of the unconstrained version of Parsely.
- Set default model to AIMNet2 in light of current AceFF 2.0 OpenMM-ML issues in #49. Also add README warning about AceFF 2.0.
Improvements#
- Make molecule loading more modular and accept SDFs in #55. Note this is a breaking change -- the old param_settings.smiles field must now be replaced by param_settings.molecules.
- Add CLI sub-command which shows version in #54.
- Add Orb-v3 OMOL model in #49.
0.6.0#
Fixes#
- Raise an error if too few conformers survive filtering in #38. Fixes #30.
- Remove stereochemical information from generated types in #36. This avoids a niche issue where mixing the RDKit and OpenEye toolkits would result in failed type generation for e.g. chiral sulfoxides.
Maintenance#
Improvements#
- Make linting more strict and improve docstrings in #39
- Update aromaticity model used for selecting rotatable torsions for metadynamics to give more intuitive results (ditch MDL and go for RDKit default) in #33.
- Improve consistency of how the device arguments are passed around (literal or torch device). #36
- Refactor simulation creation logic to reduce duplication and always set the platform to CPU for ML systems (required so that MACE models work with PythonForce). See this commit.
- Update environments to OpenMM 8.5 (with PythonForce) and OpenMM-ML. This simplifies the environments required (as we can drop NNPOPs) and means we have have all MLPs in one env. The only issue is that we can now only support CUDA 12.9. #34.
0.5.1#
Fixes#
- Fixes typo in default settings which meant that linear torsions matching
[*:1]~[*:2]=[#6,#7,#16,#15;X2:3]=[*:4]were not excluded from training (#32)
0.5.0#
Improvements#
- Use MDTraj to calculate torsions rather than doing this manually
- Make metadynamics more aggressive, allow user to specify torsions targeted by metadynamics, and include in-ring aliphatic torsions by default in #26
Fixes#
- Remove unused settings fields in #25
0.4.0#
Improvements#
- Improve cleanliness/prettiness of CLI output
- Reduce memory use during congeneric series fitting in #17
- Improve test quality, speed, and coverage in #19
- Update environments with explicit python and cuda versions and document installation with different cuda versions
- Plot sampling of rotatable torsions in #23
Fixes#
- Update ParameterConfig defaults so that linear torsions are not trained in #18
0.3.0#
- Renamed
bespokefit_smee->presto(Parameter Refinement Engine for Smirnoff Training / Optimisation) - Added more documentation on the method, recommended settings, and outputs.
0.2.0#
New Features#
- Implement new default protocol with MLP-minimised configurations
- Add support for loading multiple pre-computed datasets for training
- Implement flexible bespoke SMARTS type generation with
MergeQueryHs - Add support for multi-molecule simultaneous fits
- Add dataset filtering function for preprocessing
- Add function for calculating Hessian matrices
Improvements#
- GPU Memory Management: Significantly improved GPU memory handling
- Add GPU memory cleanup utility function
- Clear GPU memory after sampling operations
- Reduce GPU memory usage throughout training pipeline
- Fix GPU memory leaks with LM optimizer
- Make CUDA operations conditional on availability for CPU-only environments
- Modified Seminario Method (MSM)
- Complete reimplementation of MSM for better performance
- ML Potential Updates
- Add aceff-2.0 and make it the default MLP
- Update default sampling settings (consistent with higher speed of aceff-2.0)
- Force Field Updates
- Update default MM-FF to 2.3.0
- Ensure we train FF with bespoke types added
- Ensure parameter names are not overwritten
- Regularization Improvements
- Overhaul regularization and calculation of loss
- Normalize regularization per-parameter
- Decouple type generation from regularization
- Optimizer Fixes
- Fix LM optimizer implementation
- Clear cache between iterations with Adam
- Avoid GPU memory leaks with LM optimizer
- Path Management
- Fix path management for multiple molecules
- Improve handling of output paths for per-molecule outputs
Maintenance#
- Remove bespoke toolkit wrapper
0.1.1#
Documentation#
- Added example notebook
0.1.0#
- Initial implementation.