Skip to content

Commit 063daa2

Browse files
committed
add a new test case test_update_force_torque_matrices_united_atom_increment to ensure updates are correctly handled if key exists in update_force_torque_matrices
1 parent 162d315 commit 063daa2

1 file changed

Lines changed: 67 additions & 0 deletions

File tree

tests/test_CodeEntropy/test_levels.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,6 +1065,73 @@ def test_update_force_torque_matrices_united_atom(self):
10651065
np.testing.assert_array_equal(torque_avg["ua"][key], t_mat_mock)
10661066
self.assertEqual(frame_counts["ua"][key], 1)
10671067

1068+
def test_update_force_torque_matrices_united_atom_increment(self):
1069+
"""
1070+
Test that `update_force_torque_matrices` correctly updates force and torque
1071+
matrices for the 'united_atom' level when the key already exists.
1072+
"""
1073+
level_manager = LevelManager()
1074+
entropy_manager = MagicMock()
1075+
mol = MagicMock()
1076+
1077+
# Simulate one residue with two atoms
1078+
residue = MagicMock()
1079+
residue.atoms.indices = [0, 1]
1080+
mol.residues = [residue]
1081+
mol.trajectory.__getitem__.return_value = None
1082+
1083+
selected_atoms = MagicMock()
1084+
entropy_manager._run_manager.new_U_select_atom.return_value = selected_atoms
1085+
selected_atoms.trajectory.__getitem__.return_value = None
1086+
1087+
f_mat_1 = np.array([[1.0]], dtype=np.float64)
1088+
t_mat_1 = np.array([[2.0]], dtype=np.float64)
1089+
f_mat_2 = np.array([[3.0]], dtype=np.float64)
1090+
t_mat_2 = np.array([[4.0]], dtype=np.float64)
1091+
1092+
level_manager.get_matrices = MagicMock(return_value=(f_mat_1, t_mat_1))
1093+
1094+
force_avg = {"ua": {}, "res": [None], "poly": [None]}
1095+
torque_avg = {"ua": {}, "res": [None], "poly": [None]}
1096+
frame_counts = {"ua": {}, "res": [None], "poly": [None]}
1097+
1098+
# First call: initialize
1099+
level_manager.update_force_torque_matrices(
1100+
entropy_manager=entropy_manager,
1101+
mol=mol,
1102+
group_id=0,
1103+
level="united_atom",
1104+
level_list=["residue", "united_atom"],
1105+
time_index=0,
1106+
num_frames=10,
1107+
force_avg=force_avg,
1108+
torque_avg=torque_avg,
1109+
frame_counts=frame_counts,
1110+
)
1111+
1112+
# Second call: update
1113+
level_manager.get_matrices = MagicMock(return_value=(f_mat_2, t_mat_2))
1114+
1115+
level_manager.update_force_torque_matrices(
1116+
entropy_manager=entropy_manager,
1117+
mol=mol,
1118+
group_id=0,
1119+
level="united_atom",
1120+
level_list=["residue", "united_atom"],
1121+
time_index=1,
1122+
num_frames=10,
1123+
force_avg=force_avg,
1124+
torque_avg=torque_avg,
1125+
frame_counts=frame_counts,
1126+
)
1127+
1128+
expected_force = f_mat_1 + (f_mat_2 - f_mat_1) / 2
1129+
expected_torque = t_mat_1 + (t_mat_2 - t_mat_1) / 2
1130+
1131+
np.testing.assert_array_almost_equal(force_avg["ua"][(0, 0)], expected_force)
1132+
np.testing.assert_array_almost_equal(torque_avg["ua"][(0, 0)], expected_torque)
1133+
self.assertEqual(frame_counts["ua"][(0, 0)], 2)
1134+
10681135
def test_update_force_torque_matrices_residue(self):
10691136
"""
10701137
Test that `update_force_torque_matrices` correctly updates force and torque

0 commit comments

Comments
 (0)