Commit 15f4437
authored
fix(dpmodel): mask virtual EnvMat centers (deepmodeling#5833)
## Summary
- replace negative virtual-center types with a safe index before
gathering normalization tables
- use neutral average and standard-deviation values for masked centers,
then explicitly zero their descriptors
- add radial, angular, NumPy, and strict Array API regression coverage
## Why existing tests missed this
The direct EnvMat unit test only used real center atoms. A separate
model-level virtual-atom test did not expose the bug because the model
masks virtual outputs after fitting and initializes descriptor averages
to zero, so the invalid negative normalization lookup was not
observable. The new tests use nonzero averages and a zero placeholder
scale, which make both the negative-index behavior and masking order
observable. The broader compiled DPA2 varying-natoms test had previously
never been connected to virtual-center normalization; it is retained as
a cross-cutting compile/autograd guard and was also reproduced after an
isolated CI mismatch.
## Validation
- ruff format .
- ruff check .
- focused dpmodel, Array API, PyTorch EnvMat, and virtual atomic-model
tests: 7 passed with 2 subtests
- TensorFlow C++ core regression test: 1 passed
-
`TestCompiledVaryingNatoms::test_compiled_matches_uncompiled_varying_natoms_dpa2`:
passed locally in 205.82 s, covering four compiled/eager training steps,
changing frame/atom counts, force and virial outputs, and second-order
force-loss gradients
- manual NumPy, Array API Strict, PyTorch, and JAX virtual-center
scenario
Closes deepmodeling#5628
Coding agent: Codex
Codex version: codex-cli 0.144.4
Model: gpt-5.6-sol
Reasoning effort: xhigh
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Bug Fixes**
* Improved environment-matrix normalization for virtual center atoms.
* Virtual centers now consistently produce zero environment, derivative,
and switching outputs across supported computation modes.
* **Tests**
* Added coverage for all-virtual and mixed real/virtual center
scenarios, including normalization with provided statistics.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: njzjz-bot <njzjz.bot@gmail.com>1 parent 5902263 commit 15f4437
3 files changed
Lines changed: 116 additions & 3 deletions
File tree
- deepmd/dpmodel/utils
- source/tests/common/dpmodel
- array_api
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
172 | 172 | | |
173 | 173 | | |
174 | 174 | | |
175 | | - | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
176 | 180 | | |
177 | 181 | | |
178 | 182 | | |
| |||
200 | 204 | | |
201 | 205 | | |
202 | 206 | | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
203 | 221 | | |
204 | | - | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
205 | 227 | | |
206 | | - | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
207 | 235 | | |
208 | 236 | | |
209 | 237 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
| |||
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| |||
38 | 39 | | |
39 | 40 | | |
40 | 41 | | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
0 commit comments