1414import numpy as np
1515import torch
1616
17- from deepmd .entrypoints .test import test as dp_test
18- from deepmd .entrypoints .test import test_ener as dp_test_ener
19- from deepmd .infer .deep_eval import (
20- DeepEval ,
21- )
17+ from deepmd .entrypoints .test import test as dp_test , test_ener as dp_test_ener
2218from deepmd .pt .entrypoints .main import (
2319 get_trainer ,
2420)
2521from deepmd .pt .utils .utils import (
2622 to_numpy_array ,
2723)
28- from deepmd .utils .data import (
29- DeepmdData ,
30- )
24+ from deepmd .infer .deep_eval import DeepEval
25+ from deepmd .utils .data import DeepmdData
3126
3227from .model .test_permutation import (
3328 model_property ,
@@ -147,25 +142,25 @@ def setUp(self) -> None:
147142 json .dump (self .config , fp , indent = 4 )
148143
149144
150- class TestDPTestForceMask (DPTest , unittest .TestCase ):
145+ class TestDPTestForceWeight (DPTest , unittest .TestCase ):
151146 def setUp (self ) -> None :
152- self .detail_file = "test_dp_test_force_mask_detail "
147+ self .detail_file = "test_dp_test_force_weight_detail "
153148 input_json = str (Path (__file__ ).parent / "water/se_atten.json" )
154149 with open (input_json ) as f :
155150 self .config = json .load (f )
156151 self .config ["training" ]["numb_steps" ] = 1
157152 self .config ["training" ]["save_freq" ] = 1
158- system_dir = self ._prepare_masked_system ()
153+ system_dir = self ._prepare_weighted_system ()
159154 data_file = [system_dir ]
160155 self .config ["training" ]["training_data" ]["systems" ] = data_file
161156 self .config ["training" ]["validation_data" ]["systems" ] = data_file
162157 self .config ["model" ] = deepcopy (model_se_e2_a )
163158 self .system_dir = system_dir
164- self .input_json = "test_dp_test_force_mask .json"
159+ self .input_json = "test_dp_test_force_weight .json"
165160 with open (self .input_json , "w" ) as fp :
166161 json .dump (self .config , fp , indent = 4 )
167162
168- def _prepare_masked_system (self ) -> str :
163+ def _prepare_weighted_system (self ) -> str :
169164 src = Path (__file__ ).parent / "water/data/single"
170165 tmp_dir = tempfile .mkdtemp ()
171166 shutil .copytree (src , tmp_dir , dirs_exist_ok = True )
@@ -179,7 +174,7 @@ def _prepare_masked_system(self) -> str:
179174 np .save (set_dir / "atom_pref.npy" , atom_pref )
180175 return tmp_dir
181176
182- def test_force_mask (self ) -> None :
177+ def test_force_weight (self ) -> None :
183178 trainer = get_trainer (deepcopy (self .config ))
184179 with torch .device ("cpu" ):
185180 trainer .get_data (is_train = False )
@@ -219,13 +214,18 @@ def test_force_mask(self) -> None:
219214 )
220215 force_pred = ret [1 ].reshape ([1 , - 1 ])
221216 force_true = test_data ["force" ][:1 ]
222- mask = test_data ["atom_pref" ][:1 ]
223- diff = (force_pred - force_true ) * mask
224- denom = mask .sum ()
225- mae_expected = np .sum (np .abs (diff )) / denom
226- rmse_expected = np .sqrt (np .sum (diff * diff ) / denom )
227- np .testing .assert_allclose (err ["mae_f" ][0 ], mae_expected )
228- np .testing .assert_allclose (err ["rmse_f" ][0 ], rmse_expected )
217+ weight = test_data ["atom_pref" ][:1 ]
218+ diff = force_pred - force_true
219+ diff_w = diff * weight
220+ denom = weight .sum ()
221+ mae_expected = np .sum (np .abs (diff_w )) / denom
222+ rmse_expected = np .sqrt (np .sum (diff * diff * weight ) / denom )
223+ mae_unweighted = np .sum (np .abs (diff )) / diff .size
224+ rmse_unweighted = np .sqrt (np .sum (diff * diff ) / diff .size )
225+ np .testing .assert_allclose (err ["mae_f" ][0 ], mae_unweighted )
226+ np .testing .assert_allclose (err ["rmse_f" ][0 ], rmse_unweighted )
227+ np .testing .assert_allclose (err ["mae_fw" ][0 ], mae_expected )
228+ np .testing .assert_allclose (err ["rmse_fw" ][0 ], rmse_expected )
229229 os .unlink (tmp_model .name )
230230
231231 def tearDown (self ) -> None :
0 commit comments