htpolynet 2.6.2__tar.gz → 2.8.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 (349) hide show
  1. htpolynet-2.8.0/.github/workflows/docs.yml +90 -0
  2. {htpolynet-2.6.2 → htpolynet-2.8.0}/.github/workflows/release.yaml +30 -6
  3. {htpolynet-2.6.2 → htpolynet-2.8.0}/.gitignore +3 -0
  4. {htpolynet-2.6.2 → htpolynet-2.8.0}/CHANGELOG.md +267 -0
  5. {htpolynet-2.6.2 → htpolynet-2.8.0}/PKG-INFO +2 -1
  6. {htpolynet-2.6.2 → htpolynet-2.8.0}/ROADMAP.md +475 -10
  7. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/0-liquid-styrene/run.rst +4 -1
  8. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/run.rst +2 -1
  9. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/run.rst +1 -1
  10. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/results.rst +14 -12
  11. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/run.rst +1 -1
  12. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/introduction.rst +7 -6
  13. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/run.rst +56 -75
  14. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/run.rst +12 -8
  15. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/index.rst +11 -0
  16. htpolynet-2.8.0/docs/source/index.rst +71 -0
  17. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/configs/configs-for-analyze.rst +2 -2
  18. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/configs/configs-for-run.rst +29 -6
  19. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/index.rst +1 -0
  20. htpolynet-2.8.0/docs/source/user-guide/periodic-networks.rst +137 -0
  21. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/program-flow.rst +54 -0
  22. {htpolynet-2.6.2 → htpolynet-2.8.0}/pyproject.toml +3 -2
  23. {htpolynet-2.6.2 → htpolynet-2.8.0}/scripts/check-conda-sync.py +86 -22
  24. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/core/configuration.py +55 -2
  25. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/core/topocoord.py +92 -6
  26. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/core/topology.py +11 -2
  27. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/cure/curecontroller.py +159 -4
  28. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/repair/cyanate_cap.py +43 -5
  29. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/example_depot/0-liquid-styrene.yaml +3 -0
  30. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/example_depot/1-polystyrene.yaml +3 -0
  31. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/example_depot/2-bisgma-styrene-thermoset.yaml +3 -0
  32. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/example_depot/3-pacm-dgeba-epoxy-thermoset.yaml +3 -0
  33. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/example_depot/4-dfda-fde-epoxy-thermoset.yaml +3 -0
  34. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/example_depot/5-htpb-ipdi.yaml +3 -0
  35. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/example_depot/6-cyanate-ester.yaml +3 -0
  36. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/mdp/npt.mdp +2 -1
  37. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/mdp/nvt.mdp +2 -1
  38. htpolynet-2.8.0/src/htpolynet/schema/base.yaml +936 -0
  39. htpolynet-2.8.0/src/htpolynet/utils/convergence.py +163 -0
  40. htpolynet-2.8.0/tests/unit/test_conda_sync.py +131 -0
  41. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_configuration.py +166 -19
  42. htpolynet-2.8.0/tests/unit/test_convergence.py +155 -0
  43. htpolynet-2.8.0/tests/unit/test_density_gate.py +108 -0
  44. htpolynet-2.8.0/tests/unit/test_moleculetype_name.py +56 -0
  45. htpolynet-2.8.0/tests/unit/test_relax_instrumentation.py +169 -0
  46. htpolynet-2.8.0/tests/unit/test_repair_conversion.py +118 -0
  47. htpolynet-2.6.2/docs/source/index.rst +0 -38
  48. htpolynet-2.6.2/docs/source/release-history.rst +0 -69
  49. htpolynet-2.6.2/tests/unit/test_repair_conversion.py +0 -63
  50. {htpolynet-2.6.2 → htpolynet-2.8.0}/.claude/settings.json +0 -0
  51. {htpolynet-2.6.2 → htpolynet-2.8.0}/.claude/skills/htpolynet/SKILL.md +0 -0
  52. {htpolynet-2.6.2 → htpolynet-2.8.0}/.envrc +0 -0
  53. {htpolynet-2.6.2 → htpolynet-2.8.0}/.github/workflows/conda-forge-sync.yml +0 -0
  54. {htpolynet-2.6.2 → htpolynet-2.8.0}/.github/workflows/docker.yml +0 -0
  55. {htpolynet-2.6.2 → htpolynet-2.8.0}/.github/workflows/test.yml +0 -0
  56. {htpolynet-2.6.2 → htpolynet-2.8.0}/.readthedocs.yaml +0 -0
  57. {htpolynet-2.6.2 → htpolynet-2.8.0}/CITATION.cff +0 -0
  58. {htpolynet-2.6.2 → htpolynet-2.8.0}/CLAUDE.md +0 -0
  59. {htpolynet-2.6.2 → htpolynet-2.8.0}/LICENSE +0 -0
  60. {htpolynet-2.6.2 → htpolynet-2.8.0}/MANIFEST.in +0 -0
  61. {htpolynet-2.6.2 → htpolynet-2.8.0}/README.md +0 -0
  62. {htpolynet-2.6.2 → htpolynet-2.8.0}/docker/Dockerfile +0 -0
  63. {htpolynet-2.6.2 → htpolynet-2.8.0}/docker/compose.yml +0 -0
  64. {htpolynet-2.6.2 → htpolynet-2.8.0}/docker/docker-entrypoint.sh +0 -0
  65. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/Makefile +0 -0
  66. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/README.rst +0 -0
  67. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/make.bat +0 -0
  68. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/requirements.txt +0 -0
  69. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/_static/.gitkeep +0 -0
  70. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/changelog.rst +0 -0
  71. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/conf.py +0 -0
  72. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/0-liquid-styrene/configuration.rst +0 -0
  73. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/0-liquid-styrene/index.rst +0 -0
  74. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/0-liquid-styrene/introduction.rst +0 -0
  75. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/0-liquid-styrene/monomer.rst +0 -0
  76. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/0-liquid-styrene/postsim.rst +0 -0
  77. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/0-liquid-styrene/results.rst +0 -0
  78. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/configuration.rst +0 -0
  79. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/index.rst +0 -0
  80. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/introduction.rst +0 -0
  81. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/monomer.rst +0 -0
  82. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/pics/STY.png +0 -0
  83. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/pics/STYCC.png +0 -0
  84. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/pics/buildtraces.png +0 -0
  85. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/pics/cure_info.png +0 -0
  86. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/pics/densification-density.png +0 -0
  87. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/pics/final-box.png +0 -0
  88. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/pics/reaction_network.png +0 -0
  89. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/pics/sty-coloring.tcl +0 -0
  90. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/pics/sty-cured.png +0 -0
  91. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/pics/sty-detail.png +0 -0
  92. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/pics/sty-liq.png +0 -0
  93. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/pics/styrene-polymerization.png +0 -0
  94. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/postsim.rst +0 -0
  95. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/reactions.rst +0 -0
  96. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/1-polystyrene/results.rst +0 -0
  97. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/configuration.rst +0 -0
  98. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/index.rst +0 -0
  99. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/introduction.rst +0 -0
  100. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/BPA.png +0 -0
  101. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/GMA.png +0 -0
  102. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/HIE.png +0 -0
  103. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/buildtraces.png +0 -0
  104. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/cure_info.png +0 -0
  105. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/densification-density.png +0 -0
  106. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/four_dimers.eps +0 -0
  107. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/four_dimers.fig +0 -0
  108. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/four_dimers.png +0 -0
  109. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-coloring.tcl +0 -0
  110. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-cured.png +0 -0
  111. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-detail.png +0 -0
  112. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-liq.png +0 -0
  113. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/p1-traces.png +0 -0
  114. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/reaction_network.png +0 -0
  115. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/vesys.eps +0 -0
  116. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/vesys.fig +0 -0
  117. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/vesys.png +0 -0
  118. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/postsim.rst +0 -0
  119. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/reactions.rst +0 -0
  120. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/results.rst +0 -0
  121. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/configuration.rst +0 -0
  122. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/index.rst +0 -0
  123. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/introduction.rst +0 -0
  124. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/monomers.rst +0 -0
  125. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/DGE-epoxy.png +0 -0
  126. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/DGE-labelled.png +0 -0
  127. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/PAC-2d.png +0 -0
  128. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/PAC-labelled.png +0 -0
  129. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/buildtraces.png +0 -0
  130. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/cure_info.png +0 -0
  131. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/densification-density.png +0 -0
  132. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-coloring.tcl +0 -0
  133. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-cured.png +0 -0
  134. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-detail.png +0 -0
  135. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-liq.png +0 -0
  136. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dgesys.eps +0 -0
  137. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dgesys.fig +0 -0
  138. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dgesys.png +0 -0
  139. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/equil-rho_v_ns.png +0 -0
  140. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/postsim-typical.png +0 -0
  141. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-e.png +0 -0
  142. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-equil-rho_v_ns.png +0 -0
  143. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-rho_v_ns.png +0 -0
  144. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-tg.png +0 -0
  145. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/r1.png +0 -0
  146. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/r2.png +0 -0
  147. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/r3.png +0 -0
  148. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/reaction_network.png +0 -0
  149. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/rho_v_ns.png +0 -0
  150. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/short-e.png +0 -0
  151. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/short-tg.png +0 -0
  152. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/postsim.rst +0 -0
  153. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/reactions.rst +0 -0
  154. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/results.rst +0 -0
  155. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/run.rst +0 -0
  156. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/configuration.rst +0 -0
  157. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/index.rst +0 -0
  158. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/introduction.rst +0 -0
  159. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/monomers.rst +0 -0
  160. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/buildtraces.png +0 -0
  161. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/cure_info.png +0 -0
  162. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/densification-density.png +0 -0
  163. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-coloring.tcl +0 -0
  164. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-cured.png +0 -0
  165. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-detail.png +0 -0
  166. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-liq.png +0 -0
  167. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/reaction_network.png +0 -0
  168. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/postsim.rst +0 -0
  169. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/reactions.rst +0 -0
  170. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/configuration.rst +0 -0
  171. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/index.rst +0 -0
  172. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/monomers.rst +0 -0
  173. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/buildtraces.png +0 -0
  174. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/cure_info.png +0 -0
  175. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/densification-density.png +0 -0
  176. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-coloring.tcl +0 -0
  177. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-ipdi-cured.png +0 -0
  178. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-ipdi-detail.png +0 -0
  179. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-ipdi-liq.png +0 -0
  180. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/reaction_network.png +0 -0
  181. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/postsim.rst +0 -0
  182. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/reactions.rst +0 -0
  183. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/5-htpb-ipdi/results.rst +0 -0
  184. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/configuration.rst +0 -0
  185. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/index.rst +0 -0
  186. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/introduction.rst +0 -0
  187. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/monomers.rst +0 -0
  188. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-coloring.tcl +0 -0
  189. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-cured.png +0 -0
  190. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-detail.png +0 -0
  191. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-liq.png +0 -0
  192. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/pics/buildtraces.png +0 -0
  193. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/pics/cure_info.png +0 -0
  194. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/pics/densification-density.png +0 -0
  195. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/pics/reaction_network.png +0 -0
  196. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/postsim.rst +0 -0
  197. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/reactions.rst +0 -0
  198. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/example-tutorials/6-cyanate-ester/results.rst +0 -0
  199. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/htpolynetpackage.rst +0 -0
  200. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/install.rst +0 -0
  201. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/references/index.rst +0 -0
  202. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/references/mol2-reference.pdf +0 -0
  203. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/references.bib +0 -0
  204. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/CURE.odg +0 -0
  205. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/bond_filter.odg +0 -0
  206. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/building-a-system.rst +0 -0
  207. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/configs/configs-for-postsim.rst +0 -0
  208. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/configuration-files.rst +0 -0
  209. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/container-usage.rst +0 -0
  210. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/flow1.odg +0 -0
  211. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/flow1yaml.odg +0 -0
  212. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/hydrogenated.eps +0 -0
  213. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/hydrogenated.fig +0 -0
  214. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/molecular-structure-inputs.rst +0 -0
  215. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/pics/STY.png +0 -0
  216. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/pics/STYCC.png +0 -0
  217. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/pics/TypicalUsageFlow.png +0 -0
  218. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/pics/bond_filter.png +0 -0
  219. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/pics/chemdoodle-2dsketcher-emb.png +0 -0
  220. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/pics/chemdoodle-2dsketcher-styrene.png +0 -0
  221. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/pics/hydrogenated.png +0 -0
  222. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/pics/ring_pierce/ring_pierce_cases.png +0 -0
  223. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/pics/ring_pierce/ring_pierce_linkcell.png +0 -0
  224. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/postcure-repair.rst +0 -0
  225. {htpolynet-2.6.2 → htpolynet-2.8.0}/docs/source/user-guide/usage.rst +0 -0
  226. {htpolynet-2.6.2 → htpolynet-2.8.0}/scripts/release.sh +0 -0
  227. {htpolynet-2.6.2 → htpolynet-2.8.0}/scripts/render-detail.sh +0 -0
  228. {htpolynet-2.6.2 → htpolynet-2.8.0}/scripts/render-detail.tcl +0 -0
  229. {htpolynet-2.6.2 → htpolynet-2.8.0}/scripts/render-snapshot.sh +0 -0
  230. {htpolynet-2.6.2 → htpolynet-2.8.0}/scripts/run_all_examples.sh +0 -0
  231. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/__init__.py +0 -0
  232. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/analysis/__init__.py +0 -0
  233. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/analysis/analyze.py +0 -0
  234. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/analysis/plot.py +0 -0
  235. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/analysis/postsim.py +0 -0
  236. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/analysis/utils.py +0 -0
  237. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/cli.py +0 -0
  238. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/core/__init__.py +0 -0
  239. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/core/bondtemplate.py +0 -0
  240. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/core/coordinates.py +0 -0
  241. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/core/molecule.py +0 -0
  242. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/core/paramcache.py +0 -0
  243. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/core/projectfilesystem.py +0 -0
  244. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/core/runtime.py +0 -0
  245. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/cure/__init__.py +0 -0
  246. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/cure/chain.py +0 -0
  247. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/cure/expandreactions.py +0 -0
  248. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/cure/reaction.py +0 -0
  249. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/external/__init__.py +0 -0
  250. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/external/ambertools.py +0 -0
  251. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/external/command.py +0 -0
  252. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/external/gromacs.py +0 -0
  253. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/external/slurm.py +0 -0
  254. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/external/smiles_input.py +0 -0
  255. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/external/software.py +0 -0
  256. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/geometry/__init__.py +0 -0
  257. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/geometry/bondlist.py +0 -0
  258. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/geometry/lattice.py +0 -0
  259. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/geometry/linkcell.py +0 -0
  260. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/geometry/matrix4.py +0 -0
  261. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/geometry/ring.py +0 -0
  262. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/io/__init__.py +0 -0
  263. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/io/gro.py +0 -0
  264. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/io/mol2.py +0 -0
  265. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/io/pdb.py +0 -0
  266. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/repair/__init__.py +0 -0
  267. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/repair/topology_surgery.py +0 -0
  268. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/README.md +0 -0
  269. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/__init__.py +0 -0
  270. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/claude/SKILL.md +0 -0
  271. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/mdp/README.md +0 -0
  272. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/mdp/drag-min.mdp +0 -0
  273. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/mdp/drag-npt.mdp +0 -0
  274. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/mdp/drag-nvt.mdp +0 -0
  275. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/mdp/min.mdp +0 -0
  276. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/mdp/relax-min.mdp +0 -0
  277. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/mdp/relax-npt.mdp +0 -0
  278. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/mdp/relax-nvt.mdp +0 -0
  279. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/mdp/single-molecule-min.mdp +0 -0
  280. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/mdp/single-molecule-nvt.mdp +0 -0
  281. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/inputs/DFA.pdb +0 -0
  282. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/inputs/DGE.mol2 +0 -0
  283. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/inputs/EMB.mol2 +0 -0
  284. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/inputs/FDE.pdb +0 -0
  285. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/inputs/GMA.mol2 +0 -0
  286. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/inputs/PAC.mol2 +0 -0
  287. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/inputs/STY.mol2 +0 -0
  288. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/make-monomers.sh +0 -0
  289. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/pics/DFA.png +0 -0
  290. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/pics/DGE.png +0 -0
  291. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/pics/EMB.png +0 -0
  292. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/pics/FDE.png +0 -0
  293. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/pics/GMA.png +0 -0
  294. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/pics/PAC.png +0 -0
  295. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/pics/STY.png +0 -0
  296. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/sample-inputs/DFA.pdb +0 -0
  297. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/sample-inputs/DGE.mol2 +0 -0
  298. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/sample-inputs/EMB.mol2 +0 -0
  299. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/sample-inputs/FDE.pdb +0 -0
  300. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/sample-inputs/GMA.mol2 +0 -0
  301. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/sample-inputs/PAC.mol2 +0 -0
  302. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/molecules/sample-inputs/STY.mol2 +0 -0
  303. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/tcl/readbonds.tcl +0 -0
  304. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/tcl/readgrx.tcl +0 -0
  305. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/resources/tcl/render.tcl +0 -0
  306. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/utils/__init__.py +0 -0
  307. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/utils/banner.py +0 -0
  308. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/utils/checkpoint.py +0 -0
  309. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/utils/dataframetools.py +0 -0
  310. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/utils/inputcheck.py +0 -0
  311. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/utils/logsetup.py +0 -0
  312. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/utils/profiling.py +0 -0
  313. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/utils/stringthings.py +0 -0
  314. {htpolynet-2.6.2 → htpolynet-2.8.0}/src/htpolynet/utils/vmd_viz.py +0 -0
  315. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/__init__.py +0 -0
  316. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/conftest.py +0 -0
  317. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/__init__.py +0 -0
  318. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/fixtures/config1.gro +0 -0
  319. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/fixtures/config1.top +0 -0
  320. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/fixtures/config2.gro +0 -0
  321. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/fixtures/config2.top +0 -0
  322. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/fixtures/items31.edr +0 -0
  323. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/fixtures/items43.edr +0 -0
  324. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/fixtures/items45.edr +0 -0
  325. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/fixtures/short.mdp +0 -0
  326. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_bondtemplate.py +0 -0
  327. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_cap_placement.py +0 -0
  328. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_chain.py +0 -0
  329. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_completion_bias.py +0 -0
  330. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_dataframetools.py +0 -0
  331. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_gpu_usability.py +0 -0
  332. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_gromacs_get_energy_menu.py +0 -0
  333. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_gromacs_gmx_energy_trace.py +0 -0
  334. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_inputcheck.py +0 -0
  335. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_linkcell_pierce.py +0 -0
  336. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_paramcache.py +0 -0
  337. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_paramcache_ambertools.py +0 -0
  338. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_parameterize_react.py +0 -0
  339. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_plot_smoke.py +0 -0
  340. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_projectfilesystem.py +0 -0
  341. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_resources.py +0 -0
  342. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_ring.py +0 -0
  343. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_ring_pierce_figs.py +0 -0
  344. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_setup_claude.py +0 -0
  345. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_slurm_script.py +0 -0
  346. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_smiles_input.py +0 -0
  347. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_software_provenance.py +0 -0
  348. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_topology/test.top +0 -0
  349. {htpolynet-2.6.2 → htpolynet-2.8.0}/tests/unit/test_topology.py +0 -0
@@ -0,0 +1,90 @@
1
+ name: Docs
2
+
3
+ # ReadTheDocs has no webhook on this repository. Its only trigger was the
4
+ # "Trigger ReadTheDocs build" step in release.yaml, which fires on v* tags, so
5
+ # the published docs tracked *releases* rather than main: a docs-only commit
6
+ # did not appear on RTD until the next release. This workflow closes that gap
7
+ # for the `latest` version. `stable` follows tags and stays release.yaml's job.
8
+ #
9
+ # The build job also enforces the repo invariant that the docs build with zero
10
+ # warnings (-W). RTD builds without -W, so a warning introduced on main would
11
+ # otherwise publish green and be caught only by whoever next built locally.
12
+ # Gating the trigger on that build means a broken docs commit is never pushed
13
+ # to RTD.
14
+
15
+ on:
16
+ push:
17
+ branches: [main]
18
+ paths:
19
+ # autodoc reads docstrings and the tutorials literalinclude the example
20
+ # configs, so src/ is a docs input; changelog.rst includes CHANGELOG.md;
21
+ # RTD pip-installs the package, so pyproject.toml matters too.
22
+ - 'docs/**'
23
+ - 'src/**'
24
+ - 'CHANGELOG.md'
25
+ - '.readthedocs.yaml'
26
+ - 'pyproject.toml'
27
+ - '.github/workflows/docs.yml'
28
+ pull_request:
29
+ paths:
30
+ - 'docs/**'
31
+ - 'src/**'
32
+ - 'CHANGELOG.md'
33
+ - '.readthedocs.yaml'
34
+ - 'pyproject.toml'
35
+ - '.github/workflows/docs.yml'
36
+ workflow_dispatch:
37
+
38
+ concurrency:
39
+ group: docs-${{ github.ref }}
40
+ cancel-in-progress: true
41
+
42
+ jobs:
43
+ build:
44
+ name: build (zero warnings)
45
+ runs-on: ubuntu-latest
46
+ steps:
47
+ - uses: actions/checkout@v4
48
+
49
+ - name: Install uv
50
+ uses: astral-sh/setup-uv@v5
51
+
52
+ # Same invocation as CLAUDE.md documents for local use. -W turns
53
+ # warnings into errors; -a rebuilds everything so a warning cannot be
54
+ # skipped by an up-to-date doctree.
55
+ - name: Build docs
56
+ run: >
57
+ uv run --with-requirements docs/requirements.txt --with sphinx
58
+ python -m sphinx -b html -W -a docs/source _docbuild
59
+
60
+ trigger-rtd:
61
+ name: trigger ReadTheDocs
62
+ needs: build
63
+ if: github.event_name != 'pull_request'
64
+ runs-on: ubuntu-latest
65
+ steps:
66
+ - name: Trigger ReadTheDocs build of latest
67
+ env:
68
+ RTD_SECRET: ${{ secrets.RTD_SECRET }}
69
+ run: |
70
+ set -euo pipefail
71
+ if [ -z "${RTD_SECRET:-}" ]; then
72
+ echo "::error::RTD_SECRET is not set; cannot trigger a ReadTheDocs build."
73
+ exit 1
74
+ fi
75
+ # curl exits 0 on a 4xx unless told otherwise, so check the status
76
+ # explicitly. A trigger that fails silently is worse than none: the
77
+ # job goes green and the docs quietly stop updating.
78
+ code=$(curl -sS --max-time 60 -o rtd-response.json -w '%{http_code}' \
79
+ -X POST \
80
+ -H "Authorization: Token ${RTD_SECRET}" \
81
+ https://readthedocs.org/api/v3/projects/htpolynet/versions/latest/builds/)
82
+ echo "ReadTheDocs returned HTTP ${code}"
83
+ cat rtd-response.json || true
84
+ echo
85
+ case "${code}" in
86
+ 2*) echo "Build of 'latest' queued." ;;
87
+ 401|403) echo "::error::RTD rejected the token (HTTP ${code}); RTD_SECRET is missing, wrong or expired."; exit 1 ;;
88
+ 404) echo "::error::RTD has no project 'htpolynet' or no version 'latest' (HTTP 404)."; exit 1 ;;
89
+ *) echo "::error::RTD returned HTTP ${code}."; exit 1 ;;
90
+ esac
@@ -79,13 +79,37 @@ jobs:
79
79
  path: dist/
80
80
 
81
81
  - name: Trigger ReadTheDocs build
82
+ env:
83
+ RTD_SECRET: ${{ secrets.RTD_SECRET }}
84
+ RTD_VERSION: ${{ github.ref_name }}
82
85
  run: |
83
- curl -X POST \
84
- -H "Authorization: Token ${{ secrets.RTD_SECRET }}" \
85
- https://readthedocs.org/api/v3/projects/htpolynet/versions/latest/builds/
86
- curl -X POST \
87
- -H "Authorization: Token ${{ secrets.RTD_SECRET }}" \
88
- https://readthedocs.org/api/v3/projects/htpolynet/versions/${{ github.ref_name }}/builds/
86
+ set -euo pipefail
87
+ if [ -z "${RTD_SECRET:-}" ]; then
88
+ echo "::error::RTD_SECRET is not set; cannot trigger a ReadTheDocs build."
89
+ exit 1
90
+ fi
91
+ # curl exits 0 on a 4xx unless told otherwise. These calls used to
92
+ # go unchecked, so an expired token would print a 401 body and the
93
+ # step would still pass -- the docs would just stop updating.
94
+ trigger() {
95
+ local version="$1"
96
+ local code
97
+ code=$(curl -sS --max-time 60 -o rtd-response.json -w '%{http_code}' \
98
+ -X POST \
99
+ -H "Authorization: Token ${RTD_SECRET}" \
100
+ "https://readthedocs.org/api/v3/projects/htpolynet/versions/${version}/builds/")
101
+ echo "ReadTheDocs (${version}) returned HTTP ${code}"
102
+ cat rtd-response.json || true
103
+ echo
104
+ case "${code}" in
105
+ 2*) return 0 ;;
106
+ *) echo "::error::RTD returned HTTP ${code} for version '${version}'."; return 1 ;;
107
+ esac
108
+ }
109
+ trigger latest
110
+ # The tag's own version may not exist yet if RTD has not synced it;
111
+ # that is not a release failure, so report it without failing the job.
112
+ trigger "${RTD_VERSION}" || echo "::warning::Could not trigger the '${RTD_VERSION}' version build; trigger it from the RTD dashboard if that version is expected."
89
113
 
90
114
  publish:
91
115
  needs: release
@@ -145,3 +145,6 @@ dmypy.json
145
145
  .pyre/
146
146
  .vscode/settings.json
147
147
 
148
+
149
+ # sphinx output from the docs CI job (and local runs that mirror it)
150
+ _docbuild/
@@ -7,6 +7,235 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.8.0] - 2026-09-12
11
+
12
+ ### Added
13
+
14
+ - **Configuration files are now validated.** `htpolynet run` checks every
15
+ configuration against a schema before doing anything else, and fills in
16
+ every documented default from that same schema. Previously a configuration
17
+ was read by picking out the keys htpolynet recognized and silently discarding
18
+ the rest, so a misspelled key did nothing and said nothing: a
19
+ `desired_converson: 0.9` typo produced a default-value build -- a half-cure --
20
+ with no message. Errors now name the offending location, for example
21
+ `Attribute 'smilse' invalid ... under 'constituents[STY]'` or
22
+ `Attribute 'stage' of 'reactions[1]' must be one of build, param, cure, cap,
23
+ repair`. Validation covers every section, including molecule records,
24
+ reactions and postcure repair specs; only `gromacs.mdrun_options` is left
25
+ open on purpose. This adds a runtime dependency on
26
+ [ycleptic](https://pypi.org/project/ycleptic/) 2.4.1 or later.
27
+
28
+ - **Densification can gate on measured density convergence instead of a fixed
29
+ step count.** An NPT record in `densification.equilibration` may carry a
30
+ `converge` block; the stage then repeats until the density settles or a
31
+ ceiling is hit. It is off unless configured, so existing configurations
32
+ reproduce exactly. The criterion is an autocorrelation-corrected standard
33
+ error, `sigma/sqrt(N/tau_int)` -- an NPT cell density is correlated over
34
+ hundreds of steps, so successive frames are not independent samples and a
35
+ naive standard error is optimistic by roughly 1.5x, which would stop the
36
+ gate early. It also makes the tolerance size-aware for free. A small
37
+ standard error alone is not accepted as convergence, because a trace that is
38
+ still climbing looks tight in every short window; the window's two halves
39
+ are compared as well. **Reaching the ceiling is reported as a failure**,
40
+ with a warning saying the number is an unsettled box rather than the
41
+ system's density.
42
+
43
+ Densification is the one place this belongs: the 200 to ~1100 kg/m^3
44
+ compaction happens once and involves a large volume change. Gating the CURE
45
+ relaxation loop was measured and rejected -- past the gel point the
46
+ unreacted species are bonded into the network and topologically constrained,
47
+ the effective diffusion exponent falls to about 0.14, and restoring the
48
+ mobility a gate would wait for takes of order 10^4 times the relaxation
49
+ time. Note also that the gate certifies convergence of the Berendsen
50
+ barostat `npt.mdp` currently uses, which does not sample a correct NPT
51
+ ensemble; treat it as a reproducibility criterion, not a physical one.
52
+
53
+ ### Changed
54
+
55
+ - **A configuration that 2.7.0 accepted may now be rejected.** This is the
56
+ point of the validation above, but it is a change in behavior: a key
57
+ htpolynet does not know, a value of the wrong type, a value outside its
58
+ allowed choices, or a missing required field now stops the run with a
59
+ message instead of being ignored. Every shipped example validates. If an
60
+ existing configuration of yours is rejected, the message says where; the fix
61
+ is almost always a misspelled or obsolete key that was already having no
62
+ effect.
63
+
64
+ - **Every shipped example now gates its densification on density
65
+ convergence**, using the `converge` block described under Added, so their
66
+ densification stages run until the box settles rather than for a fixed
67
+ duration.
68
+
69
+ - **The conda-forge package for this release will follow later.** ycleptic,
70
+ the new dependency, is not yet available on conda-forge, so the conda-forge
71
+ build of this version cannot be published until it is. In the meantime the
72
+ release is available from PyPI (`pip install htpolynet`) and in the container
73
+ image (`ghcr.io/cameronabrams/htpolynet`); conda-forge users will stay on
74
+ 2.7.0 until then.
75
+
76
+ - **The single moleculetype htpolynet writes is now named `whole_system`, not
77
+ `None`.** An entire build is written as one moleculetype on purpose -- a
78
+ cured network is one covalently connected molecule -- but the default name
79
+ was the literal string `None`, which reads like an unset field or a bug. It
80
+ sits on exactly the line users inspect after GROMACS warns about
81
+ "inconsistent shifts", so it was sending them looking for a topology error
82
+ that is not there. Purely cosmetic: GROMACS accepts either, and existing
83
+ topologies that say `None` still read back unchanged.
84
+
85
+ ### Fixed
86
+
87
+ - **A config that omitted `CURE.relax.increment` crashed at the first
88
+ relax.** The default was `0.0`, and `_distance_attenuation` derives its
89
+ stage count as `int(maxL/increment)` with no guard, so the build died with
90
+ `ZeroDivisionError` rather than any message about the config. The
91
+ documented default -- 0.08 -- is now the actual one. Dragging's `increment`
92
+ stays 0.0, which is a sentinel rather than the same bug: its own 0.0 `limit`
93
+ disables dragging before anything divides. Every shipped example sets
94
+ `relax.increment` explicitly, which is why this went unnoticed.
95
+
96
+ ### Documentation
97
+
98
+ - **New page: analyzing trajectories of periodic networks.** Explains why
99
+ `gmx trjconv -pbc whole` reports "There were N inconsistent shifts" on a
100
+ cured network (the bond graph wraps through the periodic boundaries, so no
101
+ consistent unwrapped image exists), and that this is expected rather than a
102
+ topology error -- on example 3 the count is zero until the network
103
+ percolates, then 2 at 69% conversion and 140 at 95%. It gives tested recipes
104
+ for visualization, MSD and free volume. The MSD one carries a real
105
+ warning: `gmx msd`'s default `-rmpbc` tries to make the network whole every
106
+ frame and silently inflates the MSD, by about 2.4x at 100 ps on example 3,
107
+ while still exiting normally; use `-pbc nojump` and then `-normpbc`. Prompted
108
+ by a user report.
109
+
110
+ - The `htpolynet analyze` free-volume docs now say that the per-molecule lines
111
+ in `gmx freevolume`'s output describe the whole box as one molecule, and two
112
+ instances of `poststim` now read `postsim`.
113
+
114
+ - **The docs landing page carries the standard badge row, and the release
115
+ history is gone from the table of contents.** `release-history.rst`
116
+ duplicated what this file already records from 1.0.8 forward, so it is
117
+ deleted and `changelog` moves to the *end* of the contents tree rather than
118
+ sitting second. The seven pre-1.0.8 entries it held -- 1.0.7.2 back to
119
+ 0.0.1, which this file did not cover -- were migrated here first, so nothing
120
+ is lost by the deletion. The landing page now shows the same eight badges
121
+ as the README: tests, PyPI, conda-forge, Python versions, license, docs,
122
+ downloads and DOI.
123
+
124
+ - **Two more `CURE`/`densification` defaults in the config tables were
125
+ wrong.** `densification.initial_density` is 200.0 kg/m^3, not the 300.0 the
126
+ table gave; and the prose under `min_allowable_bondcycle_length` still said
127
+ "setting it to zero (the default)" after the table had been corrected to -1.
128
+ Found while transcribing the defaults into a machine-readable schema, which
129
+ is the point of doing so.
130
+
131
+ ## [2.7.0] - 2026-09-08
132
+
133
+ ### Changed
134
+
135
+ - **The per-iteration equilibration now constrains hydrogen bonds only, not
136
+ all bonds.** The packaged `npt.mdp` and `nvt.mdp` paired `dt = 0.002` with
137
+ `constraints = all-bonds` and set no `lincs_order`, so GROMACS used its
138
+ default LINCS accuracy (order 4). That is marginal whenever heavy-atom
139
+ bonds are constrained, and for a halogenated monomer it was fatal: a
140
+ fluorinated bisphenol died at `4-cure_equilibrate-npt` in **7 of 7** build
141
+ attempts, at cure iteration 5-7 of ~10, with exit codes 1 and 139. `LINCS`
142
+ appeared 14 times in that bridge's `diagnostics.log` and **zero** times in
143
+ each of seven other bridges built identically -- a perfect discriminator
144
+ across eight chemistries. In a melt of pristine, uncrosslinked monomers at
145
+ production density, with no cure at all, step-0 pressure was -1.34e5 bar;
146
+ `h-bonds` took it to -495 bar and the LINCS constraint rmsd from 4.5e-4 to
147
+ 7.3e-7. With the new settings the whole eight-bridge series rebuilt **32 of
148
+ 32**, the fluorinated one reaching a bond conversion of 0.900 in all four
149
+ replicates. `h-bonds` is also the conventional pairing with a 2 fs
150
+ timestep.
151
+
152
+ **This changes the sampled ensemble**, so structures and densities from
153
+ earlier versions are not strictly comparable with new ones, and because
154
+ `postsim` inherits `npt.mdp` it changes the production measurement too, not
155
+ just the cure. The drag and relax ladders are unaffected -- they always ran
156
+ unconstrained at 1 fs.
157
+
158
+ - **`lincs_order = 8` in the packaged `npt.mdp` and `nvt.mdp`.** Independent
159
+ of the constraint change: it improves the accuracy of the constraint solve
160
+ without changing which bonds are constrained, so it does not itself alter
161
+ the ensemble. On the diagnostic melt above, order 8 alone reduced the
162
+ pressure artifact 4.8-fold.
163
+
164
+ ### Added
165
+
166
+ - **The CURE relax stages now report the density they produce.** The relax
167
+ ladder is the only above-`Tg` constant-pressure time in a cure -- roughly
168
+ 120 ps of it, at the defaults -- and nothing looked at the density it
169
+ produced: `_do_relax` delegates to `_distance_attenuation`, which never
170
+ calls `TopoCoord.equilibrate()`, the only method that traced Density. The
171
+ per-stage relax table gains a `Density (kg/m3)` column, read from the NPT
172
+ `.edr` each stage already wrote. Drag is deliberately excluded, since it
173
+ runs under restraints and its density is not comparable.
174
+
175
+ - **The CURE relax stages now report reactive-species mobility (Varshney's
176
+ criterion).** After each relax ladder, htpolynet reports the rmsd
177
+ displacement of atoms that still carry an unused reactive site, and what
178
+ fraction of them moved at least one `CURE.controls.search_radius` during
179
+ the window. Varshney sized the original 40 ps relaxation window on exactly
180
+ this requirement -- that unreacted species diffuse far enough between
181
+ reactions to find new partners -- but the requirement decays over a cure as
182
+ those species are bonded into the growing network, and until now nothing
183
+ reported when a window had stopped satisfying it. A build where fewer than
184
+ 25 % of still-reactive atoms cross a search radius now says so, because its
185
+ later bonds are being chosen from a nearly frozen neighborhood.
186
+
187
+ Both reports are pure observation: they change no simulation input and
188
+ gate nothing. Every failure path is swallowed and logged at debug level,
189
+ so instrumentation cannot fail a build. A run resuming mid-ladder skips
190
+ the mobility report rather than measuring only the tail of its window.
191
+
192
+ - **`repair-summary.yaml` now reports the pre-repair bond histogram.** A new
193
+ `prerepair_bond_counts` key gives how many crosslinkers carried 0, 1, ... up
194
+ to `full_bond_count` bonds *before* repair dismantled any of them. Repair
195
+ rewrites the topology and the final structure does not record which cap came
196
+ from which ring, so this distribution was previously unrecoverable after the
197
+ fact -- only `n_complete`, its top bin, survived. It is the statistic that
198
+ makes the independence assumption behind "crosslinker conversion = bond
199
+ conversion cubed" directly testable, and that relationship is now known to
200
+ be wrong in a way that matters: audited against 54 builds, the effective
201
+ exponent runs about 3.5 near a bond conversion of 0.55, 3.0 near 0.73 and
202
+ 2.6-2.7 near 0.90, so the deviation from the cube changes sign and no single
203
+ power law fits. The histogram is zero-filled, so the shape of the summary
204
+ does not depend on the box, and it is cross-checked against the completion
205
+ count on every build -- the two are computed independently, and a
206
+ disagreement now warns.
207
+
208
+ ### Documentation
209
+
210
+ - **The constraint trap is documented where someone hitting it will look.**
211
+ The failure above surfaces at the equilibration step immediately after the
212
+ relax ladder, so the natural diagnosis is that the relax schedule is too
213
+ coarse. It is not: the drag and relax ladders run unconstrained at a 1 fs
214
+ timestep and cannot be responsible, and refining them makes matters worse --
215
+ a three-variant array (increment 0.08 to 0.04 to 0.02, plus a double-MD arm)
216
+ confirmed that, with quadrupling the stage count degrading the result. The
217
+ CURE section of the program-flow page now says which stages are constrained
218
+ and which are not, and says to look at the constraints rather than the
219
+ ladder when LINCS warnings appear at `cure_equilibrate`.
220
+
221
+ - **Four defaults in the `CURE.controls` table were wrong.** The table and
222
+ `curedict_defaults` had drifted apart: `radial_increment` is 0.05 and was
223
+ documented as 0.25, `max_iterations` is 100 and was documented as 150,
224
+ `desired_conversion` is 0.5 and was documented as 0.95, and
225
+ `min_allowable_bondcycle_length` is -1 rather than 0 (any value <= 0
226
+ disallows all cycles, so the documented *behavior* was right and only the
227
+ literal was wrong). `desired_conversion` is the costly one: a user who
228
+ read "default 0.95" and omitted the key got a half-cure. Every shipped
229
+ example that cures sets it explicitly, which is why nothing caught this.
230
+
231
+ - **`desired_conversion` now says which conversion it means.** The
232
+ `CURE.controls` table described it as "target conversion", which every
233
+ reader takes to be the crosslinker conversion an experiment measures. It
234
+ is the *bond* conversion -- bonds formed over bonds possible -- and the
235
+ crosslinker conversion is lower: at a nominal 90 % cure, an audit of 30
236
+ builds found 75.2 triazines complete per 100, not 90. The row now says
237
+ so and links to the fuller explanation under postcure repair.
238
+
10
239
  ## [2.6.2] - 2026-08-31
11
240
 
12
241
  ### Fixed
@@ -910,3 +1139,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
910
1139
  ### Changed
911
1140
 
912
1141
  - Uses `chordless_cycles` to find rings; `ringidx` is no longer a unique atom attribute; improved ring-pierce detection.
1142
+
1143
+ ## [1.0.7.2] - untagged
1144
+
1145
+ ### Changed
1146
+
1147
+ - Moved the Library package to the `resources` subpackage of `htpolynet`.
1148
+
1149
+ ## [1.0.6] - 2023-06-21
1150
+
1151
+ ### Added
1152
+
1153
+ - `gmx`-style `analyze` subcommand.
1154
+
1155
+ ## [1.0.5] - 2022-09-29
1156
+
1157
+ ### Added
1158
+
1159
+ - Post-build MD simulations and plotting functionality.
1160
+
1161
+ ## [1.0.2] - 2022-09-16
1162
+
1163
+ ### Changed
1164
+
1165
+ - Enhanced molecule-network graph drawing in the `plot` subcommand.
1166
+
1167
+ ## [1.0.1] - 2022-09-07
1168
+
1169
+ ### Fixed
1170
+
1171
+ - Atom index assignment for systems with more than 100,000 atoms.
1172
+
1173
+ ## [1.0.0] - 2022-09-03
1174
+
1175
+ - First release.
1176
+
1177
+ ## [0.0.1] - 2022-08-29
1178
+
1179
+ - Initial beta version.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: htpolynet
3
- Version: 2.6.2
3
+ Version: 2.8.0
4
4
  Summary: Automated MD System Builder for Amorphous Network Polymers
5
5
  Project-URL: Source, https://github.com/cameronabrams/htpolynet
6
6
  Project-URL: Documentation, https://htpolynet.readthedocs.io/
@@ -26,6 +26,7 @@ Requires-Dist: rdkit>=2024.3
26
26
  Requires-Dist: requests>=2.28
27
27
  Requires-Dist: scipy>=1.10
28
28
  Requires-Dist: setuptools
29
+ Requires-Dist: ycleptic>=2.4.1
29
30
  Provides-Extra: dev
30
31
  Requires-Dist: pytest; extra == 'dev'
31
32
  Provides-Extra: test