Skip to content

v3.2.0

Latest

Choose a tag to compare

@njzjz njzjz released this 19 Aug 14:57
· 3 commits to master since this release
8cfd46e

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.

image image

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

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

Full Changelog: v3.1.3...v3.2.0