@@ -171,10 +171,12 @@ def _prepare_weighted_system(self) -> str:
171171 shutil .copytree (src , tmp_dir , dirs_exist_ok = True )
172172 set_dir = Path (tmp_dir ) / "set.000"
173173 forces = np .load (set_dir / "force.npy" )
174+ forces [0 , :3 ] += 1.0
174175 forces [0 , - 3 :] += 10.0
175176 np .save (set_dir / "force.npy" , forces )
176177 natoms = forces .shape [1 ] // 3
177178 atom_pref = np .ones ((forces .shape [0 ], natoms ), dtype = forces .dtype )
179+ atom_pref [:, 0 ] = 2.0
178180 atom_pref [:, - 1 ] = 0.0
179181 np .save (set_dir / "atom_pref.npy" , atom_pref )
180182 return tmp_dir
@@ -221,16 +223,17 @@ def test_force_weight(self) -> None:
221223 force_true = test_data ["force" ][:1 ]
222224 weight = test_data ["atom_pref" ][:1 ]
223225 diff = force_pred - force_true
224- diff_w = diff * weight
226+ mask = weight != 0
227+ masked_diff = diff [mask ]
228+ mae_unweighted = np .sum (np .abs (masked_diff )) / mask .sum ()
229+ rmse_unweighted = np .sqrt (np .sum (masked_diff * masked_diff ) / mask .sum ())
225230 denom = weight .sum ()
226- mae_expected = np .sum (np .abs (diff_w )) / denom
227- rmse_expected = np .sqrt (np .sum (diff * diff * weight ) / denom )
228- mae_unweighted = np .sum (np .abs (diff )) / diff .size
229- rmse_unweighted = np .sqrt (np .sum (diff * diff ) / diff .size )
231+ mae_weighted = np .sum (np .abs (diff ) * weight ) / denom
232+ rmse_weighted = np .sqrt (np .sum (diff * diff * weight ) / denom )
230233 np .testing .assert_allclose (err ["mae_f" ][0 ], mae_unweighted )
231234 np .testing .assert_allclose (err ["rmse_f" ][0 ], rmse_unweighted )
232- np .testing .assert_allclose (err ["mae_fw" ][0 ], mae_expected )
233- np .testing .assert_allclose (err ["rmse_fw" ][0 ], rmse_expected )
235+ np .testing .assert_allclose (err ["mae_fw" ][0 ], mae_weighted )
236+ np .testing .assert_allclose (err ["rmse_fw" ][0 ], rmse_weighted )
234237 os .unlink (tmp_model .name )
235238
236239 def tearDown (self ) -> None :
0 commit comments