CodeEntropy 2.1.1__tar.gz → 2.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. codeentropy-2.2.0/.github/workflows/update_regression_baselines.yaml +44 -0
  2. {codeentropy-2.1.1 → codeentropy-2.2.0}/CITATION.cff +2 -2
  3. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/__init__.py +1 -1
  4. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/config/runtime.py +8 -2
  5. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/entropy/nodes/configurational.py +1 -1
  6. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/entropy/nodes/orientational.py +1 -1
  7. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/entropy/nodes/vibrational.py +2 -2
  8. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/entropy/workflow.py +23 -13
  9. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/dihedrals.py +239 -237
  10. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/level_dag.py +3 -16
  11. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/mda.py +91 -0
  12. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/neighbors.py +10 -13
  13. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/conformations.py +5 -31
  14. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/covariance.py +1 -1
  15. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/find_neighbors.py +3 -1
  16. codeentropy-2.2.0/CodeEntropy/levels/search.py +289 -0
  17. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/results/reporter.py +2 -2
  18. {codeentropy-2.1.1 → codeentropy-2.2.0}/PKG-INFO +2 -1
  19. {codeentropy-2.1.1 → codeentropy-2.2.0}/conda-recipe/meta.yaml +1 -0
  20. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/developer_guide.rst +36 -3
  21. {codeentropy-2.1.1 → codeentropy-2.2.0}/pyproject.toml +1 -0
  22. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzaldehyde/axes_off.json +10 -10
  23. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzaldehyde/combined_forcetorque_false.json +10 -10
  24. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzaldehyde/default.json +11 -11
  25. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzaldehyde/frame_window.json +10 -10
  26. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzaldehyde/grouping_each.json +18 -18
  27. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzaldehyde/rad.json +11 -11
  28. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzaldehyde/selection_subset.json +10 -10
  29. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzene/axes_off.json +10 -10
  30. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzene/combined_forcetorque_off.json +10 -10
  31. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzene/default.json +10 -10
  32. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzene/frame_window.json +10 -10
  33. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzene/grouping_each.json +20 -20
  34. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzene/rad.json +10 -10
  35. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/benzene/selection_subset.json +10 -10
  36. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/cyclohexane/axes_off.json +8 -8
  37. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/cyclohexane/combined_forcetorque_off.json +8 -8
  38. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/cyclohexane/default.json +11 -11
  39. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/cyclohexane/frame_window.json +8 -8
  40. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/cyclohexane/grouping_each.json +8 -8
  41. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/cyclohexane/rad.json +11 -11
  42. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/cyclohexane/selection_subset.json +8 -8
  43. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/dna/axes_off.json +12 -12
  44. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/dna/combined_forcetorque_off.json +12 -12
  45. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/dna/default.json +12 -12
  46. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/dna/frame_window.json +12 -12
  47. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/dna/grouping_each.json +12 -12
  48. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/dna/selection_subset.json +12 -12
  49. codeentropy-2.2.0/tests/regression/baselines/ethyl-acetate/axes_off.json +45 -0
  50. codeentropy-2.2.0/tests/regression/baselines/ethyl-acetate/combined_forcetorque_off.json +45 -0
  51. codeentropy-2.2.0/tests/regression/baselines/ethyl-acetate/default.json +45 -0
  52. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/ethyl-acetate/frame_window.json +11 -11
  53. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/ethyl-acetate/grouping_each.json +33 -33
  54. codeentropy-2.2.0/tests/regression/baselines/ethyl-acetate/rad.json +45 -0
  55. codeentropy-2.2.0/tests/regression/baselines/ethyl-acetate/selection_subset.json +45 -0
  56. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methane/axes_off.json +8 -8
  57. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methane/combined_forcetorque_off.json +8 -8
  58. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methane/default.json +10 -10
  59. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methane/frame_window.json +8 -8
  60. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methane/grouping_each.json +8 -8
  61. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methane/rad.json +10 -10
  62. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methane/selection_subset.json +8 -8
  63. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methanol/axes_off.json +8 -8
  64. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methanol/combined_forcetorque_off.json +8 -8
  65. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methanol/default.json +10 -10
  66. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methanol/frame_window.json +8 -8
  67. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methanol/grouping_each.json +12 -12
  68. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methanol/rad.json +10 -10
  69. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/methanol/selection_subset.json +8 -8
  70. codeentropy-2.2.0/tests/regression/baselines/octonol/axes_off.json +45 -0
  71. codeentropy-2.2.0/tests/regression/baselines/octonol/combined_forcetorque_off.json +45 -0
  72. codeentropy-2.2.0/tests/regression/baselines/octonol/default.json +45 -0
  73. codeentropy-2.2.0/tests/regression/baselines/octonol/frame_window.json +45 -0
  74. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/octonol/grouping_each.json +31 -31
  75. codeentropy-2.2.0/tests/regression/baselines/octonol/rad.json +45 -0
  76. codeentropy-2.2.0/tests/regression/baselines/octonol/selection_subset.json +45 -0
  77. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/water/axes_off.json +8 -8
  78. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/water/combined_forcetorque_off.json +8 -8
  79. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/water/default.json +10 -10
  80. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/water/frame_window.json +8 -8
  81. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/water/grouping_each.json +8 -8
  82. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/water/rad.json +10 -10
  83. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/water/selection_subset.json +8 -8
  84. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/baselines/water/water_off.json +8 -8
  85. codeentropy-2.2.0/tests/regression/configs/ethyl-acetate/axes_off.yaml +15 -0
  86. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/conftest.py +11 -5
  87. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_workflow.py +19 -4
  88. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_conformations_node.py +1 -0
  89. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_find_neighbors.py +1 -0
  90. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_dihedrals.py +169 -277
  91. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_level_dag_orchestration.py +6 -44
  92. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_level_dag_reduction.py +3 -3
  93. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_mda_universe_operations.py +53 -0
  94. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_neighbors.py +8 -4
  95. codeentropy-2.2.0/tests/unit/CodeEntropy/levels/test_search.py +383 -0
  96. codeentropy-2.2.0/tests/unit/conftest.py +15 -0
  97. codeentropy-2.1.1/CodeEntropy/levels/search.py +0 -241
  98. codeentropy-2.1.1/tests/regression/baselines/ethyl-acetate/axes_off.json +0 -45
  99. codeentropy-2.1.1/tests/regression/baselines/ethyl-acetate/combined_forcetorque_off.json +0 -45
  100. codeentropy-2.1.1/tests/regression/baselines/ethyl-acetate/default.json +0 -45
  101. codeentropy-2.1.1/tests/regression/baselines/ethyl-acetate/rad.json +0 -45
  102. codeentropy-2.1.1/tests/regression/baselines/ethyl-acetate/selection_subset.json +0 -45
  103. codeentropy-2.1.1/tests/regression/baselines/octonol/axes_off.json +0 -45
  104. codeentropy-2.1.1/tests/regression/baselines/octonol/combined_forcetorque_off.json +0 -45
  105. codeentropy-2.1.1/tests/regression/baselines/octonol/default.json +0 -45
  106. codeentropy-2.1.1/tests/regression/baselines/octonol/frame_window.json +0 -45
  107. codeentropy-2.1.1/tests/regression/baselines/octonol/rad.json +0 -45
  108. codeentropy-2.1.1/tests/regression/baselines/octonol/selection_subset.json +0 -45
  109. codeentropy-2.1.1/tests/regression/configs/ethyl-acetate/axes_off.yaml +0 -15
  110. codeentropy-2.1.1/tests/unit/CodeEntropy/levels/test_search.py +0 -277
  111. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/CONTRIBUTING.md +0 -0
  112. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  113. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  114. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  115. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  116. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/ISSUE_TEMPLATE/general_report.md +0 -0
  117. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  118. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/renovate.json +0 -0
  119. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/workflows/daily.yaml +0 -0
  120. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/workflows/pr.yaml +0 -0
  121. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/workflows/release.yaml +0 -0
  122. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/workflows/update-copyright-years-in-license-file.yaml +0 -0
  123. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/workflows/weekly-docs.yaml +0 -0
  124. {codeentropy-2.1.1 → codeentropy-2.2.0}/.github/workflows/weekly-regression.yaml +0 -0
  125. {codeentropy-2.1.1 → codeentropy-2.2.0}/.gitignore +0 -0
  126. {codeentropy-2.1.1 → codeentropy-2.2.0}/.pre-commit-config.yaml +0 -0
  127. {codeentropy-2.1.1 → codeentropy-2.2.0}/CODE_OF_CONDUCT.md +0 -0
  128. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/__main__.py +0 -0
  129. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/cli.py +0 -0
  130. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/config/__init__.py +0 -0
  131. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/config/argparse.py +0 -0
  132. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/core/__init__.py +0 -0
  133. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/core/logging.py +0 -0
  134. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/entropy/__init__.py +0 -0
  135. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/entropy/configurational.py +0 -0
  136. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/entropy/graph.py +0 -0
  137. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/entropy/nodes/__init__.py +0 -0
  138. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/entropy/nodes/aggregate.py +0 -0
  139. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/entropy/orientational.py +0 -0
  140. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/entropy/vibrational.py +0 -0
  141. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/entropy/water.py +0 -0
  142. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/__init__.py +0 -0
  143. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/axes.py +0 -0
  144. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/forces.py +0 -0
  145. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/frame_dag.py +0 -0
  146. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/hierarchy.py +0 -0
  147. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/linalg.py +0 -0
  148. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/__init__.py +0 -0
  149. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/accumulators.py +0 -0
  150. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/beads.py +0 -0
  151. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/detect_levels.py +0 -0
  152. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/detect_molecules.py +0 -0
  153. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/molecules/__init__.py +0 -0
  154. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/molecules/grouping.py +0 -0
  155. {codeentropy-2.1.1 → codeentropy-2.2.0}/CodeEntropy/results/__init__.py +0 -0
  156. {codeentropy-2.1.1 → codeentropy-2.2.0}/LICENSE +0 -0
  157. {codeentropy-2.1.1 → codeentropy-2.2.0}/README.md +0 -0
  158. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/Makefile +0 -0
  159. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/README.md +0 -0
  160. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/_static/README.md +0 -0
  161. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/_static/custom.css +0 -0
  162. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/_static/logos/biosim-codeentropy_logo_dark.png +0 -0
  163. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/_static/logos/biosim-codeentropy_logo_light.png +0 -0
  164. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/_templates/README.md +0 -0
  165. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.cli.rst +0 -0
  166. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.config.argparse.rst +0 -0
  167. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.config.rst +0 -0
  168. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.config.runtime.rst +0 -0
  169. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.core.logging.rst +0 -0
  170. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.core.rst +0 -0
  171. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.configurational.rst +0 -0
  172. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.graph.rst +0 -0
  173. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.nodes.aggregate.rst +0 -0
  174. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.nodes.configurational.rst +0 -0
  175. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.nodes.rst +0 -0
  176. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.nodes.vibrational.rst +0 -0
  177. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.orientational.rst +0 -0
  178. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.rst +0 -0
  179. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.vibrational.rst +0 -0
  180. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.water.rst +0 -0
  181. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.workflow.rst +0 -0
  182. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.axes.rst +0 -0
  183. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.dihedrals.rst +0 -0
  184. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.forces.rst +0 -0
  185. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.frame_dag.rst +0 -0
  186. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.hierarchy.rst +0 -0
  187. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.level_dag.rst +0 -0
  188. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.linalg.rst +0 -0
  189. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.mda.rst +0 -0
  190. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.accumulators.rst +0 -0
  191. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.beads.rst +0 -0
  192. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.conformations.rst +0 -0
  193. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.covariance.rst +0 -0
  194. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.detect_levels.rst +0 -0
  195. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.detect_molecules.rst +0 -0
  196. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.rst +0 -0
  197. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.rst +0 -0
  198. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.molecules.grouping.rst +0 -0
  199. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.molecules.rst +0 -0
  200. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.results.reporter.rst +0 -0
  201. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.results.rst +0 -0
  202. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/CodeEntropy.rst +0 -0
  203. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/api/modules.rst +0 -0
  204. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/conf.py +0 -0
  205. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/config.yaml +0 -0
  206. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/faq.rst +0 -0
  207. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/getting_started.rst +0 -0
  208. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/index.rst +0 -0
  209. {codeentropy-2.1.1 → codeentropy-2.2.0}/docs/science.rst +0 -0
  210. {codeentropy-2.1.1 → codeentropy-2.2.0}/readthedocs.yml +0 -0
  211. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/__init__.py +0 -0
  212. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/cases.py +0 -0
  213. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzaldehyde/axes_off.yaml +0 -0
  214. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzaldehyde/combined_forcetorque_false.yaml +0 -0
  215. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzaldehyde/default.yaml +0 -0
  216. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzaldehyde/frame_window.yaml +0 -0
  217. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzaldehyde/grouping_each.yaml +0 -0
  218. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzaldehyde/rad.yaml +0 -0
  219. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzaldehyde/selection_subset.yaml +0 -0
  220. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzene/axes_off.yaml +0 -0
  221. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzene/combined_forcetorque_off.yaml +0 -0
  222. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzene/default.yaml +0 -0
  223. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzene/frame_window.yaml +0 -0
  224. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzene/grouping_each.yaml +0 -0
  225. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzene/rad.yaml +0 -0
  226. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/benzene/selection_subset.yaml +0 -0
  227. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/cyclohexane/axes_off.yaml +0 -0
  228. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/cyclohexane/combined_forcetorque_off.yaml +0 -0
  229. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/cyclohexane/default.yaml +0 -0
  230. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/cyclohexane/frame_window.yaml +0 -0
  231. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/cyclohexane/grouping_each.yaml +0 -0
  232. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/cyclohexane/rad.yaml +0 -0
  233. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/cyclohexane/selection_subset.yaml +0 -0
  234. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/dna/axes_off.yaml +0 -0
  235. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/dna/combined_forcetorque_off.yaml +0 -0
  236. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/dna/default.yaml +0 -0
  237. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/dna/frame_window.yaml +0 -0
  238. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/dna/grouping_each.yaml +0 -0
  239. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/dna/selection_subset.yaml +0 -0
  240. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/ethyl-acetate/combined_forcetorque_off.yaml +0 -0
  241. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/ethyl-acetate/default.yaml +0 -0
  242. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/ethyl-acetate/frame_window.yaml +0 -0
  243. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/ethyl-acetate/grouping_each.yaml +0 -0
  244. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/ethyl-acetate/rad.yaml +0 -0
  245. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/ethyl-acetate/selection_subset.yaml +0 -0
  246. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methane/axes_off.yaml +0 -0
  247. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methane/combined_forcetorque_off.yaml +0 -0
  248. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methane/default.yaml +0 -0
  249. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methane/frame_window.yaml +0 -0
  250. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methane/grouping_each.yaml +0 -0
  251. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methane/rad.yaml +0 -0
  252. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methane/selection_subset.yaml +0 -0
  253. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methanol/axes_off.yaml +0 -0
  254. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methanol/combined_forcetorque_off.yaml +0 -0
  255. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methanol/default.yaml +0 -0
  256. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methanol/frame_window.yaml +0 -0
  257. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methanol/grouping_each.yaml +0 -0
  258. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methanol/rad.yaml +0 -0
  259. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/methanol/selection_subset.yaml +0 -0
  260. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/octonol/axes_off.yaml +0 -0
  261. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/octonol/combined_forcetorque_off.yaml +0 -0
  262. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/octonol/default.yaml +0 -0
  263. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/octonol/frame_window.yaml +0 -0
  264. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/octonol/grouping_each.yaml +0 -0
  265. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/octonol/rad.yaml +0 -0
  266. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/octonol/selection_subset.yaml +0 -0
  267. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/water/axes_off.yaml +0 -0
  268. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/water/combined_forcetorque_off.yaml +0 -0
  269. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/water/default.yaml +0 -0
  270. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/water/frame_window.yaml +0 -0
  271. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/water/grouping_each.yaml +0 -0
  272. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/water/rad.yaml +0 -0
  273. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/water/selection_subset.yaml +0 -0
  274. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/configs/water/water_off.yaml +0 -0
  275. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/helpers.py +0 -0
  276. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/list_systems.py +0 -0
  277. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/regression/test_regression.py +0 -0
  278. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/cli/test___main__.py +0 -0
  279. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/cli/test_cli.py +0 -0
  280. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/argparse/conftest.py +0 -0
  281. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/argparse/test_argparse_build_parser.py +0 -0
  282. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/argparse/test_argparse_load_config.py +0 -0
  283. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/argparse/test_argparse_resolve.py +0 -0
  284. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/argparse/test_argparse_str2bool.py +0 -0
  285. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/argparse/test_argparse_validate_inputs.py +0 -0
  286. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/conftest.py +0 -0
  287. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_build_universe_branches.py +0 -0
  288. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_citation_data.py +0 -0
  289. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_create_job_folder.py +0 -0
  290. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_print_args_table.py +0 -0
  291. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_required_args.py +0 -0
  292. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_run_entropy_workflow_branches.py +0 -0
  293. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_runtime_properties.py +0 -0
  294. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_show_splash.py +0 -0
  295. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_unit_conversions.py +0 -0
  296. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_universe_io.py +0 -0
  297. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/conftest.py +0 -0
  298. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/test_configure_loggers.py +0 -0
  299. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/test_error_filter.py +0 -0
  300. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/test_export_console.py +0 -0
  301. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/test_get_console_singleton.py +0 -0
  302. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/test_handlers_setup.py +0 -0
  303. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/test_set_level.py +0 -0
  304. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/conftest.py +0 -0
  305. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/nodes/test_aggregate_node.py +0 -0
  306. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/nodes/test_configurational_node.py +0 -0
  307. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/nodes/test_orientational_node.py +0 -0
  308. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/nodes/test_vibrational_node.py +0 -0
  309. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_configurational_edges.py +0 -0
  310. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_configurational_entropy_math.py +0 -0
  311. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_graph.py +0 -0
  312. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_orientational_entropy.py +0 -0
  313. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_vibrational_entropy_math.py +0 -0
  314. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_water_entropy.py +0 -0
  315. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/conftest.py +0 -0
  316. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_build_beads_node.py +0 -0
  317. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_detect_levels_node.py +0 -0
  318. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_detect_molecules_node.py +0 -0
  319. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_frame_covariance_node.py +0 -0
  320. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_init_covariance_accumulators_node.py +0 -0
  321. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_axes.py +0 -0
  322. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_forces_force_torque_calculator.py +0 -0
  323. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_frame_graph.py +0 -0
  324. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_hierarchy_builder.py +0 -0
  325. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_level_dag_reduce.py +0 -0
  326. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_linalg_matrix_utils.py +0 -0
  327. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/molecules/test_grouping.py +0 -0
  328. {codeentropy-2.1.1 → codeentropy-2.2.0}/tests/unit/CodeEntropy/results/test_reporter.py +0 -0
@@ -0,0 +1,44 @@
1
+ name: Update Regression Baselines
2
+
3
+ on:
4
+ workflow_dispatch:
5
+
6
+ concurrency:
7
+ group: update-regression-baselines-${{ github.ref }}
8
+ cancel-in-progress: true
9
+
10
+ permissions:
11
+ contents: write
12
+
13
+ jobs:
14
+ update-baselines:
15
+ name: Update regression baselines
16
+ runs-on: ubuntu-24.04
17
+ timeout-minutes: 30
18
+
19
+ steps:
20
+ - name: Checkout
21
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
22
+ with:
23
+ ref: ${{ github.ref }}
24
+
25
+ - name: Set up Python
26
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
27
+ with:
28
+ python-version: "3.14"
29
+ cache: pip
30
+
31
+ - name: Install testing dependencies
32
+ run: |
33
+ python -m pip install --upgrade pip
34
+ python -m pip install -e .[testing]
35
+
36
+ - name: Update regression baselines
37
+ run: pytest tests/regression --update-baselines
38
+
39
+ - name: Commit updated baselines
40
+ uses: stefanzweifel/git-auto-commit-action@778341af668090896ca464160c2def5d1d1a3eb0 # v6
41
+ with:
42
+ commit_message: "test(regression): update baselines"
43
+ commit_user_name: github-actions[bot]
44
+ commit_user_email: 41898282+github-actions[bot]@users.noreply.github.com
@@ -76,5 +76,5 @@ keywords:
76
76
  - biomolecular simulations
77
77
  - protein flexibility
78
78
  license: MIT
79
- version: 2.1.1
80
- date-released: '2026-04-01'
79
+ version: 2.2.0
80
+ date-released: '2026-04-29'
@@ -8,4 +8,4 @@ entropy estimates, supporting a wide range of applications in molecular simulati
8
8
  and statistical mechanics.
9
9
  """
10
10
 
11
- __version__ = "2.1.1"
11
+ __version__ = "2.2.0"
@@ -335,8 +335,14 @@ class CodeEntropyRunner:
335
335
  kcal_units = args.kcal_force_units
336
336
 
337
337
  if forcefile is None:
338
- logger.debug(f"Loading Universe with {tprfile} and {trrfile}")
339
- return mda.Universe(tprfile, trrfile, format=fileformat)
338
+ if fileformat == "LAMMPSDUMP":
339
+ logger.debug(
340
+ f"Loading Universe with {tprfile} and {trrfile} (LAMMPSDUMP)"
341
+ )
342
+ return universe_operations.convert_lammps(tprfile, trrfile, fileformat)
343
+ else:
344
+ logger.debug(f"Loading Universe with {tprfile} and {trrfile}")
345
+ return mda.Universe(tprfile, trrfile, format=fileformat)
340
346
 
341
347
  return universe_operations.merge_forces(
342
348
  tprfile, trrfile, forcefile, fileformat, kcal_units
@@ -53,7 +53,7 @@ class ConfigurationalEntropyNode:
53
53
  fragments = universe.atoms.fragments
54
54
  results: dict[int, dict[str, float]] = {}
55
55
 
56
- for group_id, mol_ids in groups.items():
56
+ for group_id, mol_ids in sorted(groups.items()):
57
57
  results[group_id] = {"ua": 0.0, "res": 0.0, "poly": 0.0}
58
58
  if not mol_ids:
59
59
  continue
@@ -52,7 +52,7 @@ class OrientationalEntropyNode:
52
52
 
53
53
  results: dict[int, float] = {}
54
54
 
55
- for group_id, mol_ids in groups.items():
55
+ for group_id, mol_ids in sorted(groups.items()):
56
56
  results[group_id] = 0
57
57
  if not mol_ids:
58
58
  continue
@@ -90,7 +90,7 @@ class VibrationalEntropyNode:
90
90
 
91
91
  results: dict[int, dict[str, dict[str, float]]] = {}
92
92
 
93
- for group_id, mol_ids in groups.items():
93
+ for group_id, mol_ids in sorted(groups.items()):
94
94
  results[group_id] = {}
95
95
  if not mol_ids:
96
96
  continue
@@ -198,7 +198,7 @@ class VibrationalEntropyNode:
198
198
  if isinstance(gid2i, dict) and gid2i:
199
199
  return gid2i
200
200
  groups = shared_data["groups"]
201
- return {gid: i for i, gid in enumerate(groups.keys())}
201
+ return {gid: i for i, gid in enumerate(sorted(groups.keys()))}
202
202
 
203
203
  def _get_ua_frame_counts(self, shared_data: Mapping[str, Any]) -> dict[CovKey, int]:
204
204
  """Extract per-(group,residue) frame counts for united-atom covariances.
@@ -96,7 +96,7 @@ class EntropyWorkflow:
96
96
 
97
97
  This orchestrates the complete entropy pipeline:
98
98
  1. Build trajectory slice.
99
- 2. Apply atom selection to create a reduced universe.
99
+ 2. Apply atom and frame selection to create a reduced universe.
100
100
  3. Detect hierarchy levels.
101
101
  4. Group molecules.
102
102
  5. Split groups into water and non-water.
@@ -233,21 +233,31 @@ class EntropyWorkflow:
233
233
  return math.floor((end - start) / step)
234
234
 
235
235
  def _build_reduced_universe(self) -> Any:
236
- """Apply atom selection and return the reduced universe.
237
-
238
- If `selection_string` is "all", the original universe is returned.
236
+ """Apply atom and frame selection and return the reduced universe.
239
237
 
240
238
  Returns:
241
- MDAnalysis Universe (original or reduced).
239
+ MDAnalysis Universe (reduced according to user selections).
242
240
  """
243
241
  selection = self._args.selection_string
242
+ start = self._args.start
243
+ end = len(self._universe.trajectory) if self._args.end == -1 else self._args.end
244
+ step = self._args.step
244
245
  if selection == "all":
245
- return self._universe
246
+ reduced_atoms = self._universe
247
+ else:
248
+ reduced_atoms = self._universe_operations.select_atoms(
249
+ self._universe, selection
250
+ )
251
+ name = f"{len(reduced_atoms.trajectory)}_frame_dump_atom_selection"
252
+ self._run_manager.write_universe(reduced_atoms, name)
253
+
254
+ reduced_frames = self._universe_operations.select_frames(
255
+ reduced_atoms, start, end, step
256
+ )
257
+ name = f"{len(reduced_frames.trajectory)}_frame_dump_frame_selection"
258
+ self._run_manager.write_universe(reduced_frames, name)
246
259
 
247
- reduced = self._universe_operations.select_atoms(self._universe, selection)
248
- name = f"{len(reduced.trajectory)}_frame_dump_atom_selection"
249
- self._run_manager.write_universe(reduced, name)
250
- return reduced
260
+ return reduced_frames
251
261
 
252
262
  def _detect_levels(self, reduced_universe: Any) -> Any:
253
263
  """Detect hierarchy levels for each molecule in the reduced universe.
@@ -293,7 +303,7 @@ class EntropyWorkflow:
293
303
 
294
304
  water_groups = {
295
305
  gid: mol_ids
296
- for gid, mol_ids in groups.items()
306
+ for gid, mol_ids in sorted(groups.items())
297
307
  if any(
298
308
  res.resid in water_resids
299
309
  for mol in [universe.atoms.fragments[i] for i in mol_ids]
@@ -301,7 +311,7 @@ class EntropyWorkflow:
301
311
  )
302
312
  }
303
313
  nonwater_groups = {
304
- gid: g for gid, g in groups.items() if gid not in water_groups
314
+ gid: g for gid, g in sorted(groups.items()) if gid not in water_groups
305
315
  }
306
316
  return nonwater_groups, water_groups
307
317
 
@@ -354,7 +364,7 @@ class EntropyWorkflow:
354
364
  except (TypeError, ValueError):
355
365
  logger.warning("Skipping invalid entry: %s, %s", group_id, result)
356
366
 
357
- for group_id, total in entropy_by_group.items():
367
+ for group_id, total in sorted(entropy_by_group.items()):
358
368
  self._reporter.molecule_data.append(
359
369
  (group_id, "Group Total", "Group Total Entropy", total)
360
370
  )