@@ -166,10 +166,12 @@ def _prepare_weighted_system(self) -> str:
166166 shutil .copytree (src , tmp_dir , dirs_exist_ok = True )
167167 set_dir = Path (tmp_dir ) / "set.000"
168168 forces = np .load (set_dir / "force.npy" )
169+ forces [0 , :3 ] += 1.0
169170 forces [0 , - 3 :] += 10.0
170171 np .save (set_dir / "force.npy" , forces )
171172 natoms = forces .shape [1 ] // 3
172173 atom_pref = np .ones ((forces .shape [0 ], natoms ), dtype = forces .dtype )
174+ atom_pref [:, 0 ] = 2.0
173175 atom_pref [:, - 1 ] = 0.0
174176 np .save (set_dir / "atom_pref.npy" , atom_pref )
175177 return tmp_dir
@@ -216,16 +218,17 @@ def test_force_weight(self) -> None:
216218 force_true = test_data ["force" ][:1 ]
217219 weight = test_data ["atom_pref" ][:1 ]
218220 diff = force_pred - force_true
219- diff_w = diff * weight
221+ mask = weight != 0
222+ masked_diff = diff [mask ]
223+ mae_unweighted = np .sum (np .abs (masked_diff )) / mask .sum ()
224+ rmse_unweighted = np .sqrt (np .sum (masked_diff * masked_diff ) / mask .sum ())
220225 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 )
226+ mae_weighted = np .sum (np .abs (diff ) * weight ) / denom
227+ rmse_weighted = np .sqrt (np .sum (diff * diff * weight ) / denom )
225228 np .testing .assert_allclose (err ["mae_f" ][0 ], mae_unweighted )
226229 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 )
230+ np .testing .assert_allclose (err ["mae_fw" ][0 ], mae_weighted )
231+ np .testing .assert_allclose (err ["rmse_fw" ][0 ], rmse_weighted )
229232 os .unlink (tmp_model .name )
230233
231234 def tearDown (self ) -> None :
0 commit comments