This patch release upstreams the MACE and FairChem model integrations into their respective packages and delivers a focused set of correctness fixes across the neighbor-list, dispersion/electrostatics, optimizer, and IO layers.
- Upstream MACE model to use
mace-torchintegration by @CompRhys in #524 - Use upstreamed FairChem model by @CompRhys in #499
- Upstream MatterSim model integration by @CompRhys in #565
- Check for disordered structure and raise informative error by @thomasloux in #578
- Convert all kwargs to metal units in high-level
integrateAPI by @curtischong in #587 - Simplify
to_constant_volume_binsby @curtischong in #562 - Change
validate_model_outputskwarg defaultcheck_detachedtoTrueby @CompRhys in #568 - Document post-hoc convergence check by @lil-lon in #561
- Add more molecule test cases for consistency checking by @CompRhys in #567
- Bump default L-BFGS
step_sizeand detach optimizer-state buffers in L-BFGS / BFGS step by @niklashoelter in #559
- Fix bugs with constrained geometry optimization and
FixSymmetryby @PascalSalzbrenner in #552 - Fix
get_atoms_from_trajnot returning row-vector cell to ASEAtomsby @CompRhys in #555 - Fix D3, Ewald, PME, DSF stress sign by @teddykoker in #571
- Fix alchemiops dispersion/electrostatics neighbor-list issue by @CompRhys in #560
- Fix zero dummy cell for non-periodic systems in alchemiops naive NL by @lil-lon in #576
- Fix missing device in
FixComandget_centers_of_mass()by @sklenard in #583 - Pull in alchemiops partial PBC fixes by @lil-lon in #591
- Detach states in autobatchers by @niklashoelter in #590
- Recognise Warp OOM in memory estimation and free cache before the real run by @niklashoelter in #589
- Fix wrong default value in doc-string by @t-reents in #572
- Use
typre-commit hook by @CompRhys in #574 - Better
tydep setup in prek for CI vs local, bump MatterSim version for molecule support by @CompRhys in #570 - Pin
phono3py>=4.0.0in mattersim extra by @lil-lon in #577 - Restore code coverage badge by @CompRhys in #558
- Make CI badge reflect required test status by @CompRhys in #557
- Update ASE wiki URL to fix lint in CI by @curtischong in #588
- @PascalSalzbrenner made their first contribution in #552
- @sklenard made their first contribution in #583
- @lil-lon made their first contribution in #561
This release is shaped by three major pushes:
- External model posture. Model integrations are increasingly maintained in the model's own package rather than in-tree. Orb (#456), SevenNet (#467), and Metatomic (#523) are migrated to upstream-maintained torch-sim interfaces, Nequix lands as a new model via the same pattern (#511), and testing utilities for this external-model posture are added (#433, released in v0.5.2).
- Extensible extras framework. A new scheme for attaching extra atom/system properties to
SimState(#464) unlocks long-range physics on top of a common base: Electrostatics (#532), D3 Dispersion (#531), and aSumModelinterface for composing force fields (#530, #537). - Physical validation. A major effort from @thomasloux introduced an integration-test suite that checks physical observables across the integrators (#521). This surfaced and drove fixes for a string of long-standing bugs in the NPT Nose-Hoover and NPT Langevin integrators (#498, #504, #505, #520, #528), materially improving MD correctness.
Other highlights include a native PyTorch batched cell list, a general pair-potential framework, a first-class PRNG on SimState with reproducibility docs, basic logging configuration, and duecredit support.
- Introduce more extensible scheme for extra properties by @CompRhys in #464
- Add Electrostatics using extensible extras by @CompRhys in #532
- Add D3 Dispersion Model by @CompRhys in #531
- Add SumModel interface by @CompRhys in #530
- Compose models for allegro-pol simulation by @CompRhys in #537
- Migrate Metatomic model to use upstream
metatomic-torchsimintegration by @CompRhys in #523 - Add Nequix model via upstream
nequixintegration by @teddykoker in #511 - Migrate Orb model to use upstream
orb-modelsintegration by @CompRhys in #456 - Migrate SevenNet model to use upstream
sevennintegration by @CompRhys in #467 - Implement general pair-potential and pair-force by @CompRhys in #483
- Add batched Lennard-Jones model by @abhijeetgangan in #474
- Add
NPTStatethat carries a stress variable by @thomasloux in #505 - Introduce PRNG to
SimStateand add reproducibility docs by @CompRhys in #460 - Configure basic logging by @CompRhys in #484
- Implement first pass at
duecreditby @CompRhys in #459
- Batch the torch cell list by @CompRhys in #534
- Eliminate for-loop in
build_naive_neighborhoodby @CompRhys in #470 - Reduce thread count to prevent overhead slowdown for LJ on CPU by @thomasloux in #506
- Remove unnecessary stress evaluation in
NPTLangevinby @thomasloux in #528
- Add
pbc_wrap_batched_and_get_lattice_shiftsto handle unwrapped positions in neighbor lists by @CompRhys in #519 - Expose
angle_tolerancein symmetry pipeline by @danielzuegner in #527 - Forward
max_memory_paddingto_chunked_applyinoptimize()by @niklashoelter in #513 - Enforce compatible constraints in DOF helper by @janosh in #480
- Check that models return detached tensors by @CompRhys in #494
- Add log line clarifying
BinningAutoBatcheris initialization-only inoptimizeby @orionarcher in #489 - Add
n_edgesmemory metric to auto-batching by @orionarcher in #481 - Standardize parameter typing to
float | torch.Tensorwhere appropriate by @CompRhys in #466 - Remove
StateDicttype andensure_sim_statehelper by @orionarcher in #487 - Add single-atom motif edge case to the validate function by @CompRhys in #518
- Use sequential split instead of iterative
__getitem__for slicing by @thomasloux in #546
- Fix
state.to()not propagating dtype/device to constraints by @danielzuegner in #527 - Fix
FixSymmetryconstraintsystem_idxremapping on reordered state slicing by @danielzuegner in #509 - Fix NPT Nose-Hoover integrator by @alphalm4 in #520
- Update momenta before integration in NPT Nose-Hoover by @alphalm4 in #498
- Update sources for NPT Nose-Hoover by @thomasloux in #504
- Clamp Frechet log-space deformation gradient to prevent NaN from
matrix_expoverflow by @janosh in #450 - Fix FIRE NaN velocity sentinel corrupting retained systems during autobatcher swaps by @janosh in #490
- Fix GPU memory leak from missing
.detach()in model wrappers by @reillyosadchey in #491 - Adjust test tolerances to resolve false positive test failures by @CompRhys in #507
- Update Phonopy test fixture after removal of dummy
pbckwarg in 3.2.0 by @CompRhys in #515 - Hotfix: max pin on
tablesdue to broken 3.11 PyTables release by @CompRhys in #461
- Remove
graph-pesmodel integration by @craigxchen in #538 - General maintenance & reap FairChem v1 by @CompRhys in #522
- Add integration tests checking physical observables across integrators by @thomasloux in #521
- Add example benchmarking scripts by @CompRhys in #516
- Maintenance to restore CI to all passing by @CompRhys in #533
- Nits rollup by @CompRhys in #501
- Batched pair-function cleanup by @CompRhys in #488
- Pin
orb<0.6by @CompRhys in #493 - Consolidate branch protection rules by @CompRhys in #492
- Bump
tablesversion and use py3.14 for highest tests by @CompRhys in #486 - Run
tyin lint CI by @janosh in #339 - Restore non-conflicting changes from #339 (ty linting setup) by @CompRhys in #476
- Restore #460 seed-removal semantics after #339 by @janosh in #477
- Set root path in link check action by @CompRhys in #468
This release adds batched L-BFGS and BFGS optimizers, a FixSymmetry constraint, performance improvements to ts.static and ts.optimize through improved batching, and an MD progress bar. It also includes several bug fixes and quality-of-life improvements.
- Implement batched L-BFGS and BFGS optimizers by @abhijeetgangan in #365
- Add FixSymmetry constraint by @danielzuegner in #438
- Enable MD progress bar by @danielzuegner in #448
- Implement
SimState.wrap_positionsusingpbc_wrap_batchedby @Praagnya in #350
- Accelerated
ts.static+ added scaling scripts by @falletta in #427 - Accelerated
ts.optimizeby batching Frechet Cell Filter by @falletta in #439 - Accelerated
TrajectoryReporterwhen trajectory output is disabled by @falletta in #441 - Vectorize atom index computation in L-BFGS optimizer by @falletta in #444
- Add cumulative strain guard to FixSymmetry by @janosh in #447
- Move SPS to a helper method and add documentation by @CompRhys in #455
- Testing utils for external model posture by @CompRhys in #433
- Fix constraint
atom_idxnot remapped on reordered slice by @falletta in #457 - Fix L-BFGS history consistency for state updates by @falletta in #443
- Handle wrapping correctly for default neighborlist by @abhijeetgangan in #436
- Bump pre-commit hooks and fix ruff lint errors by @janosh in #442
- Make GraphPES tests less flaky by @CompRhys in #446
This release adds several new features including constraints support for molecular dynamics and optimization, trajectory appending capabilities, and a batch cell list implementation. It also includes improvements to integrator initialization, temperature handling, and numerous bug fixes.
- Constraints support for molecular dynamics and optimization by @thomasloux in #294
- Added
FixAtomsconstraint to fix specific atoms in place - Added
FixComconstraint to prevent center of mass drift - Constraints automatically adjust degrees of freedom for accurate temperature calculations
- Full support across all integrators (NVE, NVT, NPT) and optimizers (FIRE, Gradient Descent)
- Constraints preserved during state manipulation (slicing, splitting, concatenation)
- Added
- Scale atoms when changing cell by @thomasloux in #344
- Allow different temperatures in
ts.integrateby @thomasloux in #367 - Add batch cell list by @abhijeetgangan in #388
- Enable appending to trajectory when using
ts.optimize/ts.integrateby @danielzuegner in #361 - Enable user to save initial state of trajectory by @danielzuegner in #415
- Better default force convergence function by @orionarcher in #404
- Add systemwise
max_forceas a default property for reporter_dict by @orionarcher in #410 - Add charge and spin to common_args dicts by @orionarcher in #413
- Replace manual initialization with
from_stateacross integrators and optimizers by @orionarcher in #420 - Update energy description to 'Potential energy' by @danielzuegner in #408
- Use upstream NequipTorchSimModel by @CompRhys in #400
- Fix cuequivariance MACE by @thomasloux in #391
- Fix SevenNet tests by @YutackPark in #393
- Fix tutorials dependencies by @thomasloux in #396
- Fix offsets in merge_constraints by @falletta in #402
- Fix memory scaling calculation for non-periodic boundary conditions by @orionarcher in #412
- Download NequIP model from Zenodo instead of nequip.net by @orionarcher in #418
- Update metatrain version in metatomic tutorial by @Luthaf in #395
- Add close stale bot by @CompRhys in #411
- Significantly consolidate scripts to speed up testing by @orionarcher in #385
- Use validate_model_outputs in testing by @CompRhys in #401
- Reduce test wall time by @CompRhys in #403
- Pin scipy for fairchem tests by @CompRhys in #405
- Disable NequIP tests for Python 3.13 by @curtischong in #421
This release focuses on improving batch processing capabilities across TorchSim. The neighbor list module has been completely refactored to support batched calculations with multiple backend implementations, elastic tensor calculations now leverage batched operations for improved performance, and a bug fix ensures Monte Carlo swaps work correctly with ragged (different-sized) systems.
- Refactor neighbor list module with batched support and multiple backends by @abhijeetgangan in #348
- New unified
torchsim_nlfunction with automatic backend selection - Multiple implementations: Alchemiops (NVIDIA CUDA), Vesin, torch_nl, and pure PyTorch fallback
- Support for both single-system and batched (multi-system) calculations
- Automatic selection of best available implementation based on installed packages
- New unified
- Batch elastic operations by @orionarcher in #384
calculate_elastic_tensornow usests.staticrunner for batched calculations- Added
autobatcherparameter for memory-efficient processing of deformations - Added
pbarparameter for progress bar support
- Fix Monte Carlo swap for ragged systems by @curtischong in #380
- Fixed
generate_swapscalculation of system start indices for systems with different atom counts
- Fixed
Thank you to everyone who contributed to this release! This release includes important bug fixes and new features. @thomasloux, @orionarcher, @WillEngler, @RishikeshMagar, @nh-univie, @andrewrm98, @danielzuegner, and others made valuable contributions. π
- Add CSVR / V-Rescale thermostat and anisotropic C rescale barostat by @thomasloux in #326
- Support for electrostatics by @orionarcher in #373
- Add support for AMD GPUs (consumer/datacenter) by @amacbride in #347
- Fix: add init_kwargs to ts.integrate by @danielzuegner in #360
- Fix PBC extraction to CPU fairchem model by @nh-univie in #368
- Handle tensor PBC input in FairChemV1Model by @WillEngler in #372
- Fix Comments Issue#309 by @RishikeshMagar in #378
- Fix fairchem-legacy tests by removing explicit Hugging Face login by @WillEngler in #369
- Consolidate model and model_name args in FairchemModel by @orionarcher in #377
- @amacbride made their first contribution in #347
- @danielzuegner made their first contribution in #360
- @RishikeshMagar made their first contribution in #378
Thank you to everyone who contributed to this release! This release includes important bug fixes, new features, and API improvements. @thomasloux, @curtischong, @CompRhys, @orionarcher, @WillEngler, @samanvya10, @hn-yu, @wendymak8, @chuin-wei, @pragnya17, and many others made valuable contributions. π
- Standardize argument order to (state, model) by @pragnya17 in #341
- Deprecate pbc_wrap_general by @curtischong in #305
- Mixed PBC Support by @curtischong in #320
- Feature: Batched NVT Nose-Hoover by @thomasloux in #265
- Add degrees of freedom (dof) in state and temperature computation by @thomasloux in #328
- Add sources npt langevin by @thomasloux in #298
- MACE: transfer atomic numbers to CPU before converting to numpy by @t-reents in #289
- Fixed max atoms memory estimation by @nh-univie in #279
- Fixing model loading logic (names and cache dir) for fairchem models by @nh-univie in #278
- Fix fairchem and neighbors tests by @WillEngler in #317
- Fix #293: State to device side effects by @samanvya10 in #297
- Fix graph-pes key issue by @jla-gardner in #303
- Fix calculate static state after relax by @curtischong in #338
- Misc fixes by @orionarcher in #336
- Fix cell to cellpar by @thomasloux in #342
- Fix failing Docs build by @CompRhys in #296
- Fix: correct speedup plot image path in README by @Joaqland in #333
- Put SimState Init logic into post_init (and enforce kw_args=true for SimState children) by @curtischong in #335
- Replace vars(state) with state.attributes by @orionarcher in #329
- Rename and reorder some variables by @orionarcher in #316
- Add SevenNet path, str types for model arg by @YutackPark in #322
- Add version attribute by @thomasloux in #311
- Convert cell_to_cellpar from ase's numpy implementation to pytorch by @wendymak8 in #306
- Autobatch OOM handling by @chuin-wei in #337
- Allow Mace to be loaded from a model path by @orionarcher in #349
- NPTLangevinState inherits from MDState by @hn-yu in #299
- Add integrators in docs by @thomasloux in #290
- Create py.typed by @arosen93 in #287
- Remove unused imports orb and updates class type check by @thomasloux in #292
- Skip FairChem tests on forks due to HF secret by @CompRhys in #295
- Loosen numpy dependency by @chuin-wei in #321
- @arosen93 made their first contribution in #287
- @nh-univie made their first contribution in #278
- @samanvya10 made their first contribution in #297
- @wendymak8 made their first contribution in #306
- @pragnya17 made their first contribution in #341
- @chuin-wei made their first contribution in #321
- @hn-yu made their first contribution in #299
- @Joaqland made their first contribution in #333
Thank you to everyone who contributed to this release! This release includes significant API improvements and breaking changes. @janosh led a major API redesign to improve usability. @stefanbringuier added heat flux calculations. @curtischong continued improving type safety across the codebase. @CompRhys, @orionarcher, @WillEngler, and @thomasloux all made valuable contributions. π
- Fairchem v2 support by @janosh, @CompRhys, @abhijeetgangan, @orionarcher in #211
- Big breaking API redesign by @janosh in #264
- Rename Flavors to more descriptive names by @orionarcher in #282
- Enhancement: Heat Flux Function by @stefanbringuier in #127
- Fix: orb squeeze provides incorrect shape for energy tensor by @thomasloux in #257
- Fix docs build by @WillEngler in #271
- Fairchem legacy support by @CompRhys in #270
- Update citation in README.md by @orionarcher in #240
- Add GOVERNANCE.md and remove Contributor's Certification checkbox and language by @WillEngler in #272
- Remove Contributor License Agreement (CLA) in favor of certification in contributing.md by @WillEngler in #267
- Small update to README and CHANGELOG by @orionarcher in #283
- mypy type math.py and test_math.py by @curtischong in #242
- Type test_io, neighbors, and transforms by @curtischong in #243
- Type trajectory by @curtischong in #244
- MAINT: update pins in MACE phonons example. Remove misleading ty from PR template by @CompRhys in #239
Full Changelog: https://github.com/TorchSim/torch-sim/compare/v0.3.0...v0.4.0
Thank you to everyone who contributed to this release! @t-reents, @curtischong, and @CompRhys did great work squashing an issue with SimState concatenation. @curtischong continued his crusade to type and improve the TorchSim API. @orionarcher, @kianpu34593, and @janosh all made contributions that continue to improve package quality and usability. π
- Define attribute scopes in
SimStatesby @curtischong, @CompRhys, @orionarcher in #228 - Improve typing of
ModelInterfaceby @curtischong, @CompRhys in #215 - Make
system_idxnon-optional inSimStateby @curtischong in #231 - Add new states when the
max_memory_scaleris updated by @kianpu34593 in #222 - Rename
batchtosystemby @curtischong in #217, #233
- Initial fix for concatenation of states in
InFlightAutoBatcherby @t-reents in #219 - Finish fix for
SimStateconcatenation by @t-reents and @curtischong in #232 - Fix broken code block in low-level tutorial by @CompRhys in #226
- Update metatomic checkpoint to fix tests by @curtischong in #223
- Fix memory scaling in
determine_max_batch_sizeby @t-reents, @janosh in #212
- Update README plot with more models by @orionarcher in #236, #237
- Update
citation.cffby @CompRhys in #225
Full Changelog: https://github.com/TorchSim/torch-sim/compare/v0.2.2...v0.3.0
- Remove higher level model imports by @CompRhys in #179
- Add per atom energies and stresses for batched LJ by @abhijeetgangan in #144
- throw error if autobatcher type is wrong by @orionarcher in #167
- Mattersim fix tensors on wrong device (CPU->GPU) by @orionarcher in #154
- fix
npt_langevinby @jla-gardner in #153 - Make sure to move data to CPU before calling vesin by @Luthaf in #156
- Fix virial calculations in
optimizersandintegratorsby @janosh in #163 - Pad memory estimation by @orionarcher in #160
- Refactor sevennet model by @YutackPark in #172
iooptional dependencies inpyproject.tomlby @curtischong in #185- Fix column->row cell vector mismatch in integrators by @CompRhys in #175
- More efficient Orb
state_to_atoms_graphcalculation by @AdeeshKolluru in #165
- Refactor
test_math.pyandtest_transforms.pyby @janosh in #151
- Try out hatchling for build vs setuptools by @CompRhys in #177
- Add
torch_sim/typing.pyby @janosh in #157
- @Luthaf made their first contribution in #156
- @YutackPark made their first contribution in #172
- @curtischong made their first contribution in #185
Full Changelog: https://github.com/TorchSim/torch-sim/compare/v0.2.0...v0.2.1
- Remove higher level model imports by @CompRhys in #179
- Add per atom energies and stresses for batched LJ by @abhijeetgangan in #144
- throw error if autobatcher type is wrong by @orionarcher in #167
- Fix column->row cell vector mismatch in integrators by @CompRhys in #175
- Mattersim fix tensors on wrong device (CPU->GPU) by @orionarcher in #154
- fix
npt_langevinby @jla-gardner in #153 - Make sure to move data to CPU before calling vesin by @Luthaf in #156
- Fix virial calculations in
optimizersandintegratorsby @janosh in #163 - Pad memory estimation by @orionarcher in #160
- Refactor sevennet model by @YutackPark in #172
iooptional dependencies inpyproject.tomlby @curtischong in #185
- More efficient Orb
state_to_atoms_graphcalculation by @AdeeshKolluru in #165
- Refactor
test_math.pyandtest_transforms.pyby @janosh in #151
- Try out hatchling for build vs setuptools by @CompRhys in #177
- Add
torch-sim/typing.pyby @janosh in #157
- @Luthaf made their first contribution in #156
- @YutackPark made their first contribution in #172
- @curtischong made their first contribution in #185
Full Changelog: https://github.com/torchsim/torch-sim/compare/v0.2.0...v0.2.1
- Fix integrate reporting kwarg to arg error, #113 (raised by @hn-yu)
- Allow runners to take large initial batches, #128 (raised by @YutackPark)
- Add Fairchem model support for PBC, #111 (raised by @ryanliu30)
- breaking Rename
HotSwappingAutobatchertoInFlightAutobatcherandChunkingAutoBatchertoBinningAutoBatcher, #143 @orionarcher - Support for Orbv3, #140, @AdeeshKolluru
- Support metatensor models, #141, @frostedoyter @Luthaf
- Support for graph-pes models, #118 @jla-gardner
- Support MatterSim and fix ASE cell convention issues, #112 @CompRhys
- Implement positions only FIRE optimization, #139 @abhijeetgangan
- Allow different temperatures in batches, #123 @orionarcher
- FairChem model updates: PBC handling, test on OMat24 e-trained model, #126 @AdeeshKolluru
- FairChem model from_data_list support, #138 @ryanliu30
- New correlation function module, #115 @stefanbringuier
- Only install HF for fairchem tests, #134 @CompRhys
- Don't download MBD in CI, #135 @orionarcher
- Tighten graph-pes test bounds, #143 @orionarcher
Initial release.