Skip to content
Open
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
275 commits
Select commit Hold shift + click to select a range
8976994
fix: remove duplicate method definitions from DPAFineTuner refactor
zirenjin Jun 2, 2026
4ac473e
fix: remove empty except in _unwrap_multioutput, drop unused pipeline…
zirenjin Jun 2, 2026
217868c
fix: update property_tools_tests CI after migration to dpa_tools
zirenjin Jun 2, 2026
3b1ed2c
fix: pin numpy<2.2 in lightweight CI for Python 3.10 compat
zirenjin Jun 2, 2026
93b2c5d
Merge pull request #4 from zirenjin/master
zhaiwenxi Jun 2, 2026
d39d659
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 2, 2026
d5d3f5b
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 3, 2026
afd4211
Clean up dpa_tools property workflow
claude Jun 4, 2026
1e9c698
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 4, 2026
1feef03
Merge pull request #5 from zhaiwenxi/dpa-tools-property-workflow-cleanup
zhaiwenxi Jun 4, 2026
83db772
Fix CI dependency installation
claude Jun 4, 2026
b91c71f
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 4, 2026
21d80f6
Merge pull request #6 from zhaiwenxi/dpa-tools-property-workflow-cleanup
zhaiwenxi Jun 4, 2026
4f55772
Fix dpa tools CI test stability
zhaiwenxi Jun 4, 2026
e938570
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 5, 2026
63b4130
Fix macOS x86 wheel test extras
zhaiwenxi Jun 5, 2026
bfde8f8
Fix dpa tools CI setup
zhaiwenxi Jun 5, 2026
f6f75d0
Remove dpa tools demo data
zhaiwenxi Jun 5, 2026
94ea40c
Guard descriptor extraction grad requirement
zhaiwenxi Jun 5, 2026
8824949
Merge pull request #7 from zhaiwenxi/fix-dpa-tools-ci-tests
zhaiwenxi Jun 6, 2026
76cad17
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 6, 2026
f8a0220
feat(dpa_tools): quickstart demo, convert() glob support, cleanup
zirenjin Jun 6, 2026
54196fb
docs(dpa_tools): fine-tuning-first READMEs and demo fixes
zirenjin Jun 6, 2026
892ab07
docs: fix predict example to capture .predictions
zirenjin Jun 6, 2026
e28d4dd
feat(demo): demonstrate all four fine-tuning strategies
zirenjin Jun 6, 2026
c80e2ab
Merge pull request #8 from zirenjin/docs/dpa-tools-readme
zhaiwenxi Jun 7, 2026
a625981
Merge pull request #9 from zirenjin/master
zhaiwenxi Jun 7, 2026
17c87b0
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 7, 2026
e28c130
refactor(demo): replace fit_evaluate.py with quickstart.ipynb and upd…
zirenjin Jun 8, 2026
d8dfc77
docs(dpa_tools): update README
zirenjin Jun 8, 2026
6f10474
docs(demo): update quickstart notebook
zirenjin Jun 8, 2026
537d0a3
docs(demo): update quickstart notebook
zirenjin Jun 8, 2026
8d35b91
Merge pull request #10 from zirenjin/master
zhaiwenxi Jun 8, 2026
242d718
feat(dpa_tools): add formula_to_npy — composition formula CSV + POSCA…
zirenjin Jun 8, 2026
88cad4f
fix(formula): auto-detect CSV delimiter (tab or comma)
zirenjin Jun 8, 2026
ec44e80
docs: remove redundant formula_to_npy example in README
zirenjin Jun 8, 2026
b18861d
docs(finetuner): rewrite DPAFineTuner class docstring — all 4 strateg…
zirenjin Jun 8, 2026
83e775d
refactor: move dpa_tools to top-level package, update all import paths
zirenjin Jun 8, 2026
91dfae4
docs: update demo path to examples/dpa_tools
zirenjin Jun 8, 2026
4bdbfc4
refactor: promote dpa from dp subcommand to standalone CLI
zirenjin Jun 8, 2026
3d3a695
docs: remove stale dpa_tools section from top-level README
zirenjin Jun 8, 2026
0ce0037
fix: include dpa_tools in wheel.packages so pip install ships it
zirenjin Jun 9, 2026
8a83a84
docs: add input_formats.md for dpa data convert; test: add formula pi…
zirenjin Jun 9, 2026
1207d2f
feat(DPATrainer): add _validate_fparam for per-frame condition input
zirenjin Jun 9, 2026
0a1081b
feat(DPAFineTuner): accept and forward fparam_dim to DPATrainer / MFT…
zirenjin Jun 9, 2026
adea98f
feat(MFTFineTuner): add fparam_dim support with validation and fittin…
zirenjin Jun 9, 2026
1d772eb
feat(cli): add --fparam-dim argument to dpa fit subcommand
zirenjin Jun 9, 2026
17dc9d2
test(fparam): add 14 tests for fparam support across all strategies
zirenjin Jun 9, 2026
e334a98
docs: rename CLI command from dpa to dpaad (package: dpa-adapt)
zirenjin Jun 9, 2026
38a6b05
docs: rename DPA Tools to dpa-adapt (ADAPT), restructure quick start …
zirenjin Jun 9, 2026
9eb7229
refactor: rename dpa_tools -> dpa_adapt, dpa-tools -> dpa-adapt
zirenjin Jun 9, 2026
1fed517
fix: replace os.environ.setdefault with standard os.environ.get pattern
zirenjin Jun 9, 2026
d3c5550
docs: update dpa-adapt README and quick_start notebook
zirenjin Jun 9, 2026
124099b
Update dpa-adapt docs and example README
zhaiwenxi Jun 9, 2026
ce01d7c
Merge branch 'master' into docs/update-dpa-adapt-example
zhaiwenxi Jun 9, 2026
3e96f10
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 9, 2026
c5eddb2
Merge pull request #12 from zhaiwenxi/docs/update-dpa-adapt-example
zhaiwenxi Jun 9, 2026
a53f38f
fix: update cibuildwheel from v3.4 to v4.0 for newer manylinux images
zirenjin Jun 10, 2026
74ecc4c
fix: update test imports from deepmd.dpa_adapt to dpa_adapt
zirenjin Jun 10, 2026
15740eb
refactor: rename property_tools_tests.yml to dpa_adapt_tests.yml
zirenjin Jun 10, 2026
b3e2b2c
fix: re-apply deepmd.dpa_adapt -> dpa_adapt import fixes after rebase
zirenjin Jun 10, 2026
d151db3
fix: add retry logic to docker build step for registry timeouts
zirenjin Jun 10, 2026
b797881
fix: use temp files instead of heredocs for docker tag/label parsing
zirenjin Jun 10, 2026
c819c26
debug: add verbose output for docker tag/label parsing
zirenjin Jun 10, 2026
b52dc0e
fix: use bash array for docker args to preserve spaces in label/tag v…
zirenjin Jun 10, 2026
e93ca07
Merge pull request #13 from zirenjin/master
zhaiwenxi Jun 10, 2026
510392a
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 11, 2026
e445128
Merge dpa-adapt updates
zhaiwenxi Jun 11, 2026
53bbeec
Fix formula auto_convert seed argument
zhaiwenxi Jun 11, 2026
d71ae5e
Merge pull request #14 from zhaiwenxi/merge-preserve-both
zhaiwenxi Jun 11, 2026
ad757f0
Update DPA adapt input format handling
zhaiwenxi Jun 12, 2026
9ecabda
Merge pull request #15 from zhaiwenxi/merge-preserve-both
zhaiwenxi Jun 12, 2026
bc7336e
Resolve pretrained model names across DPA adapt strategies
zhaiwenxi Jun 12, 2026
c09bfd4
Update DPA adapt implementation and docs
zhaiwenxi Jun 12, 2026
9f1a26b
Merge pull request #16 from zhaiwenxi/dpa-adapt-resolve-pretrained-al…
zhaiwenxi Jun 12, 2026
5a6400c
Update dpa-adapt docs and CLI naming
zhaiwenxi Jun 12, 2026
2767008
Merge pull request #17 from zhaiwenxi/dpa-adapt-resolve-pretrained-al…
zhaiwenxi Jun 12, 2026
7abb52e
refactor(dpa-adapt): unify conversion entrypoint
zirenjin Jun 12, 2026
0ad7865
fix(dpa-adapt): support headerless formula inputs
zirenjin Jun 12, 2026
b904848
fix(dpa-adapt): support common formula delimiters
zirenjin Jun 12, 2026
b89fa6d
Merge pull request #18 from zirenjin/master
zhaiwenxi Jun 13, 2026
2eb5f8c
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 13, 2026
61a8e5f
Update dpa_adapt scripts and docs
zhaiwenxi Jun 13, 2026
2e476ec
Handle path-like pretrained model paths
zhaiwenxi Jun 13, 2026
a1d8832
Merge pull request #19 from zhaiwenxi/fix-dpa-adapt-pathlike-cli
zhaiwenxi Jun 13, 2026
c6a09ca
Update dpa_adapt README example
zhaiwenxi Jun 13, 2026
9237515
Merge pull request #20 from zhaiwenxi/update-dpa-adapt-readme
zhaiwenxi Jun 13, 2026
d3c55ee
feat(dpa_adapt): auto-read fparam.npy for all strategies, remove cond…
zirenjin Jun 13, 2026
159db76
docs(dpa_adapt): clarify group_by usage for cross-validation
zirenjin Jun 13, 2026
441d31d
fix(tests/dpa_adapt): update tests for removed conditions= param and …
zirenjin Jun 14, 2026
26fccd1
Merge pull request #21 from zirenjin/master
zhaiwenxi Jun 14, 2026
aaee72f
docs: show lr and batch size for dpa adapt tuning
zhaiwenxi Jun 15, 2026
2a48e27
feat(dpa_adapt): auto-detect single vs multi-system in attach_labels
zirenjin Jun 15, 2026
8e7c1ff
Merge pull request #22 from zhaiwenxi/docs-dpa-adapt-lr-batch-size
zhaiwenxi Jun 15, 2026
e3fe821
docs: remove extxyz format (broken in dpdata 1.0.2)
zirenjin Jun 15, 2026
b8e0868
Merge pull request #23 from zirenjin/master
zhaiwenxi Jun 15, 2026
771bcdd
feat: support scripted prediction for dpa adapt training
zhaiwenxi Jun 15, 2026
e155bfe
Merge pull request #25 from zhaiwenxi/feat-dpa-adapt-scripted-trainin…
zhaiwenxi Jun 15, 2026
8125a77
feat(dpa_adapt): add predict() to MFTFineTuner for downstream propert…
zirenjin Jun 15, 2026
7b8bd61
Merge pull request #26 from zirenjin/master
zhaiwenxi Jun 15, 2026
7900e78
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 15, 2026
8ee150a
docs: add dpa adapt finetune evaluation example
zhaiwenxi Jun 15, 2026
33cfc41
Merge pull request #27 from zhaiwenxi/feat-dpa-adapt-scripted-trainin…
zhaiwenxi Jun 15, 2026
8aabdbe
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 15, 2026
945d524
fix: guard _sklearn._device assignment against None
zirenjin Jun 16, 2026
53325b6
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 16, 2026
1af9d60
fix(pt): stop plain pt dp test from eager-loading pt_expt custom-op f…
Jun 16, 2026
59e8c4e
test(pt_expt): snapshot full _registered set in tabulate_ops test
Jun 16, 2026
a107933
docs: update dpa_adapt README to match actual scripts
Jun 17, 2026
e6cc10b
Merge pull request #28 from zhaiwenxi/update-dpa-adapt-readme
zhaiwenxi Jun 17, 2026
1881021
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 17, 2026
734c79c
docs: rename scripts to frozen_sklearn / frozen_head for clarity
Jun 17, 2026
6c1fea3
Merge pull request #29 from zhaiwenxi/update-dpa-adapt-readme
zhaiwenxi Jun 17, 2026
0c1671c
feat(dpa_adapt): expose decay_steps, warmup_steps, and fitting_net_pa…
Jun 17, 2026
de9c87b
docs(dpa_adapt): expand frozen_head/finetune parameter reference in g…
Jun 17, 2026
b1476c9
feat(dpa_adapt): add decay_steps and warmup_steps support to MFT stra…
Jun 17, 2026
9ca0229
docs(dpa_adapt): restructure strategy docs into separate subsections …
Jun 17, 2026
ab5fbc7
Merge pull request #30 from zhaiwenxi/update-dpa-adapt-readme
zhaiwenxi Jun 17, 2026
e046dd9
refactor(dpa_adapt): unify MFT type_map, fix defaults, improve error …
Jun 17, 2026
7e92052
fix(dpa_adapt): add property_name to MFTFineTuner test constructions
Jun 17, 2026
7a99bb7
Merge branch 'zhaiwenxi:master' into master
zirenjin Jun 17, 2026
e1f4c4d
fix(tests): set mock torch.Tensor to a real class to fix Python 3.14 …
zirenjin Jun 17, 2026
02a7c44
Merge pull request #33 from zhaiwenxi/refactor-mft-type-map
zhaiwenxi Jun 17, 2026
cbba69f
Merge branch 'zhaiwenxi:master' into master
zirenjin Jun 17, 2026
2d0212e
fix(ci): handle network timeout errors in uv retry script
zirenjin Jun 17, 2026
419d326
Fix unicode headers in dp test detail output
zhaiwenxi Jun 18, 2026
a692ac4
Harden dpa_adapt subprocess and example workflows
zhaiwenxi Jun 18, 2026
b9417f2
Merge pull request #35 from zhaiwenxi/fix-utf8-test-detail-output
zhaiwenxi Jun 19, 2026
96a7bb7
Merge branch 'master' into master
zhaiwenxi Jun 19, 2026
c9b59d7
Merge pull request #31 from zirenjin/master
zhaiwenxi Jun 19, 2026
4127b14
ci: align build wheel workflow with upstream
zhaiwenxi Jun 19, 2026
b186cdb
Merge pull request #36 from zhaiwenxi/sync-build-wheel-upstream
zhaiwenxi Jun 20, 2026
cee0193
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 20, 2026
5bd3e07
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 22, 2026
7111f67
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 22, 2026
ac282d1
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 23, 2026
9dd6b4b
Update DPA-ADAPT demo and README links
zhaiwenxi Jun 23, 2026
97e9b8e
Merge pull request #38 from zhaiwenxi/adapt-demo-readme-update
zhaiwenxi Jun 24, 2026
dd6dc9e
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 24, 2026
fe37779
fix(dpa-adapt): address cache and freeze review blockers
zirenjin Jun 24, 2026
c137d19
fix(dpa-adapt): fall back to forward_embedding() when descriptor hook…
zirenjin Jun 24, 2026
ffeaa12
test(dpa-adapt): skip forward_embedding tests when torch is mocked in CI
zirenjin Jun 24, 2026
11a47f8
Fix DPA-ADAPT docs and backend helpers
zhaiwenxi Jun 24, 2026
1e755b2
fix(dpa-adapt): use dict access for forward_embedding return value
zirenjin Jun 24, 2026
80edb38
test(dpa-adapt): return dict from forward_embedding test fake
zirenjin Jun 24, 2026
717c86d
Merge pull request #40 from zhaiwenxi/adapt-demo-readme-update
zhaiwenxi Jun 24, 2026
b70429c
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 24, 2026
6ea7846
Merge pull request #39 from zirenjin/master
zhaiwenxi Jun 24, 2026
c51e764
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 24, 2026
94ed4f3
fix(dpa-adapt): handle descriptor embedding fallback
zirenjin Jun 24, 2026
5526d1d
Clean up DPA-ADAPT docs workflow
zhaiwenxi Jun 24, 2026
6c3de92
Remove root DPA-ADAPT data utility script
zhaiwenxi Jun 24, 2026
683b792
Rename DPA-ADAPT docs entrypoint
zhaiwenxi Jun 24, 2026
fb6374e
Clean up DPA-ADAPT docs and tests
zhaiwenxi Jun 24, 2026
cb15eca
Merge branch 'zhaiwenxi:master' into master
zirenjin Jun 24, 2026
e54eb3a
feat(dpa-adapt): validate per-set fparam.npy row counts
zirenjin Jun 24, 2026
72d04eb
Validate MFT aux_prob at construction
zhaiwenxi Jun 24, 2026
ff2663d
Merge pull request #42 from zhaiwenxi/dpa-adapt-docs-cleanup
zhaiwenxi Jun 24, 2026
eb7ee64
Merge pull request #43 from zhaiwenxi/fix-mft-aux-prob-validation
zhaiwenxi Jun 24, 2026
9e148db
Organize DPA-ADAPT docs navigation
zhaiwenxi Jun 24, 2026
bd602f1
Merge pull request #41 from zirenjin/master
zhaiwenxi Jun 25, 2026
8d33ecc
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 25, 2026
443913e
style(dpa-adapt): route CLI output through logger to satisfy ruff T201
zirenjin Jun 25, 2026
564b077
Merge pull request #44 from zhaiwenxi/fix-mft-aux-prob-validation
zhaiwenxi Jun 25, 2026
f5f0bac
Fix DPA adapt cache and CLI edge cases
zhaiwenxi Jun 25, 2026
e4d37c6
Merge pull request #46 from zhaiwenxi/fix/dpa-adapt-cache-cli
zhaiwenxi Jun 25, 2026
651edda
Merge pull request #45 from zirenjin/master
zhaiwenxi Jun 25, 2026
d6f3d70
Fix dpa_adapt pre-commit hook failures
zhaiwenxi Jun 25, 2026
8e1493b
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 25, 2026
e3b6126
Merge pull request #47 from zhaiwenxi/fix/pre-commit-hooks
zhaiwenxi Jun 25, 2026
bc1fddd
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 25, 2026
8966070
fix(dpa-adapt): resolve all pre-commit ruff errors and descriptor hoo…
zirenjin Jun 25, 2026
dd91555
Merge pull request #48 from zirenjin/master
zhaiwenxi Jun 25, 2026
2c6bcfd
style(dpa-adapt): fix DeepMD → DeePMD capitalization
zirenjin Jun 26, 2026
63a2902
Fix dpa_adapt pre-commit formatting
zhaiwenxi Jun 26, 2026
71f8bb2
Merge branch 'zhaiwenxi:master' into master
zirenjin Jun 26, 2026
659d090
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 26, 2026
ebb2f58
Fix remaining dpa_adapt capitalization checks
zhaiwenxi Jun 26, 2026
3ed1d68
@
zhaiwenxi Jun 26, 2026
289bb96
Merge branch 'zhaiwenxi:master' into master
zirenjin Jun 26, 2026
5e082a0
fix(dpa-adapt): resolve desc_cache ↔ finetuner import cycle
zirenjin Jun 26, 2026
6b5277f
Merge pull request #49 from zhaiwenxi/fix/codeql-issues
zhaiwenxi Jun 26, 2026
6d15369
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 26, 2026
e38f5da
fix(dpa-adapt): drop dead setup in skipped CV test
zirenjin Jun 26, 2026
bf81301
docs(dpa-adapt): fix Input Formats numbering and cap CLI section depth
zirenjin Jun 26, 2026
89d353e
Merge zhaiwenxi/master into master
zirenjin Jun 26, 2026
d4cad11
Merge pull request #50 from zirenjin/master
zhaiwenxi Jun 26, 2026
c7902f8
fix(dpa-adapt): address PR review blockers (MFT, fparam, stray test)
zirenjin Jun 26, 2026
4bc28e8
fix(dpa-adapt): drop unused _LOG in desc_cache (CodeQL)
zirenjin Jun 26, 2026
fb27489
Merge pull request #51 from zirenjin/master
zhaiwenxi Jun 27, 2026
c6f9e91
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 27, 2026
f29e7d8
Merge branch 'deepmodeling:master' into master
zhaiwenxi Jun 27, 2026
8e2d088
Fix dpa-adapt review follow-ups
zhaiwenxi Jun 27, 2026
eaf5c59
Merge zhaiwenxi/fix-dpa-adapt-review-followups into master
zirenjin Jun 27, 2026
9b854aa
test(dpa-adapt): lock multi-system attach_labels shape semantics
zirenjin Jun 27, 2026
c6b40ce
fix(dpa-adapt): remove duplicate _LOG assignment and add debug loggin…
zhaiwenxi Jun 27, 2026
6de5846
Fix DPA adapt type map validation
zhaiwenxi Jun 27, 2026
d40d008
Merge pull request #52 from zhaiwenxi/fix/dpa-adapt-review-followups
zhaiwenxi Jun 28, 2026
e2a6f4a
Merge branch 'master' into master
zhaiwenxi Jun 28, 2026
70b5988
Revert "Merge branch 'master' into master"
zhaiwenxi Jun 28, 2026
629dc3f
Merge branch 'master' into master
zhaiwenxi Jun 28, 2026
4df4321
Merge pull request #53 from zirenjin/master
zhaiwenxi Jun 28, 2026
e2a0524
Merge branch 'master' into master
zhaiwenxi Jun 28, 2026
38bae33
Add grouped descriptor aggregation for dpa_adapt
zirenjin Jun 29, 2026
a58b958
Add grouped embedding training and assembly writer
zirenjin Jun 30, 2026
21f0b97
refactor(dpa-adapt): remove formula-table conversion feature
zirenjin Jun 30, 2026
5f5e735
chore(dpa-adapt): remove local output paths from .gitignore
zirenjin Jun 30, 2026
d6e4ed3
Merge pull request #54 from zirenjin/chore/remove-formula-feature
zhaiwenxi Jun 30, 2026
c47834c
Merge branch 'master' into master
zhaiwenxi Jun 30, 2026
bb620b8
Fix grouped embedding finetuner integration
zirenjin Jun 30, 2026
ba1f17c
fix(dpa-adapt): resolve type-map validation, cache identity, label lo…
zirenjin Jun 30, 2026
6605d5d
style(dpa-adapt): remove redundant quotes from type annotation in _ha…
zirenjin Jun 30, 2026
9f6ca86
style(dpa-adapt): apply isort and ruff format to changed modules
zirenjin Jun 30, 2026
13f3fb4
Merge branch 'zhaiwenxi:master' into chore/remove-formula-feature
zirenjin Jun 30, 2026
83b5116
refactor(dpa-adapt): extract shared validators/helpers to remove revi…
zirenjin Jun 30, 2026
d3ab17d
test(dpa-adapt): stop mock-torch test files from leaking into the ses…
zirenjin Jun 30, 2026
8807d3d
Merge pull request #55 from zirenjin/chore/remove-formula-feature
zhaiwenxi Jul 1, 2026
88f5dad
Merge branch 'master' into master
zhaiwenxi Jul 1, 2026
a7624ca
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 1, 2026
3f1f947
Merge branch 'master' into master
zhaiwenxi Jul 1, 2026
b4c7d2e
feat(dpa-adapt): support heterogeneous grouped components via mixed_t…
zirenjin Jul 1, 2026
7a1afbe
Fix CodeQL torch import warnings
zhaiwenxi Jul 1, 2026
b8d63ed
Potential fix for pull request finding 'CodeQL / Unused global variable'
zhaiwenxi Jul 1, 2026
8b636d9
Potential fix for pull request finding 'CodeQL / Unused global variable'
zhaiwenxi Jul 1, 2026
f06ddce
Merge pull request #56 from zhaiwenxi/fix-codeql-torch-imports
zhaiwenxi Jul 1, 2026
6268058
Merge branch 'master' into master
zhaiwenxi Jul 1, 2026
2cd5d60
feat(dpa-adapt): grouped support for OER data and polymer cloud-point
zirenjin Jul 2, 2026
0b288b4
feat: refine assembly grouped embeddings
zirenjin Jul 2, 2026
b5971bc
feat: support distributed grouped batches
zirenjin Jul 2, 2026
ff49107
fix: infer global assembly type map
zirenjin Jul 3, 2026
6fa6474
fix: harden grouped property training
zirenjin Jul 3, 2026
a1c4da8
fix: avoid ase dependency in polymer grouped builder
zirenjin Jul 5, 2026
c9d761a
fix: keep grouped batches rank-consistent
zirenjin Jul 6, 2026
8836058
refactor: simplify grouped data marking api
zirenjin Jul 6, 2026
9d857fc
Merge remote-tracking branch 'upstream/master' into feat/grouped-embe…
zirenjin Jul 6, 2026
883a1f4
Merge remote-tracking branch 'zhaiwenxi/master' into feat/grouped-emb…
zirenjin Jul 6, 2026
ae7744b
fix(dpa_adapt): implement composable pooling API (parse_pooling)
zirenjin Jul 6, 2026
82c1d73
fix(dpa_adapt): grouped training config + sklearn fit/predict path
zirenjin Jul 6, 2026
8bb0d6b
fix(dpa_adapt,pt): address PR #5741 review comments
zirenjin Jul 6, 2026
c5c8d9a
style: satisfy pre-commit (isort + disallow-caps)
zirenjin Jul 6, 2026
5a7e1d6
fix: clear CodeQL alerts in grouped code
zirenjin Jul 6, 2026
98ba689
fix(pt): pass grouped charge spin to descriptor
zirenjin Jul 7, 2026
7d57987
fix(group_property): default the head activation to GELU, not tanh
zirenjin Jul 7, 2026
ed32db2
test(finetune): cover single-task target auto-picking a multitask branch
zirenjin Jul 8, 2026
f77d2ec
fix(group_property,dpa_adapt): honor descriptor mixed_types and dedup…
zirenjin Jul 9, 2026
a5cf8d9
fix(grouped): real per-frame atom types, NaN-safe pooling, cache keys…
zirenjin Jul 9, 2026
d32404f
fix(dpa_adapt): scan every set dir for grouped-mode detection, not ju…
zirenjin Jul 9, 2026
3fdb990
fix(argcheck): expose group_reduce for the group_property fitting type
zirenjin Jul 9, 2026
28a9446
fix(dpa_adapt): support the CLI comma-separated multi-target key in g…
zirenjin Jul 9, 2026
e148529
fix(group_property): stop silently swallowing unsupported fitting-net…
zirenjin Jul 9, 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
4 changes: 4 additions & 0 deletions deepmd/pt/loss/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
from .loss import (
TaskLoss,
)
from .group_property import (
GroupPropertyLoss,
)
from .population import (
PopulationLoss,
)
Expand All @@ -35,6 +38,7 @@
"EnergyHessianStdLoss",
"EnergySpinLoss",
"EnergyStdLoss",
"GroupPropertyLoss",
"PopulationLoss",
"PropertyLoss",
"TaskLoss",
Expand Down
153 changes: 153 additions & 0 deletions deepmd/pt/loss/group_property.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
# SPDX-License-Identifier: LGPL-3.0-or-later
"""Loss for grouped frame-level properties."""

from __future__ import annotations

from typing import Any

import torch
import torch.nn.functional as F

from deepmd.pt.loss.loss import (
TaskLoss,
)
from deepmd.pt.utils.grouped import (
GROUP_ID_KEY,
GROUP_WEIGHT_KEY,
POOL_MASK_KEY,
group_data_requirements,
normalize_group_id_tensor,
)
from deepmd.utils.data import (
DataRequirementItem,
)


class GroupPropertyLoss(TaskLoss):
"""Compute property loss after frame embeddings are aggregated by group."""

def __init__(
self,
task_dim: int,
var_name: str,
loss_func: str = "mse",
metric: list[str] | None = None,
beta: float = 1.0,
label_tol: float = 1e-8,
**kwargs: Any,
) -> None:
super().__init__()
self.task_dim = task_dim
self.var_name = var_name
self.loss_func = loss_func
self.metric = metric or ["mae"]
self.beta = beta
self.label_tol = label_tol

def forward(
self,
input_dict: dict[str, torch.Tensor],
model: torch.nn.Module,
label: dict[str, torch.Tensor],
natoms: int,
learning_rate: float = 0.0,
mae: bool = False,
) -> tuple[dict[str, torch.Tensor], torch.Tensor, dict[str, torch.Tensor]]:
del natoms, learning_rate, mae
var_name = self.var_name
frame_label = label[var_name]
nframes = frame_label.shape[0]
if frame_label.shape != (nframes, self.task_dim):
raise ValueError(
f"{var_name} label must have shape (nframes, {self.task_dim}); "
f"got {frame_label.shape}."
)

group_id = None
if GROUP_ID_KEY in label and label.get(f"find_{GROUP_ID_KEY}", 1) is not None:
find_group = label.get(f"find_{GROUP_ID_KEY}", 1)
if not torch.as_tensor(find_group).eq(0).all():
group_id = label[GROUP_ID_KEY]
if group_id is None:
group_id = torch.arange(nframes, dtype=torch.long, device=frame_label.device)
else:
group_id = normalize_group_id_tensor(group_id, nframes).to(frame_label.device)

model_pred = model(
**input_dict,
group_id=group_id,
weight=label.get(GROUP_WEIGHT_KEY),
pool_mask=label.get(POOL_MASK_KEY),
)
pred = model_pred[var_name]
# Reuse the model's group ordering (group_inverse) as the single source of
# truth -- do NOT call torch.unique here, or ordering could silently drift.
group_label = self._group_labels(
frame_label,
model_pred["group_inverse"],
model_pred["group_id"].shape[0],
).to(device=pred.device, dtype=pred.dtype)
if pred.shape != group_label.shape:
raise ValueError(
f"Prediction shape {pred.shape} does not match grouped labels "
f"{group_label.shape}."
)

loss = self._loss(pred, group_label)
more_loss = {}
if "mae" in self.metric:
more_loss["mae"] = F.l1_loss(pred, group_label, reduction="mean").detach()
if "mse" in self.metric:
more_loss["mse"] = F.mse_loss(pred, group_label, reduction="mean").detach()
if "rmse" in self.metric:
more_loss["rmse"] = torch.sqrt(
F.mse_loss(pred, group_label, reduction="mean")
).detach()
return model_pred, loss, more_loss

def _loss(self, pred: torch.Tensor, target: torch.Tensor) -> torch.Tensor:
if self.loss_func == "smooth_mae":
return F.smooth_l1_loss(pred, target, reduction="sum", beta=self.beta)
if self.loss_func == "mae":
return F.l1_loss(pred, target, reduction="sum")
if self.loss_func == "mse":
return F.mse_loss(pred, target, reduction="sum")
if self.loss_func == "rmse":
return torch.sqrt(F.mse_loss(pred, target, reduction="mean"))
raise RuntimeError(f"Unknown loss function : {self.loss_func}")

def _group_labels(
self,
frame_label: torch.Tensor,
group_inverse: torch.Tensor,
n_groups: int,
) -> torch.Tensor:
# Aggregate frame labels into group labels using the model's group_inverse
# (shared ordering). Scatter each frame's label into its group row, then
# gather back to verify every frame in a group carried the same label.
group_label = frame_label.new_zeros((n_groups, self.task_dim))
group_label[group_inverse] = frame_label
gathered = group_label[group_inverse]
if not torch.allclose(gathered, frame_label, atol=self.label_tol):
mismatch = (
~torch.isclose(gathered, frame_label, atol=self.label_tol)
).any(dim=1)
bad_frame = int(torch.nonzero(mismatch, as_tuple=False).flatten()[0])
raise ValueError(
f"Inconsistent {self.var_name} labels within a group "
f"(frame {bad_frame}, group_inverse={int(group_inverse[bad_frame])})."
)
return group_label

@property
def label_requirement(self) -> list[DataRequirementItem]:
return [
DataRequirementItem(
self.var_name,
ndof=self.task_dim,
atomic=False,
must=True,
high_prec=True,
),
*group_data_requirements(),
]
5 changes: 5 additions & 0 deletions deepmd/pt/model/model/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@
from .frozen import (
FrozenModel,
)
from .group_property_model import (
GroupPropertyModel,
)
from .make_hessian_model import (
make_hessian_model,
)
Expand Down Expand Up @@ -326,6 +329,8 @@ def get_standard_model(model_params: dict) -> BaseModel:
modelcls = EnergyModel
elif fitting_net_type == "property":
modelcls = PropertyModel
elif fitting_net_type == "group_property":
modelcls = GroupPropertyModel
elif fitting_net_type == "population":
modelcls = PopulationModel
else:
Expand Down
Loading
Loading