CodeEntropy 2.1.0__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 (321) hide show
  1. {codeentropy-2.1.0 → codeentropy-2.2.0}/.github/workflows/daily.yaml +5 -3
  2. {codeentropy-2.1.0 → codeentropy-2.2.0}/.github/workflows/pr.yaml +63 -25
  3. codeentropy-2.2.0/.github/workflows/update_regression_baselines.yaml +44 -0
  4. codeentropy-2.2.0/.github/workflows/weekly-regression.yaml +90 -0
  5. {codeentropy-2.1.0 → codeentropy-2.2.0}/.gitignore +1 -1
  6. {codeentropy-2.1.0 → codeentropy-2.2.0}/CITATION.cff +2 -2
  7. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/__init__.py +1 -1
  8. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/config/runtime.py +8 -2
  9. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/entropy/nodes/configurational.py +1 -1
  10. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/entropy/nodes/orientational.py +1 -1
  11. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/entropy/nodes/vibrational.py +2 -2
  12. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/entropy/workflow.py +23 -13
  13. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/dihedrals.py +239 -237
  14. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/level_dag.py +3 -16
  15. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/mda.py +91 -0
  16. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/neighbors.py +10 -13
  17. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/conformations.py +5 -31
  18. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/covariance.py +1 -1
  19. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/find_neighbors.py +3 -1
  20. codeentropy-2.2.0/CodeEntropy/levels/search.py +289 -0
  21. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/results/reporter.py +2 -2
  22. {codeentropy-2.1.0 → codeentropy-2.2.0}/PKG-INFO +3 -1
  23. {codeentropy-2.1.0 → codeentropy-2.2.0}/conda-recipe/meta.yaml +2 -0
  24. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/developer_guide.rst +37 -4
  25. {codeentropy-2.1.0 → codeentropy-2.2.0}/pyproject.toml +13 -1
  26. codeentropy-2.2.0/tests/__init__.py +1 -0
  27. codeentropy-2.2.0/tests/regression/baselines/benzaldehyde/axes_off.json +45 -0
  28. codeentropy-2.2.0/tests/regression/baselines/benzaldehyde/combined_forcetorque_false.json +45 -0
  29. codeentropy-2.1.0/tests/regression/baselines/benzaldehyde.json → codeentropy-2.2.0/tests/regression/baselines/benzaldehyde/default.json +7 -7
  30. codeentropy-2.2.0/tests/regression/baselines/benzaldehyde/frame_window.json +45 -0
  31. codeentropy-2.2.0/tests/regression/baselines/benzaldehyde/grouping_each.json +153 -0
  32. codeentropy-2.1.0/tests/regression/baselines/benzaldehyde_rad.json → codeentropy-2.2.0/tests/regression/baselines/benzaldehyde/rad.json +12 -12
  33. codeentropy-2.2.0/tests/regression/baselines/benzaldehyde/selection_subset.json +45 -0
  34. codeentropy-2.2.0/tests/regression/baselines/benzene/axes_off.json +45 -0
  35. codeentropy-2.2.0/tests/regression/baselines/benzene/combined_forcetorque_off.json +45 -0
  36. codeentropy-2.1.0/tests/regression/baselines/benzene.json → codeentropy-2.2.0/tests/regression/baselines/benzene/default.json +6 -6
  37. codeentropy-2.2.0/tests/regression/baselines/benzene/frame_window.json +45 -0
  38. codeentropy-2.2.0/tests/regression/baselines/benzene/grouping_each.json +153 -0
  39. codeentropy-2.1.0/tests/regression/baselines/benzene_rad.json → codeentropy-2.2.0/tests/regression/baselines/benzene/rad.json +11 -11
  40. codeentropy-2.2.0/tests/regression/baselines/benzene/selection_subset.json +45 -0
  41. codeentropy-2.2.0/tests/regression/baselines/cyclohexane/axes_off.json +45 -0
  42. codeentropy-2.2.0/tests/regression/baselines/cyclohexane/combined_forcetorque_off.json +45 -0
  43. codeentropy-2.1.0/tests/regression/baselines/cyclohexane.json → codeentropy-2.2.0/tests/regression/baselines/cyclohexane/default.json +7 -7
  44. codeentropy-2.2.0/tests/regression/baselines/cyclohexane/frame_window.json +45 -0
  45. codeentropy-2.2.0/tests/regression/baselines/cyclohexane/grouping_each.json +153 -0
  46. codeentropy-2.1.0/tests/regression/baselines/cylcohexane_rad.json → codeentropy-2.2.0/tests/regression/baselines/cyclohexane/rad.json +12 -12
  47. codeentropy-2.2.0/tests/regression/baselines/cyclohexane/selection_subset.json +45 -0
  48. codeentropy-2.2.0/tests/regression/baselines/dna/axes_off.json +61 -0
  49. codeentropy-2.2.0/tests/regression/baselines/dna/combined_forcetorque_off.json +61 -0
  50. codeentropy-2.1.0/tests/regression/baselines/dna.json → codeentropy-2.2.0/tests/regression/baselines/dna/default.json +9 -9
  51. codeentropy-2.2.0/tests/regression/baselines/dna/frame_window.json +61 -0
  52. codeentropy-2.2.0/tests/regression/baselines/dna/grouping_each.json +61 -0
  53. codeentropy-2.2.0/tests/regression/baselines/dna/selection_subset.json +61 -0
  54. codeentropy-2.2.0/tests/regression/baselines/ethyl-acetate/axes_off.json +45 -0
  55. codeentropy-2.2.0/tests/regression/baselines/ethyl-acetate/combined_forcetorque_off.json +45 -0
  56. codeentropy-2.1.0/tests/regression/baselines/ethyl-acetate.json → codeentropy-2.2.0/tests/regression/baselines/ethyl-acetate/default.json +8 -8
  57. codeentropy-2.2.0/tests/regression/baselines/ethyl-acetate/frame_window.json +45 -0
  58. codeentropy-2.2.0/tests/regression/baselines/ethyl-acetate/grouping_each.json +153 -0
  59. codeentropy-2.1.0/tests/regression/baselines/ethyl-acetate_rad.json → codeentropy-2.2.0/tests/regression/baselines/ethyl-acetate/rad.json +12 -12
  60. codeentropy-2.2.0/tests/regression/baselines/ethyl-acetate/selection_subset.json +45 -0
  61. codeentropy-2.2.0/tests/regression/baselines/methane/axes_off.json +42 -0
  62. codeentropy-2.2.0/tests/regression/baselines/methane/combined_forcetorque_off.json +42 -0
  63. codeentropy-2.1.0/tests/regression/baselines/methane.json → codeentropy-2.2.0/tests/regression/baselines/methane/default.json +6 -6
  64. codeentropy-2.2.0/tests/regression/baselines/methane/frame_window.json +42 -0
  65. codeentropy-2.2.0/tests/regression/baselines/methane/grouping_each.json +123 -0
  66. codeentropy-2.1.0/tests/regression/baselines/methane_rad.json → codeentropy-2.2.0/tests/regression/baselines/methane/rad.json +9 -9
  67. codeentropy-2.2.0/tests/regression/baselines/methane/selection_subset.json +42 -0
  68. codeentropy-2.2.0/tests/regression/baselines/methanol/axes_off.json +45 -0
  69. codeentropy-2.2.0/tests/regression/baselines/methanol/combined_forcetorque_off.json +45 -0
  70. codeentropy-2.1.0/tests/regression/baselines/methanol.json → codeentropy-2.2.0/tests/regression/baselines/methanol/default.json +6 -6
  71. codeentropy-2.2.0/tests/regression/baselines/methanol/frame_window.json +45 -0
  72. codeentropy-2.2.0/tests/regression/baselines/methanol/grouping_each.json +153 -0
  73. codeentropy-2.1.0/tests/regression/baselines/methanol_rad.json → codeentropy-2.2.0/tests/regression/baselines/methanol/rad.json +10 -10
  74. codeentropy-2.2.0/tests/regression/baselines/methanol/selection_subset.json +45 -0
  75. codeentropy-2.2.0/tests/regression/baselines/octonol/axes_off.json +45 -0
  76. codeentropy-2.2.0/tests/regression/baselines/octonol/combined_forcetorque_off.json +45 -0
  77. codeentropy-2.1.0/tests/regression/baselines/octonol.json → codeentropy-2.2.0/tests/regression/baselines/octonol/default.json +8 -8
  78. codeentropy-2.2.0/tests/regression/baselines/octonol/frame_window.json +45 -0
  79. codeentropy-2.2.0/tests/regression/baselines/octonol/grouping_each.json +153 -0
  80. codeentropy-2.1.0/tests/regression/baselines/octonal_rad.json → codeentropy-2.2.0/tests/regression/baselines/octonol/rad.json +12 -12
  81. codeentropy-2.2.0/tests/regression/baselines/octonol/selection_subset.json +45 -0
  82. codeentropy-2.2.0/tests/regression/baselines/water/axes_off.json +42 -0
  83. codeentropy-2.2.0/tests/regression/baselines/water/combined_forcetorque_off.json +42 -0
  84. codeentropy-2.1.0/tests/regression/baselines/water.json → codeentropy-2.2.0/tests/regression/baselines/water/default.json +6 -6
  85. codeentropy-2.2.0/tests/regression/baselines/water/frame_window.json +42 -0
  86. codeentropy-2.2.0/tests/regression/baselines/water/grouping_each.json +123 -0
  87. codeentropy-2.1.0/tests/regression/baselines/water_rad.json → codeentropy-2.2.0/tests/regression/baselines/water/rad.json +6 -6
  88. codeentropy-2.2.0/tests/regression/baselines/water/selection_subset.json +42 -0
  89. codeentropy-2.2.0/tests/regression/baselines/water/water_off.json +42 -0
  90. codeentropy-2.2.0/tests/regression/cases.py +103 -0
  91. codeentropy-2.2.0/tests/regression/configs/benzaldehyde/axes_off.yaml +15 -0
  92. codeentropy-2.2.0/tests/regression/configs/benzaldehyde/combined_forcetorque_false.yaml +15 -0
  93. codeentropy-2.2.0/tests/regression/configs/benzaldehyde/frame_window.yaml +14 -0
  94. codeentropy-2.2.0/tests/regression/configs/benzaldehyde/grouping_each.yaml +15 -0
  95. codeentropy-2.1.0/tests/regression/configs/benzaldehyde_rad/config.yaml → codeentropy-2.2.0/tests/regression/configs/benzaldehyde/rad.yaml +1 -1
  96. codeentropy-2.2.0/tests/regression/configs/benzaldehyde/selection_subset.yaml +14 -0
  97. codeentropy-2.2.0/tests/regression/configs/benzene/axes_off.yaml +15 -0
  98. codeentropy-2.2.0/tests/regression/configs/benzene/combined_forcetorque_off.yaml +15 -0
  99. codeentropy-2.1.0/tests/regression/configs/benzene/config.yaml → codeentropy-2.2.0/tests/regression/configs/benzene/default.yaml +2 -2
  100. codeentropy-2.2.0/tests/regression/configs/benzene/frame_window.yaml +14 -0
  101. codeentropy-2.2.0/tests/regression/configs/benzene/grouping_each.yaml +15 -0
  102. codeentropy-2.1.0/tests/regression/configs/benzene_rad/config.yaml → codeentropy-2.2.0/tests/regression/configs/benzene/rad.yaml +3 -3
  103. codeentropy-2.2.0/tests/regression/configs/benzene/selection_subset.yaml +14 -0
  104. codeentropy-2.2.0/tests/regression/configs/cyclohexane/axes_off.yaml +15 -0
  105. codeentropy-2.2.0/tests/regression/configs/cyclohexane/combined_forcetorque_off.yaml +15 -0
  106. codeentropy-2.1.0/tests/regression/configs/cyclohexane/config.yaml → codeentropy-2.2.0/tests/regression/configs/cyclohexane/default.yaml +2 -2
  107. codeentropy-2.2.0/tests/regression/configs/cyclohexane/frame_window.yaml +14 -0
  108. codeentropy-2.2.0/tests/regression/configs/cyclohexane/grouping_each.yaml +15 -0
  109. codeentropy-2.1.0/tests/regression/configs/cyclohexane_rad/config.yaml → codeentropy-2.2.0/tests/regression/configs/cyclohexane/rad.yaml +3 -3
  110. codeentropy-2.2.0/tests/regression/configs/cyclohexane/selection_subset.yaml +14 -0
  111. codeentropy-2.2.0/tests/regression/configs/dna/axes_off.yaml +11 -0
  112. codeentropy-2.2.0/tests/regression/configs/dna/combined_forcetorque_off.yaml +11 -0
  113. codeentropy-2.1.0/tests/regression/configs/dna/config.yaml → codeentropy-2.2.0/tests/regression/configs/dna/default.yaml +1 -1
  114. codeentropy-2.2.0/tests/regression/configs/dna/frame_window.yaml +10 -0
  115. codeentropy-2.2.0/tests/regression/configs/dna/grouping_each.yaml +11 -0
  116. codeentropy-2.2.0/tests/regression/configs/dna/selection_subset.yaml +10 -0
  117. codeentropy-2.2.0/tests/regression/configs/ethyl-acetate/axes_off.yaml +15 -0
  118. codeentropy-2.2.0/tests/regression/configs/ethyl-acetate/combined_forcetorque_off.yaml +15 -0
  119. codeentropy-2.1.0/tests/regression/configs/ethyl-acetate/config.yaml → codeentropy-2.2.0/tests/regression/configs/ethyl-acetate/default.yaml +2 -2
  120. codeentropy-2.2.0/tests/regression/configs/ethyl-acetate/frame_window.yaml +14 -0
  121. codeentropy-2.2.0/tests/regression/configs/ethyl-acetate/grouping_each.yaml +15 -0
  122. codeentropy-2.1.0/tests/regression/configs/ethyl-acetate_rad/config.yaml → codeentropy-2.2.0/tests/regression/configs/ethyl-acetate/rad.yaml +3 -3
  123. codeentropy-2.2.0/tests/regression/configs/ethyl-acetate/selection_subset.yaml +14 -0
  124. codeentropy-2.2.0/tests/regression/configs/methane/axes_off.yaml +16 -0
  125. codeentropy-2.2.0/tests/regression/configs/methane/combined_forcetorque_off.yaml +16 -0
  126. codeentropy-2.2.0/tests/regression/configs/methane/frame_window.yaml +15 -0
  127. codeentropy-2.2.0/tests/regression/configs/methane/grouping_each.yaml +16 -0
  128. codeentropy-2.1.0/tests/regression/configs/methane_rad/config.yaml → codeentropy-2.2.0/tests/regression/configs/methane/rad.yaml +2 -1
  129. codeentropy-2.2.0/tests/regression/configs/methane/selection_subset.yaml +15 -0
  130. codeentropy-2.2.0/tests/regression/configs/methanol/axes_off.yaml +15 -0
  131. codeentropy-2.2.0/tests/regression/configs/methanol/combined_forcetorque_off.yaml +15 -0
  132. codeentropy-2.1.0/tests/regression/configs/methanol/config.yaml → codeentropy-2.2.0/tests/regression/configs/methanol/default.yaml +2 -2
  133. codeentropy-2.2.0/tests/regression/configs/methanol/frame_window.yaml +14 -0
  134. codeentropy-2.2.0/tests/regression/configs/methanol/grouping_each.yaml +15 -0
  135. codeentropy-2.1.0/tests/regression/configs/methanol_rad/config.yaml → codeentropy-2.2.0/tests/regression/configs/methanol/rad.yaml +3 -3
  136. codeentropy-2.2.0/tests/regression/configs/methanol/selection_subset.yaml +14 -0
  137. codeentropy-2.2.0/tests/regression/configs/octonol/axes_off.yaml +15 -0
  138. codeentropy-2.2.0/tests/regression/configs/octonol/combined_forcetorque_off.yaml +15 -0
  139. codeentropy-2.1.0/tests/regression/configs/octonol/config.yaml → codeentropy-2.2.0/tests/regression/configs/octonol/default.yaml +2 -2
  140. codeentropy-2.2.0/tests/regression/configs/octonol/frame_window.yaml +14 -0
  141. codeentropy-2.2.0/tests/regression/configs/octonol/grouping_each.yaml +15 -0
  142. codeentropy-2.1.0/tests/regression/configs/octonol_rad/config.yaml → codeentropy-2.2.0/tests/regression/configs/octonol/rad.yaml +3 -3
  143. codeentropy-2.2.0/tests/regression/configs/octonol/selection_subset.yaml +14 -0
  144. codeentropy-2.2.0/tests/regression/configs/water/axes_off.yaml +15 -0
  145. codeentropy-2.2.0/tests/regression/configs/water/combined_forcetorque_off.yaml +15 -0
  146. codeentropy-2.2.0/tests/regression/configs/water/frame_window.yaml +14 -0
  147. codeentropy-2.2.0/tests/regression/configs/water/grouping_each.yaml +15 -0
  148. codeentropy-2.2.0/tests/regression/configs/water/selection_subset.yaml +14 -0
  149. codeentropy-2.2.0/tests/regression/configs/water/water_off.yaml +15 -0
  150. codeentropy-2.2.0/tests/regression/conftest.py +90 -0
  151. codeentropy-2.2.0/tests/regression/list_systems.py +12 -0
  152. codeentropy-2.2.0/tests/regression/test_regression.py +187 -0
  153. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_workflow.py +19 -4
  154. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_conformations_node.py +1 -0
  155. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_find_neighbors.py +1 -0
  156. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_dihedrals.py +169 -277
  157. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_level_dag_orchestration.py +6 -44
  158. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_level_dag_reduction.py +3 -3
  159. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_mda_universe_operations.py +53 -0
  160. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_neighbors.py +8 -4
  161. codeentropy-2.2.0/tests/unit/CodeEntropy/levels/test_search.py +383 -0
  162. codeentropy-2.2.0/tests/unit/conftest.py +15 -0
  163. codeentropy-2.1.0/.github/workflows/weekly-regression.yaml +0 -51
  164. codeentropy-2.1.0/CodeEntropy/levels/search.py +0 -241
  165. codeentropy-2.1.0/tests/__init__.py +0 -4
  166. codeentropy-2.1.0/tests/pytest.ini +0 -10
  167. codeentropy-2.1.0/tests/regression/conftest.py +0 -46
  168. codeentropy-2.1.0/tests/regression/test_regression.py +0 -155
  169. codeentropy-2.1.0/tests/unit/CodeEntropy/levels/test_search.py +0 -277
  170. {codeentropy-2.1.0 → codeentropy-2.2.0}/.github/CONTRIBUTING.md +0 -0
  171. {codeentropy-2.1.0 → codeentropy-2.2.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  172. {codeentropy-2.1.0 → codeentropy-2.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  173. {codeentropy-2.1.0 → codeentropy-2.2.0}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  174. {codeentropy-2.1.0 → codeentropy-2.2.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  175. {codeentropy-2.1.0 → codeentropy-2.2.0}/.github/ISSUE_TEMPLATE/general_report.md +0 -0
  176. {codeentropy-2.1.0 → codeentropy-2.2.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  177. {codeentropy-2.1.0 → codeentropy-2.2.0}/.github/renovate.json +0 -0
  178. {codeentropy-2.1.0 → codeentropy-2.2.0}/.github/workflows/release.yaml +0 -0
  179. {codeentropy-2.1.0 → codeentropy-2.2.0}/.github/workflows/update-copyright-years-in-license-file.yaml +0 -0
  180. {codeentropy-2.1.0 → codeentropy-2.2.0}/.github/workflows/weekly-docs.yaml +0 -0
  181. {codeentropy-2.1.0 → codeentropy-2.2.0}/.pre-commit-config.yaml +0 -0
  182. {codeentropy-2.1.0 → codeentropy-2.2.0}/CODE_OF_CONDUCT.md +0 -0
  183. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/__main__.py +0 -0
  184. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/cli.py +0 -0
  185. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/config/__init__.py +0 -0
  186. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/config/argparse.py +0 -0
  187. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/core/__init__.py +0 -0
  188. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/core/logging.py +0 -0
  189. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/entropy/__init__.py +0 -0
  190. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/entropy/configurational.py +0 -0
  191. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/entropy/graph.py +0 -0
  192. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/entropy/nodes/__init__.py +0 -0
  193. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/entropy/nodes/aggregate.py +0 -0
  194. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/entropy/orientational.py +0 -0
  195. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/entropy/vibrational.py +0 -0
  196. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/entropy/water.py +0 -0
  197. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/__init__.py +0 -0
  198. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/axes.py +0 -0
  199. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/forces.py +0 -0
  200. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/frame_dag.py +0 -0
  201. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/hierarchy.py +0 -0
  202. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/linalg.py +0 -0
  203. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/__init__.py +0 -0
  204. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/accumulators.py +0 -0
  205. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/beads.py +0 -0
  206. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/detect_levels.py +0 -0
  207. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/levels/nodes/detect_molecules.py +0 -0
  208. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/molecules/__init__.py +0 -0
  209. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/molecules/grouping.py +0 -0
  210. {codeentropy-2.1.0 → codeentropy-2.2.0}/CodeEntropy/results/__init__.py +0 -0
  211. {codeentropy-2.1.0 → codeentropy-2.2.0}/LICENSE +0 -0
  212. {codeentropy-2.1.0 → codeentropy-2.2.0}/README.md +0 -0
  213. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/Makefile +0 -0
  214. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/README.md +0 -0
  215. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/_static/README.md +0 -0
  216. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/_static/custom.css +0 -0
  217. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/_static/logos/biosim-codeentropy_logo_dark.png +0 -0
  218. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/_static/logos/biosim-codeentropy_logo_light.png +0 -0
  219. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/_templates/README.md +0 -0
  220. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.cli.rst +0 -0
  221. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.config.argparse.rst +0 -0
  222. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.config.rst +0 -0
  223. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.config.runtime.rst +0 -0
  224. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.core.logging.rst +0 -0
  225. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.core.rst +0 -0
  226. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.configurational.rst +0 -0
  227. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.graph.rst +0 -0
  228. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.nodes.aggregate.rst +0 -0
  229. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.nodes.configurational.rst +0 -0
  230. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.nodes.rst +0 -0
  231. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.nodes.vibrational.rst +0 -0
  232. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.orientational.rst +0 -0
  233. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.rst +0 -0
  234. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.vibrational.rst +0 -0
  235. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.water.rst +0 -0
  236. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.entropy.workflow.rst +0 -0
  237. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.axes.rst +0 -0
  238. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.dihedrals.rst +0 -0
  239. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.forces.rst +0 -0
  240. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.frame_dag.rst +0 -0
  241. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.hierarchy.rst +0 -0
  242. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.level_dag.rst +0 -0
  243. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.linalg.rst +0 -0
  244. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.mda.rst +0 -0
  245. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.accumulators.rst +0 -0
  246. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.beads.rst +0 -0
  247. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.conformations.rst +0 -0
  248. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.covariance.rst +0 -0
  249. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.detect_levels.rst +0 -0
  250. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.detect_molecules.rst +0 -0
  251. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.nodes.rst +0 -0
  252. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.levels.rst +0 -0
  253. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.molecules.grouping.rst +0 -0
  254. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.molecules.rst +0 -0
  255. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.results.reporter.rst +0 -0
  256. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.results.rst +0 -0
  257. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/CodeEntropy.rst +0 -0
  258. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/api/modules.rst +0 -0
  259. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/conf.py +0 -0
  260. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/config.yaml +0 -0
  261. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/faq.rst +0 -0
  262. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/getting_started.rst +0 -0
  263. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/index.rst +0 -0
  264. {codeentropy-2.1.0 → codeentropy-2.2.0}/docs/science.rst +0 -0
  265. {codeentropy-2.1.0 → codeentropy-2.2.0}/readthedocs.yml +0 -0
  266. /codeentropy-2.1.0/tests/regression/configs/benzaldehyde/config.yaml → /codeentropy-2.2.0/tests/regression/configs/benzaldehyde/default.yaml +0 -0
  267. /codeentropy-2.1.0/tests/regression/configs/methane/config.yaml → /codeentropy-2.2.0/tests/regression/configs/methane/default.yaml +0 -0
  268. /codeentropy-2.1.0/tests/regression/configs/water/config.yaml → /codeentropy-2.2.0/tests/regression/configs/water/default.yaml +0 -0
  269. /codeentropy-2.1.0/tests/regression/configs/water_rad/config.yaml → /codeentropy-2.2.0/tests/regression/configs/water/rad.yaml +0 -0
  270. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/regression/helpers.py +0 -0
  271. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/cli/test___main__.py +0 -0
  272. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/cli/test_cli.py +0 -0
  273. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/argparse/conftest.py +0 -0
  274. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/argparse/test_argparse_build_parser.py +0 -0
  275. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/argparse/test_argparse_load_config.py +0 -0
  276. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/argparse/test_argparse_resolve.py +0 -0
  277. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/argparse/test_argparse_str2bool.py +0 -0
  278. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/argparse/test_argparse_validate_inputs.py +0 -0
  279. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/conftest.py +0 -0
  280. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_build_universe_branches.py +0 -0
  281. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_citation_data.py +0 -0
  282. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_create_job_folder.py +0 -0
  283. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_print_args_table.py +0 -0
  284. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_required_args.py +0 -0
  285. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_run_entropy_workflow_branches.py +0 -0
  286. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_runtime_properties.py +0 -0
  287. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_show_splash.py +0 -0
  288. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_unit_conversions.py +0 -0
  289. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/config/runtime/test_universe_io.py +0 -0
  290. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/conftest.py +0 -0
  291. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/test_configure_loggers.py +0 -0
  292. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/test_error_filter.py +0 -0
  293. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/test_export_console.py +0 -0
  294. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/test_get_console_singleton.py +0 -0
  295. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/test_handlers_setup.py +0 -0
  296. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/core/logging/test_set_level.py +0 -0
  297. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/conftest.py +0 -0
  298. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/nodes/test_aggregate_node.py +0 -0
  299. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/nodes/test_configurational_node.py +0 -0
  300. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/nodes/test_orientational_node.py +0 -0
  301. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/nodes/test_vibrational_node.py +0 -0
  302. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_configurational_edges.py +0 -0
  303. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_configurational_entropy_math.py +0 -0
  304. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_graph.py +0 -0
  305. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_orientational_entropy.py +0 -0
  306. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_vibrational_entropy_math.py +0 -0
  307. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/entropy/test_water_entropy.py +0 -0
  308. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/conftest.py +0 -0
  309. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_build_beads_node.py +0 -0
  310. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_detect_levels_node.py +0 -0
  311. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_detect_molecules_node.py +0 -0
  312. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_frame_covariance_node.py +0 -0
  313. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/nodes/test_init_covariance_accumulators_node.py +0 -0
  314. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_axes.py +0 -0
  315. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_forces_force_torque_calculator.py +0 -0
  316. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_frame_graph.py +0 -0
  317. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_hierarchy_builder.py +0 -0
  318. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_level_dag_reduce.py +0 -0
  319. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/levels/test_linalg_matrix_utils.py +0 -0
  320. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/molecules/test_grouping.py +0 -0
  321. {codeentropy-2.1.0 → codeentropy-2.2.0}/tests/unit/CodeEntropy/results/test_reporter.py +0 -0
@@ -11,14 +11,16 @@ concurrency:
11
11
 
12
12
  jobs:
13
13
  unit:
14
- name: Unit (${{ matrix.os }}, ${{ matrix.python-version }})
14
+ name: Unit (${{ matrix.os }}, py${{ matrix.python-version }})
15
15
  runs-on: ${{ matrix.os }}
16
16
  timeout-minutes: 30
17
+
17
18
  strategy:
18
19
  fail-fast: false
19
20
  matrix:
20
21
  os: [ubuntu-24.04, macos-15, windows-2025]
21
22
  python-version: ["3.12", "3.13", "3.14"]
23
+
22
24
  steps:
23
25
  - name: Checkout
24
26
  uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
@@ -29,10 +31,10 @@ jobs:
29
31
  python-version: ${{ matrix.python-version }}
30
32
  cache: pip
31
33
 
32
- - name: Install (testing)
34
+ - name: Install testing dependencies
33
35
  run: |
34
36
  python -m pip install --upgrade pip
35
37
  python -m pip install -e .[testing]
36
38
 
37
- - name: Pytest (unit) • ${{ matrix.os }} • py${{ matrix.python-version }}
39
+ - name: Run unit tests
38
40
  run: python -m pytest tests/unit
@@ -17,12 +17,13 @@ jobs:
17
17
  matrix:
18
18
  os: [ubuntu-24.04, macos-15, windows-2025]
19
19
  python-version: ["3.12", "3.13", "3.14"]
20
+
20
21
  steps:
21
22
  - name: Checkout
22
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
23
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
23
24
 
24
25
  - name: Set up Python ${{ matrix.python-version }}
25
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
26
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
26
27
  with:
27
28
  python-version: ${{ matrix.python-version }}
28
29
  cache: pip
@@ -35,17 +36,50 @@ jobs:
35
36
  - name: Pytest (unit) • ${{ matrix.os }}, ${{ matrix.python-version }}
36
37
  run: python -m pytest tests/unit
37
38
 
39
+ discover-systems:
40
+ name: Discover regression systems
41
+ runs-on: ubuntu-24.04
42
+ outputs:
43
+ systems: ${{ steps.set-systems.outputs.systems }}
44
+
45
+ steps:
46
+ - name: Checkout
47
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
48
+
49
+ - name: Set up Python 3.14
50
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
51
+ with:
52
+ python-version: "3.14"
53
+ cache: pip
54
+
55
+ - name: Install testing dependencies
56
+ run: |
57
+ python -m pip install --upgrade pip
58
+ python -m pip install -e .[testing]
59
+
60
+ - name: Discover systems
61
+ id: set-systems
62
+ run: |
63
+ SYSTEMS=$(python -m tests.regression.list_systems)
64
+ echo "systems=$SYSTEMS" >> $GITHUB_OUTPUT
65
+
38
66
  regression-quick:
39
- name: Regression (quick)
40
- needs: unit
67
+ name: Regression (fast) • ${{ matrix.system }}
68
+ needs: [unit, discover-systems]
41
69
  runs-on: ubuntu-24.04
42
70
  timeout-minutes: 35
71
+
72
+ strategy:
73
+ fail-fast: false
74
+ matrix:
75
+ system: ${{ fromJson(needs.discover-systems.outputs.systems) }}
76
+
43
77
  steps:
44
78
  - name: Checkout
45
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
79
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
46
80
 
47
81
  - name: Set up Python 3.14
48
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
82
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
49
83
  with:
50
84
  python-version: "3.14"
51
85
  cache: pip
@@ -54,28 +88,31 @@ jobs:
54
88
  uses: actions/cache@v4
55
89
  with:
56
90
  path: .testdata
57
- key: codeentropy-testdata-v1-${{ runner.os }}-py3.14
91
+ key: codeentropy-testdata-${{ runner.os }}-py314
58
92
 
59
- - name: Install (testing)
93
+ - name: Install testing dependencies
60
94
  run: |
61
95
  python -m pip install --upgrade pip
62
96
  python -m pip install -e .[testing]
63
97
 
64
- - name: Pytest (regression quick)
65
- run: python -m pytest tests/regression
98
+ - name: Run fast regression tests (per system)
99
+ run: |
100
+ python -m pytest tests/regression \
101
+ -m "not slow" \
102
+ -n auto \
103
+ --dist=loadscope \
104
+ -k "${{ matrix.system }}" \
105
+ -vv \
106
+ --durations=20
66
107
 
67
108
  - name: Upload artifacts (failure)
68
109
  if: failure()
69
110
  uses: actions/upload-artifact@v4
70
111
  with:
71
- name: quick-regression-failure
112
+ name: quick-regression-failure-${{ matrix.system }}
72
113
  path: |
73
114
  .testdata/**
74
- tests/regression/**/.pytest_cache/**
75
- /tmp/pytest-of-*/pytest-*/**/config.yaml
76
- /tmp/pytest-of-*/pytest-*/**/codeentropy_stdout.txt
77
- /tmp/pytest-of-*/pytest-*/**/codeentropy_stderr.txt
78
- /tmp/pytest-of-*/pytest-*/**/codeentropy_output.json
115
+ /tmp/pytest-of-*/pytest-*/**
79
116
 
80
117
  docs:
81
118
  name: Docs
@@ -93,7 +130,7 @@ jobs:
93
130
  python-version: "3.14"
94
131
  cache: pip
95
132
 
96
- - name: Install
133
+ - name: Install docs dependencies
97
134
  run: |
98
135
  python -m pip install --upgrade pip
99
136
  python -m pip install -e .[docs]
@@ -114,23 +151,23 @@ jobs:
114
151
  name: Pre-commit
115
152
  runs-on: ubuntu-24.04
116
153
  timeout-minutes: 15
154
+
117
155
  steps:
118
156
  - name: Checkout
119
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
157
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
120
158
 
121
159
  - name: Set up Python 3.14
122
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
160
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
123
161
  with:
124
162
  python-version: "3.14"
125
163
  cache: pip
126
164
 
127
- - name: Install (pre-commit)
165
+ - name: Install pre-commit dependencies
128
166
  run: |
129
167
  python -m pip install --upgrade pip
130
168
  python -m pip install -e .[pre-commit]
131
169
 
132
170
  - name: Run pre-commit
133
- shell: bash
134
171
  run: |
135
172
  pre-commit install
136
173
  pre-commit run --all-files || {
@@ -144,8 +181,9 @@ jobs:
144
181
  needs: unit
145
182
  runs-on: ubuntu-24.04
146
183
  timeout-minutes: 30
184
+
147
185
  steps:
148
- - name: Checkout repo
186
+ - name: Checkout
149
187
  uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
150
188
 
151
189
  - name: Set up Python 3.14
@@ -154,12 +192,12 @@ jobs:
154
192
  python-version: "3.14"
155
193
  cache: pip
156
194
 
157
- - name: Install (testing)
195
+ - name: Install testing dependencies
158
196
  run: |
159
197
  python -m pip install --upgrade pip
160
198
  python -m pip install -e .[testing]
161
199
 
162
- - name: Run unit test suite with coverage
200
+ - name: Run coverage
163
201
  run: |
164
202
  pytest tests/unit \
165
203
  --cov CodeEntropy \
@@ -167,7 +205,7 @@ jobs:
167
205
  --cov-report xml \
168
206
  -q
169
207
 
170
- - name: Upload to Coveralls
208
+ - name: Upload coverage to Coveralls
171
209
  uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e
172
210
  with:
173
211
  github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -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
@@ -0,0 +1,90 @@
1
+ name: Weekly Regression Tests
2
+
3
+ on:
4
+ schedule:
5
+ - cron: '0 8 * * 1'
6
+ workflow_dispatch:
7
+
8
+ concurrency:
9
+ group: weekly-regression-${{ github.ref }}
10
+ cancel-in-progress: true
11
+
12
+ jobs:
13
+ discover:
14
+ name: Discover regression systems
15
+ runs-on: ubuntu-24.04
16
+
17
+ outputs:
18
+ systems: ${{ steps.set.outputs.systems }}
19
+
20
+ steps:
21
+ - name: Checkout
22
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
23
+
24
+ - name: Set up Python 3.14
25
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
26
+ with:
27
+ python-version: "3.14"
28
+ cache: pip
29
+
30
+ - name: Install testing dependencies
31
+ run: |
32
+ python -m pip install --upgrade pip
33
+ python -m pip install -e .[testing]
34
+
35
+ - name: Generate system matrix
36
+ id: set
37
+ run: |
38
+ systems=$(python -m tests.regression.list_systems)
39
+ echo "systems=$systems" >> $GITHUB_OUTPUT
40
+
41
+ regression:
42
+ name: Regression (${{ matrix.system }})
43
+ needs: discover
44
+ runs-on: ubuntu-24.04
45
+ timeout-minutes: 360
46
+
47
+ strategy:
48
+ fail-fast: false
49
+ matrix:
50
+ system: ${{ fromJson(needs.discover.outputs.systems) }}
51
+
52
+ steps:
53
+ - name: Checkout
54
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
55
+
56
+ - name: Set up Python 3.14
57
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
58
+ with:
59
+ python-version: "3.14"
60
+ cache: pip
61
+
62
+ - name: Cache regression test data
63
+ uses: actions/cache@v4
64
+ with:
65
+ path: .testdata
66
+ key: codeentropy-testdata-${{ runner.os }}-py314
67
+
68
+ - name: Install testing dependencies
69
+ run: |
70
+ python -m pip install --upgrade pip
71
+ python -m pip install -e .[testing]
72
+
73
+ - name: Run regression tests (slow, per system)
74
+ run: |
75
+ pytest tests/regression \
76
+ -k "${{ matrix.system }}" \
77
+ --run-slow \
78
+ -n auto \
79
+ --dist=loadscope \
80
+ -vv \
81
+ --durations=20
82
+
83
+ - name: Upload regression artifacts (failure)
84
+ if: failure()
85
+ uses: actions/upload-artifact@v4
86
+ with:
87
+ name: regression-${{ matrix.system }}-artifacts
88
+ path: |
89
+ .testdata/**
90
+ /tmp/pytest-of-*/pytest-*/**
@@ -129,4 +129,4 @@ job*
129
129
  .testdata/
130
130
 
131
131
  !tests/regression/baselines/
132
- !tests/regression/baselines/*.json
132
+ !tests/regression/baselines/*/*.json
@@ -76,5 +76,5 @@ keywords:
76
76
  - biomolecular simulations
77
77
  - protein flexibility
78
78
  license: MIT
79
- version: 2.1.0
80
- date-released: '2026-03-26'
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.0"
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
  )