Highlights
DPA4 family: accuracy and efficiency
DeePMD-kit v3.2.0 introduces the DPA4 family, targeting both the accuracy and efficiency frontiers of machine-learning interatomic potentials. DPA4 is an SO(3)-equivariant message-passing model designed for high accuracy, with support for conservative energy/force training, spin, ZBL coupling, multitask learning, and fine-tuning. DPA4C complements it as a compact, strictly local and compressible model optimized for high-throughput and large-scale molecular dynamics, with graph-native execution, fused CUDA inference, native-spin support, and charge/multiplicity conditioning.
DPA-ADAPT: adapting pretrained DPA models to downstream tasks
DPA-ADAPT extends pretrained DPA models beyond interatomic potentials to downstream atomistic property prediction. It provides both Python and command-line interfaces for descriptor-based regression, frozen-backbone training, full fine-tuning, and multi-task fine-tuning, together with data conversion, prediction, evaluation, and cross-validation utilities.
Expanded modern backends
The PyTorch Exportable (pt_expt), JAX, and TensorFlow 2 (tf2) backends receive major updates in v3.2.0. pt_expt now provides a substantially more complete path from training to graph-native, AOTInductor/CUDA and LAMMPS deployment; JAX gains a broader training, fine-tuning, multi-task, Hessian, and export workflow; and TF2 expands the Array-API-based model stack and SavedModel workflow. Shared backend-independent infrastructure further aligns training and model behavior across these backends.
Agent-ready DeePMD-kit workflows
v3.2.0 also introduces official Agent Skills for DeePMD-kit workflows, providing reusable domain-specific instructions for tasks such as installation, training, fine-tuning, inference, and molecular-dynamics deployment. These skills make DeePMD-kit workflows easier to execute reliably with modern AI agents while retaining explicit control over the underlying scientific workflow.
What's Changed
Breaking Changes
- breaking(gmx): remove in-tree GROMACS patch integration by @njzjz-bot in #5377
- fix(loss): exclude mixed_type padding atoms from the training loss by @wanghan-iapcm in #5738
- refactor(model): express analytical bridging as an explicit linear_ener composition by @wanghan-iapcm in #5964
New Features
- feat(dp, pt): add force l2 norm loss & mae loss by @iProzd in #5294
- feat(pt_expt): add linear energy model by @wanghan-iapcm in #5317
- feat(pt_expt): implement DeepSpin model in pt_expt backend by @wanghan-iapcm in #5293
- feat(pt_expt): add dp compress support for pt_expt backend by @wanghan-iapcm in #5323
- feat(pt_expt): add dp finetune support by @wanghan-iapcm in #5331
- feat(c++,pt-expt): add .pt2 (AOTInductor) C/C++ inference with DPA1/DPA2/DPA3 support by @wanghan-iapcm in #5298
- feat(pt_expt): add dp change-bias support by @wanghan-iapcm in #5330
- feat(pt_expt): add missing losses (spin, DOS, tensor, property) by @wanghan-iapcm in #5345
- feat: add WSD LR Scheduler by @OutisLi in #5326
- feat(property): Support element type-wise bias in property fitting by @Chengqian-Zhang in #5322
- feat(loss): support three-value huber delta by @OutisLi in #5329
- feat(pd): add add_chg_spin_ebd parameter to DescrptDPA3 by @HydrogenSulfate in #5333
- test(pt_expt): add .pt2 (AOTInductor) unit tests and bug fixes by @wanghan-iapcm in #5334
- feat(pt/dpmodel): add lmdb dataloader by @iProzd in #5283
- feat(pt_expt): add DeepSpin support for pt_expt backend by @wanghan-iapcm in #5370
- feat(pt_expt): add eval_typeebd, eval_descriptor, eval_fitting_last_layer by @wanghan-iapcm in #5391
- feat(pt_expt): multi-task training support by @wanghan-iapcm in #5397
- feat(pt_expt): add LMDB dataset support by @wanghan-iapcm in #5408
- feat(pt): add full validation by @OutisLi in #5336
- feat(pt): full validation support lmdb format by @OutisLi in #5419
- feat(pt/dpmodel): add max and filter mode for lmdb by @OutisLi in #5413
- feat(pt_expt): support .pt training checkpoints in DeepEval by @wanghan-iapcm in #5423
- feat(pt_expt): make model.json optional in .pt2/.pte loading by @OutisLi in #5416
- feat(pt): add ema shadow model by @OutisLi in #5420
- feat(pt/dpmodel): add sequential_update for dpa3 by @iProzd in #5355
- feat(pt/dpmodel): add use_default_pf by @iProzd in #5356
- feat(dpa3): decouple charge_spin from fparam by @iProzd in #5431
- feat(jax): add training by @njzjz-bot in #5460
- feat(pt): Add DPA4/SeZM descriptor & model 🎉🎉🎉 by @OutisLi in #5448
- feat(pt_expt): pluggable NeighborList strategy + O(N) vesin neighbor list for Python/ASE inference by @wanghan-iapcm in #5491
- feat(dpa4): multiple updates for DPA4/SeZM by @OutisLi in #5503
- feat(dpmodel): backend-agnostic DPA4 descriptor and fitting (core path) by @wanghan-iapcm in #5515
- feat(pt_expt): DPA4 descriptor and fitting (training + export) by @wanghan-iapcm in #5522
- feat(dpa4): use edge force and atomic virial by @OutisLi in #5518
- feat(pt/ptexpt): freeze parameters when infer only by @OutisLi in #5512
- feat(pt_expt): DPA4 inference (.pt2 freeze, DeepEval, C++, LAMMPS) by @wanghan-iapcm in #5540
- feat: add charge spin to cpp runtime by @anyangml in #5509
- feat(dpmodel): complete DPA4/SeZM SO3 grid projection (mirror current pt) by @wanghan-iapcm in #5555
- feat(lmp): provide dE/dfparam to LAMMPS via finite differences by @Lily200202 in #5498
- feat(dpa4): so3_readout across pt + dpmodel/pt_expt backends by @wanghan-iapcm in #5561
- feat(pt_expt): load plugin entry points by @njzjz-bot in #5559
- feat(pt): add embedding sub cli for pt models by @OutisLi in #5571
- feat(dpmodel): NeighborGraph foundation — contract, segment toolkit, numpy builder, edge force/virial by @wanghan-iapcm in #5581
- feat(pt/dpa4): support multi-rank lammps inference by @OutisLi in #5580
- feat: dp test stress by @OutisLi in #5588
- feat(tf): support training stat_file by @njzjz-bot in #5551
- feat(pt): add atomic charge population fitting and model by @chrisahart in #5494
- feat(pt/dpa4): Support property fitting in DPA4/SeZM models by @OutisLi in #5587
- feat(pt): add custom save behaviors by @OutisLi in #5589
- feat(jax): add JAX-MD interface by @njzjz in #5590
- feat(pt_expt): dpa1(attn_layer=0) graph-native NeighborGraph forward by @wanghan-iapcm in #5583
- feat(dpmodel): add descriptor compression by @njzjz in #5592
- feat(tf2): add eager TensorFlow array backend by @njzjz in #5598
- feat(pt): support shared_dict in linear energy model by @njzjz-bot in #5548
- feat(show): add serialization-tree via DeepEval.serialize by @njzjz-bot in #5316
- feat(core): batch prod env mat over frames by @njzjz in #5582
- add DPA-ADAPT toolkit for downstream property adaptation by @zhaiwenxi in #5572
- feat(pt_expt): graph-native dpa1 — .pt2 export + compiled training + C++ inference single & multi-rank (NeighborGraph PR-B) by @wanghan-iapcm in #5604
- feat(dpmodel): add backend-independent trainer abstraction by @njzjz in #5603
- feat(pt_expt): O(N) on-device NeighborGraph builders — vesin & nvalchemiops (PR-C) by @wanghan-iapcm in #5714
- feat(dpmodel): graph-native se_atten attention (NeighborGraph PR-D) by @wanghan-iapcm in #5715
- feat(lammps): load installed backends dynamically by @njzjz in #5707
- feat(tf2): add training workflow by @njzjz in #5735
- feat(dpa4): multiple updates for dpa4 by @OutisLi in #5734
- feat(dpmodel): NeighborGraph 3-body angle machinery (PR-E) by @wanghan-iapcm in #5717
- feat(jax): support shared_dict in multi-task training by @njzjz in #5740
- feat(pt/dpa4): add nvalchemi-toolkit warpper for DPA4 by @OutisLi in #5568
- feat(jax): freeze models with hessian output by @njzjz in #5608
- feat(dpa4): preserve cutoff smoothness in edge feature branches by @OutisLi in #5772
- feat(modifier): add dpmodel dipole-charge adapters by @njzjz-bot in #5775
- feat(dpmodel,pt_expt,cc): graph-native DPA-2 — first message-passing model on the NeighborGraph lower (PR-G-dpa2) by @wanghan-iapcm in #5779
- feat(jax): support DPA4 descriptor by @njzjz in #5748
- feat(dpmodel): add adaptive Array API neighbor search by @njzjz in #5889
- feat(dpa4): DPA4/SeZM on the NeighborGraph lower — graph-native port, multi-rank, native spin, charge-spin/bridging by @wanghan-iapcm in #5884
- fix(jax): add hessian energy loss by @njzjz in #5607
- feat(dpa1): add compressible l=2 moments across PT backends by @OutisLi in #5911
- feat(tf2): support DPA4 descriptor by @njzjz in #5749
- feat: SFPG cross-rank completion — capabilities, ZBL bridging and spin+ZBL multi-rank by @wanghan-iapcm in #5939
- feat(pt_expt): align the training runtime with pt by @OutisLi in #5958
- feat(pt_expt): call-time DeepEval auto ladder with nf==1 vesin gate by @Shaurya2k06 in #5903
- feat(lmdb): support mixed-size batches and lazy label availability by @OutisLi in #5962
- feat(pretrained): add DPA4 OMat24 models by @njzjz-bot in #5970
- feat(pt-expt): add compact descriptor DPA4C 🎉🎉🎉 by @OutisLi in #5972
- feat(pt_expt): multi-rank LAMMPS support for GNN models (DPA3 / DPA2 / spin) by @wanghan-iapcm in #5430
- chore: add DPA-3.3-1M by @anyangml in #5489
- fix(pd): add default chg spin parameter by @HydrogenSulfate in #5469
- fix(train): share post-training bias adjustment by @njzjz in #5745
- fix(pt): allow concurrent stat cache reads by @OutisLi in #5773
- fix(jax): support charge-spin savedmodel export by @njzjz in #5737
Enhancement
- feat(train): show finish time in ETA logs by @OutisLi in #5328
- refactor: extract shared tabulate math, remove pt_expt→pt dependency by @wanghan-iapcm in #5339
- refactor(pt_expt): use model API for inference, consistent file naming by @wanghan-iapcm in #5354
- refactor: use Array API-compatible tabulate math by @njzjz-bot in #5366
- feat(pt_expt): enhance per-module export tests + fix nframes symbol collision by @wanghan-iapcm in #5367
- perf(pt2): optimize .pt2 C++ inference path by @wanghan-iapcm in #5407
- perf(pt): optimize HybridMuon optimizer by @OutisLi in #5412
- feat(pt): optimze HybridMuon by borrowing some ideas from deepseek v4 paper by @OutisLi in #5424
- refactor(jax): auto-convert dpmodel modules by @njzjz in #5527
- refactor(tests): auto-convert array-api-strict modules by @njzjz in #5528
- feat(pt): avoid grad clip sync by @OutisLi in #5519
- fix(jax): stabilize repflow dynamic selection export by @njzjz in #5533
- fix(pt): enable second-order autograd for tabulate descriptors by @njzjz in #5537
- refactor(pt/dpa4): use edge schema for dpa4 and ignore sel by @OutisLi in #5562
- fix(finetune): warn on descriptor config mismatches by @njzjz-bot in #5549
- feat: enable PyTorch custom ops by default by @njzjz-bot in #5578
- refactor(api_cc): load backends as plugins by @njzjz in #5531
- refactor(dpmodel/dpa4) by @OutisLi in #5599
- feat(dpmodel): NeighborGraph support for dpa1 tebd_input_mode="strip" by @wanghan-iapcm in #5747
- test(dpa4): enable array-api-strict consistency tests by @njzjz in #5751
- refactor: pair exclude_types as canonical NeighborGraph transform; dpa1 graph path supports exclude_types (decision #18) by @wanghan-iapcm in #5733
- perf(dpa1): optimize graph CUDA inference and deployment by @OutisLi in #5758
- refactor(loss): extract masked per-frame reduction idioms to cut nested branching by @wanghan-iapcm in #5783
- fix(train): dispatch registered learning rate schedules by @njzjz-bot in #5776
- refactor(model): unify dpmodel backend factories by @njzjz-bot in #5786
- perf(lmdb): parallelize batch decoding and support epoch-based schedules by @OutisLi in #5914
- perf(pt_expt): use scalable graph builders during training by @OutisLi in #5913
- perf: bound memory in model testing and output statistics by @OutisLi in #5944
- refactor: promote duck-typed capability probes to base-class interfaces by @wanghan-iapcm in #5967
- perf(dpa4): batch the SO3/grid contractions over (D,F); keep use_amp through pt_expt assembly by @wanghan-iapcm in #5960
- perf(pt_expt): share compiled forward_lower across multi-task shared-fitting tasks by @anyangml in #5457
- perf(dpa4): opt so3grid (with pt_expt GridProduct wrapping fix) by @wanghan-iapcm in #5552
- fix(pt_expt): report average step time in the normal training log by @wanghan-iapcm in #5500
- fix(dpa4): use triton_op to enable triton when freezing by @OutisLi in #5521
- fix(jax): reuse atomic forward outputs in force path by @njzjz in #5605
Documentation
- docs: restructure and clarify learning-rate.md documentation by @OutisLi in #5276
- docs(argcheck): fix typos and wording in doc strings by @njzjz-bot in #5369
- docs: fix spelling typos in documentation by @njzjz-bot in #5387
- docs(discussions): add lightweight q-and-a discussion template by @njzjz-bot in #5385
- docs: Update JAX backend documentation on training support by @njzjz in #5482
- docs(agent-skills): add DeePMD-kit skill guide by @njzjz-bot in #5497
- docs(skills): consolidate training skill disclosure by @njzjz-bot in #5530
- test(pt): document se_e3_tebd gr output by @njzjz-bot in #5536
- docs: add DPA3 cyclohexane distillation tutorial by @njzjz-bot in #5564
- docs: fix stale documentation links and placeholders by @wanghan-iapcm in #5700
- docs: disable Read the Docs PDF build by @njzjz-bot in #5710
- docs(dpmodel): document mathematical operations by @njzjz-bot in #5787
- docs: migrate admonitions to GFM alerts by @njzjz in #5886
- docs(argcheck): document backend support matrices by @njzjz-bot in #5915
- docs+tests(bias): pin set/change-by-statistic semantics for bridged models by @wanghan-iapcm in #5966
- docs(backend): document backend support and workflows by @njzjz in #5929
- docs: refresh project landing pages by @njzjz in #5951
- docs: recommend DPA4 and DPA4C in README by @OutisLi in #5979
- docs: replace viewcode with GitHub permalinks by @njzjz-bot in #5887
Build and release
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5335
- build(deps-dev): bump torch from 2.10.0 to 2.11.0 by @dependabot[bot] in #5347
- build(deps): bump actions/deploy-pages from 4 to 5 by @dependabot[bot] in #5346
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5357
- build(deps): bump codecov/codecov-action from 5 to 6 by @dependabot[bot] in #5363
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5381
- build(pyproject): adopt PEP 639 license metadata by @njzjz-bot in #5380
- CI: Update OS version in Read the Docs configuration by @njzjz in #5392
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5395
- build(deps): bump softprops/action-gh-release from 2 to 3 by @dependabot[bot] in #5399
- build(deps): bump actions/upload-pages-artifact from 4 to 5 by @dependabot[bot] in #5398
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5409
- ci: make Codecov upload non-blocking by @njzjz-bot in #5421
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5426
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5441
- CI(deps): Update jax (cpu) version to 0.10.0 in pyproject.toml by @njzjz in #5442
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5447
- build(deps): bump @tootallnate/once from 2.0.0 to 2.0.1 in /source/nodejs in the npm_and_yarn group across 1 directory by @dependabot[bot] in #5453
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5456
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5484
- build: move vesin[torch] to the torch extra (fix conda-forge) by @wanghan-iapcm in #5501
- build(deps): bump codecov/codecov-action from 6 to 7 by @dependabot[bot] in #5513
- CI: drop container in
test-cudaby @njzjz in #5543 - build(deps): bump pypa/cibuildwheel from 3.4 to 4.1 by @dependabot[bot] in #5554
- build: bypass Torch CUDA discovery without nvcc by @njzjz-bot in #5558
- build(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #5585
- build(deps): bump actions/cache from 5 to 6 by @dependabot[bot] in #5586
- docs(examples): build and document graph.pb generation in infer_water by @wanghan-iapcm in #5699
- ci: use ubuntu-slim for lightweight workflows by @njzjz in #5742
- fix(build): migrate to stable dynamic metadata API by @njzjz-bot in #5769
- CI: run Test C++ workflow on self-hosted runner by @njzjz in #5863
- ci: split CUDA tests into separate jobs by @njzjz-bot in #5896
- ci: balance fixture-aware test groups by @njzjz-bot in #5810
- revert(ci): undo AOTI .pt2 compile / GPU test overlap (#5882) by @njzjz-bot in #5916
- ci: stabilize optional backend workflows by @njzjz in #5945
- chore(deps): bump pypa/cibuildwheel from 4.1 to 4.2 by @dependabot[bot] in #5968
- perf(test): reduce redundant .pt2 compilations in GPU CI by @wanghan-iapcm in #5379
- build(jax): split pinned cpu and gpu groups by @njzjz-bot in #5436
- set default timeout for pytest by @link89 in #5265
- ci(package-c): build pytorch plugin without bundled runtime by @njzjz in #5706
- fix(dev): fix devcontainer LAMMPS pytest wrapper paths by @wanghan-iapcm in #5697
- fix(cmake): verify paddle inference download integrity by @njzjz in #5918
- fix(cmake): install DeePMD config for C library builds by @njzjz-bot in #5475
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5506
- CI: update
test_cudaruns-ontogpuby @njzjz in #5541 - [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5539
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5576
- ci: limit Python PR test matrix by @njzjz-bot in #5611
- ci: fix Gitee mirror workflow triggers by @njzjz-bot in #5778
- ci(lammps): retry tests after transient SIGTERM by @njzjz-bot in #5804
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5609
- ci(cuda): overlap AOTI .pt2 compiles with GPU unit tests by @wanghan-iapcm in #5882
- chore(deps): bump actions/setup-python from 6 to 7 by @dependabot[bot] in #5898
- chore(deps): bump actions/labeler from 6 to 7 by @dependabot[bot] in #5899
- chore(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #5900
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5909
Bug fixings
- fix(pt): use strict=False when loading .pt checkpoints for inference by @wanghan-iapcm in #5353
- fix(pt): fix NaN Hessian in DPA2 and DPA3 by @njzjz in #5351
- fix: missing log in multitask training by @iProzd in #5382
- fix(pt): remove meaningless error raising by @OutisLi in #5411
- fix(pt): typo in epoch training by @OutisLi in #5410
- fix(pt_expt): respect model default_fparam in data requirement by @wanghan-iapcm in #5417
- fix(pt): fsdp unavailable in older version of pytorch (≦2.5) by @OutisLi in #5415
- Fix: Square atom_norm in non-Huber energy and virial loss calculations. by @anyangml in #5332
- fix(pt): recognize AOTInductor-wrapped CUDA OOM in AutoBatchSize by @OutisLi in #5418
- fix(dpmodel): align NativeLayer bias/idt init with pt MLPLayer by @wanghan-iapcm in #5428
- fix(pt): replace in-place nlist masking to enable CUDA graph capture by @wanghan-iapcm in #5433
- fix(pt): base LambdaLR on configured start_lr by @OutisLi in #5434
- fix(pt): Treat cuBLAS allocation failures as PyTorch OOM during auto bs by @OutisLi in #5443
- fix(pt_expt): fail-fast on .pt2 GNN inference without LAMMPS atom-map by @wanghan-iapcm in #5450
- fix(pt_expt): let deepmd.pt import errors propagate in comm op check by @wanghan-iapcm in #5474
- fix(pt_expt): Fix compiled ckpt load key mismatch by @anyangml in #5468
- fix: fake border op import by @anyangml in #5451
- fix: dpa4 compile aliasing collision by @anyangml in #5483
- fix(pt): clone inference coords before enabling grad by @njzjz-bot in #5476
- fix: miscalculation of num_steps when using num_epoch and lmdb by @OutisLi in #5488
- fix(pt): sort nlist for compressed se_e2_a in forward_lower by @wanghan-iapcm in #5524
- fix(pt): HybridMuon ZeRO checkpoint slowdown by @OutisLi in #5525
- fix(pt,dpmodel): drop out-of-rcut neighbors in _format_nlist pad branch by @wanghan-iapcm in #5529
- fix(pt): stop plain pt dp test from eager-loading pt_expt custom-op fakes by @wanghan-iapcm in #5542
- fix(pt/pt-expt): preserve shared tensors in change-bias by @njzjz in #5534
- fix(train): allow zero-step training with bias adjustment by @njzjz-bot in #5477
- fix(pt/train): keep epoch-derived num_steps consistent across ranks by @OutisLi in #5570
- fix(pt-expt): detach tensors before numpy serialization by @njzjz in #5566
- fix(gpu): avoid neighbor-list prefix scan deadlock by @njzjz in #5575
- fix(tf): add InvalidArgument compatibility wrapper by @njzjz in #5600
- fix(tabulate): add c1 extrapolation outside tables by @njzjz in #5601
- fix(pt): fail early when compress lacks custom ops by @njzjz-bot in #5610
- fix(jax): skip padding for non-XLA SavedModels by @njzjz in #5602
- fix(data): preserve global dipole/polarizability in raw_to_set.sh by @wanghan-iapcm in #5696
- fix(examples): use runnable local data paths in zinc_protein example by @wanghan-iapcm in #5698
- fix(tf): keep linear-model loss configs after frozen components by @wanghan-iapcm in #5701
- fix(tf): accept standard checkpoint inputs in change-bias by @wanghan-iapcm in #5702
- fix(tf): honor change-bias --numb-batch by @wanghan-iapcm in #5703
- fix: propagate frame-level data modifier failures by @wanghan-iapcm in #5709
- fix(tf2): register se_t, se_t_tebd, and se_atten_v2 descriptors by @wanghan-iapcm in #5721
- fix(cli): recognize pretrained model aliases in format_model_suffix by @wanghan-iapcm in #5719
- fix(jax): default fitting_net.type to ener in standard model factory by @wanghan-iapcm in #5720
- fix(tf): count spin ghost atom types with dense bins by @wanghan-iapcm in #5716
- fix(jax,tf2): deep-copy and propagate type_map in ZBL model factories by @wanghan-iapcm in #5725
- fix(test): read the hessian from the correct dp test result slot by @wanghan-iapcm in #5723
- fix(lmp): avoid double qe2f in DPLR efield by @Yi-FanLi in #5732
- fix(jax): avoid device lookup during type embedding tracing by @njzjz in #5736
- fix(lmp): clear DPLR PPPM force cache by @Yi-FanLi in #5744
- fix(pd): preserve dtype in Paddle RepFlow dynamic aggregation by @wanghan-iapcm in #5712
- fix(tf): dispatch --init-model to checkpoint pre-inspection by @wanghan-iapcm in #5718
- fix(tf): close EwaldRecp TensorFlow sessions by @wanghan-iapcm in #5708
- fix(tf): reject non-prefix use_spin layouts in the spin helper by @wanghan-iapcm in #5727
- fix: make global DOS inference work on the dpmodel and JAX backends by @wanghan-iapcm in #5722
- fix(pt_expt): dispatch property models to DeepProperty inference by @wanghan-iapcm in #5724
- fix(pd): preserve fparam/aparam inputs when freezing models by @wanghan-iapcm in #5713
- fix(jax): write the checkpoint pointer beside save_ckpt by @wanghan-iapcm in #5726
- fix(lib): keep soft_min_switch finite for empty neighbor rows by @njzjz-bot in #5762
- fix(dpmodel): return backend-native bfloat16 dtypes from get_xp_precision by @njzjz-bot in #5765
- fix(api_c): preserve exact bytes in DP_ReadFileToChar2 by @njzjz-bot in #5763
- fix(dpmodel): preserve padding when forced-sorting short neighbor lists by @njzjz-bot in #5764
- fix(dpmodel): preserve model dictionaries during serialization by @njzjz in #5788
- fix(dpmodel): dpa1 dense call must not route through divergent graph adapter by @wanghan-iapcm in #5785
- fix(pt): remap spins after null atom filtering by @njzjz in #5795
- fix(api_cc): size remapped atomic parameters by stride by @njzjz in #5790
- fix(c-api): return DeepSpin atomic virials by @njzjz in #5796
- fix(lammps): validate compute parameter sources by @njzjz in #5801
- fix(tf): close C++ API sessions by @njzjz in #5800
- fix(dpmodel): guard empty magnetic loss masks by @njzjz in #5798
- fix(dpa1): support nonperiodic input statistics by @OutisLi in #5807
- fix(jax): return stored HLO neighbor count by @njzjz in #5792
- fix(dpa4): stabilize envelope-gated attention normalization by @OutisLi in #5808
- fix(ipi): reject unknown atom names by @njzjz in #5793
- fix(c-api): contain model deviation frame errors by @njzjz in #5794
- fix(tf): avoid empty AMix neighbor mapping pointers by @njzjz in #5791
- fix(lammps): free model deviation buffers by @njzjz in #5803
- fix(lmp): scope collectives to the LAMMPS communicator by @njzjz-bot in #5830
- fix(model): rebuild linear type mappings after remap by @njzjz-bot in #5835
- fix(dpmodel): keep output reductions on active backend by @njzjz in #5789
- fix(dpmodel): preserve virtual atom types in data utilities by @njzjz-bot in #5837
- fix(lammps): validate dplr and spin options by @njzjz-bot in #5842
- fix(dprc): count local atoms in qm-only maps by @njzjz-bot in #5843
- fix(dpmodel): materialize fitting buffers on active backend by @njzjz-bot in #5841
- fix(cuda): share se_a padding breakpoint by @njzjz-bot in #5844
- fix(dpmodel): move econf embeddings to active backend by @njzjz-bot in #5840
- fix(tf): honor NVNMD tensor neighbor lists by @njzjz-bot in #5845
- fix(data): preserve LMDB label availability across batches by @njzjz-bot in #5839
- fix(pd): shape send list by swap count by @njzjz-bot in #5850
- fix(tf): preserve non-PBC ASE neighbor semantics by @njzjz-bot in #5859
- fix(tf): initialize NVNMD map outputs by @njzjz-bot in #5847
- fix(pt): calibrate DPA4 bias and support PyTorch 2.13 compile by @OutisLi in #5910
- fix(tf2): reject unsupported custom neighbor lists by @njzjz-bot in #5858
- fix(dpmodel): preserve virtual spin atom types by @njzjz-bot in #5854
- fix(pt_expt): preserve graph routing for raw checkpoints by @OutisLi in #5912
- fix(tf): align ProdForceGrad with ProdForce layout by @njzjz-bot in #5848
- fix(rocm): keep tabulation barriers uniform by @njzjz-bot in #5933
- fix(gpu): preserve exact-capacity neighbor rows by @njzjz-bot in #5937
- fix(tabulate): handle empty SE-A neighbors by @njzjz-bot in #5934
- fix(tabulate): preserve SE-T polynomial cache by @njzjz-bot in #5931
- fix(dpmodel): forward spin inputs in DeepEval by @njzjz-bot in #5852
- fix(ipi): complete socket writes and bound paths by @njzjz-bot in #5831
- fix(dpmodel): reject incompatible LMDB merge type maps by @njzjz-bot in #5838
- fix(tf): handle multiframe DeepSpin extension by @njzjz-bot in #5851
- fix(core): validate GPU neighbor-list row capacity by @njzjz-bot in #5826
- fix(pt): validate tabulation tensor devices by @njzjz-bot in #5829
- fix(dpmodel): mask virtual EnvMat centers by @njzjz-bot in #5833
- fix(dpmodel): remap virtual type embeddings by @njzjz-bot in #5856
- fix(pd): handle border scalars and CPU tensors by @njzjz-bot in #5832
- fix(pt/pd): fix incompatibility between AutoBatchSize and eval hooks by @njzjz in #5181
- fix(pt-expt): group LMDB statistics by atom count by @OutisLi in #5828
- fix(dpa4): align pt_expt training and native-spin fine-tuning by @OutisLi in #5963
- fix(c++,pt-expt): substitute default_fparam in .pt2 compute by @wanghan-iapcm in #5343
- Fix: dptest label mismatch by @anyangml in #5082
- fix(cc): handle nloc==0 in DeepSpinPTExpt with phantom-atom padding by @wanghan-iapcm in #5485
- fix(jax): restore batched neighbor statistics by @njzjz in #5545
- fix(api): trim PyTorch type map separators by @njzjz-bot in #5544
- fix(lmp): use forward comm for PPPM DPLR AD by @Yi-FanLi in #5567
- fix(jax): restore jax2tf savedmodel export by @njzjz in #5613
- fix(model): register magnetic cell derivatives correctly by @njzjz-bot in #5836
- fix(train): scope statistics cache lifecycle by @OutisLi in #5883
- fix(tabulate): correct sorted padding two-embed gradients by @njzjz in #5904
- fix(pt): honor is_sorted in SE-Attention tabulation by @njzjz in #5905
- fix(jax): materialize default fparam in cxx api by @njzjz-bot in #5849
Other Changes
- test(pt-expt): add .pte and .pt2 tests for dp convert-backend by @wanghan-iapcm in #5384
- test(consistent): curate DPA3 descriptor matrix by @njzjz-bot in #5390
- test(lmp): avoid duplicate pb conversions in tests by @njzjz-bot in #5400
- chore(skills): import DeePMD-kit agent skills by @njzjz-bot in #5437
- test(infer): swap se_e2_a fixture to deeppot_sea (type_one_side=True) by @wanghan-iapcm in #5445
- test(infer,lmp): drop stale DPA2 .pth fixtures, repoint tests to deeppot_dpa2 by @wanghan-iapcm in #5446
- test(pt_expt): shrink change-bias water dataset to 5 frames by @wanghan-iapcm in #5467
- test(universal): replace Cartesian product with curated matrices for descriptor test by @iProzd in #5459
- Chore: update DPA-2.4-7M ckpt by @anyangml in #5496
- test(pt_expt): tolerance for test_default_fallback (CUDA scatter nondeterminism) by @wanghan-iapcm in #5508
- Chore: refactor pt-expt compile by @anyangml in #5504
- test(consistent): use curated cases throughout by @njzjz in #5606
- refactor(lmp): share test infrastructure by @njzjz-bot in #5770
- fix(tf): remove unused native neighbor-stat op by @njzjz-bot in #5784
- test(dpmodel): collect ASE virtual atom regression by @njzjz-bot in #5855
- test(pt_expt): document compiled neighbor type equivalence by @njzjz-bot in #5860
- feat(c++,pt-expt): add DeepPotModelDevi C++ tests for .pt2 backend by @wanghan-iapcm in #5342
- test(consistent): replace Cartesian product with curated matrices for descriptor tests by @njzjz-bot in #5378
- test(api): add universal DeepPot C/C++ API tests by @njzjz-bot in #5538
- chore: enable safe Ruff autofix rules by @njzjz-bot in #5774
- fix(tests): move shared test mixins to tests.common to fix DeviceContext leak by @wanghan-iapcm in #5344
- fix(test): tear down LAMMPS before MPI.Finalize() in mpirun test runners by @wanghan-iapcm in #5455
- fix(test): unpack charge_spin in test_pt2_dual_artifact_for_gnn by @wanghan-iapcm in #5523
- test(pt_expt): restore sys.modules snapshot in plugin entry-point test by @wanghan-iapcm in #5728
New Contributors
- @Lily200202 made their first contribution in #5498
- @chrisahart made their first contribution in #5494
- @zhaiwenxi made their first contribution in #5572
- @Shaurya2k06 made their first contribution in #5903
Full Changelog: v3.1.3...v3.2.0