htpolynet 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 (342) hide show
  1. htpolynet-2.2.0/.github/workflows/conda-forge-sync.yml +56 -0
  2. {htpolynet-2.1.0 → htpolynet-2.2.0}/.github/workflows/docker.yml +2 -2
  3. htpolynet-2.2.0/.github/workflows/test.yml +30 -0
  4. {htpolynet-2.1.0 → htpolynet-2.2.0}/.gitignore +4 -2
  5. {htpolynet-2.1.0 → htpolynet-2.2.0}/CHANGELOG.md +177 -0
  6. htpolynet-2.2.0/CITATION.cff +50 -0
  7. htpolynet-2.2.0/CLAUDE.md +103 -0
  8. {htpolynet-2.1.0 → htpolynet-2.2.0}/PKG-INFO +44 -15
  9. htpolynet-2.2.0/README.md +93 -0
  10. htpolynet-2.2.0/ROADMAP.md +116 -0
  11. {htpolynet-2.1.0 → htpolynet-2.2.0}/docker/Dockerfile +13 -7
  12. {htpolynet-2.1.0 → htpolynet-2.2.0}/docker/compose.yml +1 -1
  13. htpolynet-2.2.0/docs/source/example-tutorials/1-polystyrene/pics/buildtraces.png +0 -0
  14. htpolynet-2.2.0/docs/source/example-tutorials/1-polystyrene/pics/cure_info.png +0 -0
  15. htpolynet-2.2.0/docs/source/example-tutorials/1-polystyrene/pics/densification-density.png +0 -0
  16. htpolynet-2.2.0/docs/source/example-tutorials/1-polystyrene/pics/reaction_network.png +0 -0
  17. htpolynet-2.2.0/docs/source/example-tutorials/1-polystyrene/pics/sty-coloring.tcl +22 -0
  18. htpolynet-2.2.0/docs/source/example-tutorials/1-polystyrene/pics/sty-cured.png +0 -0
  19. htpolynet-2.2.0/docs/source/example-tutorials/1-polystyrene/pics/sty-detail.png +0 -0
  20. htpolynet-2.2.0/docs/source/example-tutorials/1-polystyrene/pics/sty-liq.png +0 -0
  21. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/1-polystyrene/results.rst +31 -0
  22. htpolynet-2.2.0/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/buildtraces.png +0 -0
  23. htpolynet-2.2.0/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/cure_info.png +0 -0
  24. htpolynet-2.2.0/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/densification-density.png +0 -0
  25. htpolynet-2.2.0/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-coloring.tcl +23 -0
  26. htpolynet-2.2.0/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-cured.png +0 -0
  27. htpolynet-2.2.0/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-detail.png +0 -0
  28. htpolynet-2.2.0/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-liq.png +0 -0
  29. htpolynet-2.2.0/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/reaction_network.png +0 -0
  30. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/results.rst +18 -9
  31. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/run.rst +13 -12
  32. htpolynet-2.2.0/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/buildtraces.png +0 -0
  33. htpolynet-2.2.0/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/cure_info.png +0 -0
  34. htpolynet-2.2.0/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/densification-density.png +0 -0
  35. htpolynet-2.2.0/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-coloring.tcl +26 -0
  36. htpolynet-2.2.0/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-cured.png +0 -0
  37. htpolynet-2.2.0/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-detail.png +0 -0
  38. htpolynet-2.2.0/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-liq.png +0 -0
  39. htpolynet-2.2.0/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/reaction_network.png +0 -0
  40. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/postsim.rst +1 -1
  41. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/results.rst +15 -4
  42. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/run.rst +12 -11
  43. htpolynet-2.2.0/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/buildtraces.png +0 -0
  44. htpolynet-2.2.0/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/cure_info.png +0 -0
  45. htpolynet-2.2.0/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/densification-density.png +0 -0
  46. htpolynet-2.2.0/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-coloring.tcl +27 -0
  47. htpolynet-2.2.0/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-cured.png +0 -0
  48. htpolynet-2.2.0/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-detail.png +0 -0
  49. htpolynet-2.2.0/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-liq.png +0 -0
  50. htpolynet-2.2.0/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/reaction_network.png +0 -0
  51. htpolynet-2.2.0/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/results.rst +157 -0
  52. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/configuration.rst +97 -0
  53. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/index.rst +45 -0
  54. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/introduction.rst +67 -0
  55. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/monomers.rst +149 -0
  56. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/pics/buildtraces.png +0 -0
  57. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/pics/cure_info.png +0 -0
  58. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/pics/densification-density.png +0 -0
  59. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-coloring.tcl +17 -0
  60. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-ipdi-cured.png +0 -0
  61. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-ipdi-detail.png +0 -0
  62. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-ipdi-liq.png +0 -0
  63. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/pics/reaction_network.png +0 -0
  64. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/postsim.rst +154 -0
  65. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/reactions.rst +204 -0
  66. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/results.rst +145 -0
  67. htpolynet-2.2.0/docs/source/example-tutorials/5-htpb-ipdi/run.rst +197 -0
  68. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/configuration.rst +120 -0
  69. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/index.rst +51 -0
  70. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/introduction.rst +75 -0
  71. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/monomers.rst +120 -0
  72. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-coloring.tcl +23 -0
  73. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-cured.png +0 -0
  74. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-detail.png +0 -0
  75. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-liq.png +0 -0
  76. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/pics/buildtraces.png +0 -0
  77. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/pics/cure_info.png +0 -0
  78. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/pics/densification-density.png +0 -0
  79. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/pics/reaction_network.png +0 -0
  80. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/postsim.rst +163 -0
  81. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/reactions.rst +146 -0
  82. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/results.rst +142 -0
  83. htpolynet-2.2.0/docs/source/example-tutorials/6-cyanate-ester/run.rst +199 -0
  84. htpolynet-2.2.0/docs/source/example-tutorials/index.rst +24 -0
  85. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/htpolynetpackage.rst +49 -9
  86. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/index.rst +1 -0
  87. htpolynet-2.2.0/docs/source/install.rst +234 -0
  88. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/release-history.rst +1 -1
  89. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/configs/configs-for-run.rst +1 -1
  90. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/container-usage.rst +70 -17
  91. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/index.rst +1 -0
  92. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/molecular-structure-inputs.rst +1 -1
  93. htpolynet-2.2.0/docs/source/user-guide/postcure-repair.rst +313 -0
  94. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/usage.rst +2 -0
  95. {htpolynet-2.1.0 → htpolynet-2.2.0}/pyproject.toml +9 -5
  96. htpolynet-2.2.0/scripts/check-conda-sync.py +181 -0
  97. {htpolynet-2.1.0 → htpolynet-2.2.0}/scripts/release.sh +52 -2
  98. htpolynet-2.2.0/scripts/render-detail.sh +104 -0
  99. htpolynet-2.2.0/scripts/render-detail.tcl +207 -0
  100. htpolynet-2.2.0/scripts/render-snapshot.sh +200 -0
  101. {htpolynet-2.1.0 → htpolynet-2.2.0}/scripts/run_all_examples.sh +20 -3
  102. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/analysis/plot.py +318 -119
  103. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/core/bondtemplate.py +2 -0
  104. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/core/runtime.py +49 -49
  105. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/cure/curecontroller.py +1 -1
  106. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/cure/reaction.py +7 -7
  107. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/external/command.py +1 -1
  108. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/external/gromacs.py +5 -3
  109. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/external/smiles_input.py +7 -5
  110. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/external/software.py +39 -13
  111. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/example_depot/1-polystyrene.yaml +2 -2
  112. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/example_depot/5-htpb-ipdi.yaml +10 -10
  113. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/utils/banner.py +1 -1
  114. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/utils/logsetup.py +10 -4
  115. {htpolynet-2.1.0/src/htpolynet → htpolynet-2.2.0/src/htpolynet/utils}/profiling.py +1 -0
  116. htpolynet-2.2.0/tests/unit/__init__.py +0 -0
  117. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/test_chain.py +27 -16
  118. htpolynet-2.2.0/tests/unit/test_gpu_usability.py +77 -0
  119. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/test_gromacs_get_energy_menu.py +4 -0
  120. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/test_gromacs_gmx_energy_trace.py +4 -0
  121. htpolynet-2.2.0/tests/unit/test_inputcheck.py +112 -0
  122. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/test_parameterize_react.py +9 -0
  123. htpolynet-2.2.0/tests/unit/test_plot_smoke.py +143 -0
  124. htpolynet-2.2.0/tests/unit/test_resources.py +76 -0
  125. htpolynet-2.2.0/tests/unit/test_slurm_script.py +162 -0
  126. htpolynet-2.2.0/tests/unit/test_smiles_input.py +110 -0
  127. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/test_topology.py +9 -6
  128. htpolynet-2.1.0/README.md +0 -66
  129. htpolynet-2.1.0/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/buildtraces.png +0 -0
  130. htpolynet-2.1.0/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/cure_info.png +0 -0
  131. htpolynet-2.1.0/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/densification-density.png +0 -0
  132. htpolynet-2.1.0/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-cured.png +0 -0
  133. htpolynet-2.1.0/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-liq.png +0 -0
  134. htpolynet-2.1.0/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/buildtraces.png +0 -0
  135. htpolynet-2.1.0/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/cure_info.png +0 -0
  136. htpolynet-2.1.0/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/densification-density.png +0 -0
  137. htpolynet-2.1.0/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-cured.png +0 -0
  138. htpolynet-2.1.0/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-liq.png +0 -0
  139. htpolynet-2.1.0/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/results.rst +0 -58
  140. htpolynet-2.1.0/docs/source/example-tutorials/index.rst +0 -22
  141. htpolynet-2.1.0/docs/source/install.rst +0 -137
  142. htpolynet-2.1.0/tests/unit/test_resources.py +0 -24
  143. {htpolynet-2.1.0 → htpolynet-2.2.0}/.claude/settings.json +0 -0
  144. {htpolynet-2.1.0 → htpolynet-2.2.0}/.envrc +0 -0
  145. {htpolynet-2.1.0 → htpolynet-2.2.0}/.github/workflows/release.yaml +0 -0
  146. {htpolynet-2.1.0 → htpolynet-2.2.0}/.readthedocs.yaml +0 -0
  147. {htpolynet-2.1.0 → htpolynet-2.2.0}/LICENSE +0 -0
  148. {htpolynet-2.1.0 → htpolynet-2.2.0}/MANIFEST.in +0 -0
  149. {htpolynet-2.1.0 → htpolynet-2.2.0}/docker/docker-entrypoint.sh +0 -0
  150. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/Makefile +0 -0
  151. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/README.rst +0 -0
  152. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/make.bat +0 -0
  153. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/requirements.txt +0 -0
  154. /htpolynet-2.1.0/src/htpolynet/analysis/__init__.py → /htpolynet-2.2.0/docs/source/_static/.gitkeep +0 -0
  155. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/changelog.rst +0 -0
  156. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/conf.py +0 -0
  157. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/0-liquid-styrene/configuration.rst +0 -0
  158. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/0-liquid-styrene/index.rst +0 -0
  159. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/0-liquid-styrene/introduction.rst +0 -0
  160. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/0-liquid-styrene/monomer.rst +0 -0
  161. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/0-liquid-styrene/postsim.rst +0 -0
  162. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/0-liquid-styrene/results.rst +0 -0
  163. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/0-liquid-styrene/run.rst +0 -0
  164. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/1-polystyrene/configuration.rst +0 -0
  165. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/1-polystyrene/index.rst +0 -0
  166. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/1-polystyrene/introduction.rst +0 -0
  167. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/1-polystyrene/monomer.rst +0 -0
  168. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/1-polystyrene/pics/STY.png +0 -0
  169. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/1-polystyrene/pics/STYCC.png +0 -0
  170. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/1-polystyrene/pics/final-box.png +0 -0
  171. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/1-polystyrene/pics/styrene-polymerization.png +0 -0
  172. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/1-polystyrene/postsim.rst +0 -0
  173. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/1-polystyrene/reactions.rst +0 -0
  174. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/1-polystyrene/run.rst +0 -0
  175. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/configuration.rst +0 -0
  176. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/index.rst +0 -0
  177. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/introduction.rst +0 -0
  178. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/BPA.png +0 -0
  179. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/GMA.png +0 -0
  180. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/HIE.png +0 -0
  181. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/four_dimers.eps +0 -0
  182. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/four_dimers.fig +0 -0
  183. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/four_dimers.png +0 -0
  184. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/p1-traces.png +0 -0
  185. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/vesys.eps +0 -0
  186. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/vesys.fig +0 -0
  187. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/vesys.png +0 -0
  188. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/postsim.rst +0 -0
  189. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/reactions.rst +0 -0
  190. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/configuration.rst +0 -0
  191. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/index.rst +0 -0
  192. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/introduction.rst +0 -0
  193. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/monomers.rst +0 -0
  194. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/DGE-epoxy.png +0 -0
  195. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/DGE-labelled.png +0 -0
  196. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/PAC-2d.png +0 -0
  197. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/PAC-labelled.png +0 -0
  198. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dgesys.eps +0 -0
  199. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dgesys.fig +0 -0
  200. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dgesys.png +0 -0
  201. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/equil-rho_v_ns.png +0 -0
  202. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/postsim-typical.png +0 -0
  203. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-e.png +0 -0
  204. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-equil-rho_v_ns.png +0 -0
  205. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-rho_v_ns.png +0 -0
  206. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-tg.png +0 -0
  207. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/r1.png +0 -0
  208. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/r2.png +0 -0
  209. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/r3.png +0 -0
  210. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/rho_v_ns.png +0 -0
  211. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/short-e.png +0 -0
  212. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/short-tg.png +0 -0
  213. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/reactions.rst +0 -0
  214. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/configuration.rst +0 -0
  215. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/index.rst +0 -0
  216. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/introduction.rst +0 -0
  217. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/monomers.rst +0 -0
  218. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/postsim.rst +0 -0
  219. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/reactions.rst +0 -0
  220. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/run.rst +0 -0
  221. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/references/index.rst +0 -0
  222. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/references/mol2-reference.pdf +0 -0
  223. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/references.bib +0 -0
  224. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/CURE.odg +0 -0
  225. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/bond_filter.odg +0 -0
  226. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/configs/configs-for-analyze.rst +0 -0
  227. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/configs/configs-for-postsim.rst +0 -0
  228. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/configuration-files.rst +0 -0
  229. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/flow1.odg +0 -0
  230. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/flow1yaml.odg +0 -0
  231. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/hydrogenated.eps +0 -0
  232. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/hydrogenated.fig +0 -0
  233. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/pics/STY.png +0 -0
  234. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/pics/STYCC.png +0 -0
  235. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/pics/TypicalUsageFlow.png +0 -0
  236. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/pics/bond_filter.png +0 -0
  237. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/pics/chemdoodle-2dsketcher-emb.png +0 -0
  238. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/pics/chemdoodle-2dsketcher-styrene.png +0 -0
  239. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/pics/hydrogenated.png +0 -0
  240. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/pics/ring_pierce/ring_pierce_cases.png +0 -0
  241. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/pics/ring_pierce/ring_pierce_linkcell.png +0 -0
  242. {htpolynet-2.1.0 → htpolynet-2.2.0}/docs/source/user-guide/program-flow.rst +0 -0
  243. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/__init__.py +0 -0
  244. {htpolynet-2.1.0/src/htpolynet/core → htpolynet-2.2.0/src/htpolynet/analysis}/__init__.py +0 -0
  245. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/analysis/analyze.py +0 -0
  246. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/analysis/postsim.py +0 -0
  247. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/analysis/utils.py +0 -0
  248. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/cli.py +0 -0
  249. {htpolynet-2.1.0/src/htpolynet/cure → htpolynet-2.2.0/src/htpolynet/core}/__init__.py +0 -0
  250. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/core/configuration.py +0 -0
  251. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/core/coordinates.py +0 -0
  252. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/core/molecule.py +0 -0
  253. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/core/projectfilesystem.py +0 -0
  254. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/core/topocoord.py +0 -0
  255. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/core/topology.py +0 -0
  256. {htpolynet-2.1.0/src/htpolynet/external → htpolynet-2.2.0/src/htpolynet/cure}/__init__.py +0 -0
  257. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/cure/chain.py +0 -0
  258. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/cure/expandreactions.py +0 -0
  259. {htpolynet-2.1.0/src/htpolynet/geometry → htpolynet-2.2.0/src/htpolynet/external}/__init__.py +0 -0
  260. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/external/ambertools.py +0 -0
  261. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/external/slurm.py +0 -0
  262. {htpolynet-2.1.0/src/htpolynet/resources → htpolynet-2.2.0/src/htpolynet/geometry}/__init__.py +0 -0
  263. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/geometry/bondlist.py +0 -0
  264. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/geometry/lattice.py +0 -0
  265. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/geometry/linkcell.py +0 -0
  266. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/geometry/matrix4.py +0 -0
  267. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/geometry/ring.py +0 -0
  268. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/io/__init__.py +0 -0
  269. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/io/gro.py +0 -0
  270. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/io/mol2.py +0 -0
  271. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/io/pdb.py +0 -0
  272. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/repair/__init__.py +0 -0
  273. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/repair/cyanate_cap.py +0 -0
  274. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/repair/topology_surgery.py +0 -0
  275. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/README.md +0 -0
  276. {htpolynet-2.1.0/src/htpolynet/utils → htpolynet-2.2.0/src/htpolynet/resources}/__init__.py +0 -0
  277. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/example_depot/0-liquid-styrene.yaml +0 -0
  278. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/example_depot/2-bisgma-styrene-thermoset.yaml +0 -0
  279. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/example_depot/3-pacm-dgeba-epoxy-thermoset.yaml +0 -0
  280. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/example_depot/4-dfda-fde-epoxy-thermoset.yaml +0 -0
  281. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/example_depot/6-cyanate-ester.yaml +0 -0
  282. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/mdp/README.md +0 -0
  283. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/mdp/drag-min.mdp +0 -0
  284. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/mdp/drag-npt.mdp +0 -0
  285. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/mdp/drag-nvt.mdp +0 -0
  286. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/mdp/min.mdp +0 -0
  287. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/mdp/npt.mdp +0 -0
  288. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/mdp/nvt.mdp +0 -0
  289. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/mdp/relax-min.mdp +0 -0
  290. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/mdp/relax-npt.mdp +0 -0
  291. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/mdp/relax-nvt.mdp +0 -0
  292. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/mdp/single-molecule-min.mdp +0 -0
  293. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/mdp/single-molecule-nvt.mdp +0 -0
  294. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/inputs/DFA.pdb +0 -0
  295. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/inputs/DGE.mol2 +0 -0
  296. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/inputs/EMB.mol2 +0 -0
  297. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/inputs/FDE.pdb +0 -0
  298. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/inputs/GMA.mol2 +0 -0
  299. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/inputs/PAC.mol2 +0 -0
  300. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/inputs/STY.mol2 +0 -0
  301. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/make-monomers.sh +0 -0
  302. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/pics/DFA.png +0 -0
  303. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/pics/DGE.png +0 -0
  304. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/pics/EMB.png +0 -0
  305. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/pics/FDE.png +0 -0
  306. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/pics/GMA.png +0 -0
  307. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/pics/PAC.png +0 -0
  308. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/pics/STY.png +0 -0
  309. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/sample-inputs/DFA.pdb +0 -0
  310. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/sample-inputs/DGE.mol2 +0 -0
  311. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/sample-inputs/EMB.mol2 +0 -0
  312. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/sample-inputs/FDE.pdb +0 -0
  313. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/sample-inputs/GMA.mol2 +0 -0
  314. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/sample-inputs/PAC.mol2 +0 -0
  315. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/molecules/sample-inputs/STY.mol2 +0 -0
  316. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/tcl/readbonds.tcl +0 -0
  317. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/tcl/readgrx.tcl +0 -0
  318. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/resources/tcl/render.tcl +0 -0
  319. {htpolynet-2.1.0/tests → htpolynet-2.2.0/src/htpolynet/utils}/__init__.py +0 -0
  320. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/utils/checkpoint.py +0 -0
  321. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/utils/dataframetools.py +0 -0
  322. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/utils/inputcheck.py +0 -0
  323. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/utils/stringthings.py +0 -0
  324. {htpolynet-2.1.0 → htpolynet-2.2.0}/src/htpolynet/utils/vmd_viz.py +0 -0
  325. {htpolynet-2.1.0/tests/unit → htpolynet-2.2.0/tests}/__init__.py +0 -0
  326. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/conftest.py +0 -0
  327. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/fixtures/config1.gro +0 -0
  328. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/fixtures/config1.top +0 -0
  329. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/fixtures/config2.gro +0 -0
  330. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/fixtures/config2.top +0 -0
  331. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/fixtures/items31.edr +0 -0
  332. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/fixtures/items43.edr +0 -0
  333. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/fixtures/items45.edr +0 -0
  334. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/fixtures/short.mdp +0 -0
  335. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/test_bondtemplate.py +0 -0
  336. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/test_configuration.py +0 -0
  337. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/test_dataframetools.py +0 -0
  338. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/test_linkcell_pierce.py +0 -0
  339. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/test_projectfilesystem.py +0 -0
  340. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/test_ring.py +0 -0
  341. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/test_ring_pierce_figs.py +0 -0
  342. {htpolynet-2.1.0 → htpolynet-2.2.0}/tests/unit/test_topology/test.top +0 -0
@@ -0,0 +1,56 @@
1
+ # Check that pyproject.toml's runtime dependencies are in sync with
2
+ # the conda-forge feedstock's `requirements.run` block.
3
+ #
4
+ # Two modes:
5
+ # - Push/PR to main: warn-only. Drift adds a job-summary line so a
6
+ # reviewer notices but the workflow doesn't fail.
7
+ # - Tag push (v*): strict. Drift fails the job, so a release tag
8
+ # can't ship with a recipe known to be broken.
9
+ #
10
+ # The script that does the work is scripts/check-conda-sync.py; see
11
+ # its header for what gets compared and the PyPI→conda-forge name
12
+ # remap.
13
+
14
+ name: conda-forge sync check
15
+
16
+ on:
17
+ push:
18
+ branches: [main]
19
+ tags: ['v*']
20
+ pull_request:
21
+ branches: [main]
22
+ workflow_dispatch:
23
+
24
+ jobs:
25
+ check:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+
30
+ - uses: actions/setup-python@v5
31
+ with:
32
+ python-version: '3.13'
33
+
34
+ - name: Run sync check
35
+ id: check
36
+ run: |
37
+ set +e
38
+ out="$(./scripts/check-conda-sync.py 2>&1)"
39
+ rc=$?
40
+ echo "$out"
41
+ {
42
+ echo '## conda-forge sync check'
43
+ echo ''
44
+ echo '```'
45
+ echo "$out"
46
+ echo '```'
47
+ } >> "$GITHUB_STEP_SUMMARY"
48
+ echo "rc=$rc" >> "$GITHUB_OUTPUT"
49
+
50
+ - name: Strict mode on tag push
51
+ if: startsWith(github.ref, 'refs/tags/v') && steps.check.outputs.rc != '0'
52
+ run: |
53
+ echo "::error::pyproject.toml deps drift from conda-forge recipe; release blocked."
54
+ echo "Either prepare the recipe update on the feedstock before tagging,"
55
+ echo "or plan to supersede the autotick-bot PR with a manual update."
56
+ exit 1
@@ -32,5 +32,5 @@ jobs:
32
32
  file: docker/Dockerfile
33
33
  push: true
34
34
  tags: |
35
- ghcr.io/abramsgroup/htpolynet:latest
36
- ghcr.io/abramsgroup/htpolynet:${{ github.sha }}
35
+ ghcr.io/cameronabrams/htpolynet:latest
36
+ ghcr.io/cameronabrams/htpolynet:${{ github.sha }}
@@ -0,0 +1,30 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ jobs:
10
+ unit:
11
+ name: unit (py${{ matrix.python-version }})
12
+ runs-on: ubuntu-latest
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ # floor and current; pyproject requires-python is >=3.10
17
+ python-version: ['3.10', '3.13']
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+
21
+ - name: Install uv
22
+ uses: astral-sh/setup-uv@v5
23
+
24
+ # Tests needing antechamber/tleap/parmchk2/gmx skip themselves when those
25
+ # binaries are absent, so this runner needs no MD toolchain. Everything
26
+ # that does not shell out still runs -- ~250 tests in a few seconds.
27
+ - name: Run unit tests
28
+ run: >
29
+ uv run --python ${{ matrix.python-version }} --extra test
30
+ pytest tests/unit -q
@@ -17,8 +17,6 @@ __pycache__/
17
17
  # C extensions
18
18
  *.so
19
19
 
20
- CLAUDE.md
21
-
22
20
  # Distribution / packaging
23
21
  .Python
24
22
  build/
@@ -105,6 +103,10 @@ ipython_config.py
105
103
  # install all needed dependencies.
106
104
  #Pipfile.lock
107
105
 
106
+ # uv lockfile — regenerated locally; not committed (htpolynet is a
107
+ # library, not a leaf application that needs a pinned dependency tree).
108
+ uv.lock
109
+
108
110
  # PEP 582; used by e.g. github.com/David-OConnor/pyflow
109
111
  __pypackages__/
110
112
 
@@ -7,6 +7,183 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.2.0] - 2026-08-23
11
+
12
+ ### Changed
13
+
14
+ - Container docs' HPC section now leads with `htpolynet gen-slurm-script`
15
+ instead of a hand-written batch script -- the subcommand is already
16
+ Apptainer-aware (`--sif`), but was documented only in `usage.rst`,
17
+ so container users had no reason to find it. The old example
18
+ defaulted to `--gres=gpu:1` and `--nv`, which is actively wrong for
19
+ this image (see the GPU entry under Fixed); replaced with a warning
20
+ explaining why CPU partitions are the right target, plus guidance on
21
+ sizing cores against system size and keeping the submit directory off
22
+ NFS.
23
+ - `rdkit` promoted from the `[smiles]` optional extra to a core
24
+ runtime dependency. Every depot example uses atom-mapped SMILES
25
+ (`[CH:1]`, `[NH2:2]`, etc.), so RDKit is required for any normal
26
+ user workflow; the obabel-only fallback that the extra was
27
+ guarding remains supported but isn't exercised by anything we
28
+ ship. `pip install htpolynet` (or `uv pip install -e .` from the
29
+ repo) now installs RDKit automatically; `'htpolynet[smiles]'` is
30
+ no longer needed (and is gone from `install.rst`).
31
+ - Example 5 (`5-htpb-ipdi.yaml`) retuned for shorter wall-clock.
32
+ The saving comes from a smaller system: the monomer pool drops
33
+ from 125/50/50 to 50/20/20 (IPD/DHT/THT), keeping IPD at
34
+ (2·DHT + 3·THT)/2 so every crosslinker still has both NCO groups
35
+ spoken for at full conversion. Precure anneal segments go 500 →
36
+ 200 ps and postcure postequilibration 1000 → 200 ps.
37
+ Densification was re-balanced for the smaller box in the other
38
+ direction — `initial_density` 50 → 10 kg/m³ to give the long HTPB
39
+ chains room to relax without overlap, and NPT `repeat` 20 → 50 so
40
+ the looser start still reaches target density — so densification
41
+ itself does more work, on a much smaller system. The build still
42
+ converges.
43
+
44
+ ### Added
45
+
46
+ - **CI now runs the unit suite** (`.github/workflows/test.yml`), on pushes
47
+ to `main` and on every pull request, across Python 3.10 and 3.13. Nothing
48
+ ran the tests automatically before, which is how a broken import sat in
49
+ `test_resources.py` aborting collection indefinitely.
50
+ - Tests that shell out to `gmx` / `antechamber` / `tleap` / `parmchk2` now
51
+ skip when those binaries are absent instead of failing, so a runner with
52
+ no MD toolchain still reports the ~250 tests that do not need one (in
53
+ under 4 seconds).
54
+ - Test coverage for `external/slurm.py` (0% -> 98%),
55
+ `external/smiles_input.py` (0% -> 84%), `utils/inputcheck.py`
56
+ (0% -> 70%), and `analysis/plot.py` (6.7% -> 34%), none of which had
57
+ any. Overall coverage 34.4% -> 38.8%. The plot smoke tests were
58
+ checked against the pre-fix module under matplotlib 3.11 and do fail
59
+ there, so they would have caught the `cm.get_cmap` removal.
60
+ - Docker image now carries an `org.opencontainers.image.source` label,
61
+ linking the published GHCR package back to the repository. Without
62
+ it the package is orphaned: it doesn't appear on the repo page and
63
+ doesn't inherit repository-based access permissions.
64
+ - `test` optional-dependency extra (`uv run --extra test pytest tests/unit`),
65
+ with `dev` kept as an alias so both spellings work.
66
+ - `scripts/run_all_examples.sh`: fail-fast preflight that checks
67
+ every required native tool (`htpolynet`, `antechamber`,
68
+ `parmchk2`, `tleap`, `gmx`, `obabel`, `dot`) is on `PATH` before
69
+ starting any build. Better than hitting the first missing
70
+ binary hours into a partial run. Header docstring also gains a
71
+ Prerequisites block pointing at `install.rst` for setup.
72
+ - Docker image now built on `condaforge/miniforge3:latest` (was
73
+ `continuumio/miniconda3:latest`). Miniforge is community-
74
+ maintained, conda-forge only, no Anaconda Inc. terms-of-service
75
+ exposure. Package installs switched from `conda` to `mamba` for
76
+ faster solves. Verified end-to-end: built container's
77
+ `antechamber`, `gmx 2025.4-conda_forge`, `obabel`, `parmed`,
78
+ `rdkit`, and `htpolynet 2.1.0` all callable; `htpolynet
79
+ fetch-example 6 && htpolynet input-check` round-trips.
80
+ - `install.rst` rewritten around the uv + Miniforge workflow: per-
81
+ repo `uv venv` + `uv pip install -e .` for the Python side,
82
+ separate `mamba create -n gromacs` / `mamba create -n ambertools`
83
+ envs for the native MD binaries (both env bins appended to PATH
84
+ in `.bashrc`). Documents `uv tool install --editable .` as the
85
+ way to get a global `htpolynet` command callable from any shell.
86
+ Legacy conda-only one-stop install demoted to a subsection.
87
+ - `htpolynet.utils.profiling` (moved from `htpolynet.profiling`).
88
+ Small utility module — fits utils/ scope; keeps the package root
89
+ focused on actual subpackages. Three internal call sites
90
+ updated.
91
+
92
+ ### Fixed
93
+
94
+ - **API reference documented a module that no longer exists.**
95
+ `docs/source/htpolynetpackage.rst` autodoc'd `htpolynet.driver`,
96
+ removed in the 2.0 refactor, so the package's top-level API section
97
+ rendered empty; it now documents `htpolynet.cli`. The same page was
98
+ missing nine modules that do exist -- most notably the entire
99
+ `repair` subpackage (`repair.cyanate_cap`, `repair.topology_surgery`,
100
+ i.e. the postcure-repair machinery), plus `external.slurm`,
101
+ `external.smiles_input`, `geometry.lattice`, `utils.profiling`, and
102
+ `utils.vmd_viz`. A duplicated `htpolynet.core` heading was merged.
103
+ - `release-history.rst` appeared in no toctree, so the pre-2.0 release
104
+ history (1.0.7.2 back to 0.0.1, which `CHANGELOG.md` does not cover)
105
+ was unreachable from the docs. Linked from `index.rst`; its 2.0.0
106
+ date corrected from 2026-04-15 to 2026-05-07 to match the tag.
107
+ - Two docstrings (`BondTemplate.matches`,
108
+ `utils.profiling.classify_command`) opened bullet lists with no
109
+ preceding blank line, which docutils rejects; both rendered as
110
+ errors. `conf.py` also pointed `html_static_path` at a
111
+ `docs/source/_static` that did not exist. The docs now build with
112
+ zero warnings.
113
+ - **The unit suite could not run at all.** `tests/unit/test_resources.py`
114
+ imported `RuntimeLibrary` from `htpolynet.utils.projectfilesystem` and
115
+ `Software` from `htpolynet.external.software`; neither symbol nor that
116
+ module path survived the 2.0 refactor. Because the imports were at
117
+ module scope, collection aborted for the *entire* `tests/unit` tree, so
118
+ `pytest tests/unit` had been failing outright rather than reporting
119
+ results. Rewritten against the current `SystemLibrary` API (15 tests).
120
+ - Two `test_chain.py` tests asserted exceptions (`'This is a bug - no
121
+ i-chain!'` / `'no j-chain!'`) that no longer exist anywhere in the
122
+ source: `cure/chain.py` deliberately replaced them with graceful chain
123
+ extension, since bonding to a chain-less atom is legitimate for
124
+ non-vinyl chemistry such as HTPB assembly. Rewritten to assert the
125
+ current semantics, plus a new test for the `create_if_missing=False`
126
+ branch. These had been invisible behind the collection failure above.
127
+ - `test_write_top` wrote its scratch file into the repository. The
128
+ autouse `change_test_dir` fixture chdirs each test into a directory
129
+ inside the source tree, and cleanup only ran on the success path, so
130
+ any failure or interrupt left `tests/unit/test_topology/write_test.top`
131
+ behind. Now uses `tempfile.TemporaryDirectory`.
132
+ - **Every plot call crashed on matplotlib 3.11.** `analysis/plot.py`
133
+ called `matplotlib.cm.get_cmap`, deprecated in 3.7 and removed in
134
+ 3.11, at five sites. Since `pyproject.toml` floors matplotlib at
135
+ `>=3.5` with no ceiling, any reasonably fresh install -- including
136
+ the container image, which tracks latest conda-forge -- died with
137
+ `AttributeError: module 'matplotlib.cm' has no attribute
138
+ 'get_cmap'` at the first density trace, i.e. *after* densification
139
+ had already burned its compute. Replaced with a `_get_cmap()`
140
+ helper that prefers the `matplotlib.colormaps` registry and falls
141
+ back to the legacy call only below 3.5. Caught by running example 6
142
+ on Picotte through the container.
143
+ - GPU usability is now judged on whether the gmx build can actually
144
+ drive the detected devices, not merely on whether its GPU support is
145
+ non-`disabled`. conda-forge (and hence our container) ships an
146
+ OpenCL Gromacs build; `gpu_ids` is populated from nvidia-smi and so
147
+ only ever lists NVIDIA devices, which Gromacs no longer drives via
148
+ OpenCL. The previous check passed that combination through, so a
149
+ `gpu_id` from the config reached an `mdrun` that could not honor it.
150
+ New `software.gpu_unusable_reasons()` centralizes the predicate and
151
+ is used by `_mdrun_cmd`, `_enforce_gpu_consistency`, the startup
152
+ banner, and the `grompp_and_mdrun` backstop, which previously
153
+ duplicated a weaker hardware-only version of the test.
154
+ - Container image was missing the `graphviz` system package, so the
155
+ `dot` binary `htpolynet.analysis.plot.draw_reaction_dag` shells out
156
+ to was absent. `pyproject.toml` declares the `graphviz` Python
157
+ binding but the Dockerfile only apt-installed `openbabel` and
158
+ `gosu`. Failure was silent-ish -- `cure/reaction.py` catches the
159
+ exception and logs `reaction_network.png render failed` -- so
160
+ container builds simply came out with no reaction-network figure.
161
+ Found while porting example 6 to Picotte via Apptainer.
162
+ - `htpolynet plots diag` parser templates: the module-path token
163
+ the matcher keyed on was `HTPolyNet.runtime.my_logger` /
164
+ `HTPolyNet.curecontroller.do_iter` from the pre-2.0 namespace.
165
+ After the module reorganization into `htpolynet.core.runtime` /
166
+ `htpolynet.cure.curecontroller`, both lines silently stopped
167
+ matching and the diag parser produced an empty dataframe →
168
+ `IndexError` at first row access. Templates refreshed to the
169
+ current module paths, and the module-name token dropped from
170
+ `pat_idx` so future renames don't break it again.
171
+ - Reaction-network plot (`plots/reaction_network.png`) replaced
172
+ with a bipartite DAG rendered via graphviz `dot` (was a
173
+ spring-layout networkx render that produced tangled, label-
174
+ overlapping diagrams; example 5 was a 30+ node hairball). Each
175
+ molecule is a rounded box; each reaction is a diamond with edges
176
+ from its reactants and an outgoing edge to its product; nodes are
177
+ colored by role (constituent / intermediate / final) and reaction
178
+ stage (param / build / cure / cap / repair). Procession-
179
+ expanded reactions (e.g. example 5's `polymerization` with
180
+ `procession.count: 15`, which `parse_reaction_list` explodes
181
+ into 16 sequential reactions + 15 `A18_I*` intermediates) are
182
+ collapsed back into one node labeled `(×N)` so the diagram
183
+ matches what the user wrote. New runtime dep: `graphviz` (the
184
+ Python wrapper; also needs the system `dot` binary, a separate
185
+ install).
186
+
10
187
  ## [2.1.0] - 2026-06-01
11
188
 
12
189
  ### Added
@@ -0,0 +1,50 @@
1
+ cff-version: 1.2.0
2
+ message: >-
3
+ If you use htpolynet in published work, please cite the SoftwareX article
4
+ under `preferred-citation`, along with the GAFF and Gromacs papers listed
5
+ in the documentation.
6
+ title: htpolynet
7
+ abstract: >-
8
+ Automated molecular-dynamics system builder for amorphous network polymers.
9
+ Generates atomistic models of cross-linked polymer networks, together with
10
+ the Gromacs topology and parameter files needed to simulate them, from only
11
+ the monomer structures, a description of the polymerization chemistry, and a
12
+ handful of system-size and composition options. Atom typing and parameter
13
+ generation use the General Amber Force Field.
14
+ type: software
15
+ authors:
16
+ - family-names: Abrams
17
+ given-names: Cameron F.
18
+ email: cfa22@drexel.edu
19
+ affiliation: Drexel University
20
+ repository-code: https://github.com/cameronabrams/htpolynet
21
+ url: https://htpolynet.readthedocs.io/
22
+ license: MIT
23
+ version: 2.1.0
24
+ date-released: '2026-06-01'
25
+ keywords:
26
+ - molecular dynamics
27
+ - crosslinked polymers
28
+ - thermosets
29
+ - polymer networks
30
+ - Gromacs
31
+ - GAFF
32
+ preferred-citation:
33
+ type: article
34
+ title: >-
35
+ HTPolyNet: A general system generator for all-atom molecular simulations of
36
+ amorphous crosslinked polymers
37
+ authors:
38
+ - family-names: Huang
39
+ given-names: Ming
40
+ - family-names: Abrams
41
+ given-names: Cameron F.
42
+ email: cfa22@drexel.edu
43
+ affiliation: Drexel University
44
+ journal: SoftwareX
45
+ volume: 21
46
+ start: 101303
47
+ year: 2023
48
+ month: 2
49
+ issn: 2352-7110
50
+ doi: 10.1016/j.softx.2022.101303
@@ -0,0 +1,103 @@
1
+ # Working on htpolynet
2
+
3
+ ## Roadmap and changelog
4
+
5
+ `ROADMAP.md` holds upgrades we have identified but not done. `CHANGELOG.md`
6
+ holds what shipped, in Keep-a-Changelog form with a live `[Unreleased]`
7
+ section.
8
+
9
+ Keep both current as a matter of course, without being asked:
10
+
11
+ - When we decide *not* to do something now — a deferred fix, an idea worth
12
+ keeping, a limitation we chose to live with — add it to `ROADMAP.md` with
13
+ enough context to act on it months later. An entry that just says "make
14
+ Gromacs faster" is worthless; say which build, why it is slow, and what
15
+ the tradeoff is.
16
+ - When a roadmap item ships, delete it from `ROADMAP.md` and describe it in
17
+ `CHANGELOG.md` under `[Unreleased]`.
18
+ - Surface relevant roadmap items unprompted when we touch related code.
19
+
20
+ ## Running the tests
21
+
22
+ ```
23
+ uv run --extra test pytest tests/unit -q
24
+ ```
25
+
26
+ `dev` is an alias for the `test` extra; both work.
27
+
28
+ Three test modules shell out to external binaries — `test_parameterize_react`
29
+ needs antechamber/parmchk2/tleap/gmx, and the two `test_gromacs_*` modules
30
+ need gmx. They skip when those are absent rather than failing, which is what
31
+ lets CI run on a plain runner. With the tool chain present the suite takes a
32
+ couple of minutes; without it, about four seconds.
33
+
34
+ ## The test suite runs inside the source tree
35
+
36
+ `tests/conftest.py` has an autouse `change_test_dir` fixture that chdirs each
37
+ test into `tests/unit/<module_name>/` if that directory exists, otherwise
38
+ `tests/unit/`. Both are inside the repo. So a test that writes a file to the
39
+ working directory litters the source tree, and cleanup that runs only on the
40
+ success path leaves the file behind whenever the test fails or is
41
+ interrupted. Write scratch files to `tmp_path` or a
42
+ `tempfile.TemporaryDirectory` instead.
43
+
44
+ ## Docs must build with zero warnings
45
+
46
+ ```
47
+ uv run --with-requirements docs/requirements.txt --with sphinx \
48
+ python -m sphinx -b html docs/source /tmp/docbuild
49
+ ```
50
+
51
+ It currently builds clean; keep it that way. Two things that historically
52
+ broke it:
53
+
54
+ - `docs/source/htpolynetpackage.rst` is a hand-maintained list of
55
+ `automodule` directives, so it drifts silently as modules are added,
56
+ moved, or deleted. It once autodoc'd `htpolynet.driver` for months after
57
+ that module ceased to exist. When you add or move a module, add it here.
58
+ - Adding a module to that page renders its docstrings for the first time,
59
+ which surfaces latent RST errors. The usual one is a bullet list with no
60
+ blank line before it, which docutils rejects.
61
+
62
+ ## Releases
63
+
64
+ Use `scripts/release.sh <version>`. It rotates `[Unreleased]` into a dated
65
+ section, bumps the version in `pyproject.toml`, commits, tags, and pushes.
66
+ Pushing the tag is what triggers publication: `release.yaml` builds and
67
+ publishes to PyPI, creates a GitHub Release from the changelog notes, and
68
+ kicks a Read the Docs build. The conda-forge autotick bot then opens a
69
+ feedstock PR.
70
+
71
+ Do not hand-roll any of that. The script's preflight also checks that
72
+ `pyproject.toml`'s runtime dependencies still match the conda-forge feedstock
73
+ recipe — the autotick bot only bumps version and sha, so a dependency change
74
+ we forget to mirror ships a broken conda package.
75
+
76
+ Because the changelog notes become the public release body, keep
77
+ `[Unreleased]` free of internal bookkeeping ("got bundled into commit
78
+ abc1234") and file entries under the right heading.
79
+
80
+ ## The container
81
+
82
+ The image is `ghcr.io/cameronabrams/htpolynet`, built by `docker.yml` from
83
+ `docker/Dockerfile`. It rebuilds weekly on a schedule and on any tag matching
84
+ `v*` or `d*`. A `d*` tag is the way to rebuild the image without cutting a
85
+ release — useful when only the Dockerfile changed.
86
+
87
+ Its Gromacs comes from conda-forge, which means **OpenCL, not CUDA**, and
88
+ generic `AVX2_256` SIMD. Gromacs no longer drives NVIDIA devices through
89
+ OpenCL, so the image cannot use a GPU: on a cluster, target CPU partitions
90
+ and do not request `--gres=gpu` or pass `--nv`. See `ROADMAP.md`.
91
+
92
+ ## Two invariants worth not breaking
93
+
94
+ - **Colormaps go through `analysis.plot._get_cmap()`**, never
95
+ `matplotlib.cm.get_cmap` directly. The latter was removed in matplotlib
96
+ 3.11, and since `pyproject.toml` floors matplotlib without a ceiling, a
97
+ direct call breaks every plot on a fresh install — after densification has
98
+ already spent its compute.
99
+ - **GPU usability is decided by `external.software.gpu_unusable_reasons()`**,
100
+ which is the single place that reconciles detected hardware against what
101
+ the gmx build can actually drive. Do not add ad-hoc `if gpu_ids:` checks
102
+ elsewhere; a weaker hardware-only duplicate of this test used to live in
103
+ `grompp_and_mdrun` and disagreed with it.
@@ -1,10 +1,10 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: htpolynet
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Automated MD System Builder for Amorphous Network Polymers
5
- Project-URL: Source, https://github.com/AbramsGroup/htpolynet
5
+ Project-URL: Source, https://github.com/cameronabrams/htpolynet
6
6
  Project-URL: Documentation, https://htpolynet.readthedocs.io/
7
- Project-URL: Bug Tracker, https://github.com/AbramsGroup/htpolynet/issues
7
+ Project-URL: Bug Tracker, https://github.com/cameronabrams/htpolynet/issues
8
8
  Author-email: Cameron F Abrams <cfa22@drexel.edu>
9
9
  License-File: LICENSE
10
10
  Classifier: Development Status :: 3 - Alpha
@@ -13,26 +13,36 @@ Classifier: License :: OSI Approved :: MIT License
13
13
  Classifier: Operating System :: POSIX :: Linux
14
14
  Classifier: Programming Language :: Python :: 3
15
15
  Classifier: Topic :: Scientific/Engineering :: Chemistry
16
- Requires-Python: >=3.9
16
+ Requires-Python: >=3.10
17
17
  Requires-Dist: gputil>=1.4
18
+ Requires-Dist: graphviz>=0.20
18
19
  Requires-Dist: matplotlib>=3.5
19
20
  Requires-Dist: networkx>=3.2
20
21
  Requires-Dist: numpy>=1.24
21
22
  Requires-Dist: pandas>=2
22
23
  Requires-Dist: parmed>=4
23
24
  Requires-Dist: pyyaml>=6
25
+ Requires-Dist: rdkit>=2024.3
24
26
  Requires-Dist: requests>=2.28
25
27
  Requires-Dist: scipy>=1.10
26
28
  Requires-Dist: setuptools
27
29
  Provides-Extra: dev
28
30
  Requires-Dist: pytest; extra == 'dev'
29
- Provides-Extra: smiles
30
- Requires-Dist: rdkit; extra == 'smiles'
31
+ Provides-Extra: test
32
+ Requires-Dist: pytest; extra == 'test'
31
33
  Description-Content-Type: text/markdown
32
34
 
33
35
  # htpolynet
34
36
  > High-Throughput Polymer Network Atomistic Simulations
35
37
 
38
+ [![tests](https://github.com/cameronabrams/htpolynet/actions/workflows/test.yml/badge.svg)](https://github.com/cameronabrams/htpolynet/actions/workflows/test.yml)
39
+ [![PyPI](https://img.shields.io/pypi/v/htpolynet.svg)](https://pypi.org/project/htpolynet/)
40
+ [![conda-forge](https://img.shields.io/conda/vn/conda-forge/htpolynet)](https://anaconda.org/conda-forge/htpolynet)
41
+ [![Python](https://img.shields.io/pypi/pyversions/htpolynet)](https://pypi.org/project/htpolynet/)
42
+ [![License: MIT](https://img.shields.io/pypi/l/htpolynet)](https://github.com/cameronabrams/htpolynet/blob/main/LICENSE)
43
+ [![Docs](https://readthedocs.org/projects/htpolynet/badge/?version=latest)](https://htpolynet.readthedocs.io/en/latest/)
44
+ [![PyPI Downloads](https://static.pepy.tech/badge/htpolynet)](https://pepy.tech/projects/htpolynet)
45
+
36
46
  htpolynet is a Python utility for generating atomistic models of cross-linked polymer networks together with appropriate topology and parameter files required for molecular dynamics simulations using Gromacs. It is intended as a fully automated system builder requiring as inputs only the molecular structures of any monomer species, a description of the polymerization chemistry, and a handful of options describing desired system size and composition. htpolynet uses the Generalized Amber Force Field for atom-typing and parameter generation.
37
47
 
38
48
  ## Installation
@@ -49,7 +59,7 @@ conda install -c conda-forge htpolynet
49
59
 
50
60
  From source:
51
61
  ```bash
52
- git clone git@github.com:AbramsGroup/htpolynet.git
62
+ git clone git@github.com:cameronabrams/htpolynet.git
53
63
  cd htpolynet
54
64
  pip install -e .
55
65
  ```
@@ -60,23 +70,44 @@ IMPORTANT NOTES: The programs ``antechamber``, ``parmchk2`` and ``tleap`` from A
60
70
 
61
71
  ## Docker
62
72
 
63
- As an alternative to a local installation, a prebuilt container image is published at ``ghcr.io/abramsgroup/htpolynet``. It bundles htpolynet together with Gromacs, AmberTools, and OpenBabel, so no additional dependencies are required on the host beyond Docker (and, optionally, the NVIDIA Container Toolkit for GPU runs).
73
+ As an alternative to a local installation, a prebuilt container image is published at ``ghcr.io/cameronabrams/htpolynet``. It bundles htpolynet together with Gromacs, AmberTools, and OpenBabel, so no additional dependencies are required on the host beyond Docker (and, optionally, the NVIDIA Container Toolkit for GPU runs).
64
74
 
65
75
  Run htpolynet against a configuration file in the current directory:
66
76
  ```bash
67
- docker run --rm -v $(pwd):/work ghcr.io/abramsgroup/htpolynet run config.yaml
77
+ docker run --rm -v $(pwd):/work ghcr.io/cameronabrams/htpolynet run config.yaml
68
78
  ```
69
79
 
70
80
  With GPU support:
71
81
  ```bash
72
- docker run --rm --gpus all -v $(pwd):/work ghcr.io/abramsgroup/htpolynet run config.yaml
82
+ docker run --rm --gpus all -v $(pwd):/work ghcr.io/cameronabrams/htpolynet run config.yaml
73
83
  ```
74
84
 
75
85
  A Docker Compose file is also provided in [docker/compose.yml](docker/compose.yml) for a shorter invocation (``docker compose run --rm htpolynet run config.yaml``). See [docs/source/user-guide/container-usage.rst](docs/source/user-guide/container-usage.rst) for the full story, including Singularity/Apptainer use on HPC systems.
76
86
 
77
87
  ## Documentation
78
88
 
79
- Please consult documentation at [abramsgroup.github.io/htpolynet](https://abramsgroup.github.io/htpolynet/).
89
+ Please consult documentation at [htpolynet.readthedocs.io](https://htpolynet.readthedocs.io/).
90
+
91
+ ## Repository relocation
92
+
93
+ This repository formerly lived at `AbramsGroup/HTPolyNet` and now lives at
94
+ [cameronabrams/htpolynet](https://github.com/cameronabrams/htpolynet). GitHub redirects
95
+ the old URLs, so existing clones and forks continue to work; if you prefer, you can
96
+ update your remote explicitly:
97
+
98
+ ```bash
99
+ git remote set-url origin git@github.com:cameronabrams/htpolynet.git
100
+ ```
101
+
102
+ ## Acknowledgments
103
+
104
+ htpolynet grew out of the original HTPolyNet prototype begun by Ming Huang in 2020.
105
+ Ketan S. Khare contributed early LAMMPS-related utilities, and S. Alexis Paz contributed
106
+ a bug fix. The current package is a full rewrite, but the project owes its origins and
107
+ its published description to that earlier work. When using htpolynet in published work,
108
+ please cite Huang and Abrams, *SoftwareX* **21**, 101303 (2023),
109
+ [doi:10.1016/j.softx.2022.101303](https://doi.org/10.1016/j.softx.2022.101303), along with
110
+ the GAFF and Gromacs papers listed in the [documentation](https://htpolynet.readthedocs.io/).
80
111
 
81
112
  ## Meta
82
113
 
@@ -86,11 +117,9 @@ Distributed under the MIT license. See ``LICENSE`` for more information.
86
117
 
87
118
  [https://github.com/cameronabrams](https://github.com/cameronabrams/)
88
119
 
89
- [https://github.com/AbramsGroup](https://github.com/AbramsGroup/)
90
-
91
120
  ## Contributing
92
121
 
93
- 1. Fork it (<https://github.com/AbramsGroup/htolynet/fork>)
122
+ 1. Fork it (<https://github.com/cameronabrams/htpolynet/fork>)
94
123
  2. Create your feature branch (`git checkout -b feature/fooBar`)
95
124
  3. Commit your changes (`git commit -am 'Add some fooBar'`)
96
125
  4. Push to the branch (`git push origin feature/fooBar`)