From 182cda5b4233e7ddce628d861a63e393cdd5c162 Mon Sep 17 00:00:00 2001 From: harryswift01 Date: Mon, 5 Oct 2026 11:38:33 +0100 Subject: [PATCH 1/9] fix: use scale-relative tolerance for null-mode filtering in vibrational entropy --- CodeEntropy/entropy/vibrational.py | 12 +++++++--- .../baselines/benzaldehyde/grouping_each.json | 22 +++++++++---------- .../entropy/test_vibrational_entropy_math.py | 10 ++++++--- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/CodeEntropy/entropy/vibrational.py b/CodeEntropy/entropy/vibrational.py index 3e02a01..53de6d3 100644 --- a/CodeEntropy/entropy/vibrational.py +++ b/CodeEntropy/entropy/vibrational.py @@ -148,7 +148,7 @@ def _matrix_eigenvalues(matrix: np.ndarray) -> np.ndarray: Eigenvalues as a NumPy array. """ matrix = np.asarray(matrix, dtype=float) - return la.eigvals(matrix) + return la.eigvalsh(matrix) def _convert_lambda_units(self, lambdas: np.ndarray) -> np.ndarray: """Convert eigenvalues into SI units using run_manager. @@ -185,7 +185,10 @@ def _frequencies_from_lambdas(self, lambdas: np.ndarray, temp: float) -> np.ndar """Convert eigenvalues to frequencies with robust filtering. Filters out eigenvalues that are complex, non-positive, or near-zero to - avoid invalid frequencies and unstable entropies. + avoid invalid frequencies and unstable entropies. The near-zero + tolerance scales with the spectrum's own magnitude (as in + ``numpy.linalg.matrix_rank``) rather than using a fixed cutoff, since + the eigensolver noise floor around a true null mode is not constant. Args: lambdas: Eigenvalues (post unit conversion). @@ -197,8 +200,11 @@ def _frequencies_from_lambdas(self, lambdas: np.ndarray, temp: float) -> np.ndar lambdas = np.asarray(lambdas) lambdas = np.real_if_close(lambdas, tol=1000) + scale = float(np.max(np.abs(lambdas))) if lambdas.size else 0.0 + atol = lambdas.size * np.finfo(float).eps * scale + valid_mask = ( - np.isreal(lambdas) & (lambdas > 0) & (~np.isclose(lambdas, 0, atol=1e-7)) + np.isreal(lambdas) & (lambdas > 0) & (~np.isclose(lambdas, 0, atol=atol)) ) removed = int(len(lambdas) - np.count_nonzero(valid_mask)) diff --git a/tests/regression/baselines/benzaldehyde/grouping_each.json b/tests/regression/baselines/benzaldehyde/grouping_each.json index 0a21847..deacf42 100644 --- a/tests/regression/baselines/benzaldehyde/grouping_each.json +++ b/tests/regression/baselines/benzaldehyde/grouping_each.json @@ -3,7 +3,7 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.062499436482478445, + "united_atom:Rovibrational": 0.062499436482478535, "residue:FTmat-Transvibrational": 16.83857036769833, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, @@ -27,26 +27,26 @@ "2": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.0022147884278620462, - "residue:FTmat-Transvibrational": 17.449372254125862, + "united_atom:Rovibrational": 0.0022147884278620493, + "residue:FTmat-Transvibrational": 17.449372254125855, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 31.909265242174982 }, - "total": 49.36085228472871 + "total": 49.3608522847287 }, "3": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 138.65701144028458, + "united_atom:Rovibrational": 0.001983835543157824, "residue:FTmat-Transvibrational": 15.803976930845373, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 154.46098837112996 + "total": 15.80596076638853 }, "4": { "components": { @@ -63,7 +63,7 @@ "5": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.010824819910336835, + "united_atom:Rovibrational": 0.010824819910336868, "residue:FTmat-Transvibrational": 11.05479779559611, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, @@ -75,7 +75,7 @@ "6": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.00018982532508837594, + "united_atom:Rovibrational": 0.00018982532508837537, "residue:FTmat-Transvibrational": 19.723925127490933, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, @@ -99,7 +99,7 @@ "8": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.020362757918507005, + "united_atom:Rovibrational": 0.020362757918507036, "residue:FTmat-Transvibrational": 16.13204209116967, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, @@ -111,14 +111,14 @@ "9": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 138.65525900218074, + "united_atom:Rovibrational": 0.00023139743934636996, "residue:FTmat-Transvibrational": 21.42548529236268, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 160.08074429454342 + "total": 21.425716689802027 } } } diff --git a/tests/unit/CodeEntropy/entropy/test_vibrational_entropy_math.py b/tests/unit/CodeEntropy/entropy/test_vibrational_entropy_math.py index 2554571..07d14f7 100644 --- a/tests/unit/CodeEntropy/entropy/test_vibrational_entropy_math.py +++ b/tests/unit/CodeEntropy/entropy/test_vibrational_entropy_math.py @@ -16,17 +16,21 @@ def get_KT2J(self, temp): return RM() -def test_matrix_eigenvalues_returns_complex_dtype_possible(run_manager): +def test_matrix_eigenvalues_returns_real_dtype_for_symmetric_matrix(run_manager): ve = VibrationalEntropy(run_manager=run_manager) - m = np.array([[0.0, -1.0], [1.0, 0.0]]) + m = np.array([[2.0, -1.0], [-1.0, 2.0]]) eigs = ve._matrix_eigenvalues(m) assert eigs.shape == (2,) + assert not np.iscomplexobj(eigs) def test_frequencies_from_lambdas_filters_nonpositive_and_near_zero(run_manager): + """Near-zero eigenvalue is scaled to the spectrum's magnitude, not fixed.""" ve = VibrationalEntropy(run_manager=run_manager) - lambdas = np.array([-1.0, 0.0, 1e-12, 1.0, 4.0]) + scale = 4.0 + noise = np.finfo(float).eps * scale + lambdas = np.array([-1.0, 0.0, noise, 1.0, scale]) freqs = ve._frequencies_from_lambdas(lambdas, temp=298.0) assert freqs.size == 2 From 65f1c38b2476e86364fe99b31c396638321dd7e5 Mon Sep 17 00:00:00 2001 From: harryswift01 Date: Wed, 7 Oct 2026 11:24:39 +0100 Subject: [PATCH 2/9] fix(axes): update all instances of `np.linalg.eig` to `np.linalg.eigh` --- CodeEntropy/levels/axes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CodeEntropy/levels/axes.py b/CodeEntropy/levels/axes.py index e2cbfa5..53812dd 100644 --- a/CodeEntropy/levels/axes.py +++ b/CodeEntropy/levels/axes.py @@ -836,7 +836,7 @@ def get_vanilla_axes(self, molecule): make_whole(molecule.atoms) principal_axes = molecule.principal_axes() - eigenvalues, _ = np.linalg.eig(moment_of_inertia_tensor) + eigenvalues, _ = np.linalg.eigh(moment_of_inertia_tensor) order = np.argsort(np.abs(eigenvalues))[::-1] moment_of_inertia = eigenvalues[order] @@ -1099,7 +1099,7 @@ def get_custom_principal_axes( - principal_axes: (3, 3) principal axes (rows). - moment_of_inertia: (3,) principal moments. """ - eigenvalues, eigenvectors = np.linalg.eig(moment_of_inertia_tensor) + eigenvalues, eigenvectors = np.linalg.eigh(moment_of_inertia_tensor) order = np.abs(eigenvalues).argsort()[::-1] # descending order transposed = np.transpose(eigenvectors) # columns -> rows moment_of_inertia = eigenvalues[order] From 15fb2a29ef0f540cfadb6976795ee09086a9e6f8 Mon Sep 17 00:00:00 2001 From: harryswift01 Date: Wed, 7 Oct 2026 11:32:10 +0100 Subject: [PATCH 3/9] tests(regression): update baselines with switch from `np.linalg.eig` to `np.linalg.eigh` --- .../baselines/benzaldehyde/axes_off.json | 10 ++-- .../combined_forcetorque_false.json | 10 ++-- .../baselines/benzaldehyde/frame_window.json | 10 ++-- .../baselines/benzaldehyde/grouping_each.json | 24 ++++----- .../benzaldehyde/selection_subset.json | 10 ++-- .../baselines/benzene/axes_off.json | 10 ++-- .../benzene/combined_forcetorque_off.json | 10 ++-- .../baselines/benzene/frame_window.json | 10 ++-- .../baselines/benzene/grouping_each.json | 48 ++++++++--------- .../baselines/benzene/selection_subset.json | 10 ++-- .../baselines/cyclohexane/axes_off.json | 10 ++-- .../cyclohexane/combined_forcetorque_off.json | 8 +-- .../baselines/cyclohexane/frame_window.json | 10 ++-- .../baselines/cyclohexane/grouping_each.json | 38 +++++++------- .../cyclohexane/selection_subset.json | 8 +-- tests/regression/baselines/dna/axes_off.json | 16 +++--- .../dna/combined_forcetorque_off.json | 20 +++---- .../baselines/dna/frame_window.json | 16 +++--- .../baselines/dna/grouping_each.json | 14 ++--- .../baselines/dna/selection_subset.json | 14 ++--- .../baselines/ethyl-acetate/axes_off.json | 10 ++-- .../combined_forcetorque_off.json | 10 ++-- .../baselines/ethyl-acetate/frame_window.json | 10 ++-- .../ethyl-acetate/grouping_each.json | 36 ++++++------- .../ethyl-acetate/selection_subset.json | 10 ++-- .../baselines/methane/axes_off.json | 6 +-- .../methane/combined_forcetorque_off.json | 6 +-- .../baselines/methane/frame_window.json | 6 +-- .../baselines/methane/grouping_each.json | 52 +++++++++---------- .../baselines/methane/selection_subset.json | 6 +-- .../baselines/methanol/axes_off.json | 8 +-- .../methanol/combined_forcetorque_off.json | 8 +-- .../baselines/methanol/frame_window.json | 6 +-- .../baselines/methanol/grouping_each.json | 42 +++++++-------- .../baselines/methanol/selection_subset.json | 8 +-- .../baselines/octonol/axes_off.json | 10 ++-- .../octonol/combined_forcetorque_off.json | 10 ++-- .../baselines/octonol/frame_window.json | 10 ++-- .../baselines/octonol/grouping_each.json | 38 +++++++------- .../baselines/octonol/selection_subset.json | 10 ++-- .../regression/baselines/water/axes_off.json | 6 +-- .../water/combined_forcetorque_off.json | 6 +-- .../baselines/water/frame_window.json | 6 +-- .../baselines/water/grouping_each.json | 46 ++++++++-------- .../baselines/water/selection_subset.json | 6 +-- .../regression/baselines/water/water_off.json | 6 +-- 46 files changed, 342 insertions(+), 342 deletions(-) diff --git a/tests/regression/baselines/benzaldehyde/axes_off.json b/tests/regression/baselines/benzaldehyde/axes_off.json index 5bddd53..0d34d6c 100644 --- a/tests/regression/baselines/benzaldehyde/axes_off.json +++ b/tests/regression/baselines/benzaldehyde/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.08982962903796131, - "united_atom:Rovibrational": 32.16018134884085, - "residue:FTmat-Transvibrational": 88.7671666695003, - "residue:FTmat-Rovibrational": 61.61036267672132, + "united_atom:Transvibrational": 0.059408867580823616, + "united_atom:Rovibrational": 39.36932344859785, + "residue:FTmat-Transvibrational": 81.48352353795262, + "residue:FTmat-Rovibrational": 63.04898043265405, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 203.1091118167158 + "total": 204.44280777940068 } } } diff --git a/tests/regression/baselines/benzaldehyde/combined_forcetorque_false.json b/tests/regression/baselines/benzaldehyde/combined_forcetorque_false.json index a5d1af0..66c2f7c 100644 --- a/tests/regression/baselines/benzaldehyde/combined_forcetorque_false.json +++ b/tests/regression/baselines/benzaldehyde/combined_forcetorque_false.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.07119323721997475, - "united_atom:Rovibrational": 49.68669738152346, - "residue:Transvibrational": 69.48692941204929, - "residue:Rovibrational": 68.46147102540942, + "united_atom:Transvibrational": 0.05129761410051273, + "united_atom:Rovibrational": 49.686697381523466, + "residue:Transvibrational": 69.21750344995603, + "residue:Rovibrational": 67.99888878209293, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 208.1878625488175 + "total": 207.4359587202883 } } } diff --git a/tests/regression/baselines/benzaldehyde/frame_window.json b/tests/regression/baselines/benzaldehyde/frame_window.json index 70bb276..9f7e948 100644 --- a/tests/regression/baselines/benzaldehyde/frame_window.json +++ b/tests/regression/baselines/benzaldehyde/frame_window.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 40.30267601961045, - "united_atom:Rovibrational": 38.21906858443615, - "residue:FTmat-Transvibrational": 73.41098578352612, - "residue:FTmat-Rovibrational": 57.881504393660364, + "united_atom:Transvibrational": 42.23402688550062, + "united_atom:Rovibrational": 38.219068584436165, + "residue:FTmat-Transvibrational": 73.4310301096772, + "residue:FTmat-Rovibrational": 57.470843728209715, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 230.29580627384846 + "total": 231.83654080043905 } } } diff --git a/tests/regression/baselines/benzaldehyde/grouping_each.json b/tests/regression/baselines/benzaldehyde/grouping_each.json index deacf42..50a38c1 100644 --- a/tests/regression/baselines/benzaldehyde/grouping_each.json +++ b/tests/regression/baselines/benzaldehyde/grouping_each.json @@ -40,61 +40,61 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.001983835543157824, - "residue:FTmat-Transvibrational": 15.803976930845373, + "residue:FTmat-Transvibrational": 15.80397693084538, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.80596076638853 + "total": 15.805960766388537 }, "4": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.003874883925216773, - "residue:FTmat-Transvibrational": 23.899916844406114, + "residue:FTmat-Transvibrational": 23.899916844406135, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 23.90379172833133 + "total": 23.903791728331353 }, "5": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.010824819910336868, - "residue:FTmat-Transvibrational": 11.05479779559611, + "residue:FTmat-Transvibrational": 11.054797795596109, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 31.909265242174982 }, - "total": 42.97488785768143 + "total": 42.97488785768142 }, "6": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00018982532508837537, - "residue:FTmat-Transvibrational": 19.723925127490933, + "residue:FTmat-Transvibrational": 19.72392512749092, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 19.72411495281602 + "total": 19.724114952816006 }, "7": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.004033941970593011, - "residue:FTmat-Transvibrational": 18.90676882142135, + "residue:FTmat-Transvibrational": 18.906768821421363, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 18.910802763391942 + "total": 18.910802763391956 }, "8": { "components": { @@ -112,13 +112,13 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00023139743934636996, - "residue:FTmat-Transvibrational": 21.42548529236268, + "residue:FTmat-Transvibrational": 21.42548529236267, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 21.425716689802027 + "total": 21.425716689802016 } } } diff --git a/tests/regression/baselines/benzaldehyde/selection_subset.json b/tests/regression/baselines/benzaldehyde/selection_subset.json index 6d50b1a..5b95eec 100644 --- a/tests/regression/baselines/benzaldehyde/selection_subset.json +++ b/tests/regression/baselines/benzaldehyde/selection_subset.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.07119323721997475, - "united_atom:Rovibrational": 49.68669738152346, - "residue:FTmat-Transvibrational": 87.43527331108173, - "residue:FTmat-Rovibrational": 61.67126452972779, + "united_atom:Transvibrational": 0.05129761410051273, + "united_atom:Rovibrational": 49.686697381523466, + "residue:FTmat-Transvibrational": 82.05934573652353, + "residue:FTmat-Rovibrational": 61.71704168262333, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 219.34599995216834 + "total": 213.99595390738622 } } } diff --git a/tests/regression/baselines/benzene/axes_off.json b/tests/regression/baselines/benzene/axes_off.json index 6177e0d..109194e 100644 --- a/tests/regression/baselines/benzene/axes_off.json +++ b/tests/regression/baselines/benzene/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.17824017761231503, - "united_atom:Rovibrational": 37.12706256545503, - "residue:FTmat-Transvibrational": 76.8200637641939, - "residue:FTmat-Rovibrational": 47.171663134129304, + "united_atom:Transvibrational": 0.16163858692459776, + "united_atom:Rovibrational": 44.48477691495675, + "residue:FTmat-Transvibrational": 81.11811255841327, + "residue:FTmat-Rovibrational": 47.03606119622739, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 161.29702964139057 + "total": 172.80058925652202 } } } diff --git a/tests/regression/baselines/benzene/combined_forcetorque_off.json b/tests/regression/baselines/benzene/combined_forcetorque_off.json index 16b5e37..3785730 100644 --- a/tests/regression/baselines/benzene/combined_forcetorque_off.json +++ b/tests/regression/baselines/benzene/combined_forcetorque_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.16311383522946216, - "united_atom:Rovibrational": 40.695812407899396, - "residue:Transvibrational": 57.59675197041957, - "residue:Rovibrational": 52.85496348419672, + "united_atom:Transvibrational": 0.1627566521736012, + "united_atom:Rovibrational": 40.69581240789943, + "residue:Transvibrational": 61.39556854139587, + "residue:Rovibrational": 49.491721969907516, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 151.31064169774515 + "total": 151.7458595713764 } } } diff --git a/tests/regression/baselines/benzene/frame_window.json b/tests/regression/baselines/benzene/frame_window.json index c1ffd00..c12b13b 100644 --- a/tests/regression/baselines/benzene/frame_window.json +++ b/tests/regression/baselines/benzene/frame_window.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 11.46552036084548, - "united_atom:Rovibrational": 34.98492056748493, - "residue:FTmat-Transvibrational": 71.83491878606151, - "residue:FTmat-Rovibrational": 55.6098400281744, + "united_atom:Transvibrational": 12.892173028619528, + "united_atom:Rovibrational": 34.98492056748487, + "residue:FTmat-Transvibrational": 71.74602192596502, + "residue:FTmat-Rovibrational": 55.81007796948714, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 173.89519974256632 + "total": 175.43319349155655 } } } diff --git a/tests/regression/baselines/benzene/grouping_each.json b/tests/regression/baselines/benzene/grouping_each.json index 36535d8..d6460fc 100644 --- a/tests/regression/baselines/benzene/grouping_each.json +++ b/tests/regression/baselines/benzene/grouping_each.json @@ -4,121 +4,121 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.001760679467943202, - "residue:FTmat-Transvibrational": 19.14539159233644, + "residue:FTmat-Transvibrational": 19.145391592336434, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 19.147152271804384 + "total": 19.147152271804377 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.010093246924291187, - "residue:FTmat-Transvibrational": 15.27551568157708, + "united_atom:Rovibrational": 0.010093246924291217, + "residue:FTmat-Transvibrational": 15.27551568157707, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 15.089233620075317 }, - "total": 30.374842548576687 + "total": 30.37484254857668 }, "2": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.07511923174012403, - "residue:FTmat-Transvibrational": 20.327785240055736, + "residue:FTmat-Transvibrational": 20.32778524005574, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 15.089233620075317 }, - "total": 35.492138091871176 + "total": 35.49213809187118 }, "3": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.0038209327718877325, - "residue:FTmat-Transvibrational": 9.934141461042111, + "united_atom:Rovibrational": 0.003820932771887749, + "residue:FTmat-Transvibrational": 9.934141461042106, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 9.937962393813999 + "total": 9.937962393813994 }, "4": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.026349364088976555, - "residue:FTmat-Transvibrational": 7.206801915761131, + "residue:FTmat-Transvibrational": 7.206801915761134, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 7.233151279850108 + "total": 7.2331512798501105 }, "5": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0015259047993877776, - "residue:FTmat-Transvibrational": 8.539848138171388, + "residue:FTmat-Transvibrational": 8.539848138171394, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 8.541374042970777 + "total": 8.541374042970782 }, "6": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0034710297151557107, - "residue:FTmat-Transvibrational": 15.469059953010003, + "residue:FTmat-Transvibrational": 15.46905995300999, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.472530982725159 + "total": 15.472530982725146 }, "7": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.004204931339708972, - "residue:FTmat-Transvibrational": 7.333010865090827, + "united_atom:Rovibrational": 0.004204931339708978, + "residue:FTmat-Transvibrational": 7.333010865090829, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 7.337215796430536 + "total": 7.337215796430538 }, "8": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.0006818502219972305, - "residue:FTmat-Transvibrational": 22.685475655857566, + "united_atom:Rovibrational": 0.0006818502219972316, + "residue:FTmat-Transvibrational": 22.685475655857545, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 22.686157506079564 + "total": 22.686157506079542 }, "9": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.004115086801073575, - "residue:FTmat-Transvibrational": 5.894912294581263, + "residue:FTmat-Transvibrational": 5.894912294581267, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 5.899027381382337 + "total": 5.89902738138234 } } } diff --git a/tests/regression/baselines/benzene/selection_subset.json b/tests/regression/baselines/benzene/selection_subset.json index ff2d09b..6845aba 100644 --- a/tests/regression/baselines/benzene/selection_subset.json +++ b/tests/regression/baselines/benzene/selection_subset.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.16311383522946216, - "united_atom:Rovibrational": 40.695812407899396, - "residue:FTmat-Transvibrational": 71.15771063929333, - "residue:FTmat-Rovibrational": 47.26253953880574, + "united_atom:Transvibrational": 0.1627566521736012, + "united_atom:Rovibrational": 40.69581240789943, + "residue:FTmat-Transvibrational": 83.31956662877224, + "residue:FTmat-Rovibrational": 45.37364572273796, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 159.27917642122793 + "total": 169.55178141158322 } } } diff --git a/tests/regression/baselines/cyclohexane/axes_off.json b/tests/regression/baselines/cyclohexane/axes_off.json index 5bf8028..2d6038a 100644 --- a/tests/regression/baselines/cyclohexane/axes_off.json +++ b/tests/regression/baselines/cyclohexane/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.6825851535582973, - "united_atom:Rovibrational": 22.069351988995066, - "residue:FTmat-Transvibrational": 85.12666483486655, - "residue:FTmat-Rovibrational": 61.14255319533254, + "united_atom:Transvibrational": 0.8231608488813442, + "united_atom:Rovibrational": 24.640396903026634, + "residue:FTmat-Transvibrational": 84.05755363684698, + "residue:FTmat-Rovibrational": 61.73316378799838, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 169.02115517275246 + "total": 171.2542751767533 } } } diff --git a/tests/regression/baselines/cyclohexane/combined_forcetorque_off.json b/tests/regression/baselines/cyclohexane/combined_forcetorque_off.json index a548349..0a2e066 100644 --- a/tests/regression/baselines/cyclohexane/combined_forcetorque_off.json +++ b/tests/regression/baselines/cyclohexane/combined_forcetorque_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.5949308536734588, + "united_atom:Transvibrational": 0.9083882969602073, "united_atom:Rovibrational": 24.234154676578637, - "residue:Transvibrational": 69.9872567772153, - "residue:Rovibrational": 68.68521019685565, + "residue:Transvibrational": 70.36545739512636, + "residue:Rovibrational": 69.36129379657234, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 163.50155250432303 + "total": 164.86929416523753 } } } diff --git a/tests/regression/baselines/cyclohexane/frame_window.json b/tests/regression/baselines/cyclohexane/frame_window.json index d21d437..dfe949a 100644 --- a/tests/regression/baselines/cyclohexane/frame_window.json +++ b/tests/regression/baselines/cyclohexane/frame_window.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 17.398382397359153, - "united_atom:Rovibrational": 73.96792995794405, - "residue:FTmat-Transvibrational": 76.4267996157354, - "residue:FTmat-Rovibrational": 63.30469126284744, + "united_atom:Transvibrational": 19.83149926936752, + "united_atom:Rovibrational": 73.96792995794401, + "residue:FTmat-Transvibrational": 76.41867545283402, + "residue:FTmat-Rovibrational": 63.268579628257925, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 231.09780323388605 + "total": 233.48668430840345 } } } diff --git a/tests/regression/baselines/cyclohexane/grouping_each.json b/tests/regression/baselines/cyclohexane/grouping_each.json index 364af0c..f48d5fa 100644 --- a/tests/regression/baselines/cyclohexane/grouping_each.json +++ b/tests/regression/baselines/cyclohexane/grouping_each.json @@ -4,73 +4,73 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0010533914066148877, - "residue:FTmat-Transvibrational": 13.254094261168165, + "residue:FTmat-Transvibrational": 13.25409426116816, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 13.25514765257478 + "total": 13.255147652574774 }, "1": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.006057157987386287, - "residue:FTmat-Transvibrational": 15.132575979975469, + "residue:FTmat-Transvibrational": 15.132575979975476, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.138633137962856 + "total": 15.138633137962863 }, "2": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00010095873425357108, - "residue:FTmat-Transvibrational": 19.65885364120911, + "residue:FTmat-Transvibrational": 19.658853641209102, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 19.658954599943364 + "total": 19.658954599943357 }, "3": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.0037293322355179776, - "residue:FTmat-Transvibrational": 11.234013572018538, + "united_atom:Rovibrational": 0.0037293322355179833, + "residue:FTmat-Transvibrational": 11.234013572018535, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 11.237742904254056 + "total": 11.237742904254052 }, "4": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0007550734967943642, - "residue:FTmat-Transvibrational": 18.70372633557293, + "residue:FTmat-Transvibrational": 18.703726335572917, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 18.704481409069725 + "total": 18.70448140906971 }, "5": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.02179378230989012, - "residue:FTmat-Transvibrational": 11.909227365464751, + "residue:FTmat-Transvibrational": 11.90922736546474, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 11.931021147774642 + "total": 11.931021147774631 }, "6": { "components": { @@ -88,37 +88,37 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.007825221576786185, - "residue:FTmat-Transvibrational": 14.390570450399677, + "residue:FTmat-Transvibrational": 14.390570450399672, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 14.398395671976463 + "total": 14.398395671976457 }, "8": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00022218804178093966, - "residue:FTmat-Transvibrational": 15.08891414424032, + "residue:FTmat-Transvibrational": 15.088914144240295, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.0891363322821 + "total": 15.089136332282076 }, "9": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.015106344919667631, - "residue:FTmat-Transvibrational": 15.248584501782126, + "residue:FTmat-Transvibrational": 15.248584501782135, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.263690846701794 + "total": 15.263690846701802 } } } diff --git a/tests/regression/baselines/cyclohexane/selection_subset.json b/tests/regression/baselines/cyclohexane/selection_subset.json index b1a1444..c4297f3 100644 --- a/tests/regression/baselines/cyclohexane/selection_subset.json +++ b/tests/regression/baselines/cyclohexane/selection_subset.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.5949308536734588, + "united_atom:Transvibrational": 0.9083882969602073, "united_atom:Rovibrational": 24.234154676578637, - "residue:FTmat-Transvibrational": 84.37184730911717, - "residue:FTmat-Rovibrational": 59.52377096811085, + "residue:FTmat-Transvibrational": 83.02143938359535, + "residue:FTmat-Rovibrational": 60.38982276412395, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 168.72470380748013 + "total": 168.55380512125814 } } } diff --git a/tests/regression/baselines/dna/axes_off.json b/tests/regression/baselines/dna/axes_off.json index 9504b7b..6a9dab7 100644 --- a/tests/regression/baselines/dna/axes_off.json +++ b/tests/regression/baselines/dna/axes_off.json @@ -3,30 +3,30 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.2269044878385265, + "united_atom:Rovibrational": 1.2910746542567035, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 27.45710747332319, - "polymer:FTmat-Transvibrational": 48.62026970762269, + "residue:Rovibrational": 26.68254629775581, + "polymer:FTmat-Transvibrational": 48.50274293414517, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 10.584542990557836, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 92.64772999596995 + "total": 91.81981221334323 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.7972774672527945, + "united_atom:Rovibrational": 1.9680216598831306, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 25.287669468441067, - "polymer:FTmat-Transvibrational": 60.47397935339153, + "residue:Rovibrational": 24.831990780037884, + "polymer:FTmat-Transvibrational": 57.35678551116436, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 5.292271495278918, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 97.61010312099201 + "total": 94.207974782992 } } } diff --git a/tests/regression/baselines/dna/combined_forcetorque_off.json b/tests/regression/baselines/dna/combined_forcetorque_off.json index e867cee..339a163 100644 --- a/tests/regression/baselines/dna/combined_forcetorque_off.json +++ b/tests/regression/baselines/dna/combined_forcetorque_off.json @@ -3,30 +3,30 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.002160679012128457, + "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 3.376800684085249, - "polymer:Transvibrational": 21.18266215491188, - "polymer:Rovibrational": 12.837576042626923, + "residue:Rovibrational": 3.3768006840852487, + "polymer:Transvibrational": 21.182662154911913, + "polymer:Rovibrational": 12.837576042626926, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 42.1581048972639 + "total": 42.15810489726393 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.01846427765949586, + "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 2.3863201082544565, - "polymer:Transvibrational": 16.607667396609116, - "polymer:Rovibrational": 12.304363914795593, + "residue:Rovibrational": 2.386320108254459, + "polymer:Transvibrational": 16.607667396609127, + "polymer:Rovibrational": 12.304363914795598, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 36.07572103394637 + "total": 36.075721033946394 } } } diff --git a/tests/regression/baselines/dna/frame_window.json b/tests/regression/baselines/dna/frame_window.json index c35d221..8281138 100644 --- a/tests/regression/baselines/dna/frame_window.json +++ b/tests/regression/baselines/dna/frame_window.json @@ -3,30 +3,30 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.5821720528374943, + "united_atom:Rovibrational": 1.5821720528374947, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 27.397449238560412, - "polymer:FTmat-Transvibrational": 48.62026970762269, + "residue:Rovibrational": 26.60656641113743, + "polymer:FTmat-Transvibrational": 48.50274293414517, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 10.584542990557836, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 92.94333932620614 + "total": 92.03492972530563 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 2.5277936366208014, + "united_atom:Rovibrational": 2.527793636620802, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 24.80670067454149, - "polymer:FTmat-Transvibrational": 60.47397935339153, + "residue:Rovibrational": 24.4275653595082, + "polymer:FTmat-Transvibrational": 57.35678551116436, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 5.292271495278918, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 97.85965049646045 + "total": 94.3633213392 } } } diff --git a/tests/regression/baselines/dna/grouping_each.json b/tests/regression/baselines/dna/grouping_each.json index 2cbef74..1e29fb1 100644 --- a/tests/regression/baselines/dna/grouping_each.json +++ b/tests/regression/baselines/dna/grouping_each.json @@ -3,10 +3,10 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.002160679012128457, + "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 3.376800684085249, - "polymer:FTmat-Transvibrational": 12.341104347192612, + "residue:Rovibrational": 3.3768006840852487, + "polymer:FTmat-Transvibrational": 12.341104347192614, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, @@ -17,16 +17,16 @@ "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.01846427765949586, + "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 2.3863201082544565, - "polymer:FTmat-Transvibrational": 11.11037253388596, + "residue:Rovibrational": 2.386320108254459, + "polymer:FTmat-Transvibrational": 11.110372533885968, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 18.274062256427623 + "total": 18.274062256427637 } } } diff --git a/tests/regression/baselines/dna/selection_subset.json b/tests/regression/baselines/dna/selection_subset.json index 2cbef74..1e29fb1 100644 --- a/tests/regression/baselines/dna/selection_subset.json +++ b/tests/regression/baselines/dna/selection_subset.json @@ -3,10 +3,10 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.002160679012128457, + "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 3.376800684085249, - "polymer:FTmat-Transvibrational": 12.341104347192612, + "residue:Rovibrational": 3.3768006840852487, + "polymer:FTmat-Transvibrational": 12.341104347192614, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, @@ -17,16 +17,16 @@ "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.01846427765949586, + "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 2.3863201082544565, - "polymer:FTmat-Transvibrational": 11.11037253388596, + "residue:Rovibrational": 2.386320108254459, + "polymer:FTmat-Transvibrational": 11.110372533885968, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 18.274062256427623 + "total": 18.274062256427637 } } } diff --git a/tests/regression/baselines/ethyl-acetate/axes_off.json b/tests/regression/baselines/ethyl-acetate/axes_off.json index 4c28d3b..b501e82 100644 --- a/tests/regression/baselines/ethyl-acetate/axes_off.json +++ b/tests/regression/baselines/ethyl-acetate/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.8081103094129065, - "united_atom:Rovibrational": 68.85184585731292, - "residue:FTmat-Transvibrational": 77.33844477785695, - "residue:FTmat-Rovibrational": 56.03921993686319, + "united_atom:Transvibrational": 1.0264523212404142, + "united_atom:Rovibrational": 78.75362855419775, + "residue:FTmat-Transvibrational": 81.02749922723585, + "residue:FTmat-Rovibrational": 56.27644205458492, "united_atom:Conformational": 7.90098624365273, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 210.9386071250987 + "total": 224.98500840091168 } } } diff --git a/tests/regression/baselines/ethyl-acetate/combined_forcetorque_off.json b/tests/regression/baselines/ethyl-acetate/combined_forcetorque_off.json index 8c68cce..31ef492 100644 --- a/tests/regression/baselines/ethyl-acetate/combined_forcetorque_off.json +++ b/tests/regression/baselines/ethyl-acetate/combined_forcetorque_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 1.196367074472673, - "united_atom:Rovibrational": 82.36455154278131, - "residue:Transvibrational": 64.68750154134017, - "residue:Rovibrational": 58.903938937880085, + "united_atom:Transvibrational": 1.0945863942121685, + "united_atom:Rovibrational": 82.3645515427813, + "residue:Transvibrational": 68.30761200383697, + "residue:Rovibrational": 59.2965466793037, "united_atom:Conformational": 7.90098624365273, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 215.05334534012698 + "total": 218.96428286378688 } } } diff --git a/tests/regression/baselines/ethyl-acetate/frame_window.json b/tests/regression/baselines/ethyl-acetate/frame_window.json index be566d0..f89758d 100644 --- a/tests/regression/baselines/ethyl-acetate/frame_window.json +++ b/tests/regression/baselines/ethyl-acetate/frame_window.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 28.312711247966337, - "united_atom:Rovibrational": 51.99036142818903, - "residue:FTmat-Transvibrational": 67.80560626717748, - "residue:FTmat-Rovibrational": 55.1631201009248, + "united_atom:Transvibrational": 29.40579085610341, + "united_atom:Rovibrational": 51.990361428188855, + "residue:FTmat-Transvibrational": 67.03974115661572, + "residue:FTmat-Rovibrational": 55.06851959311436, "united_atom:Conformational": 8.635471458692102, "residue:Conformational": 0.0, "residue:Orientational": 3.8984476469128193 }, - "total": 215.80571814986257 + "total": 216.03833213962727 } } } diff --git a/tests/regression/baselines/ethyl-acetate/grouping_each.json b/tests/regression/baselines/ethyl-acetate/grouping_each.json index e8330e0..6fa62cf 100644 --- a/tests/regression/baselines/ethyl-acetate/grouping_each.json +++ b/tests/regression/baselines/ethyl-acetate/grouping_each.json @@ -3,14 +3,14 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.041680247513564334, - "residue:FTmat-Transvibrational": 13.339420001372439, + "united_atom:Rovibrational": 0.041680247513564424, + "residue:FTmat-Transvibrational": 13.339420001372433, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 13.381100248886003 + "total": 13.381100248885998 }, "1": { "components": { @@ -39,31 +39,31 @@ "3": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.08920089761061596, - "residue:FTmat-Transvibrational": 17.349320458476775, + "united_atom:Rovibrational": 0.08920089761061602, + "residue:FTmat-Transvibrational": 17.34932045847677, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 17.438521356087392 + "total": 17.43852135608739 }, "4": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.245873201826214, - "residue:FTmat-Transvibrational": 14.544753730547711, + "united_atom:Rovibrational": 0.2458732018262139, + "residue:FTmat-Transvibrational": 14.544753730547699, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 14.790626932373925 + "total": 14.790626932373913 }, "5": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.026788453489210204, + "united_atom:Rovibrational": 0.02678845348921013, "residue:FTmat-Transvibrational": 9.570910150584444, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, @@ -75,7 +75,7 @@ "6": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.052298040051129174, + "united_atom:Rovibrational": 0.05229804005112911, "residue:FTmat-Transvibrational": 12.801663361822174, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, @@ -87,38 +87,38 @@ "7": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.29162538377256375, - "residue:FTmat-Transvibrational": 16.40926078565228, + "united_atom:Rovibrational": 0.29162538377256336, + "residue:FTmat-Transvibrational": 16.40926078565227, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 16.70088616942484 + "total": 16.70088616942483 }, "8": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0469384299833255, - "residue:FTmat-Transvibrational": 10.172098915253201, + "residue:FTmat-Transvibrational": 10.172098915253212, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 10.219037345236528 + "total": 10.219037345236538 }, "9": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.2807736872545627, - "residue:FTmat-Transvibrational": 12.020836126353892, + "residue:FTmat-Transvibrational": 12.020836126353894, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 12.301609813608454 + "total": 12.301609813608456 } } } diff --git a/tests/regression/baselines/ethyl-acetate/selection_subset.json b/tests/regression/baselines/ethyl-acetate/selection_subset.json index 270dbbd..e8befd4 100644 --- a/tests/regression/baselines/ethyl-acetate/selection_subset.json +++ b/tests/regression/baselines/ethyl-acetate/selection_subset.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 1.196367074472673, - "united_atom:Rovibrational": 82.36455154278131, - "residue:FTmat-Transvibrational": 74.5939232239247, - "residue:FTmat-Rovibrational": 55.42964192531005, + "united_atom:Transvibrational": 1.0945863942121685, + "united_atom:Rovibrational": 82.3645515427813, + "residue:FTmat-Transvibrational": 79.3546113986704, + "residue:FTmat-Rovibrational": 55.58023277682395, "united_atom:Conformational": 7.90098624365273, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 221.48547001014148 + "total": 226.29496835614057 } } } diff --git a/tests/regression/baselines/methane/axes_off.json b/tests/regression/baselines/methane/axes_off.json index dddf93d..5eac433 100644 --- a/tests/regression/baselines/methane/axes_off.json +++ b/tests/regression/baselines/methane/axes_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.51619525142699, - "united_atom:Rovibrational": 34.692556166968025, + "united_atom:Transvibrational": 42.71309458819117, + "united_atom:Rovibrational": 34.49645268839667, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.20875141839502 + "total": 77.20954727658784 } } } diff --git a/tests/regression/baselines/methane/combined_forcetorque_off.json b/tests/regression/baselines/methane/combined_forcetorque_off.json index 318c30c..5b4ce51 100644 --- a/tests/regression/baselines/methane/combined_forcetorque_off.json +++ b/tests/regression/baselines/methane/combined_forcetorque_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.51619525142699, - "united_atom:Rovibrational": 34.651932322640015, + "united_atom:Transvibrational": 42.71309458819117, + "united_atom:Rovibrational": 34.44108294190893, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.168127574067 + "total": 77.1541775301001 } } } diff --git a/tests/regression/baselines/methane/frame_window.json b/tests/regression/baselines/methane/frame_window.json index 9a45dc9..99458e4 100644 --- a/tests/regression/baselines/methane/frame_window.json +++ b/tests/regression/baselines/methane/frame_window.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 40.70376001258969, - "united_atom:Rovibrational": 33.778792396823484, + "united_atom:Transvibrational": 40.546757804157515, + "united_atom:Rovibrational": 33.43627689514928, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 74.48255240941317 + "total": 73.98303469930678 } } } diff --git a/tests/regression/baselines/methane/grouping_each.json b/tests/regression/baselines/methane/grouping_each.json index 3b31963..949e996 100644 --- a/tests/regression/baselines/methane/grouping_each.json +++ b/tests/regression/baselines/methane/grouping_each.json @@ -2,8 +2,8 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 24.315699188266926, - "united_atom:Rovibrational": 21.0483901242056, + "united_atom:Transvibrational": 24.315699188266905, + "united_atom:Rovibrational": 21.04839012420562, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, @@ -11,84 +11,84 @@ }, "1": { "components": { - "united_atom:Transvibrational": 23.76608267046309, - "united_atom:Rovibrational": 16.769636839671296, + "united_atom:Transvibrational": 23.766082670463117, + "united_atom:Rovibrational": 16.769636839671318, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 40.535719510134385 + "total": 40.535719510134435 }, "2": { "components": { - "united_atom:Transvibrational": 24.833896219788347, - "united_atom:Rovibrational": 16.996392060962357, + "united_atom:Transvibrational": 24.83389621978833, + "united_atom:Rovibrational": 16.996392060962343, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 41.83028828075071 + "total": 41.83028828075067 }, "3": { "components": { - "united_atom:Transvibrational": 6.6723857079283215, - "united_atom:Rovibrational": 4.986376282798274, + "united_atom:Transvibrational": 6.672385707928316, + "united_atom:Rovibrational": 4.986376282798272, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 11.658761990726596 + "total": 11.658761990726589 }, "4": { "components": { "united_atom:Transvibrational": 6.880461178899526, - "united_atom:Rovibrational": 4.441585994100298, + "united_atom:Rovibrational": 4.441585994100293, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 11.322047172999824 + "total": 11.322047172999818 }, "5": { "components": { - "united_atom:Transvibrational": 15.473092273577388, + "united_atom:Transvibrational": 15.473092273577436, "united_atom:Rovibrational": 7.777083478334702, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 23.25017575191209 + "total": 23.25017575191214 }, "6": { "components": { - "united_atom:Transvibrational": 25.694168010993888, - "united_atom:Rovibrational": 6.731392483940261, + "united_atom:Transvibrational": 25.694168010993906, + "united_atom:Rovibrational": 6.731392483940259, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 32.425560494934146 + "total": 32.42556049493417 }, "7": { "components": { - "united_atom:Transvibrational": 10.533257828925997, - "united_atom:Rovibrational": 8.97563913301586, + "united_atom:Transvibrational": 10.533257828925988, + "united_atom:Rovibrational": 8.975639133015862, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 19.508896961941858 + "total": 19.50889696194185 }, "8": { "components": { - "united_atom:Transvibrational": 7.332978272264879, - "united_atom:Rovibrational": 3.0418502362906086, + "united_atom:Transvibrational": 7.332978272264892, + "united_atom:Rovibrational": 3.0418502362906055, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 10.374828508555488 + "total": 10.374828508555497 }, "9": { "components": { "united_atom:Transvibrational": 4.023932761002867, - "united_atom:Rovibrational": 8.289324383636089, + "united_atom:Rovibrational": 8.289324383636096, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 12.313257144638957 + "total": 12.313257144638964 } } } diff --git a/tests/regression/baselines/methane/selection_subset.json b/tests/regression/baselines/methane/selection_subset.json index 318c30c..5b4ce51 100644 --- a/tests/regression/baselines/methane/selection_subset.json +++ b/tests/regression/baselines/methane/selection_subset.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.51619525142699, - "united_atom:Rovibrational": 34.651932322640015, + "united_atom:Transvibrational": 42.71309458819117, + "united_atom:Rovibrational": 34.44108294190893, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.168127574067 + "total": 77.1541775301001 } } } diff --git a/tests/regression/baselines/methanol/axes_off.json b/tests/regression/baselines/methanol/axes_off.json index d16ce04..518b54e 100644 --- a/tests/regression/baselines/methanol/axes_off.json +++ b/tests/regression/baselines/methanol/axes_off.json @@ -3,14 +3,14 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 38.62138020563927, - "residue:FTmat-Transvibrational": 71.39139776743173, - "residue:FTmat-Rovibrational": 42.43745474015418, + "united_atom:Rovibrational": 40.470578424967975, + "residue:FTmat-Transvibrational": 81.39150587087775, + "residue:FTmat-Rovibrational": 39.65185616131401, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 152.45023271322518 + "total": 161.51394045715975 } } } diff --git a/tests/regression/baselines/methanol/combined_forcetorque_off.json b/tests/regression/baselines/methanol/combined_forcetorque_off.json index 634a9de..84e6fb2 100644 --- a/tests/regression/baselines/methanol/combined_forcetorque_off.json +++ b/tests/regression/baselines/methanol/combined_forcetorque_off.json @@ -3,14 +3,14 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 49.59060714158691, - "residue:Transvibrational": 62.34591927524234, - "residue:Rovibrational": 32.010073141644966, + "united_atom:Rovibrational": 49.59060714158679, + "residue:Transvibrational": 63.011170818927425, + "residue:Rovibrational": 31.631180680507523, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 143.94659955847422 + "total": 144.23295864102172 } } } diff --git a/tests/regression/baselines/methanol/frame_window.json b/tests/regression/baselines/methanol/frame_window.json index 41bd2a3..079f0cc 100644 --- a/tests/regression/baselines/methanol/frame_window.json +++ b/tests/regression/baselines/methanol/frame_window.json @@ -4,13 +4,13 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 34.6755419354061, - "residue:FTmat-Transvibrational": 61.225853411706915, - "residue:FTmat-Rovibrational": 29.74713345439499, + "residue:FTmat-Transvibrational": 63.22483760687048, + "residue:FTmat-Rovibrational": 29.43214053441657, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 125.64852880150801 + "total": 127.33252007669316 } } } diff --git a/tests/regression/baselines/methanol/grouping_each.json b/tests/regression/baselines/methanol/grouping_each.json index bba3b3c..8d3a25e 100644 --- a/tests/regression/baselines/methanol/grouping_each.json +++ b/tests/regression/baselines/methanol/grouping_each.json @@ -4,43 +4,43 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 3.6907058707318594, - "residue:FTmat-Transvibrational": 2.3780157804238655, + "residue:FTmat-Transvibrational": 2.37801578042395, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 6.068721651155725 + "total": 6.068721651155809 }, "1": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.527531744140127, - "residue:FTmat-Transvibrational": 6.542005999539831, + "residue:FTmat-Transvibrational": 6.54200599953984, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 7.069537743679958 + "total": 7.069537743679967 }, "2": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 1.6420992201948423, - "residue:FTmat-Transvibrational": 1.956061819377735, + "residue:FTmat-Transvibrational": 1.9560618193776211, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 3.5981610395725774 + "total": 3.5981610395724637 }, "3": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 1.09131345956036, - "residue:FTmat-Transvibrational": 0.00010873872941396156, + "residue:FTmat-Transvibrational": 0.00010873872941394453, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, @@ -52,73 +52,73 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 3.0175220560507166, - "residue:FTmat-Transvibrational": 0.039222512262787265, + "residue:FTmat-Transvibrational": 0.03922251226278259, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 3.056744568313504 + "total": 3.056744568313499 }, "5": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.7113434639378043, - "residue:FTmat-Transvibrational": 6.420669321384725, + "residue:FTmat-Transvibrational": 6.4206693213845005, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 7.132012785322529 + "total": 7.1320127853223045 }, "6": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.8814857352503516, - "residue:FTmat-Transvibrational": 0.0020168609040522737, + "united_atom:Rovibrational": 1.8814857352503533, + "residue:FTmat-Transvibrational": 0.002016860904052387, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 1.8835025961544039 + "total": 1.8835025961544056 }, "7": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.31891831875623067, - "residue:FTmat-Transvibrational": 0.22492845355007476, + "residue:FTmat-Transvibrational": 0.2249284535500741, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 0.5438467723063054 + "total": 0.5438467723063047 }, "8": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.3866864927610838, - "residue:FTmat-Transvibrational": 7.095998287788902, + "united_atom:Rovibrational": 1.3866864927610842, + "residue:FTmat-Transvibrational": 7.095998287789704, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 8.482684780549986 + "total": 8.482684780550787 }, "9": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.3408829290752051, - "residue:FTmat-Transvibrational": 0.0004316354724950617, + "residue:FTmat-Transvibrational": 0.0004316354724951205, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 0.3413145645477002 + "total": 0.34131456454770026 } } } diff --git a/tests/regression/baselines/methanol/selection_subset.json b/tests/regression/baselines/methanol/selection_subset.json index 293daec..aa37195 100644 --- a/tests/regression/baselines/methanol/selection_subset.json +++ b/tests/regression/baselines/methanol/selection_subset.json @@ -3,14 +3,14 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 49.59060714158691, - "residue:FTmat-Transvibrational": 74.80122215540344, - "residue:FTmat-Rovibrational": 27.55539097066781, + "united_atom:Rovibrational": 49.59060714158679, + "residue:FTmat-Transvibrational": 78.60873072810506, + "residue:FTmat-Rovibrational": 27.28134724177411, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 151.94722026765817 + "total": 155.48068511146596 } } } diff --git a/tests/regression/baselines/octonol/axes_off.json b/tests/regression/baselines/octonol/axes_off.json index bc391e6..3ac5527 100644 --- a/tests/regression/baselines/octonol/axes_off.json +++ b/tests/regression/baselines/octonol/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.2907129992470817, - "united_atom:Rovibrational": 16.39249280495534, - "residue:FTmat-Transvibrational": 83.57043751308888, - "residue:FTmat-Rovibrational": 58.87291960143169, + "united_atom:Transvibrational": 0.3946170181442213, + "united_atom:Rovibrational": 15.964551734192693, + "residue:FTmat-Transvibrational": 88.89652899239388, + "residue:FTmat-Rovibrational": 59.284611948411424, "united_atom:Conformational": 16.83949354267619, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 201.75720638000655 + "total": 207.17095315442577 } } } diff --git a/tests/regression/baselines/octonol/combined_forcetorque_off.json b/tests/regression/baselines/octonol/combined_forcetorque_off.json index 920589a..94f8b1a 100644 --- a/tests/regression/baselines/octonol/combined_forcetorque_off.json +++ b/tests/regression/baselines/octonol/combined_forcetorque_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.34382967782781193, - "united_atom:Rovibrational": 19.154228264604278, - "residue:Transvibrational": 74.72816183790984, - "residue:Rovibrational": 60.84390144550801, + "united_atom:Transvibrational": 0.35379238473384655, + "united_atom:Rovibrational": 19.154228264604267, + "residue:Transvibrational": 73.4888773906637, + "residue:Rovibrational": 61.888014555961526, "united_atom:Conformational": 16.83949354267619, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 197.70076468713353 + "total": 197.5155560572469 } } } diff --git a/tests/regression/baselines/octonol/frame_window.json b/tests/regression/baselines/octonol/frame_window.json index 5c07dcc..f36623a 100644 --- a/tests/regression/baselines/octonol/frame_window.json +++ b/tests/regression/baselines/octonol/frame_window.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 65.86600728016141, - "united_atom:Rovibrational": 162.26463085986236, - "residue:FTmat-Transvibrational": 74.84326467422125, - "residue:FTmat-Rovibrational": 60.95710412746361, + "united_atom:Transvibrational": 70.87271844699075, + "united_atom:Rovibrational": 162.26463085986254, + "residue:FTmat-Transvibrational": 74.64608750357672, + "residue:FTmat-Rovibrational": 60.91083610153494, "united_atom:Conformational": 16.651144380045313, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 406.37330124036134 + "total": 411.1365672106176 } } } diff --git a/tests/regression/baselines/octonol/grouping_each.json b/tests/regression/baselines/octonol/grouping_each.json index b480174..dc2c905 100644 --- a/tests/regression/baselines/octonol/grouping_each.json +++ b/tests/regression/baselines/octonol/grouping_each.json @@ -3,50 +3,50 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 6.942013165337579e-05, - "residue:FTmat-Transvibrational": 18.33494873681406, + "united_atom:Rovibrational": 6.942013165337589e-05, + "residue:FTmat-Transvibrational": 18.334948736814024, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 18.33501815694571 + "total": 18.335018156945676 }, "1": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00013794104464519378, - "residue:FTmat-Transvibrational": 14.571797812433102, + "residue:FTmat-Transvibrational": 14.571797812433093, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 45.863560270951176 }, - "total": 60.43549602442892 + "total": 60.435496024428915 }, "2": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.0007753303955700146, - "residue:FTmat-Transvibrational": 11.64466865126831, + "united_atom:Rovibrational": 0.000775330395570017, + "residue:FTmat-Transvibrational": 11.644668651268317, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 11.64544398166388 + "total": 11.645443981663886 }, "3": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 0.0031285818933102145, - "residue:FTmat-Transvibrational": 21.24135891910478, + "united_atom:Rovibrational": 0.0031285818933102097, + "residue:FTmat-Transvibrational": 21.241358919104748, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 21.24448750099809 + "total": 21.24448750099806 }, "4": { "components": { @@ -64,37 +64,37 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.005775850934008876, - "residue:FTmat-Transvibrational": 7.615636453348747, + "residue:FTmat-Transvibrational": 7.615636453348772, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 7.621412304282756 + "total": 7.621412304282781 }, "6": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00028812747686091, - "residue:FTmat-Transvibrational": 16.555914111511576, + "residue:FTmat-Transvibrational": 16.555914111511562, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 16.556202238988437 + "total": 16.556202238988423 }, "7": { "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0013568745282136598, - "residue:FTmat-Transvibrational": 15.71067757186967, + "residue:FTmat-Transvibrational": 15.710677571869644, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 15.712034446397883 + "total": 15.712034446397857 }, "8": { "components": { @@ -112,13 +112,13 @@ "components": { "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.00015446787843376823, - "residue:FTmat-Transvibrational": 20.97761266375896, + "residue:FTmat-Transvibrational": 20.977612663758993, "residue:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 45.863560270951176 }, - "total": 66.84132740258858 + "total": 66.8413274025886 } } } diff --git a/tests/regression/baselines/octonol/selection_subset.json b/tests/regression/baselines/octonol/selection_subset.json index 5f9d18f..b3c6cf8 100644 --- a/tests/regression/baselines/octonol/selection_subset.json +++ b/tests/regression/baselines/octonol/selection_subset.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.34382967782781193, - "united_atom:Rovibrational": 19.154228264604278, - "residue:FTmat-Transvibrational": 83.17889385114952, - "residue:FTmat-Rovibrational": 57.480841206687685, + "united_atom:Transvibrational": 0.35379238473384655, + "united_atom:Rovibrational": 19.154228264604267, + "residue:FTmat-Transvibrational": 85.63275438200148, + "residue:FTmat-Rovibrational": 57.14905396128441, "united_atom:Conformational": 16.83949354267619, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 202.78843646155286 + "total": 204.92047245390756 } } } diff --git a/tests/regression/baselines/water/axes_off.json b/tests/regression/baselines/water/axes_off.json index 9b798bd..855b3e0 100644 --- a/tests/regression/baselines/water/axes_off.json +++ b/tests/regression/baselines/water/axes_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 51.22145722965398, - "united_atom:Rovibrational": 17.307840626636324, + "united_atom:Transvibrational": 50.29463976726311, + "united_atom:Rovibrational": 17.75547865377748, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.5292978562903 + "total": 68.0501184210406 } } } diff --git a/tests/regression/baselines/water/combined_forcetorque_off.json b/tests/regression/baselines/water/combined_forcetorque_off.json index 2e63256..e3ff82d 100644 --- a/tests/regression/baselines/water/combined_forcetorque_off.json +++ b/tests/regression/baselines/water/combined_forcetorque_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 51.22145722965398, - "united_atom:Rovibrational": 17.232634718413053, + "united_atom:Transvibrational": 50.29463976726311, + "united_atom:Rovibrational": 17.795473940796423, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.45409194806703 + "total": 68.09011370805953 } } } diff --git a/tests/regression/baselines/water/frame_window.json b/tests/regression/baselines/water/frame_window.json index c6ae550..07b9d67 100644 --- a/tests/regression/baselines/water/frame_window.json +++ b/tests/regression/baselines/water/frame_window.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 46.684099714230925, - "united_atom:Rovibrational": 17.694014405444744, + "united_atom:Transvibrational": 46.294728006800256, + "united_atom:Rovibrational": 17.298848645671537, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 64.37811411967567 + "total": 63.593576652471796 } } } diff --git a/tests/regression/baselines/water/grouping_each.json b/tests/regression/baselines/water/grouping_each.json index acccd86..f14a07e 100644 --- a/tests/regression/baselines/water/grouping_each.json +++ b/tests/regression/baselines/water/grouping_each.json @@ -2,44 +2,44 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 14.945907953805552, - "united_atom:Rovibrational": 1.8947243953648254, + "united_atom:Transvibrational": 14.945907953805547, + "united_atom:Rovibrational": 1.894724395364822, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 16.840632349170377 + "total": 16.84063234917037 }, "1": { "components": { - "united_atom:Transvibrational": 8.111522208287779, - "united_atom:Rovibrational": 0.9607747968334215, + "united_atom:Transvibrational": 8.111522208287775, + "united_atom:Rovibrational": 0.9607747968334228, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 9.0722970051212 + "total": 9.072297005121198 }, "2": { "components": { - "united_atom:Transvibrational": 15.79497347968759, - "united_atom:Rovibrational": 4.606072530590255, + "united_atom:Transvibrational": 15.794973479687595, + "united_atom:Rovibrational": 4.606072530590256, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 20.401046010277845 + "total": 20.401046010277852 }, "3": { "components": { - "united_atom:Transvibrational": 9.462487265119448, + "united_atom:Transvibrational": 9.462487265119444, "united_atom:Rovibrational": 1.6509513986984767, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 11.113438663817924 + "total": 11.11343866381792 }, "4": { "components": { "united_atom:Transvibrational": 16.254161245740693, - "united_atom:Rovibrational": 1.367597374110767, + "united_atom:Rovibrational": 1.3675973741107645, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, @@ -47,34 +47,34 @@ }, "5": { "components": { - "united_atom:Transvibrational": 11.57779876203329, - "united_atom:Rovibrational": 7.351163568004953, + "united_atom:Transvibrational": 11.577798762033282, + "united_atom:Rovibrational": 7.3511635680049485, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 18.928962330038242 + "total": 18.92896233003823 }, "6": { "components": { - "united_atom:Transvibrational": 10.172061262201801, - "united_atom:Rovibrational": 3.671537296888502, + "united_atom:Transvibrational": 10.172061262201797, + "united_atom:Rovibrational": 3.6715372968885003, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 13.843598559090303 + "total": 13.843598559090298 }, "7": { "components": { - "united_atom:Transvibrational": 13.49951045186194, + "united_atom:Transvibrational": 13.499510451861937, "united_atom:Rovibrational": 1.7029491215274863, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 15.202459573389428 + "total": 15.202459573389424 }, "8": { "components": { - "united_atom:Transvibrational": 16.597759171924583, + "united_atom:Transvibrational": 16.59775917192458, "united_atom:Rovibrational": 1.6190289365617598, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 @@ -83,12 +83,12 @@ }, "9": { "components": { - "united_atom:Transvibrational": 13.731375187064538, + "united_atom:Transvibrational": 13.731375187064533, "united_atom:Rovibrational": 5.650620990305761, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 19.381996177370297 + "total": 19.381996177370294 } } } diff --git a/tests/regression/baselines/water/selection_subset.json b/tests/regression/baselines/water/selection_subset.json index 2e63256..e3ff82d 100644 --- a/tests/regression/baselines/water/selection_subset.json +++ b/tests/regression/baselines/water/selection_subset.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 51.22145722965398, - "united_atom:Rovibrational": 17.232634718413053, + "united_atom:Transvibrational": 50.29463976726311, + "united_atom:Rovibrational": 17.795473940796423, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.45409194806703 + "total": 68.09011370805953 } } } diff --git a/tests/regression/baselines/water/water_off.json b/tests/regression/baselines/water/water_off.json index 2e63256..e3ff82d 100644 --- a/tests/regression/baselines/water/water_off.json +++ b/tests/regression/baselines/water/water_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 51.22145722965398, - "united_atom:Rovibrational": 17.232634718413053, + "united_atom:Transvibrational": 50.29463976726311, + "united_atom:Rovibrational": 17.795473940796423, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.45409194806703 + "total": 68.09011370805953 } } } From 89a4bcb70fa9bab7d4ff919fcba8a4c5646f2a75 Mon Sep 17 00:00:00 2001 From: harryswift01 Date: Wed, 7 Oct 2026 11:56:50 +0100 Subject: [PATCH 4/9] ci(workflows): add pre-release of MDA 2.11 --- .github/workflows/pr.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index fcc0ea8..5b459cd 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -89,6 +89,25 @@ jobs: python -m pip install --upgrade pip python -m pip install -e .[testing] + - name: Install MDA 2.11 pre-release + run: | + git clone https://github.com/MDAnalysis/mdanalysis.git "$RUNNER_TEMP/mdanalysis" + git -C "$RUNNER_TEMP/mdanalysis" checkout f765ecd77c8d51d79bec87c9780a0fab80c7d43c + python -m pip install "$RUNNER_TEMP/mdanalysis/package" + + - name: Verify MDA uses eigh in principal_axes + run: | + python - <<'EOF' + import inspect + import MDAnalysis + from MDAnalysis.core import topologyattrs + + print("MDAnalysis", MDAnalysis.__version__) + assert "np.linalg.eigh(atomgroup.moment_of_inertia" in inspect.getsource( + topologyattrs + ) + EOF + - name: Run fast regression tests run: | python -m pytest tests/regression \ From 73175f156179e722838e650490a095152b669b91 Mon Sep 17 00:00:00 2001 From: harryswift01 Date: Wed, 7 Oct 2026 12:28:49 +0100 Subject: [PATCH 5/9] ci(workflows): remove MDA 2.11 pre-release step --- .github/workflows/pr.yaml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 5b459cd..fcc0ea8 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -89,25 +89,6 @@ jobs: python -m pip install --upgrade pip python -m pip install -e .[testing] - - name: Install MDA 2.11 pre-release - run: | - git clone https://github.com/MDAnalysis/mdanalysis.git "$RUNNER_TEMP/mdanalysis" - git -C "$RUNNER_TEMP/mdanalysis" checkout f765ecd77c8d51d79bec87c9780a0fab80c7d43c - python -m pip install "$RUNNER_TEMP/mdanalysis/package" - - - name: Verify MDA uses eigh in principal_axes - run: | - python - <<'EOF' - import inspect - import MDAnalysis - from MDAnalysis.core import topologyattrs - - print("MDAnalysis", MDAnalysis.__version__) - assert "np.linalg.eigh(atomgroup.moment_of_inertia" in inspect.getsource( - topologyattrs - ) - EOF - - name: Run fast regression tests run: | python -m pytest tests/regression \ From 1cd1784b56c6008cd0b336c7c428f05c241cc21d Mon Sep 17 00:00:00 2001 From: harryswift01 Date: Wed, 7 Oct 2026 12:29:20 +0100 Subject: [PATCH 6/9] tests(regression): update baselines with CodeEntropy dependencies --- .../baselines/benzaldehyde/axes_off.json | 10 ++-- .../baselines/benzene/axes_off.json | 10 ++-- .../baselines/cyclohexane/axes_off.json | 10 ++-- tests/regression/baselines/dna/axes_off.json | 16 +++--- .../dna/combined_forcetorque_off.json | 14 +++--- .../baselines/dna/frame_window.json | 10 ++-- .../baselines/dna/grouping_each.json | 8 +-- .../baselines/dna/selection_subset.json | 8 +-- .../baselines/ethyl-acetate/axes_off.json | 10 ++-- .../baselines/methane/axes_off.json | 6 +-- .../methane/combined_forcetorque_off.json | 6 +-- .../baselines/methane/frame_window.json | 6 +-- .../baselines/methane/grouping_each.json | 50 +++++++++---------- .../baselines/methane/selection_subset.json | 6 +-- .../baselines/methanol/axes_off.json | 8 +-- .../baselines/octonol/axes_off.json | 10 ++-- .../regression/baselines/water/axes_off.json | 6 +-- .../water/combined_forcetorque_off.json | 6 +-- .../baselines/water/frame_window.json | 6 +-- .../baselines/water/grouping_each.json | 44 ++++++++-------- .../baselines/water/selection_subset.json | 6 +-- .../regression/baselines/water/water_off.json | 6 +-- 22 files changed, 131 insertions(+), 131 deletions(-) diff --git a/tests/regression/baselines/benzaldehyde/axes_off.json b/tests/regression/baselines/benzaldehyde/axes_off.json index 0d34d6c..f170b86 100644 --- a/tests/regression/baselines/benzaldehyde/axes_off.json +++ b/tests/regression/baselines/benzaldehyde/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.059408867580823616, - "united_atom:Rovibrational": 39.36932344859785, - "residue:FTmat-Transvibrational": 81.48352353795262, - "residue:FTmat-Rovibrational": 63.04898043265405, + "united_atom:Transvibrational": 0.08982962903796153, + "united_atom:Rovibrational": 32.16018134884084, + "residue:FTmat-Transvibrational": 88.76716666950036, + "residue:FTmat-Rovibrational": 61.610362676721316, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 204.44280777940068 + "total": 203.10911181671582 } } } diff --git a/tests/regression/baselines/benzene/axes_off.json b/tests/regression/baselines/benzene/axes_off.json index 109194e..cb51ef5 100644 --- a/tests/regression/baselines/benzene/axes_off.json +++ b/tests/regression/baselines/benzene/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.16163858692459776, - "united_atom:Rovibrational": 44.48477691495675, - "residue:FTmat-Transvibrational": 81.11811255841327, - "residue:FTmat-Rovibrational": 47.03606119622739, + "united_atom:Transvibrational": 0.17824017761231412, + "united_atom:Rovibrational": 37.12706256545505, + "residue:FTmat-Transvibrational": 76.82006376419386, + "residue:FTmat-Rovibrational": 47.1716631341293, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 172.80058925652202 + "total": 161.2970296413905 } } } diff --git a/tests/regression/baselines/cyclohexane/axes_off.json b/tests/regression/baselines/cyclohexane/axes_off.json index 2d6038a..5f736e3 100644 --- a/tests/regression/baselines/cyclohexane/axes_off.json +++ b/tests/regression/baselines/cyclohexane/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.8231608488813442, - "united_atom:Rovibrational": 24.640396903026634, - "residue:FTmat-Transvibrational": 84.05755363684698, - "residue:FTmat-Rovibrational": 61.73316378799838, + "united_atom:Transvibrational": 0.6825851535582976, + "united_atom:Rovibrational": 22.06935198899352, + "residue:FTmat-Transvibrational": 85.12666483486653, + "residue:FTmat-Rovibrational": 61.14255319533253, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 171.2542751767533 + "total": 169.0211551727509 } } } diff --git a/tests/regression/baselines/dna/axes_off.json b/tests/regression/baselines/dna/axes_off.json index 6a9dab7..eac416c 100644 --- a/tests/regression/baselines/dna/axes_off.json +++ b/tests/regression/baselines/dna/axes_off.json @@ -3,30 +3,30 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.2910746542567035, + "united_atom:Rovibrational": 1.226904487838527, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 26.68254629775581, - "polymer:FTmat-Transvibrational": 48.50274293414517, + "residue:Rovibrational": 27.457107473323198, + "polymer:FTmat-Transvibrational": 48.6202697076227, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 10.584542990557836, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 91.81981221334323 + "total": 92.64772999596997 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.9680216598831306, + "united_atom:Rovibrational": 1.7972774672527931, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 24.831990780037884, - "polymer:FTmat-Transvibrational": 57.35678551116436, + "residue:Rovibrational": 25.287669468441052, + "polymer:FTmat-Transvibrational": 60.47397935339152, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 5.292271495278918, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 94.207974782992 + "total": 97.61010312099198 } } } diff --git a/tests/regression/baselines/dna/combined_forcetorque_off.json b/tests/regression/baselines/dna/combined_forcetorque_off.json index 339a163..9a35fa1 100644 --- a/tests/regression/baselines/dna/combined_forcetorque_off.json +++ b/tests/regression/baselines/dna/combined_forcetorque_off.json @@ -5,14 +5,14 @@ "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 3.3768006840852487, - "polymer:Transvibrational": 21.182662154911913, - "polymer:Rovibrational": 12.837576042626926, + "residue:Rovibrational": 3.376800684085251, + "polymer:Transvibrational": 21.18266215491188, + "polymer:Rovibrational": 12.837576042626923, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 42.15810489726393 + "total": 42.1581048972639 }, "1": { "components": { @@ -20,13 +20,13 @@ "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, "residue:Rovibrational": 2.386320108254459, - "polymer:Transvibrational": 16.607667396609127, - "polymer:Rovibrational": 12.304363914795598, + "polymer:Transvibrational": 16.607667396609116, + "polymer:Rovibrational": 12.304363914795594, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 36.075721033946394 + "total": 36.07572103394638 } } } diff --git a/tests/regression/baselines/dna/frame_window.json b/tests/regression/baselines/dna/frame_window.json index 8281138..5e58951 100644 --- a/tests/regression/baselines/dna/frame_window.json +++ b/tests/regression/baselines/dna/frame_window.json @@ -5,14 +5,14 @@ "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 1.5821720528374947, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 26.60656641113743, - "polymer:FTmat-Transvibrational": 48.50274293414517, + "residue:Rovibrational": 26.544003448939662, + "polymer:FTmat-Transvibrational": 48.6202697076227, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 10.584542990557836, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 92.03492972530563 + "total": 92.0898935365854 }, "1": { "components": { @@ -20,13 +20,13 @@ "united_atom:Rovibrational": 2.527793636620802, "residue:Transvibrational": 0.0, "residue:Rovibrational": 24.4275653595082, - "polymer:FTmat-Transvibrational": 57.35678551116436, + "polymer:FTmat-Transvibrational": 60.47397935339152, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 5.292271495278918, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 94.3633213392 + "total": 97.48051518142715 } } } diff --git a/tests/regression/baselines/dna/grouping_each.json b/tests/regression/baselines/dna/grouping_each.json index 1e29fb1..6fe4d73 100644 --- a/tests/regression/baselines/dna/grouping_each.json +++ b/tests/regression/baselines/dna/grouping_each.json @@ -5,8 +5,8 @@ "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 3.3768006840852487, - "polymer:FTmat-Transvibrational": 12.341104347192614, + "residue:Rovibrational": 3.376800684085251, + "polymer:FTmat-Transvibrational": 12.341104347192612, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, @@ -20,13 +20,13 @@ "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, "residue:Rovibrational": 2.386320108254459, - "polymer:FTmat-Transvibrational": 11.110372533885968, + "polymer:FTmat-Transvibrational": 11.110372533885963, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 18.274062256427637 + "total": 18.27406225642763 } } } diff --git a/tests/regression/baselines/dna/selection_subset.json b/tests/regression/baselines/dna/selection_subset.json index 1e29fb1..6fe4d73 100644 --- a/tests/regression/baselines/dna/selection_subset.json +++ b/tests/regression/baselines/dna/selection_subset.json @@ -5,8 +5,8 @@ "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 3.3768006840852487, - "polymer:FTmat-Transvibrational": 12.341104347192614, + "residue:Rovibrational": 3.376800684085251, + "polymer:FTmat-Transvibrational": 12.341104347192612, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, @@ -20,13 +20,13 @@ "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, "residue:Rovibrational": 2.386320108254459, - "polymer:FTmat-Transvibrational": 11.110372533885968, + "polymer:FTmat-Transvibrational": 11.110372533885963, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 18.274062256427637 + "total": 18.27406225642763 } } } diff --git a/tests/regression/baselines/ethyl-acetate/axes_off.json b/tests/regression/baselines/ethyl-acetate/axes_off.json index b501e82..61ea5ae 100644 --- a/tests/regression/baselines/ethyl-acetate/axes_off.json +++ b/tests/regression/baselines/ethyl-acetate/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 1.0264523212404142, - "united_atom:Rovibrational": 78.75362855419775, - "residue:FTmat-Transvibrational": 81.02749922723585, - "residue:FTmat-Rovibrational": 56.27644205458492, + "united_atom:Transvibrational": 0.8081103094129074, + "united_atom:Rovibrational": 68.85184585731308, + "residue:FTmat-Transvibrational": 77.33844477785695, + "residue:FTmat-Rovibrational": 56.03921993686319, "united_atom:Conformational": 7.90098624365273, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 224.98500840091168 + "total": 210.93860712509888 } } } diff --git a/tests/regression/baselines/methane/axes_off.json b/tests/regression/baselines/methane/axes_off.json index 5eac433..dddf93d 100644 --- a/tests/regression/baselines/methane/axes_off.json +++ b/tests/regression/baselines/methane/axes_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.71309458819117, - "united_atom:Rovibrational": 34.49645268839667, + "united_atom:Transvibrational": 42.51619525142699, + "united_atom:Rovibrational": 34.692556166968025, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.20954727658784 + "total": 77.20875141839502 } } } diff --git a/tests/regression/baselines/methane/combined_forcetorque_off.json b/tests/regression/baselines/methane/combined_forcetorque_off.json index 5b4ce51..a279f83 100644 --- a/tests/regression/baselines/methane/combined_forcetorque_off.json +++ b/tests/regression/baselines/methane/combined_forcetorque_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.71309458819117, - "united_atom:Rovibrational": 34.44108294190893, + "united_atom:Transvibrational": 42.51619525142699, + "united_atom:Rovibrational": 34.65193232264001, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.1541775301001 + "total": 77.168127574067 } } } diff --git a/tests/regression/baselines/methane/frame_window.json b/tests/regression/baselines/methane/frame_window.json index 99458e4..07800c3 100644 --- a/tests/regression/baselines/methane/frame_window.json +++ b/tests/regression/baselines/methane/frame_window.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 40.546757804157515, - "united_atom:Rovibrational": 33.43627689514928, + "united_atom:Transvibrational": 40.70376001258969, + "united_atom:Rovibrational": 33.77879239682349, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 73.98303469930678 + "total": 74.48255240941319 } } } diff --git a/tests/regression/baselines/methane/grouping_each.json b/tests/regression/baselines/methane/grouping_each.json index 949e996..81452c9 100644 --- a/tests/regression/baselines/methane/grouping_each.json +++ b/tests/regression/baselines/methane/grouping_each.json @@ -2,8 +2,8 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 24.315699188266905, - "united_atom:Rovibrational": 21.04839012420562, + "united_atom:Transvibrational": 24.315699188266926, + "united_atom:Rovibrational": 21.048390124205604, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, @@ -11,84 +11,84 @@ }, "1": { "components": { - "united_atom:Transvibrational": 23.766082670463117, - "united_atom:Rovibrational": 16.769636839671318, + "united_atom:Transvibrational": 23.766082670463092, + "united_atom:Rovibrational": 16.769636839671296, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 40.535719510134435 + "total": 40.535719510134385 }, "2": { "components": { - "united_atom:Transvibrational": 24.83389621978833, - "united_atom:Rovibrational": 16.996392060962343, + "united_atom:Transvibrational": 24.833896219788347, + "united_atom:Rovibrational": 16.996392060962357, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 41.83028828075067 + "total": 41.83028828075071 }, "3": { "components": { - "united_atom:Transvibrational": 6.672385707928316, - "united_atom:Rovibrational": 4.986376282798272, + "united_atom:Transvibrational": 6.672385707928322, + "united_atom:Rovibrational": 4.986376282798274, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 11.658761990726589 + "total": 11.658761990726596 }, "4": { "components": { "united_atom:Transvibrational": 6.880461178899526, - "united_atom:Rovibrational": 4.441585994100293, + "united_atom:Rovibrational": 4.441585994100297, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 11.322047172999818 + "total": 11.322047172999824 }, "5": { "components": { - "united_atom:Transvibrational": 15.473092273577436, + "united_atom:Transvibrational": 15.473092273577388, "united_atom:Rovibrational": 7.777083478334702, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 23.25017575191214 + "total": 23.25017575191209 }, "6": { "components": { - "united_atom:Transvibrational": 25.694168010993906, + "united_atom:Transvibrational": 25.694168010993888, "united_atom:Rovibrational": 6.731392483940259, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 32.42556049493417 + "total": 32.425560494934146 }, "7": { "components": { - "united_atom:Transvibrational": 10.533257828925988, - "united_atom:Rovibrational": 8.975639133015862, + "united_atom:Transvibrational": 10.533257828925997, + "united_atom:Rovibrational": 8.975639133015859, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 19.50889696194185 + "total": 19.508896961941858 }, "8": { "components": { - "united_atom:Transvibrational": 7.332978272264892, - "united_atom:Rovibrational": 3.0418502362906055, + "united_atom:Transvibrational": 7.332978272264879, + "united_atom:Rovibrational": 3.0418502362906086, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 10.374828508555497 + "total": 10.374828508555488 }, "9": { "components": { "united_atom:Transvibrational": 4.023932761002867, - "united_atom:Rovibrational": 8.289324383636096, + "united_atom:Rovibrational": 8.289324383636089, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 12.313257144638964 + "total": 12.313257144638957 } } } diff --git a/tests/regression/baselines/methane/selection_subset.json b/tests/regression/baselines/methane/selection_subset.json index 5b4ce51..a279f83 100644 --- a/tests/regression/baselines/methane/selection_subset.json +++ b/tests/regression/baselines/methane/selection_subset.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.71309458819117, - "united_atom:Rovibrational": 34.44108294190893, + "united_atom:Transvibrational": 42.51619525142699, + "united_atom:Rovibrational": 34.65193232264001, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.1541775301001 + "total": 77.168127574067 } } } diff --git a/tests/regression/baselines/methanol/axes_off.json b/tests/regression/baselines/methanol/axes_off.json index 518b54e..13f0943 100644 --- a/tests/regression/baselines/methanol/axes_off.json +++ b/tests/regression/baselines/methanol/axes_off.json @@ -3,14 +3,14 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 40.470578424967975, - "residue:FTmat-Transvibrational": 81.39150587087775, - "residue:FTmat-Rovibrational": 39.65185616131401, + "united_atom:Rovibrational": 38.62138020563923, + "residue:FTmat-Transvibrational": 71.3913977674318, + "residue:FTmat-Rovibrational": 42.43745474015418, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 161.51394045715975 + "total": 152.4502327132252 } } } diff --git a/tests/regression/baselines/octonol/axes_off.json b/tests/regression/baselines/octonol/axes_off.json index 3ac5527..e466ed1 100644 --- a/tests/regression/baselines/octonol/axes_off.json +++ b/tests/regression/baselines/octonol/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.3946170181442213, - "united_atom:Rovibrational": 15.964551734192693, - "residue:FTmat-Transvibrational": 88.89652899239388, - "residue:FTmat-Rovibrational": 59.284611948411424, + "united_atom:Transvibrational": 0.29071299924708216, + "united_atom:Rovibrational": 16.392492804955697, + "residue:FTmat-Transvibrational": 83.57043751308888, + "residue:FTmat-Rovibrational": 58.87291960143169, "united_atom:Conformational": 16.83949354267619, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 207.17095315442577 + "total": 201.7572063800069 } } } diff --git a/tests/regression/baselines/water/axes_off.json b/tests/regression/baselines/water/axes_off.json index 855b3e0..7ee95f7 100644 --- a/tests/regression/baselines/water/axes_off.json +++ b/tests/regression/baselines/water/axes_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 50.29463976726311, - "united_atom:Rovibrational": 17.75547865377748, + "united_atom:Transvibrational": 51.22145722965398, + "united_atom:Rovibrational": 17.307840626636317, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.0501184210406 + "total": 68.5292978562903 } } } diff --git a/tests/regression/baselines/water/combined_forcetorque_off.json b/tests/regression/baselines/water/combined_forcetorque_off.json index e3ff82d..2e63256 100644 --- a/tests/regression/baselines/water/combined_forcetorque_off.json +++ b/tests/regression/baselines/water/combined_forcetorque_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 50.29463976726311, - "united_atom:Rovibrational": 17.795473940796423, + "united_atom:Transvibrational": 51.22145722965398, + "united_atom:Rovibrational": 17.232634718413053, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.09011370805953 + "total": 68.45409194806703 } } } diff --git a/tests/regression/baselines/water/frame_window.json b/tests/regression/baselines/water/frame_window.json index 07b9d67..bf0e5c8 100644 --- a/tests/regression/baselines/water/frame_window.json +++ b/tests/regression/baselines/water/frame_window.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 46.294728006800256, - "united_atom:Rovibrational": 17.298848645671537, + "united_atom:Transvibrational": 46.684099714230925, + "united_atom:Rovibrational": 17.69401440544474, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 63.593576652471796 + "total": 64.37811411967567 } } } diff --git a/tests/regression/baselines/water/grouping_each.json b/tests/regression/baselines/water/grouping_each.json index f14a07e..55810cb 100644 --- a/tests/regression/baselines/water/grouping_each.json +++ b/tests/regression/baselines/water/grouping_each.json @@ -2,44 +2,44 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 14.945907953805547, - "united_atom:Rovibrational": 1.894724395364822, + "united_atom:Transvibrational": 14.94590795380555, + "united_atom:Rovibrational": 1.894724395364824, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 16.84063234917037 + "total": 16.840632349170374 }, "1": { "components": { - "united_atom:Transvibrational": 8.111522208287775, + "united_atom:Transvibrational": 8.111522208287777, "united_atom:Rovibrational": 0.9607747968334228, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 9.072297005121198 + "total": 9.0722970051212 }, "2": { "components": { "united_atom:Transvibrational": 15.794973479687595, - "united_atom:Rovibrational": 4.606072530590256, + "united_atom:Rovibrational": 4.606072530590255, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 20.401046010277852 + "total": 20.40104601027785 }, "3": { "components": { - "united_atom:Transvibrational": 9.462487265119444, - "united_atom:Rovibrational": 1.6509513986984767, + "united_atom:Transvibrational": 9.462487265119448, + "united_atom:Rovibrational": 1.650951398698477, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 11.11343866381792 + "total": 11.113438663817924 }, "4": { "components": { "united_atom:Transvibrational": 16.254161245740693, - "united_atom:Rovibrational": 1.3675973741107645, + "united_atom:Rovibrational": 1.367597374110767, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, @@ -47,34 +47,34 @@ }, "5": { "components": { - "united_atom:Transvibrational": 11.577798762033282, - "united_atom:Rovibrational": 7.3511635680049485, + "united_atom:Transvibrational": 11.57779876203329, + "united_atom:Rovibrational": 7.351163568004953, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 18.92896233003823 + "total": 18.928962330038242 }, "6": { "components": { - "united_atom:Transvibrational": 10.172061262201797, - "united_atom:Rovibrational": 3.6715372968885003, + "united_atom:Transvibrational": 10.172061262201801, + "united_atom:Rovibrational": 3.671537296888502, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 13.843598559090298 + "total": 13.843598559090303 }, "7": { "components": { - "united_atom:Transvibrational": 13.499510451861937, + "united_atom:Transvibrational": 13.49951045186194, "united_atom:Rovibrational": 1.7029491215274863, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 15.202459573389424 + "total": 15.202459573389428 }, "8": { "components": { - "united_atom:Transvibrational": 16.59775917192458, + "united_atom:Transvibrational": 16.597759171924583, "united_atom:Rovibrational": 1.6190289365617598, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 @@ -83,12 +83,12 @@ }, "9": { "components": { - "united_atom:Transvibrational": 13.731375187064533, + "united_atom:Transvibrational": 13.731375187064538, "united_atom:Rovibrational": 5.650620990305761, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 19.381996177370294 + "total": 19.381996177370297 } } } diff --git a/tests/regression/baselines/water/selection_subset.json b/tests/regression/baselines/water/selection_subset.json index e3ff82d..2e63256 100644 --- a/tests/regression/baselines/water/selection_subset.json +++ b/tests/regression/baselines/water/selection_subset.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 50.29463976726311, - "united_atom:Rovibrational": 17.795473940796423, + "united_atom:Transvibrational": 51.22145722965398, + "united_atom:Rovibrational": 17.232634718413053, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.09011370805953 + "total": 68.45409194806703 } } } diff --git a/tests/regression/baselines/water/water_off.json b/tests/regression/baselines/water/water_off.json index e3ff82d..2e63256 100644 --- a/tests/regression/baselines/water/water_off.json +++ b/tests/regression/baselines/water/water_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 50.29463976726311, - "united_atom:Rovibrational": 17.795473940796423, + "united_atom:Transvibrational": 51.22145722965398, + "united_atom:Rovibrational": 17.232634718413053, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.09011370805953 + "total": 68.45409194806703 } } } From 0d86e211b5f4159c1a51b709430805a19937f6a2 Mon Sep 17 00:00:00 2001 From: harryswift01 Date: Wed, 7 Oct 2026 13:37:02 +0100 Subject: [PATCH 7/9] fix(axes): use eigh-based principal axes instead of MDAnalysis principal_axes --- CodeEntropy/levels/axes.py | 41 +++++++-- CodeEntropy/levels/nodes/covariance.py | 6 +- .../baselines/benzaldehyde/axes_off.json | 10 +-- .../baselines/benzene/axes_off.json | 10 +-- .../baselines/cyclohexane/axes_off.json | 10 +-- tests/regression/baselines/dna/axes_off.json | 16 ++-- .../dna/combined_forcetorque_off.json | 14 +-- .../baselines/dna/frame_window.json | 10 +-- .../baselines/dna/grouping_each.json | 8 +- .../baselines/dna/selection_subset.json | 8 +- .../baselines/ethyl-acetate/axes_off.json | 10 +-- .../baselines/methane/axes_off.json | 6 +- .../methane/combined_forcetorque_off.json | 6 +- .../baselines/methane/frame_window.json | 6 +- .../baselines/methane/grouping_each.json | 50 +++++------ .../baselines/methane/selection_subset.json | 6 +- .../baselines/methanol/axes_off.json | 8 +- .../baselines/octonol/axes_off.json | 10 +-- .../regression/baselines/water/axes_off.json | 6 +- .../water/combined_forcetorque_off.json | 6 +- .../baselines/water/frame_window.json | 6 +- .../baselines/water/grouping_each.json | 44 +++++----- .../baselines/water/selection_subset.json | 6 +- .../regression/baselines/water/water_off.json | 6 +- .../levels/nodes/test_covariance_node.py | 3 + tests/unit/CodeEntropy/levels/test_axes.py | 87 +++++++++++++++---- 26 files changed, 241 insertions(+), 158 deletions(-) diff --git a/CodeEntropy/levels/axes.py b/CodeEntropy/levels/axes.py index 53812dd..e27d457 100644 --- a/CodeEntropy/levels/axes.py +++ b/CodeEntropy/levels/axes.py @@ -149,7 +149,7 @@ def get_residue_axes( rot_center = np.array(residue.center_of_mass()) else: make_whole(data_container.atoms) - trans_axes = data_container.atoms.principal_axes() + trans_axes = self.get_principal_axes(data_container.atoms) if len(edge_atom_set) == 1: edge_atom = edge_atom_set[0] rot_center, rot_axes = self.get_terminal_axes( @@ -223,7 +223,7 @@ def get_residue_axes_from_topology( trans_axes = rot_axes else: make_whole(mol.atoms) - trans_axes = mol.atoms.principal_axes() + trans_axes = self.get_principal_axes(mol.atoms) rot_axes, moment_of_inertia = self.get_vanilla_axes(residue_atoms) center = residue_atoms.center_of_mass(unwrap=True) @@ -281,7 +281,7 @@ def get_UA_axes(self, data_container, index: int, res_position): # only the one residue => use principal axes residue = data_container trans_center = data_container.atoms.center_of_mass(unwrap=True) - trans_axes = data_container.atoms.principal_axes() + trans_axes = self.get_principal_axes(data_container.atoms) else: # residue of interest has at least one neighbour if res_position == -1 or res_position == 1: @@ -421,7 +421,7 @@ def get_UA_axes_from_topology( ) else: make_whole(residue_atoms) - trans_axes = residue_atoms.principal_axes() + trans_axes = self.get_principal_axes(residue_atoms) center = heavy_atom.position rot_axes, moment_of_inertia = self.get_bonded_axes_from_topology( @@ -611,7 +611,7 @@ def get_terminal_axes(self, residue, edge, dimensions): if len(bonded_atoms) == 0: # there is only one heavy atom in the residue rot_center = edge.position - rot_axes = residue.atoms.principal_axes() + rot_axes = self.get_principal_axes(residue.atoms) else: average_bonded = np.zeros(3) for bonded_atom in bonded_atoms: @@ -834,7 +834,7 @@ def get_vanilla_axes(self, molecule): """ moment_of_inertia_tensor = molecule.moment_of_inertia(unwrap=True) make_whole(molecule.atoms) - principal_axes = molecule.principal_axes() + principal_axes = self.get_principal_axes(molecule) eigenvalues, _ = np.linalg.eigh(moment_of_inertia_tensor) order = np.argsort(np.abs(eigenvalues))[::-1] @@ -1113,6 +1113,35 @@ def get_custom_principal_axes( return principal_axes, moment_of_inertia + def get_principal_axes(self, group, wrap: bool = False) -> np.ndarray: + """Compute the principal axes of an atom group from its moment of inertia. + + Equivalent to MDAnalysis's ``AtomGroup.principal_axes()``, but uses + ``np.linalg.eigh`` rather than ``np.linalg.eig``. The moment of inertia + tensor is symmetric, so ``eigh`` returns orthonormal axes, whereas ``eig`` + can return skewed axes for (near-)degenerate moments. + + - Axes are sorted by descending (signed) eigenvalue and returned as rows. + - If the axes are left-handed, all three are flipped, as in MDAnalysis. + + Args: + group: MDAnalysis atom group (or anything with ``.atoms``). + wrap: Whether to wrap atoms into the primary unit cell before computing + the moment of inertia. + + Returns: + np.ndarray: (3, 3) principal axes (rows). + """ + atomgroup = group.atoms + e_val, e_vec = np.linalg.eigh(atomgroup.moment_of_inertia(wrap=wrap)) + + e_vec = e_vec[:, np.argsort(e_val)[::-1]].T + + if np.dot(np.cross(e_vec[0], e_vec[1]), e_vec[2]) < 0: + e_vec *= -1 + + return e_vec + def get_UA_masses(self, molecule) -> list[float]: """Return united-atom (UA) masses for a molecule. diff --git a/CodeEntropy/levels/nodes/covariance.py b/CodeEntropy/levels/nodes/covariance.py index 9ea5ea4..2fa5c2e 100644 --- a/CodeEntropy/levels/nodes/covariance.py +++ b/CodeEntropy/levels/nodes/covariance.py @@ -506,7 +506,7 @@ def _build_ua_vectors( # principal axes make_whole(residue.atoms) make_whole(bead) - trans_axes = residue.atoms.principal_axes() + trans_axes = axes_manager.get_principal_axes(residue.atoms) rot_axes, moi = axes_manager.get_vanilla_axes(bead) center = bead.center_of_mass(unwrap=True) @@ -658,7 +658,7 @@ def _get_residue_axes( make_whole(mol.atoms) make_whole(bead) - trans_axes = mol.atoms.principal_axes() + trans_axes = axes_manager.get_principal_axes(mol.atoms) rot_axes, moi = axes_manager.get_vanilla_axes(bead) center = bead.center_of_mass(unwrap=True) return ( @@ -688,7 +688,7 @@ def _get_polymer_axes( make_whole(mol.atoms) make_whole(bead) - trans_axes = mol.atoms.principal_axes() + trans_axes = axes_manager.get_principal_axes(mol.atoms) rot_axes, moi = axes_manager.get_vanilla_axes(bead) center = bead.center_of_mass(unwrap=True) diff --git a/tests/regression/baselines/benzaldehyde/axes_off.json b/tests/regression/baselines/benzaldehyde/axes_off.json index f170b86..0d34d6c 100644 --- a/tests/regression/baselines/benzaldehyde/axes_off.json +++ b/tests/regression/baselines/benzaldehyde/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.08982962903796153, - "united_atom:Rovibrational": 32.16018134884084, - "residue:FTmat-Transvibrational": 88.76716666950036, - "residue:FTmat-Rovibrational": 61.610362676721316, + "united_atom:Transvibrational": 0.059408867580823616, + "united_atom:Rovibrational": 39.36932344859785, + "residue:FTmat-Transvibrational": 81.48352353795262, + "residue:FTmat-Rovibrational": 63.04898043265405, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 203.10911181671582 + "total": 204.44280777940068 } } } diff --git a/tests/regression/baselines/benzene/axes_off.json b/tests/regression/baselines/benzene/axes_off.json index cb51ef5..109194e 100644 --- a/tests/regression/baselines/benzene/axes_off.json +++ b/tests/regression/baselines/benzene/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.17824017761231412, - "united_atom:Rovibrational": 37.12706256545505, - "residue:FTmat-Transvibrational": 76.82006376419386, - "residue:FTmat-Rovibrational": 47.1716631341293, + "united_atom:Transvibrational": 0.16163858692459776, + "united_atom:Rovibrational": 44.48477691495675, + "residue:FTmat-Transvibrational": 81.11811255841327, + "residue:FTmat-Rovibrational": 47.03606119622739, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 161.2970296413905 + "total": 172.80058925652202 } } } diff --git a/tests/regression/baselines/cyclohexane/axes_off.json b/tests/regression/baselines/cyclohexane/axes_off.json index 5f736e3..2d6038a 100644 --- a/tests/regression/baselines/cyclohexane/axes_off.json +++ b/tests/regression/baselines/cyclohexane/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.6825851535582976, - "united_atom:Rovibrational": 22.06935198899352, - "residue:FTmat-Transvibrational": 85.12666483486653, - "residue:FTmat-Rovibrational": 61.14255319533253, + "united_atom:Transvibrational": 0.8231608488813442, + "united_atom:Rovibrational": 24.640396903026634, + "residue:FTmat-Transvibrational": 84.05755363684698, + "residue:FTmat-Rovibrational": 61.73316378799838, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 169.0211551727509 + "total": 171.2542751767533 } } } diff --git a/tests/regression/baselines/dna/axes_off.json b/tests/regression/baselines/dna/axes_off.json index eac416c..6a9dab7 100644 --- a/tests/regression/baselines/dna/axes_off.json +++ b/tests/regression/baselines/dna/axes_off.json @@ -3,30 +3,30 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.226904487838527, + "united_atom:Rovibrational": 1.2910746542567035, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 27.457107473323198, - "polymer:FTmat-Transvibrational": 48.6202697076227, + "residue:Rovibrational": 26.68254629775581, + "polymer:FTmat-Transvibrational": 48.50274293414517, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 10.584542990557836, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 92.64772999596997 + "total": 91.81981221334323 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.7972774672527931, + "united_atom:Rovibrational": 1.9680216598831306, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 25.287669468441052, - "polymer:FTmat-Transvibrational": 60.47397935339152, + "residue:Rovibrational": 24.831990780037884, + "polymer:FTmat-Transvibrational": 57.35678551116436, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 5.292271495278918, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 97.61010312099198 + "total": 94.207974782992 } } } diff --git a/tests/regression/baselines/dna/combined_forcetorque_off.json b/tests/regression/baselines/dna/combined_forcetorque_off.json index 9a35fa1..339a163 100644 --- a/tests/regression/baselines/dna/combined_forcetorque_off.json +++ b/tests/regression/baselines/dna/combined_forcetorque_off.json @@ -5,14 +5,14 @@ "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 3.376800684085251, - "polymer:Transvibrational": 21.18266215491188, - "polymer:Rovibrational": 12.837576042626923, + "residue:Rovibrational": 3.3768006840852487, + "polymer:Transvibrational": 21.182662154911913, + "polymer:Rovibrational": 12.837576042626926, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 42.1581048972639 + "total": 42.15810489726393 }, "1": { "components": { @@ -20,13 +20,13 @@ "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, "residue:Rovibrational": 2.386320108254459, - "polymer:Transvibrational": 16.607667396609116, - "polymer:Rovibrational": 12.304363914795594, + "polymer:Transvibrational": 16.607667396609127, + "polymer:Rovibrational": 12.304363914795598, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 36.07572103394638 + "total": 36.075721033946394 } } } diff --git a/tests/regression/baselines/dna/frame_window.json b/tests/regression/baselines/dna/frame_window.json index 5e58951..8281138 100644 --- a/tests/regression/baselines/dna/frame_window.json +++ b/tests/regression/baselines/dna/frame_window.json @@ -5,14 +5,14 @@ "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 1.5821720528374947, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 26.544003448939662, - "polymer:FTmat-Transvibrational": 48.6202697076227, + "residue:Rovibrational": 26.60656641113743, + "polymer:FTmat-Transvibrational": 48.50274293414517, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 10.584542990557836, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 92.0898935365854 + "total": 92.03492972530563 }, "1": { "components": { @@ -20,13 +20,13 @@ "united_atom:Rovibrational": 2.527793636620802, "residue:Transvibrational": 0.0, "residue:Rovibrational": 24.4275653595082, - "polymer:FTmat-Transvibrational": 60.47397935339152, + "polymer:FTmat-Transvibrational": 57.35678551116436, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 5.292271495278918, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 97.48051518142715 + "total": 94.3633213392 } } } diff --git a/tests/regression/baselines/dna/grouping_each.json b/tests/regression/baselines/dna/grouping_each.json index 6fe4d73..1e29fb1 100644 --- a/tests/regression/baselines/dna/grouping_each.json +++ b/tests/regression/baselines/dna/grouping_each.json @@ -5,8 +5,8 @@ "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 3.376800684085251, - "polymer:FTmat-Transvibrational": 12.341104347192612, + "residue:Rovibrational": 3.3768006840852487, + "polymer:FTmat-Transvibrational": 12.341104347192614, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, @@ -20,13 +20,13 @@ "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, "residue:Rovibrational": 2.386320108254459, - "polymer:FTmat-Transvibrational": 11.110372533885963, + "polymer:FTmat-Transvibrational": 11.110372533885968, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 18.27406225642763 + "total": 18.274062256427637 } } } diff --git a/tests/regression/baselines/dna/selection_subset.json b/tests/regression/baselines/dna/selection_subset.json index 6fe4d73..1e29fb1 100644 --- a/tests/regression/baselines/dna/selection_subset.json +++ b/tests/regression/baselines/dna/selection_subset.json @@ -5,8 +5,8 @@ "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 3.376800684085251, - "polymer:FTmat-Transvibrational": 12.341104347192612, + "residue:Rovibrational": 3.3768006840852487, + "polymer:FTmat-Transvibrational": 12.341104347192614, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, @@ -20,13 +20,13 @@ "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, "residue:Rovibrational": 2.386320108254459, - "polymer:FTmat-Transvibrational": 11.110372533885963, + "polymer:FTmat-Transvibrational": 11.110372533885968, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 18.27406225642763 + "total": 18.274062256427637 } } } diff --git a/tests/regression/baselines/ethyl-acetate/axes_off.json b/tests/regression/baselines/ethyl-acetate/axes_off.json index 61ea5ae..b501e82 100644 --- a/tests/regression/baselines/ethyl-acetate/axes_off.json +++ b/tests/regression/baselines/ethyl-acetate/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.8081103094129074, - "united_atom:Rovibrational": 68.85184585731308, - "residue:FTmat-Transvibrational": 77.33844477785695, - "residue:FTmat-Rovibrational": 56.03921993686319, + "united_atom:Transvibrational": 1.0264523212404142, + "united_atom:Rovibrational": 78.75362855419775, + "residue:FTmat-Transvibrational": 81.02749922723585, + "residue:FTmat-Rovibrational": 56.27644205458492, "united_atom:Conformational": 7.90098624365273, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 210.93860712509888 + "total": 224.98500840091168 } } } diff --git a/tests/regression/baselines/methane/axes_off.json b/tests/regression/baselines/methane/axes_off.json index dddf93d..5eac433 100644 --- a/tests/regression/baselines/methane/axes_off.json +++ b/tests/regression/baselines/methane/axes_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.51619525142699, - "united_atom:Rovibrational": 34.692556166968025, + "united_atom:Transvibrational": 42.71309458819117, + "united_atom:Rovibrational": 34.49645268839667, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.20875141839502 + "total": 77.20954727658784 } } } diff --git a/tests/regression/baselines/methane/combined_forcetorque_off.json b/tests/regression/baselines/methane/combined_forcetorque_off.json index a279f83..5b4ce51 100644 --- a/tests/regression/baselines/methane/combined_forcetorque_off.json +++ b/tests/regression/baselines/methane/combined_forcetorque_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.51619525142699, - "united_atom:Rovibrational": 34.65193232264001, + "united_atom:Transvibrational": 42.71309458819117, + "united_atom:Rovibrational": 34.44108294190893, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.168127574067 + "total": 77.1541775301001 } } } diff --git a/tests/regression/baselines/methane/frame_window.json b/tests/regression/baselines/methane/frame_window.json index 07800c3..99458e4 100644 --- a/tests/regression/baselines/methane/frame_window.json +++ b/tests/regression/baselines/methane/frame_window.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 40.70376001258969, - "united_atom:Rovibrational": 33.77879239682349, + "united_atom:Transvibrational": 40.546757804157515, + "united_atom:Rovibrational": 33.43627689514928, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 74.48255240941319 + "total": 73.98303469930678 } } } diff --git a/tests/regression/baselines/methane/grouping_each.json b/tests/regression/baselines/methane/grouping_each.json index 81452c9..949e996 100644 --- a/tests/regression/baselines/methane/grouping_each.json +++ b/tests/regression/baselines/methane/grouping_each.json @@ -2,8 +2,8 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 24.315699188266926, - "united_atom:Rovibrational": 21.048390124205604, + "united_atom:Transvibrational": 24.315699188266905, + "united_atom:Rovibrational": 21.04839012420562, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, @@ -11,84 +11,84 @@ }, "1": { "components": { - "united_atom:Transvibrational": 23.766082670463092, - "united_atom:Rovibrational": 16.769636839671296, + "united_atom:Transvibrational": 23.766082670463117, + "united_atom:Rovibrational": 16.769636839671318, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 40.535719510134385 + "total": 40.535719510134435 }, "2": { "components": { - "united_atom:Transvibrational": 24.833896219788347, - "united_atom:Rovibrational": 16.996392060962357, + "united_atom:Transvibrational": 24.83389621978833, + "united_atom:Rovibrational": 16.996392060962343, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 41.83028828075071 + "total": 41.83028828075067 }, "3": { "components": { - "united_atom:Transvibrational": 6.672385707928322, - "united_atom:Rovibrational": 4.986376282798274, + "united_atom:Transvibrational": 6.672385707928316, + "united_atom:Rovibrational": 4.986376282798272, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 11.658761990726596 + "total": 11.658761990726589 }, "4": { "components": { "united_atom:Transvibrational": 6.880461178899526, - "united_atom:Rovibrational": 4.441585994100297, + "united_atom:Rovibrational": 4.441585994100293, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 11.322047172999824 + "total": 11.322047172999818 }, "5": { "components": { - "united_atom:Transvibrational": 15.473092273577388, + "united_atom:Transvibrational": 15.473092273577436, "united_atom:Rovibrational": 7.777083478334702, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 23.25017575191209 + "total": 23.25017575191214 }, "6": { "components": { - "united_atom:Transvibrational": 25.694168010993888, + "united_atom:Transvibrational": 25.694168010993906, "united_atom:Rovibrational": 6.731392483940259, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 32.425560494934146 + "total": 32.42556049493417 }, "7": { "components": { - "united_atom:Transvibrational": 10.533257828925997, - "united_atom:Rovibrational": 8.975639133015859, + "united_atom:Transvibrational": 10.533257828925988, + "united_atom:Rovibrational": 8.975639133015862, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 19.508896961941858 + "total": 19.50889696194185 }, "8": { "components": { - "united_atom:Transvibrational": 7.332978272264879, - "united_atom:Rovibrational": 3.0418502362906086, + "united_atom:Transvibrational": 7.332978272264892, + "united_atom:Rovibrational": 3.0418502362906055, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 10.374828508555488 + "total": 10.374828508555497 }, "9": { "components": { "united_atom:Transvibrational": 4.023932761002867, - "united_atom:Rovibrational": 8.289324383636089, + "united_atom:Rovibrational": 8.289324383636096, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 12.313257144638957 + "total": 12.313257144638964 } } } diff --git a/tests/regression/baselines/methane/selection_subset.json b/tests/regression/baselines/methane/selection_subset.json index a279f83..5b4ce51 100644 --- a/tests/regression/baselines/methane/selection_subset.json +++ b/tests/regression/baselines/methane/selection_subset.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.51619525142699, - "united_atom:Rovibrational": 34.65193232264001, + "united_atom:Transvibrational": 42.71309458819117, + "united_atom:Rovibrational": 34.44108294190893, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.168127574067 + "total": 77.1541775301001 } } } diff --git a/tests/regression/baselines/methanol/axes_off.json b/tests/regression/baselines/methanol/axes_off.json index 13f0943..518b54e 100644 --- a/tests/regression/baselines/methanol/axes_off.json +++ b/tests/regression/baselines/methanol/axes_off.json @@ -3,14 +3,14 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 38.62138020563923, - "residue:FTmat-Transvibrational": 71.3913977674318, - "residue:FTmat-Rovibrational": 42.43745474015418, + "united_atom:Rovibrational": 40.470578424967975, + "residue:FTmat-Transvibrational": 81.39150587087775, + "residue:FTmat-Rovibrational": 39.65185616131401, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 152.4502327132252 + "total": 161.51394045715975 } } } diff --git a/tests/regression/baselines/octonol/axes_off.json b/tests/regression/baselines/octonol/axes_off.json index e466ed1..3ac5527 100644 --- a/tests/regression/baselines/octonol/axes_off.json +++ b/tests/regression/baselines/octonol/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.29071299924708216, - "united_atom:Rovibrational": 16.392492804955697, - "residue:FTmat-Transvibrational": 83.57043751308888, - "residue:FTmat-Rovibrational": 58.87291960143169, + "united_atom:Transvibrational": 0.3946170181442213, + "united_atom:Rovibrational": 15.964551734192693, + "residue:FTmat-Transvibrational": 88.89652899239388, + "residue:FTmat-Rovibrational": 59.284611948411424, "united_atom:Conformational": 16.83949354267619, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 201.7572063800069 + "total": 207.17095315442577 } } } diff --git a/tests/regression/baselines/water/axes_off.json b/tests/regression/baselines/water/axes_off.json index 7ee95f7..855b3e0 100644 --- a/tests/regression/baselines/water/axes_off.json +++ b/tests/regression/baselines/water/axes_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 51.22145722965398, - "united_atom:Rovibrational": 17.307840626636317, + "united_atom:Transvibrational": 50.29463976726311, + "united_atom:Rovibrational": 17.75547865377748, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.5292978562903 + "total": 68.0501184210406 } } } diff --git a/tests/regression/baselines/water/combined_forcetorque_off.json b/tests/regression/baselines/water/combined_forcetorque_off.json index 2e63256..e3ff82d 100644 --- a/tests/regression/baselines/water/combined_forcetorque_off.json +++ b/tests/regression/baselines/water/combined_forcetorque_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 51.22145722965398, - "united_atom:Rovibrational": 17.232634718413053, + "united_atom:Transvibrational": 50.29463976726311, + "united_atom:Rovibrational": 17.795473940796423, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.45409194806703 + "total": 68.09011370805953 } } } diff --git a/tests/regression/baselines/water/frame_window.json b/tests/regression/baselines/water/frame_window.json index bf0e5c8..07b9d67 100644 --- a/tests/regression/baselines/water/frame_window.json +++ b/tests/regression/baselines/water/frame_window.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 46.684099714230925, - "united_atom:Rovibrational": 17.69401440544474, + "united_atom:Transvibrational": 46.294728006800256, + "united_atom:Rovibrational": 17.298848645671537, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 64.37811411967567 + "total": 63.593576652471796 } } } diff --git a/tests/regression/baselines/water/grouping_each.json b/tests/regression/baselines/water/grouping_each.json index 55810cb..f14a07e 100644 --- a/tests/regression/baselines/water/grouping_each.json +++ b/tests/regression/baselines/water/grouping_each.json @@ -2,44 +2,44 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 14.94590795380555, - "united_atom:Rovibrational": 1.894724395364824, + "united_atom:Transvibrational": 14.945907953805547, + "united_atom:Rovibrational": 1.894724395364822, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 16.840632349170374 + "total": 16.84063234917037 }, "1": { "components": { - "united_atom:Transvibrational": 8.111522208287777, + "united_atom:Transvibrational": 8.111522208287775, "united_atom:Rovibrational": 0.9607747968334228, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 9.0722970051212 + "total": 9.072297005121198 }, "2": { "components": { "united_atom:Transvibrational": 15.794973479687595, - "united_atom:Rovibrational": 4.606072530590255, + "united_atom:Rovibrational": 4.606072530590256, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 20.40104601027785 + "total": 20.401046010277852 }, "3": { "components": { - "united_atom:Transvibrational": 9.462487265119448, - "united_atom:Rovibrational": 1.650951398698477, + "united_atom:Transvibrational": 9.462487265119444, + "united_atom:Rovibrational": 1.6509513986984767, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 11.113438663817924 + "total": 11.11343866381792 }, "4": { "components": { "united_atom:Transvibrational": 16.254161245740693, - "united_atom:Rovibrational": 1.367597374110767, + "united_atom:Rovibrational": 1.3675973741107645, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, @@ -47,34 +47,34 @@ }, "5": { "components": { - "united_atom:Transvibrational": 11.57779876203329, - "united_atom:Rovibrational": 7.351163568004953, + "united_atom:Transvibrational": 11.577798762033282, + "united_atom:Rovibrational": 7.3511635680049485, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 18.928962330038242 + "total": 18.92896233003823 }, "6": { "components": { - "united_atom:Transvibrational": 10.172061262201801, - "united_atom:Rovibrational": 3.671537296888502, + "united_atom:Transvibrational": 10.172061262201797, + "united_atom:Rovibrational": 3.6715372968885003, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 13.843598559090303 + "total": 13.843598559090298 }, "7": { "components": { - "united_atom:Transvibrational": 13.49951045186194, + "united_atom:Transvibrational": 13.499510451861937, "united_atom:Rovibrational": 1.7029491215274863, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 15.202459573389428 + "total": 15.202459573389424 }, "8": { "components": { - "united_atom:Transvibrational": 16.597759171924583, + "united_atom:Transvibrational": 16.59775917192458, "united_atom:Rovibrational": 1.6190289365617598, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 @@ -83,12 +83,12 @@ }, "9": { "components": { - "united_atom:Transvibrational": 13.731375187064538, + "united_atom:Transvibrational": 13.731375187064533, "united_atom:Rovibrational": 5.650620990305761, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 19.381996177370297 + "total": 19.381996177370294 } } } diff --git a/tests/regression/baselines/water/selection_subset.json b/tests/regression/baselines/water/selection_subset.json index 2e63256..e3ff82d 100644 --- a/tests/regression/baselines/water/selection_subset.json +++ b/tests/regression/baselines/water/selection_subset.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 51.22145722965398, - "united_atom:Rovibrational": 17.232634718413053, + "united_atom:Transvibrational": 50.29463976726311, + "united_atom:Rovibrational": 17.795473940796423, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.45409194806703 + "total": 68.09011370805953 } } } diff --git a/tests/regression/baselines/water/water_off.json b/tests/regression/baselines/water/water_off.json index 2e63256..e3ff82d 100644 --- a/tests/regression/baselines/water/water_off.json +++ b/tests/regression/baselines/water/water_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 51.22145722965398, - "united_atom:Rovibrational": 17.232634718413053, + "united_atom:Transvibrational": 50.29463976726311, + "united_atom:Rovibrational": 17.795473940796423, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.45409194806703 + "total": 68.09011370805953 } } } diff --git a/tests/unit/CodeEntropy/levels/nodes/test_covariance_node.py b/tests/unit/CodeEntropy/levels/nodes/test_covariance_node.py index 19ed381..9637571 100644 --- a/tests/unit/CodeEntropy/levels/nodes/test_covariance_node.py +++ b/tests/unit/CodeEntropy/levels/nodes/test_covariance_node.py @@ -501,6 +501,7 @@ def test_build_ua_vectors_uses_vanilla_axes_when_not_customised(): np.eye(3), np.array([1.0, 2.0, 3.0]), ) + axes_manager.get_principal_axes.return_value = np.eye(3) node._ft.get_weighted_forces = MagicMock(return_value=np.array([1.0, 0.0, 0.0])) node._ft.get_weighted_torques = MagicMock(return_value=np.array([0.0, 1.0, 0.0])) @@ -623,6 +624,7 @@ def test_get_residue_axes_vanilla_uses_make_whole_and_vanilla_axes(): np.eye(3), np.array([1.0, 2.0, 3.0]), ) + axes_manager.get_principal_axes.return_value = np.eye(3) with patch("CodeEntropy.levels.nodes.covariance.make_whole") as make_whole: trans_axes, rot_axes, center, moi = node._get_residue_axes( @@ -654,6 +656,7 @@ def test_get_polymer_axes_uses_make_whole_and_vanilla_axes(): np.eye(3), np.array([1.0, 2.0, 3.0]), ) + axes_manager.get_principal_axes.return_value = np.eye(3) with patch("CodeEntropy.levels.nodes.covariance.make_whole") as make_whole: trans_axes, rot_axes, center, moi = node._get_polymer_axes( diff --git a/tests/unit/CodeEntropy/levels/test_axes.py b/tests/unit/CodeEntropy/levels/test_axes.py index 2b856a0..8c5c58b 100644 --- a/tests/unit/CodeEntropy/levels/test_axes.py +++ b/tests/unit/CodeEntropy/levels/test_axes.py @@ -327,7 +327,7 @@ def test_get_vanilla_axes_sorts_eigenvalues_desc_by_abs(monkeypatch): mol = MagicMock() moi_tensor = np.diag([1.0, -10.0, 3.0]) mol.moment_of_inertia.return_value = moi_tensor - mol.principal_axes.return_value = np.eye(3) + monkeypatch.setattr(ax, "get_principal_axes", lambda *_a, **_k: np.eye(3)) mol.atoms = MagicMock() # avoid real MDAnalysis unwrap @@ -340,6 +340,58 @@ def test_get_vanilla_axes_sorts_eigenvalues_desc_by_abs(monkeypatch): assert np.allclose(moments, np.array([-10.0, 3.0, 1.0])) +def test_get_principal_axes_sorts_by_descending_eigenvalue(): + ax = AxesCalculator() + group = MagicMock() + group.atoms.moment_of_inertia.return_value = np.diag([1.0, 3.0, 2.0]) + + axes = ax.get_principal_axes(group) + + # eigenvalues 3, 2, 1 => rows along y, z, x (sign may differ) + expected = np.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]], dtype=float) + assert np.allclose(np.abs(axes), expected) + + +def test_get_principal_axes_orthonormal_and_right_handed_for_near_degenerate(): + ax = AxesCalculator() + rng = np.random.default_rng(0) + q, _ = np.linalg.qr(rng.normal(size=(3, 3))) + tensor = q @ np.diag([1.0, 1.0 + 1e-9, 5.0]) @ q.T + group = MagicMock() + group.atoms.moment_of_inertia.return_value = tensor + + axes = ax.get_principal_axes(group) + + assert np.allclose(axes @ axes.T, np.eye(3), atol=1e-12) + assert np.isclose(np.linalg.det(axes), 1.0) + assert np.isclose(abs(np.dot(axes[0], q[:, 2])), 1.0) + + +def test_get_principal_axes_flips_all_axes_when_left_handed(monkeypatch): + ax = AxesCalculator() + group = MagicMock() + group.atoms.moment_of_inertia.return_value = np.eye(3) + monkeypatch.setattr( + np.linalg, "eigh", lambda _m: (np.array([1.0, 2.0, 3.0]), np.eye(3)) + ) + + axes = ax.get_principal_axes(group) + + # descending order gives rows e3, e2, e1 (left-handed), so all are negated + expected = -np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]], dtype=float) + assert np.allclose(axes, expected) + + +def test_get_principal_axes_passes_wrap_to_moment_of_inertia(): + ax = AxesCalculator() + group = MagicMock() + group.atoms.moment_of_inertia.return_value = np.diag([3.0, 2.0, 1.0]) + + ax.get_principal_axes(group, wrap=True) + + group.atoms.moment_of_inertia.assert_called_once_with(wrap=True) + + def test_find_bonded_atoms_selects_heavy_and_hydrogen_groups(): ax = AxesCalculator() @@ -626,6 +678,7 @@ def test_get_custom_moment_of_inertia_len2_zeros_smallest_component(): def test_get_UA_axes_multiple_heavy_atoms_uses_custom_principal_axes(monkeypatch): ax = AxesCalculator() + monkeypatch.setattr(ax, "get_principal_axes", lambda *_a, **_k: np.eye(3)) heavy_atoms = _FakeAtomGroup( [ @@ -647,9 +700,6 @@ def center_of_mass(self, *args, **kwargs): def __getitem__(self, idx): return system_atom - def principal_axes(self, *args, **kwargs): - return np.eye(3) - def select_atoms(self, q): if q == "mass 2 to 999": return heavy_atoms @@ -839,7 +889,8 @@ def test_get_residue_axes_from_topology_neighbor_bonds_uses_vanilla_axes( dimensions=[11.0, 12.0, 13.0, 90.0, 90.0, 90.0], ) mol = MagicMock() - mol.atoms.principal_axes.return_value = np.eye(3) * 5.0 + get_principal = MagicMock(return_value=np.eye(3) * 5.0) + monkeypatch.setattr(ax, "get_principal_axes", get_principal) residue_atoms = MagicMock() residue_atoms.center_of_mass.return_value = np.array([1.0, 2.0, 3.0]) topology = _residue_topology(has_neighbor_bonds=True) @@ -859,7 +910,7 @@ def test_get_residue_axes_from_topology_neighbor_bonds_uses_vanilla_axes( ) make_whole.assert_called_once_with(mol.atoms) - mol.atoms.principal_axes.assert_called_once() + get_principal.assert_called_once() get_vanilla.assert_called_once_with(residue_atoms) np.testing.assert_allclose(trans_axes, np.eye(3) * 5.0) np.testing.assert_allclose(rot_axes, np.eye(3) * 6.0) @@ -936,7 +987,8 @@ def test_get_UA_axes_from_topology_single_heavy_uses_residue_principal_axes( {1: heavy_atom}, dimensions=[11.0, 12.0, 13.0, 90.0, 90.0, 90.0] ) residue_atoms = MagicMock() - residue_atoms.principal_axes.return_value = np.eye(3) * 5.0 + get_principal = MagicMock(return_value=np.eye(3) * 5.0) + monkeypatch.setattr(ax, "get_principal_axes", get_principal) topology = _ua_topology(heavy_atom_index=1, residue_heavy_indices=(1,)) @@ -954,7 +1006,7 @@ def test_get_UA_axes_from_topology_single_heavy_uses_residue_principal_axes( ) make_whole.assert_called_once_with(residue_atoms) - residue_atoms.principal_axes.assert_called_once() + get_principal.assert_called_once() np.testing.assert_allclose(trans_axes, np.eye(3) * 5.0) np.testing.assert_allclose(rot_axes, np.eye(3) * 6.0) np.testing.assert_allclose(center, heavy_atom.position) @@ -972,7 +1024,7 @@ def test_get_UA_axes_from_topology_raises_when_cached_bonded_axes_fail(monkeypat heavy_atom = _FakeAtom(1, 12.0, [1.0, 0.0, 0.0]) universe = _FakeUniverse({1: heavy_atom}) residue_atoms = MagicMock() - residue_atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr(ax, "get_principal_axes", lambda *_a, **_k: np.eye(3)) topology = _ua_topology(heavy_atom_index=1, residue_heavy_indices=(1,)) monkeypatch.setattr("CodeEntropy.levels.axes.make_whole", lambda _ag: None) @@ -1282,7 +1334,7 @@ def _select_atoms(q): return edge_atom_set u.atoms.select_atoms.side_effect = _select_atoms - u.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr(ax, "get_principal_axes", lambda *_a, **_k: np.eye(3)) monkeypatch.setattr(ax, "get_chain", lambda residue, first, last: [backbone_atom]) monkeypatch.setattr( ax, @@ -1328,7 +1380,7 @@ def _select_atoms(q): return edge_atom_set u.atoms.select_atoms.side_effect = _select_atoms - u.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr(ax, "get_principal_axes", lambda *_a, **_k: np.eye(3)) monkeypatch.setattr( ax, "get_chain", lambda residue, edge_atom_1, edge_atom_2: backbone_atoms ) @@ -1376,7 +1428,7 @@ def _select_atoms(q): if q.startswith("resindex 0 and (bonded resindex"): return [uas[2]] - u.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr(ax, "get_principal_axes", lambda *_a, **_k: np.eye(3)) u.atoms.select_atoms.side_effect = _select_atoms residue.select_atoms.side_effect = _select_atoms residue.atoms.select_atoms.side_effect = _select_atoms @@ -1758,7 +1810,7 @@ def test_get_residue_axes_non_terminal_2_atoms(monkeypatch): monkeypatch.setattr("CodeEntropy.levels.axes.make_whole", lambda _ag: None) residue = u.select_atoms("resindex 5") residue.__len__.return_value = 2 - u.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr(ax, "get_principal_axes", lambda *_a, **_k: np.eye(3)) uas = _FakeAtomGroup( [ _atom(index=0, mass=12.0, pos=(1, 1, 1)), @@ -1812,7 +1864,7 @@ def test_get_residue_axes_terminal_2_atoms(monkeypatch): _atom(index=2, mass=12.0, pos=(0, 0, 1)), ], ) - u.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr(ax, "get_principal_axes", lambda *_a, **_k: np.eye(3)) def _select_atoms(q): if q == "mass 2 to 999": @@ -1859,8 +1911,7 @@ def test_get_res_axes_terminal_1_atom(monkeypatch): _atom(index=0, mass=12.0, pos=(1, 0, 0)), ], ) - u.atoms.principal_axes.return_value = np.eye(3) - residue.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr(ax, "get_principal_axes", lambda *_a, **_k: np.eye(3)) def _select_atoms(q): if q == "mass 2 to 999": @@ -1929,7 +1980,7 @@ def _select_atoms_residue(q): "get_bonded_axes", lambda system, atom, dimensions: (np.eye(3), 3 * np.eye(3)), ) - residue.atoms.principal_axes.return_value = 2 * np.eye(3) + monkeypatch.setattr(ax, "get_principal_axes", lambda *_a, **_k: 2 * np.eye(3)) trans_axes, rot_axes, rot_center, moi = ax.get_UA_axes( data_container=residue_group, index=0, res_position=-1 @@ -1958,7 +2009,7 @@ def _select_atoms(q): return [] residue.atoms.select_atoms.side_effect = _select_atoms - residue.atoms.principal_axes.return_value = np.eye(3) + monkeypatch.setattr(ax, "get_principal_axes", lambda *_a, **_k: np.eye(3)) centre, axes = ax.get_terminal_axes( residue, heavy_atoms[0], dimensions=np.array([1, 1, 1]) ) From af171ec71ac3551b64cd2230c4798727c811ad7e Mon Sep 17 00:00:00 2001 From: harryswift01 Date: Wed, 7 Oct 2026 14:02:05 +0100 Subject: [PATCH 8/9] fix(axes): make principal axes independent of eigenvector choice --- CodeEntropy/levels/axes.py | 71 ++++++++++++++------ tests/unit/CodeEntropy/levels/test_axes.py | 77 ++++++++++++++-------- 2 files changed, 102 insertions(+), 46 deletions(-) diff --git a/CodeEntropy/levels/axes.py b/CodeEntropy/levels/axes.py index e27d457..bcc693f 100644 --- a/CodeEntropy/levels/axes.py +++ b/CodeEntropy/levels/axes.py @@ -1113,34 +1113,65 @@ def get_custom_principal_axes( return principal_axes, moment_of_inertia - def get_principal_axes(self, group, wrap: bool = False) -> np.ndarray: - """Compute the principal axes of an atom group from its moment of inertia. + @staticmethod + def _positive_largest_component( + vector: np.ndarray, tol: float = 1e-6 + ) -> np.ndarray: + """Return ``vector`` signed so that its largest component is positive. + + Components within ``tol`` of the largest magnitude count as ties, and the + first of them decides the sign. + """ + i = np.flatnonzero(np.abs(vector) >= np.abs(vector).max() - tol)[0] + return vector if vector[i] > 0 else -vector + + def get_principal_axes( + self, group, wrap: bool = False, rel_tol: float = 1e-8 + ) -> np.ndarray: + """Compute reproducible principal axes of an atom group. - Equivalent to MDAnalysis's ``AtomGroup.principal_axes()``, but uses - ``np.linalg.eigh`` rather than ``np.linalg.eig``. The moment of inertia - tensor is symmetric, so ``eigh`` returns orthonormal axes, whereas ``eig`` - can return skewed axes for (near-)degenerate moments. + Like MDAnalysis's ``AtomGroup.principal_axes()``, but using ``np.linalg.eigh`` + and a canonical frame, so the result does not depend on which eigenvectors + the LAPACK build happens to return. - - Axes are sorted by descending (signed) eigenvalue and returned as rows. - - If the axes are left-handed, all three are flipped, as in MDAnalysis. + - Axes are sorted by descending eigenvalue and returned as rows. + - Non-degenerate axes take the sign that makes their largest component + positive, and the last axis completes a right-handed frame. + - If two moments agree to within ``rel_tol`` (e.g. a linear bead), the + in-plane axes are built from the lab axis most perpendicular to the + unique axis. If all three agree, the lab axes are returned. Args: group: MDAnalysis atom group (or anything with ``.atoms``). - wrap: Whether to wrap atoms into the primary unit cell before computing - the moment of inertia. + wrap: Whether to wrap atoms into the primary unit cell first. + rel_tol: Relative tolerance, scaled by the largest moment, below which + two moments are treated as degenerate. Returns: - np.ndarray: (3, 3) principal axes (rows). + np.ndarray: (3, 3) principal axes (rows), right-handed. """ - atomgroup = group.atoms - e_val, e_vec = np.linalg.eigh(atomgroup.moment_of_inertia(wrap=wrap)) - - e_vec = e_vec[:, np.argsort(e_val)[::-1]].T - - if np.dot(np.cross(e_vec[0], e_vec[1]), e_vec[2]) < 0: - e_vec *= -1 - - return e_vec + e_val, e_vec = np.linalg.eigh(group.atoms.moment_of_inertia(wrap=wrap)) + order = np.argsort(e_val)[::-1] + vals, axes = e_val[order], e_vec[:, order].T + + gap = rel_tol * max(abs(vals[0]), np.finfo(float).tiny) + d01 = abs(vals[0] - vals[1]) <= gap + d12 = abs(vals[1] - vals[2]) <= gap + + if d01 and d12: + return np.eye(3) + + if d01 or d12: + n = self._positive_largest_component(axes[2] if d01 else axes[0]) + i = np.flatnonzero(np.abs(n) <= np.abs(n).min() + 1e-6)[0] + u = np.eye(3)[i] - n[i] * n + u /= np.linalg.norm(u) + v = np.cross(n, u) + return np.array([u, v, n] if d01 else [n, u, v]) + + a0 = self._positive_largest_component(axes[0]) + a1 = self._positive_largest_component(axes[1]) + return np.array([a0, a1, np.cross(a0, a1)]) def get_UA_masses(self, molecule) -> list[float]: """Return united-atom (UA) masses for a molecule. diff --git a/tests/unit/CodeEntropy/levels/test_axes.py b/tests/unit/CodeEntropy/levels/test_axes.py index 8c5c58b..eb1b32d 100644 --- a/tests/unit/CodeEntropy/levels/test_axes.py +++ b/tests/unit/CodeEntropy/levels/test_axes.py @@ -340,52 +340,77 @@ def test_get_vanilla_axes_sorts_eigenvalues_desc_by_abs(monkeypatch): assert np.allclose(moments, np.array([-10.0, 3.0, 1.0])) +def _tensor(eigenvalues, seed=0): + q, _ = np.linalg.qr(np.random.default_rng(seed).normal(size=(3, 3))) + return q @ np.diag(eigenvalues) @ q.T + + +def _group_with(tensor): + group = MagicMock() + group.atoms.moment_of_inertia.return_value = tensor + return group + + def test_get_principal_axes_sorts_by_descending_eigenvalue(): ax = AxesCalculator() - group = MagicMock() - group.atoms.moment_of_inertia.return_value = np.diag([1.0, 3.0, 2.0]) - axes = ax.get_principal_axes(group) + axes = ax.get_principal_axes(_group_with(np.diag([1.0, 3.0, 2.0]))) - # eigenvalues 3, 2, 1 => rows along y, z, x (sign may differ) - expected = np.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]], dtype=float) - assert np.allclose(np.abs(axes), expected) + # eigenvalues 3, 2, 1 => rows along y, z, x + assert np.allclose(axes, [[0, 1, 0], [0, 0, 1], [1, 0, 0]]) -def test_get_principal_axes_orthonormal_and_right_handed_for_near_degenerate(): +@pytest.mark.parametrize( + "eigenvalues", + [ + (1.0, 2.0, 5.0), # all distinct + (0.0, 0.845, 0.845), # linear bead + (5.0, 5.0, 1.0), # symmetric top, degenerate pair on top + (2.0, 2.0, 2.0), # spherical top + ], +) +def test_get_principal_axes_is_orthonormal_and_right_handed(eigenvalues): ax = AxesCalculator() - rng = np.random.default_rng(0) - q, _ = np.linalg.qr(rng.normal(size=(3, 3))) - tensor = q @ np.diag([1.0, 1.0 + 1e-9, 5.0]) @ q.T - group = MagicMock() - group.atoms.moment_of_inertia.return_value = tensor - axes = ax.get_principal_axes(group) + axes = ax.get_principal_axes(_group_with(_tensor(eigenvalues))) assert np.allclose(axes @ axes.T, np.eye(3), atol=1e-12) assert np.isclose(np.linalg.det(axes), 1.0) - assert np.isclose(abs(np.dot(axes[0], q[:, 2])), 1.0) -def test_get_principal_axes_flips_all_axes_when_left_handed(monkeypatch): +@pytest.mark.parametrize( + "eigenvalues", + [(1.0, 2.0, 5.0), (0.0, 0.845, 0.845), (5.0, 5.0, 1.0), (2.0, 2.0, 2.0)], +) +def test_get_principal_axes_ignores_arbitrary_eigenvector_choices( + monkeypatch, eigenvalues +): ax = AxesCalculator() - group = MagicMock() - group.atoms.moment_of_inertia.return_value = np.eye(3) - monkeypatch.setattr( - np.linalg, "eigh", lambda _m: (np.array([1.0, 2.0, 3.0]), np.eye(3)) - ) + group = _group_with(_tensor(eigenvalues)) + reference = ax.get_principal_axes(group) + real_eigh = np.linalg.eigh + rng = np.random.default_rng(1) + + def arbitrary_eigh(matrix): + w, v = real_eigh(matrix) + v = v * rng.choice([-1.0, 1.0], size=3) + for i in range(2): + if abs(w[i] - w[i + 1]) <= 1e-9 * max(abs(w).max(), 1e-300): + t = rng.uniform(0, 2 * np.pi) + c, s = np.cos(t), np.sin(t) + a, b = v[:, i].copy(), v[:, i + 1].copy() + v[:, i], v[:, i + 1] = c * a + s * b, -s * a + c * b + return w, v - axes = ax.get_principal_axes(group) + monkeypatch.setattr(np.linalg, "eigh", arbitrary_eigh) - # descending order gives rows e3, e2, e1 (left-handed), so all are negated - expected = -np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]], dtype=float) - assert np.allclose(axes, expected) + for _ in range(25): + assert np.allclose(ax.get_principal_axes(group), reference, atol=1e-9) def test_get_principal_axes_passes_wrap_to_moment_of_inertia(): ax = AxesCalculator() - group = MagicMock() - group.atoms.moment_of_inertia.return_value = np.diag([3.0, 2.0, 1.0]) + group = _group_with(np.diag([3.0, 2.0, 1.0])) ax.get_principal_axes(group, wrap=True) From def8b23ca880d838cb6e368bd462ee0d98424ad4 Mon Sep 17 00:00:00 2001 From: harryswift01 Date: Wed, 7 Oct 2026 14:14:03 +0100 Subject: [PATCH 9/9] tests(regression): update all baselines --- .../baselines/benzaldehyde/axes_off.json | 10 ++--- .../baselines/benzene/axes_off.json | 10 ++--- .../baselines/cyclohexane/axes_off.json | 10 ++--- tests/regression/baselines/dna/axes_off.json | 16 ++++---- .../dna/combined_forcetorque_off.json | 12 +++--- .../baselines/dna/frame_window.json | 8 ++-- .../baselines/dna/grouping_each.json | 4 +- .../baselines/dna/selection_subset.json | 4 +- .../baselines/ethyl-acetate/axes_off.json | 10 ++--- .../baselines/methane/axes_off.json | 6 +-- .../methane/combined_forcetorque_off.json | 6 +-- .../baselines/methane/frame_window.json | 6 +-- .../baselines/methane/grouping_each.json | 38 +++++++++---------- .../baselines/methane/selection_subset.json | 6 +-- .../baselines/methanol/axes_off.json | 8 ++-- .../baselines/octonol/axes_off.json | 10 ++--- .../regression/baselines/water/axes_off.json | 6 +-- .../water/combined_forcetorque_off.json | 6 +-- .../baselines/water/frame_window.json | 6 +-- .../baselines/water/grouping_each.json | 26 ++++++------- .../baselines/water/selection_subset.json | 6 +-- .../regression/baselines/water/water_off.json | 6 +-- 22 files changed, 110 insertions(+), 110 deletions(-) diff --git a/tests/regression/baselines/benzaldehyde/axes_off.json b/tests/regression/baselines/benzaldehyde/axes_off.json index 0d34d6c..9686d47 100644 --- a/tests/regression/baselines/benzaldehyde/axes_off.json +++ b/tests/regression/baselines/benzaldehyde/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.059408867580823616, - "united_atom:Rovibrational": 39.36932344859785, - "residue:FTmat-Transvibrational": 81.48352353795262, - "residue:FTmat-Rovibrational": 63.04898043265405, + "united_atom:Transvibrational": 0.08580917390710577, + "united_atom:Rovibrational": 32.7616905666739, + "residue:FTmat-Transvibrational": 87.38657089591656, + "residue:FTmat-Rovibrational": 62.30339378754512, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 20.481571492615355 }, - "total": 204.44280777940068 + "total": 203.01903591665805 } } } diff --git a/tests/regression/baselines/benzene/axes_off.json b/tests/regression/baselines/benzene/axes_off.json index 109194e..1232f65 100644 --- a/tests/regression/baselines/benzene/axes_off.json +++ b/tests/regression/baselines/benzene/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.16163858692459776, - "united_atom:Rovibrational": 44.48477691495675, - "residue:FTmat-Transvibrational": 81.11811255841327, - "residue:FTmat-Rovibrational": 47.03606119622739, + "united_atom:Transvibrational": 0.16962646355884187, + "united_atom:Rovibrational": 37.767489105707035, + "residue:FTmat-Transvibrational": 71.55604397935048, + "residue:FTmat-Rovibrational": 48.02807537326126, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 172.80058925652202 + "total": 157.5212349218776 } } } diff --git a/tests/regression/baselines/cyclohexane/axes_off.json b/tests/regression/baselines/cyclohexane/axes_off.json index 2d6038a..cbb4b4a 100644 --- a/tests/regression/baselines/cyclohexane/axes_off.json +++ b/tests/regression/baselines/cyclohexane/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.8231608488813442, - "united_atom:Rovibrational": 24.640396903026634, - "residue:FTmat-Transvibrational": 84.05755363684698, - "residue:FTmat-Rovibrational": 61.73316378799838, + "united_atom:Transvibrational": 0.9192999101058387, + "united_atom:Rovibrational": 21.293152671979605, + "residue:FTmat-Transvibrational": 86.88296288038606, + "residue:FTmat-Rovibrational": 61.34457371320608, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 171.2542751767533 + "total": 170.4399891756776 } } } diff --git a/tests/regression/baselines/dna/axes_off.json b/tests/regression/baselines/dna/axes_off.json index 6a9dab7..f7775a5 100644 --- a/tests/regression/baselines/dna/axes_off.json +++ b/tests/regression/baselines/dna/axes_off.json @@ -3,30 +3,30 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.2910746542567035, + "united_atom:Rovibrational": 0.8417875111286033, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 26.68254629775581, - "polymer:FTmat-Transvibrational": 48.50274293414517, + "residue:Rovibrational": 28.697967895577555, + "polymer:FTmat-Transvibrational": 48.2396946675769, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 10.584542990557836, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 91.81981221334323 + "total": 93.1228984014686 }, "1": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 1.9680216598831306, + "united_atom:Rovibrational": 1.4917544859287981, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 24.831990780037884, - "polymer:FTmat-Transvibrational": 57.35678551116436, + "residue:Rovibrational": 27.42942321356182, + "polymer:FTmat-Transvibrational": 57.35678551116437, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 5.292271495278918, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 94.207974782992 + "total": 96.3291400425616 } } } diff --git a/tests/regression/baselines/dna/combined_forcetorque_off.json b/tests/regression/baselines/dna/combined_forcetorque_off.json index 339a163..449746a 100644 --- a/tests/regression/baselines/dna/combined_forcetorque_off.json +++ b/tests/regression/baselines/dna/combined_forcetorque_off.json @@ -6,13 +6,13 @@ "united_atom:Rovibrational": 0.0021606790121284584, "residue:Transvibrational": 0.0, "residue:Rovibrational": 3.3768006840852487, - "polymer:Transvibrational": 21.182662154911913, - "polymer:Rovibrational": 12.837576042626926, + "polymer:Transvibrational": 21.18266215491191, + "polymer:Rovibrational": 12.837576042626923, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 42.15810489726393 + "total": 42.158104897263925 }, "1": { "components": { @@ -20,13 +20,13 @@ "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, "residue:Rovibrational": 2.386320108254459, - "polymer:Transvibrational": 16.607667396609127, - "polymer:Rovibrational": 12.304363914795598, + "polymer:Transvibrational": 16.607667396609134, + "polymer:Rovibrational": 12.304363914795605, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 36.075721033946394 + "total": 36.07572103394641 } } } diff --git a/tests/regression/baselines/dna/frame_window.json b/tests/regression/baselines/dna/frame_window.json index 8281138..de5f16d 100644 --- a/tests/regression/baselines/dna/frame_window.json +++ b/tests/regression/baselines/dna/frame_window.json @@ -5,14 +5,14 @@ "united_atom:Transvibrational": 0.0, "united_atom:Rovibrational": 1.5821720528374947, "residue:Transvibrational": 0.0, - "residue:Rovibrational": 26.60656641113743, - "polymer:FTmat-Transvibrational": 48.50274293414517, + "residue:Rovibrational": 28.306080770984952, + "polymer:FTmat-Transvibrational": 48.2396946675769, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 10.584542990557836, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 92.03492972530563 + "total": 93.47139581858488 }, "1": { "components": { @@ -20,7 +20,7 @@ "united_atom:Rovibrational": 2.527793636620802, "residue:Transvibrational": 0.0, "residue:Rovibrational": 24.4275653595082, - "polymer:FTmat-Transvibrational": 57.35678551116436, + "polymer:FTmat-Transvibrational": 57.35678551116437, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 5.292271495278918, "residue:Conformational": 0.0, diff --git a/tests/regression/baselines/dna/grouping_each.json b/tests/regression/baselines/dna/grouping_each.json index 1e29fb1..1fe99c3 100644 --- a/tests/regression/baselines/dna/grouping_each.json +++ b/tests/regression/baselines/dna/grouping_each.json @@ -20,13 +20,13 @@ "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, "residue:Rovibrational": 2.386320108254459, - "polymer:FTmat-Transvibrational": 11.110372533885968, + "polymer:FTmat-Transvibrational": 11.110372533885974, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 18.274062256427637 + "total": 18.27406225642764 } } } diff --git a/tests/regression/baselines/dna/selection_subset.json b/tests/regression/baselines/dna/selection_subset.json index 1e29fb1..1fe99c3 100644 --- a/tests/regression/baselines/dna/selection_subset.json +++ b/tests/regression/baselines/dna/selection_subset.json @@ -20,13 +20,13 @@ "united_atom:Rovibrational": 0.01846427765949588, "residue:Transvibrational": 0.0, "residue:Rovibrational": 2.386320108254459, - "polymer:FTmat-Transvibrational": 11.110372533885968, + "polymer:FTmat-Transvibrational": 11.110372533885974, "polymer:FTmat-Rovibrational": 0.0, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "polymer:Orientational": 4.758905336627712 }, - "total": 18.274062256427637 + "total": 18.27406225642764 } } } diff --git a/tests/regression/baselines/ethyl-acetate/axes_off.json b/tests/regression/baselines/ethyl-acetate/axes_off.json index b501e82..563fc25 100644 --- a/tests/regression/baselines/ethyl-acetate/axes_off.json +++ b/tests/regression/baselines/ethyl-acetate/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 1.0264523212404142, - "united_atom:Rovibrational": 78.75362855419775, - "residue:FTmat-Transvibrational": 81.02749922723585, - "residue:FTmat-Rovibrational": 56.27644205458492, + "united_atom:Transvibrational": 0.8860257587478036, + "united_atom:Rovibrational": 72.03827469435456, + "residue:FTmat-Transvibrational": 75.7178045416724, + "residue:FTmat-Rovibrational": 56.82926956884208, "united_atom:Conformational": 7.90098624365273, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 224.98500840091168 + "total": 213.37236080726956 } } } diff --git a/tests/regression/baselines/methane/axes_off.json b/tests/regression/baselines/methane/axes_off.json index 5eac433..e11174c 100644 --- a/tests/regression/baselines/methane/axes_off.json +++ b/tests/regression/baselines/methane/axes_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.71309458819117, - "united_atom:Rovibrational": 34.49645268839667, + "united_atom:Transvibrational": 42.10996455719709, + "united_atom:Rovibrational": 34.12776972010649, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.20954727658784 + "total": 76.23773427730359 } } } diff --git a/tests/regression/baselines/methane/combined_forcetorque_off.json b/tests/regression/baselines/methane/combined_forcetorque_off.json index 5b4ce51..bb219d5 100644 --- a/tests/regression/baselines/methane/combined_forcetorque_off.json +++ b/tests/regression/baselines/methane/combined_forcetorque_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.71309458819117, - "united_atom:Rovibrational": 34.44108294190893, + "united_atom:Transvibrational": 42.10996455719709, + "united_atom:Rovibrational": 34.072764680966635, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.1541775301001 + "total": 76.18272923816372 } } } diff --git a/tests/regression/baselines/methane/frame_window.json b/tests/regression/baselines/methane/frame_window.json index 99458e4..c763747 100644 --- a/tests/regression/baselines/methane/frame_window.json +++ b/tests/regression/baselines/methane/frame_window.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 40.546757804157515, - "united_atom:Rovibrational": 33.43627689514928, + "united_atom:Transvibrational": 40.47491947577109, + "united_atom:Rovibrational": 34.26604141713925, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 73.98303469930678 + "total": 74.74096089291034 } } } diff --git a/tests/regression/baselines/methane/grouping_each.json b/tests/regression/baselines/methane/grouping_each.json index 949e996..8e723da 100644 --- a/tests/regression/baselines/methane/grouping_each.json +++ b/tests/regression/baselines/methane/grouping_each.json @@ -3,29 +3,29 @@ "0": { "components": { "united_atom:Transvibrational": 24.315699188266905, - "united_atom:Rovibrational": 21.04839012420562, + "united_atom:Rovibrational": 21.048390124205607, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 45.36408931247253 + "total": 45.364089312472515 }, "1": { "components": { "united_atom:Transvibrational": 23.766082670463117, - "united_atom:Rovibrational": 16.769636839671318, + "united_atom:Rovibrational": 16.769636839671286, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 40.535719510134435 + "total": 40.5357195101344 }, "2": { "components": { - "united_atom:Transvibrational": 24.83389621978833, - "united_atom:Rovibrational": 16.996392060962343, + "united_atom:Transvibrational": 24.833896219788343, + "united_atom:Rovibrational": 16.99639206096234, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 41.83028828075067 + "total": 41.83028828075068 }, "3": { "components": { @@ -38,12 +38,12 @@ }, "4": { "components": { - "united_atom:Transvibrational": 6.880461178899526, - "united_atom:Rovibrational": 4.441585994100293, + "united_atom:Transvibrational": 6.880461178899528, + "united_atom:Rovibrational": 4.441585994100294, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 11.322047172999818 + "total": 11.322047172999822 }, "5": { "components": { @@ -57,38 +57,38 @@ "6": { "components": { "united_atom:Transvibrational": 25.694168010993906, - "united_atom:Rovibrational": 6.731392483940259, + "united_atom:Rovibrational": 6.731392483940268, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 32.42556049493417 + "total": 32.425560494934174 }, "7": { "components": { - "united_atom:Transvibrational": 10.533257828925988, - "united_atom:Rovibrational": 8.975639133015862, + "united_atom:Transvibrational": 10.533257828925992, + "united_atom:Rovibrational": 8.975639133015871, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 19.50889696194185 + "total": 19.508896961941865 }, "8": { "components": { "united_atom:Transvibrational": 7.332978272264892, - "united_atom:Rovibrational": 3.0418502362906055, + "united_atom:Rovibrational": 3.0418502362906077, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 10.374828508555497 + "total": 10.374828508555499 }, "9": { "components": { "united_atom:Transvibrational": 4.023932761002867, - "united_atom:Rovibrational": 8.289324383636096, + "united_atom:Rovibrational": 8.289324383636105, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 12.313257144638964 + "total": 12.313257144638971 } } } diff --git a/tests/regression/baselines/methane/selection_subset.json b/tests/regression/baselines/methane/selection_subset.json index 5b4ce51..bb219d5 100644 --- a/tests/regression/baselines/methane/selection_subset.json +++ b/tests/regression/baselines/methane/selection_subset.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 42.71309458819117, - "united_atom:Rovibrational": 34.44108294190893, + "united_atom:Transvibrational": 42.10996455719709, + "united_atom:Rovibrational": 34.072764680966635, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 77.1541775301001 + "total": 76.18272923816372 } } } diff --git a/tests/regression/baselines/methanol/axes_off.json b/tests/regression/baselines/methanol/axes_off.json index 518b54e..a631b7f 100644 --- a/tests/regression/baselines/methanol/axes_off.json +++ b/tests/regression/baselines/methanol/axes_off.json @@ -3,14 +3,14 @@ "0": { "components": { "united_atom:Transvibrational": 0.0, - "united_atom:Rovibrational": 40.470578424967975, - "residue:FTmat-Transvibrational": 81.39150587087775, - "residue:FTmat-Rovibrational": 39.65185616131401, + "united_atom:Rovibrational": 42.53228254354206, + "residue:FTmat-Transvibrational": 73.3941369795574, + "residue:FTmat-Rovibrational": 41.3922077822835, "united_atom:Conformational": 0.0, "residue:Conformational": 0.0, "residue:Orientational": 0.0 }, - "total": 161.51394045715975 + "total": 157.31862730538296 } } } diff --git a/tests/regression/baselines/octonol/axes_off.json b/tests/regression/baselines/octonol/axes_off.json index 3ac5527..0a7dc47 100644 --- a/tests/regression/baselines/octonol/axes_off.json +++ b/tests/regression/baselines/octonol/axes_off.json @@ -2,15 +2,15 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 0.3946170181442213, - "united_atom:Rovibrational": 15.964551734192693, - "residue:FTmat-Transvibrational": 88.89652899239388, - "residue:FTmat-Rovibrational": 59.284611948411424, + "united_atom:Transvibrational": 0.3104271940682139, + "united_atom:Rovibrational": 16.91243787411125, + "residue:FTmat-Transvibrational": 85.14543434017183, + "residue:FTmat-Rovibrational": 60.1858724623901, "united_atom:Conformational": 16.83949354267619, "residue:Conformational": 0.0, "residue:Orientational": 25.79114991860739 }, - "total": 207.17095315442577 + "total": 205.18481533202498 } } } diff --git a/tests/regression/baselines/water/axes_off.json b/tests/regression/baselines/water/axes_off.json index 855b3e0..71fecf1 100644 --- a/tests/regression/baselines/water/axes_off.json +++ b/tests/regression/baselines/water/axes_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 50.29463976726311, - "united_atom:Rovibrational": 17.75547865377748, + "united_atom:Transvibrational": 49.83953711865945, + "united_atom:Rovibrational": 17.5849044028192, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.0501184210406 + "total": 67.42444152147866 } } } diff --git a/tests/regression/baselines/water/combined_forcetorque_off.json b/tests/regression/baselines/water/combined_forcetorque_off.json index e3ff82d..1572abf 100644 --- a/tests/regression/baselines/water/combined_forcetorque_off.json +++ b/tests/regression/baselines/water/combined_forcetorque_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 50.29463976726311, - "united_atom:Rovibrational": 17.795473940796423, + "united_atom:Transvibrational": 49.83953711865945, + "united_atom:Rovibrational": 17.626794905166232, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.09011370805953 + "total": 67.46633202382569 } } } diff --git a/tests/regression/baselines/water/frame_window.json b/tests/regression/baselines/water/frame_window.json index 07b9d67..02eebcc 100644 --- a/tests/regression/baselines/water/frame_window.json +++ b/tests/regression/baselines/water/frame_window.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 46.294728006800256, - "united_atom:Rovibrational": 17.298848645671537, + "united_atom:Transvibrational": 46.474173116049116, + "united_atom:Rovibrational": 16.996700484317767, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 63.593576652471796 + "total": 63.470873600366886 } } } diff --git a/tests/regression/baselines/water/grouping_each.json b/tests/regression/baselines/water/grouping_each.json index f14a07e..c88ee7c 100644 --- a/tests/regression/baselines/water/grouping_each.json +++ b/tests/regression/baselines/water/grouping_each.json @@ -2,26 +2,26 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 14.945907953805547, - "united_atom:Rovibrational": 1.894724395364822, + "united_atom:Transvibrational": 14.945907953805552, + "united_atom:Rovibrational": 1.8947243953648225, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 16.84063234917037 + "total": 16.840632349170374 }, "1": { "components": { "united_atom:Transvibrational": 8.111522208287775, - "united_atom:Rovibrational": 0.9607747968334228, + "united_atom:Rovibrational": 0.960774796833424, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 9.072297005121198 + "total": 9.0722970051212 }, "2": { "components": { - "united_atom:Transvibrational": 15.794973479687595, - "united_atom:Rovibrational": 4.606072530590256, + "united_atom:Transvibrational": 15.794973479687597, + "united_atom:Rovibrational": 4.606072530590255, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, @@ -29,30 +29,30 @@ }, "3": { "components": { - "united_atom:Transvibrational": 9.462487265119444, + "united_atom:Transvibrational": 9.462487265119448, "united_atom:Rovibrational": 1.6509513986984767, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 11.11343866381792 + "total": 11.113438663817924 }, "4": { "components": { - "united_atom:Transvibrational": 16.254161245740693, + "united_atom:Transvibrational": 16.254161245740683, "united_atom:Rovibrational": 1.3675973741107645, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 17.62175861985146 + "total": 17.621758619851448 }, "5": { "components": { "united_atom:Transvibrational": 11.577798762033282, - "united_atom:Rovibrational": 7.3511635680049485, + "united_atom:Rovibrational": 7.351163568004953, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 18.92896233003823 + "total": 18.928962330038235 }, "6": { "components": { diff --git a/tests/regression/baselines/water/selection_subset.json b/tests/regression/baselines/water/selection_subset.json index e3ff82d..1572abf 100644 --- a/tests/regression/baselines/water/selection_subset.json +++ b/tests/regression/baselines/water/selection_subset.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 50.29463976726311, - "united_atom:Rovibrational": 17.795473940796423, + "united_atom:Transvibrational": 49.83953711865945, + "united_atom:Rovibrational": 17.626794905166232, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.09011370805953 + "total": 67.46633202382569 } } } diff --git a/tests/regression/baselines/water/water_off.json b/tests/regression/baselines/water/water_off.json index e3ff82d..1572abf 100644 --- a/tests/regression/baselines/water/water_off.json +++ b/tests/regression/baselines/water/water_off.json @@ -2,12 +2,12 @@ "groups": { "0": { "components": { - "united_atom:Transvibrational": 50.29463976726311, - "united_atom:Rovibrational": 17.795473940796423, + "united_atom:Transvibrational": 49.83953711865945, + "united_atom:Rovibrational": 17.626794905166232, "united_atom:Conformational": 0.0, "united_atom:Orientational": 0.0 }, - "total": 68.09011370805953 + "total": 67.46633202382569 } } }