htpolynet 2.11.1__tar.gz → 2.11.2__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 (369) hide show
  1. {htpolynet-2.11.1 → htpolynet-2.11.2}/CHANGELOG.md +18 -0
  2. {htpolynet-2.11.1 → htpolynet-2.11.2}/PKG-INFO +1 -1
  3. {htpolynet-2.11.1 → htpolynet-2.11.2}/ROADMAP.md +18 -0
  4. {htpolynet-2.11.1 → htpolynet-2.11.2}/pyproject.toml +1 -1
  5. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/cure/ringcontroller.py +60 -4
  6. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_ringcontroller.py +88 -1
  7. {htpolynet-2.11.1 → htpolynet-2.11.2}/.claude/settings.json +0 -0
  8. {htpolynet-2.11.1 → htpolynet-2.11.2}/.claude/skills/htpolynet/SKILL.md +0 -0
  9. {htpolynet-2.11.1 → htpolynet-2.11.2}/.envrc +0 -0
  10. {htpolynet-2.11.1 → htpolynet-2.11.2}/.github/workflows/conda-forge-sync.yml +0 -0
  11. {htpolynet-2.11.1 → htpolynet-2.11.2}/.github/workflows/docker.yml +0 -0
  12. {htpolynet-2.11.1 → htpolynet-2.11.2}/.github/workflows/docs.yml +0 -0
  13. {htpolynet-2.11.1 → htpolynet-2.11.2}/.github/workflows/release.yaml +0 -0
  14. {htpolynet-2.11.1 → htpolynet-2.11.2}/.github/workflows/test.yml +0 -0
  15. {htpolynet-2.11.1 → htpolynet-2.11.2}/.gitignore +0 -0
  16. {htpolynet-2.11.1 → htpolynet-2.11.2}/.readthedocs.yaml +0 -0
  17. {htpolynet-2.11.1 → htpolynet-2.11.2}/CITATION.cff +0 -0
  18. {htpolynet-2.11.1 → htpolynet-2.11.2}/CLAUDE.md +0 -0
  19. {htpolynet-2.11.1 → htpolynet-2.11.2}/LICENSE +0 -0
  20. {htpolynet-2.11.1 → htpolynet-2.11.2}/MANIFEST.in +0 -0
  21. {htpolynet-2.11.1 → htpolynet-2.11.2}/README.md +0 -0
  22. {htpolynet-2.11.1 → htpolynet-2.11.2}/docker/Dockerfile +0 -0
  23. {htpolynet-2.11.1 → htpolynet-2.11.2}/docker/compose.yml +0 -0
  24. {htpolynet-2.11.1 → htpolynet-2.11.2}/docker/docker-entrypoint.sh +0 -0
  25. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/Makefile +0 -0
  26. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/README.rst +0 -0
  27. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/make.bat +0 -0
  28. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/requirements.txt +0 -0
  29. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/_static/.gitkeep +0 -0
  30. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/_static/htpolynet-favicon.ico +0 -0
  31. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/_static/htpolynet-landing.jpg +0 -0
  32. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/_static/htpolynet-logo-dark.png +0 -0
  33. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/_static/htpolynet-logo-light.png +0 -0
  34. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/changelog.rst +0 -0
  35. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/conf.py +0 -0
  36. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/0-liquid-styrene/configuration.rst +0 -0
  37. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/0-liquid-styrene/index.rst +0 -0
  38. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/0-liquid-styrene/introduction.rst +0 -0
  39. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/0-liquid-styrene/monomer.rst +0 -0
  40. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/0-liquid-styrene/postsim.rst +0 -0
  41. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/0-liquid-styrene/results.rst +0 -0
  42. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/0-liquid-styrene/run.rst +0 -0
  43. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/configuration.rst +0 -0
  44. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/index.rst +0 -0
  45. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/introduction.rst +0 -0
  46. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/monomer.rst +0 -0
  47. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/pics/STY.png +0 -0
  48. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/pics/STYCC.png +0 -0
  49. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/pics/buildtraces.png +0 -0
  50. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/pics/cure_info.png +0 -0
  51. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/pics/densification-density.png +0 -0
  52. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/pics/final-box.png +0 -0
  53. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/pics/reaction_network.png +0 -0
  54. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/pics/sty-coloring.tcl +0 -0
  55. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/pics/sty-cured.png +0 -0
  56. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/pics/sty-detail.png +0 -0
  57. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/pics/sty-liq.png +0 -0
  58. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/pics/styrene-polymerization.png +0 -0
  59. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/postsim.rst +0 -0
  60. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/reactions.rst +0 -0
  61. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/results.rst +0 -0
  62. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/1-polystyrene/run.rst +0 -0
  63. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/configuration.rst +0 -0
  64. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/index.rst +0 -0
  65. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/introduction.rst +0 -0
  66. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/BPA.png +0 -0
  67. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/GMA.png +0 -0
  68. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/HIE.png +0 -0
  69. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/buildtraces.png +0 -0
  70. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/cure_info.png +0 -0
  71. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/densification-density.png +0 -0
  72. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/four_dimers.eps +0 -0
  73. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/four_dimers.fig +0 -0
  74. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/four_dimers.png +0 -0
  75. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-coloring.tcl +0 -0
  76. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-cured.png +0 -0
  77. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-detail.png +0 -0
  78. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-liq.png +0 -0
  79. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/p1-traces.png +0 -0
  80. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/reaction_network.png +0 -0
  81. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/vesys.eps +0 -0
  82. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/vesys.fig +0 -0
  83. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/vesys.png +0 -0
  84. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/postsim.rst +0 -0
  85. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/reactions.rst +0 -0
  86. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/results.rst +0 -0
  87. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/run.rst +0 -0
  88. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/configuration.rst +0 -0
  89. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/index.rst +0 -0
  90. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/introduction.rst +0 -0
  91. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/monomers.rst +0 -0
  92. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/DGE-epoxy.png +0 -0
  93. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/DGE-labelled.png +0 -0
  94. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/PAC-2d.png +0 -0
  95. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/PAC-labelled.png +0 -0
  96. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/buildtraces.png +0 -0
  97. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/cure_info.png +0 -0
  98. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/densification-density.png +0 -0
  99. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-coloring.tcl +0 -0
  100. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-cured.png +0 -0
  101. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-detail.png +0 -0
  102. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-liq.png +0 -0
  103. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dgesys.eps +0 -0
  104. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dgesys.fig +0 -0
  105. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dgesys.png +0 -0
  106. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/equil-rho_v_ns.png +0 -0
  107. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/postsim-typical.png +0 -0
  108. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-e.png +0 -0
  109. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-equil-rho_v_ns.png +0 -0
  110. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-rho_v_ns.png +0 -0
  111. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-tg.png +0 -0
  112. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/r1.png +0 -0
  113. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/r2.png +0 -0
  114. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/r3.png +0 -0
  115. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/reaction_network.png +0 -0
  116. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/rho_v_ns.png +0 -0
  117. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/short-e.png +0 -0
  118. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/short-tg.png +0 -0
  119. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/postsim.rst +0 -0
  120. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/reactions.rst +0 -0
  121. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/results.rst +0 -0
  122. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/run.rst +0 -0
  123. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/configuration.rst +0 -0
  124. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/index.rst +0 -0
  125. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/introduction.rst +0 -0
  126. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/monomers.rst +0 -0
  127. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/buildtraces.png +0 -0
  128. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/cure_info.png +0 -0
  129. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/densification-density.png +0 -0
  130. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-coloring.tcl +0 -0
  131. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-cured.png +0 -0
  132. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-detail.png +0 -0
  133. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-liq.png +0 -0
  134. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/reaction_network.png +0 -0
  135. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/postsim.rst +0 -0
  136. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/reactions.rst +0 -0
  137. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/results.rst +0 -0
  138. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/run.rst +0 -0
  139. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/configuration.rst +0 -0
  140. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/index.rst +0 -0
  141. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/introduction.rst +0 -0
  142. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/monomers.rst +0 -0
  143. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/pics/buildtraces.png +0 -0
  144. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/pics/cure_info.png +0 -0
  145. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/pics/densification-density.png +0 -0
  146. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-coloring.tcl +0 -0
  147. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-ipdi-cured.png +0 -0
  148. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-ipdi-detail.png +0 -0
  149. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-ipdi-liq.png +0 -0
  150. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/pics/reaction_network.png +0 -0
  151. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/postsim.rst +0 -0
  152. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/reactions.rst +0 -0
  153. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/results.rst +0 -0
  154. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/5-htpb-ipdi/run.rst +0 -0
  155. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/configuration.rst +0 -0
  156. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/index.rst +0 -0
  157. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/introduction.rst +0 -0
  158. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/monomers.rst +0 -0
  159. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-coloring.tcl +0 -0
  160. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-cured.png +0 -0
  161. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-detail.png +0 -0
  162. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-liq.png +0 -0
  163. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/pics/buildtraces.png +0 -0
  164. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/pics/cure_info.png +0 -0
  165. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/pics/densification-density.png +0 -0
  166. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/pics/reaction_network.png +0 -0
  167. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/postsim.rst +0 -0
  168. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/reactions.rst +0 -0
  169. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/results.rst +0 -0
  170. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/6-cyanate-ester/run.rst +0 -0
  171. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/example-tutorials/index.rst +0 -0
  172. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/htpolynetpackage.rst +0 -0
  173. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/index.rst +0 -0
  174. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/install.rst +0 -0
  175. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/references/index.rst +0 -0
  176. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/references/mol2-reference.pdf +0 -0
  177. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/references.bib +0 -0
  178. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/CURE.odg +0 -0
  179. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/bond_filter.odg +0 -0
  180. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/building-a-system.rst +0 -0
  181. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/configs/configs-for-analyze.rst +0 -0
  182. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/configs/configs-for-postsim.rst +0 -0
  183. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/configs/configs-for-run.rst +0 -0
  184. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/configuration-files.rst +0 -0
  185. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/container-usage.rst +0 -0
  186. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/flow1.odg +0 -0
  187. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/flow1yaml.odg +0 -0
  188. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/hydrogenated.eps +0 -0
  189. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/hydrogenated.fig +0 -0
  190. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/index.rst +0 -0
  191. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/molecular-structure-inputs.rst +0 -0
  192. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/periodic-networks.rst +0 -0
  193. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/pics/STY.png +0 -0
  194. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/pics/STYCC.png +0 -0
  195. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/pics/TypicalUsageFlow.png +0 -0
  196. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/pics/bond_filter.png +0 -0
  197. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/pics/chemdoodle-2dsketcher-emb.png +0 -0
  198. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/pics/chemdoodle-2dsketcher-styrene.png +0 -0
  199. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/pics/hydrogenated.png +0 -0
  200. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/pics/ring_pierce/ring_pierce_cases.png +0 -0
  201. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/pics/ring_pierce/ring_pierce_linkcell.png +0 -0
  202. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/postcure-repair.rst +0 -0
  203. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/program-flow.rst +0 -0
  204. {htpolynet-2.11.1 → htpolynet-2.11.2}/docs/source/user-guide/usage.rst +0 -0
  205. {htpolynet-2.11.1 → htpolynet-2.11.2}/scripts/check-conda-sync.py +0 -0
  206. {htpolynet-2.11.1 → htpolynet-2.11.2}/scripts/release.sh +0 -0
  207. {htpolynet-2.11.1 → htpolynet-2.11.2}/scripts/render-detail.sh +0 -0
  208. {htpolynet-2.11.1 → htpolynet-2.11.2}/scripts/render-detail.tcl +0 -0
  209. {htpolynet-2.11.1 → htpolynet-2.11.2}/scripts/render-snapshot.sh +0 -0
  210. {htpolynet-2.11.1 → htpolynet-2.11.2}/scripts/run_all_examples.sh +0 -0
  211. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/__init__.py +0 -0
  212. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/analysis/__init__.py +0 -0
  213. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/analysis/analyze.py +0 -0
  214. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/analysis/plot.py +0 -0
  215. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/analysis/postsim.py +0 -0
  216. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/analysis/utils.py +0 -0
  217. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/cli.py +0 -0
  218. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/core/__init__.py +0 -0
  219. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/core/bondtemplate.py +0 -0
  220. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/core/configuration.py +0 -0
  221. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/core/coordinates.py +0 -0
  222. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/core/molecule.py +0 -0
  223. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/core/paramcache.py +0 -0
  224. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/core/productsplice.py +0 -0
  225. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/core/projectfilesystem.py +0 -0
  226. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/core/runtime.py +0 -0
  227. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/core/topocoord.py +0 -0
  228. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/core/topology.py +0 -0
  229. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/cure/__init__.py +0 -0
  230. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/cure/chain.py +0 -0
  231. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/cure/curecontroller.py +0 -0
  232. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/cure/expandreactions.py +0 -0
  233. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/cure/reaction.py +0 -0
  234. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/cure/triplesearch.py +0 -0
  235. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/external/__init__.py +0 -0
  236. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/external/ambertools.py +0 -0
  237. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/external/command.py +0 -0
  238. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/external/gromacs.py +0 -0
  239. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/external/slurm.py +0 -0
  240. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/external/smiles_input.py +0 -0
  241. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/external/software.py +0 -0
  242. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/geometry/__init__.py +0 -0
  243. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/geometry/bondlist.py +0 -0
  244. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/geometry/lattice.py +0 -0
  245. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/geometry/linkcell.py +0 -0
  246. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/geometry/matrix4.py +0 -0
  247. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/geometry/placement.py +0 -0
  248. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/geometry/ring.py +0 -0
  249. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/geometry/templategeom.py +0 -0
  250. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/io/__init__.py +0 -0
  251. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/io/gro.py +0 -0
  252. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/io/mol2.py +0 -0
  253. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/io/pdb.py +0 -0
  254. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/repair/__init__.py +0 -0
  255. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/repair/cyanate_cap.py +0 -0
  256. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/repair/topology_surgery.py +0 -0
  257. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/README.md +0 -0
  258. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/__init__.py +0 -0
  259. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/claude/SKILL.md +0 -0
  260. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/example_depot/0-liquid-styrene.yaml +0 -0
  261. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/example_depot/1-polystyrene.yaml +0 -0
  262. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/example_depot/2-bisgma-styrene-thermoset.yaml +0 -0
  263. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/example_depot/3-pacm-dgeba-epoxy-thermoset.yaml +0 -0
  264. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/example_depot/4-dfda-fde-epoxy-thermoset.yaml +0 -0
  265. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/example_depot/5-htpb-ipdi.yaml +0 -0
  266. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/example_depot/6-cyanate-ester.yaml +0 -0
  267. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/mdp/README.md +0 -0
  268. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/mdp/drag-min.mdp +0 -0
  269. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/mdp/drag-npt.mdp +0 -0
  270. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/mdp/drag-nvt.mdp +0 -0
  271. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/mdp/min.mdp +0 -0
  272. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/mdp/npt.mdp +0 -0
  273. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/mdp/nvt.mdp +0 -0
  274. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/mdp/relax-min.mdp +0 -0
  275. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/mdp/relax-npt.mdp +0 -0
  276. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/mdp/relax-nvt.mdp +0 -0
  277. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/mdp/single-molecule-min.mdp +0 -0
  278. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/mdp/single-molecule-nvt.mdp +0 -0
  279. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/inputs/DFA.pdb +0 -0
  280. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/inputs/DGE.mol2 +0 -0
  281. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/inputs/EMB.mol2 +0 -0
  282. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/inputs/FDE.pdb +0 -0
  283. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/inputs/GMA.mol2 +0 -0
  284. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/inputs/PAC.mol2 +0 -0
  285. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/inputs/STY.mol2 +0 -0
  286. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/make-monomers.sh +0 -0
  287. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/pics/DFA.png +0 -0
  288. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/pics/DGE.png +0 -0
  289. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/pics/EMB.png +0 -0
  290. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/pics/FDE.png +0 -0
  291. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/pics/GMA.png +0 -0
  292. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/pics/PAC.png +0 -0
  293. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/pics/STY.png +0 -0
  294. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/sample-inputs/DFA.pdb +0 -0
  295. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/sample-inputs/DGE.mol2 +0 -0
  296. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/sample-inputs/EMB.mol2 +0 -0
  297. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/sample-inputs/FDE.pdb +0 -0
  298. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/sample-inputs/GMA.mol2 +0 -0
  299. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/sample-inputs/PAC.mol2 +0 -0
  300. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/molecules/sample-inputs/STY.mol2 +0 -0
  301. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/tcl/readbonds.tcl +0 -0
  302. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/tcl/readgrx.tcl +0 -0
  303. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/resources/tcl/render.tcl +0 -0
  304. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/schema/base.yaml +0 -0
  305. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/utils/__init__.py +0 -0
  306. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/utils/banner.py +0 -0
  307. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/utils/checkpoint.py +0 -0
  308. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/utils/convergence.py +0 -0
  309. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/utils/dataframetools.py +0 -0
  310. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/utils/inputcheck.py +0 -0
  311. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/utils/logsetup.py +0 -0
  312. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/utils/profiling.py +0 -0
  313. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/utils/stringthings.py +0 -0
  314. {htpolynet-2.11.1 → htpolynet-2.11.2}/src/htpolynet/utils/vmd_viz.py +0 -0
  315. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/__init__.py +0 -0
  316. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/conftest.py +0 -0
  317. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/__init__.py +0 -0
  318. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/fixtures/config1.gro +0 -0
  319. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/fixtures/config1.top +0 -0
  320. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/fixtures/config2.gro +0 -0
  321. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/fixtures/config2.top +0 -0
  322. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/fixtures/items31.edr +0 -0
  323. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/fixtures/items43.edr +0 -0
  324. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/fixtures/items45.edr +0 -0
  325. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/fixtures/short.mdp +0 -0
  326. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_bondtemplate.py +0 -0
  327. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_cap_placement.py +0 -0
  328. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_chain.py +0 -0
  329. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_completion_bias.py +0 -0
  330. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_conda_sync.py +0 -0
  331. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_configuration.py +0 -0
  332. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_convergence.py +0 -0
  333. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_cure_site_functionality.py +0 -0
  334. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_dataframetools.py +0 -0
  335. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_density_gate.py +0 -0
  336. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_gpu_usability.py +0 -0
  337. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_gromacs_get_energy_menu.py +0 -0
  338. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_gromacs_gmx_energy_trace.py +0 -0
  339. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_inputcheck.py +0 -0
  340. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_linkcell_pierce.py +0 -0
  341. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_mdrun_gpu_options.py +0 -0
  342. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_mol2_bond_fallback.py +0 -0
  343. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_molecule_charge_report.py +0 -0
  344. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_moleculetype_name.py +0 -0
  345. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_multibody_reactions.py +0 -0
  346. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_paramcache.py +0 -0
  347. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_paramcache_ambertools.py +0 -0
  348. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_parameterize_react.py +0 -0
  349. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_placement_and_ringclose.py +0 -0
  350. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_plot_smoke.py +0 -0
  351. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_productsplice.py +0 -0
  352. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_projectfilesystem.py +0 -0
  353. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_relax_instrumentation.py +0 -0
  354. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_repair_charge_neutrality.py +0 -0
  355. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_repair_conversion.py +0 -0
  356. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_resources.py +0 -0
  357. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_ring.py +0 -0
  358. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_ring_pierce_figs.py +0 -0
  359. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_setup_claude.py +0 -0
  360. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_sibling_templates.py +0 -0
  361. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_slurm_script.py +0 -0
  362. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_smiles_input.py +0 -0
  363. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_software_provenance.py +0 -0
  364. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_templategeom.py +0 -0
  365. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_topology/test.top +0 -0
  366. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_topology.py +0 -0
  367. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_transrot_turn_scan.py +0 -0
  368. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_triplesearch.py +0 -0
  369. {htpolynet-2.11.1 → htpolynet-2.11.2}/tests/unit/test_user_frcmod.py +0 -0
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.11.2] - 2026-09-23
11
+
12
+ ### Fixed
13
+
14
+ - **A ring cure near its target kept re-proposing the triples it had just declined.**
15
+ Declining a ring that the closure ladder could not pull shut leaves its three groups
16
+ unreacted, which is the point -- but the next search then offered the same groups,
17
+ ran the same eight-stage ladder, and declined them again. htpolynet-study measured
18
+ the cost on a 2.11.1 build: at conversion 0.97 with 24 groups left, nine iterations
19
+ running produced 77 declines and not one ring, at about 67 s each.
20
+
21
+ A declined combination is now passed over while any untried ring is within the search
22
+ radius. It is a preference and not a prohibition: that cure escaped on iteration 41
23
+ and finished at 0.971, because the relaxation between iterations moves the groups, so
24
+ a triple that failed once can still close later. When the memory is the only thing
25
+ left keeping an iteration idle, the search lifts it and offers those rings again
26
+ rather than stand still.
27
+
10
28
  ## [2.11.1] - 2026-09-22
11
29
 
12
30
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: htpolynet
3
- Version: 2.11.1
3
+ Version: 2.11.2
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/
@@ -199,6 +199,24 @@ Coverage as of the last measurement: **38.8%** overall.
199
199
 
200
200
  ## Cure and repair
201
201
 
202
+ - **A ring cure that stalls near its target has no exit but `max_iterations`.**
203
+ Reported by htpolynet-study 2026-09-23 from a 2.11.1 build: at conversion 0.97
204
+ with 24 groups left, nine iterations running (32-40) produced 77 declines and no
205
+ ring, about 67 s apiece. 2.11.1 now skips a triple it has already failed to
206
+ close, which removes most of that cost, but a cure with nothing closable left
207
+ still runs to `max_iterations` rather than stopping.
208
+
209
+ The obvious fix -- stop after N consecutive iterations that close nothing -- was
210
+ deliberately not taken, and the reason is worth keeping. That build escaped on
211
+ iteration 41 and finished at 0.971, and it was the one of four that survived the
212
+ study's postcure anneal. Any N below 9 would have ended it early. A stall is
213
+ not evidence that a cure is finished: the inter-iteration relaxation keeps moving
214
+ the groups, so the escape is real and can be a long time coming.
215
+
216
+ If this is revisited, the test should be something that distinguishes "nothing is
217
+ closable" from "nothing closed this time" -- the trend in the ladder's final
218
+ distances across the stalled run, say, rather than a count of iterations.
219
+
202
220
  - **Filtering candidate crosslinks against disallowed topologies, and what that means
203
221
  for cyanate esters.** Raised by Cameron 2026-09-21, who asked the right question:
204
222
  can "physically disallowable" even be defined for these systems? Partly. Three
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "htpolynet"
7
- version = "2.11.1"
7
+ version = "2.11.2"
8
8
  authors = [
9
9
  { name="Cameron F Abrams", email="cfa22@drexel.edu" },
10
10
  ]
@@ -33,6 +33,21 @@ from ..repair.topology_surgery import neutralize_touched_fragments
33
33
  logger = logging.getLogger(__name__)
34
34
 
35
35
 
36
+ def _triple_key(donors):
37
+ """A ring's identity, in terms that survive from one iteration to the next.
38
+
39
+ A triple is held as row numbers into the site table, and that table is rebuilt
40
+ every iteration and shrinks as groups react, so those numbers name a different
41
+ ring next time. The three donor atoms do not move: one per group, unique to it,
42
+ and fixed for the life of the system.
43
+
44
+ The two ring orientations deliberately share a key. :func:`candidate_triples`
45
+ scores both and keeps the better one, so the orientation that was declined is the
46
+ better one, and the other would have farther to go.
47
+ """
48
+ return frozenset(int(d) for d in donors)
49
+
50
+
36
51
  class RingCureState:
37
52
  """How far a ring cure has got, and enough to resume it."""
38
53
 
@@ -93,6 +108,7 @@ class RingController:
93
108
  self.dicts = d
94
109
  self.state = state or RingCureState()
95
110
  self.rings_df = None
111
+ self.declined = set()
96
112
 
97
113
  # ---- what the loop decides, all of it testable without MD ----
98
114
 
@@ -172,16 +188,49 @@ class RingController:
172
188
  cands = candidate_triples(sites, positions, self.radius, box,
173
189
  same_molecule=self.dicts['same_molecule'],
174
190
  same_residue=self.dicts['same_residue'])
175
- chosen = select_disjoint(cands, max_triples=self.dicts['max_rings_per_iteration'])
191
+ allowed = self._drop_declined(cands, sites)
192
+ chosen = select_disjoint(allowed, max_triples=self.dicts['max_rings_per_iteration'])
193
+ passed = len(cands) - len(allowed)
176
194
  logger.info(f'Iteration {self.state.iter}: {len(sites)} unreacted group(s), '
177
- f'{len(cands)} candidate ring(s) within {self.radius:.3f} nm, '
178
- f'{len(chosen)} accepted')
195
+ f'{len(cands)} candidate ring(s) within {self.radius:.3f} nm'
196
+ + (f' ({passed} passed over as already failed)' if passed else '')
197
+ + f', {len(chosen)} accepted')
179
198
  if len(chosen) >= floor or self.radius >= self.dicts['max_radius']:
199
+ if not chosen and cands and self.declined:
200
+ # the memory is now the only thing keeping this iteration idle, and
201
+ # the groups have moved since they were declined; try them again
202
+ logger.info(f'Iteration {self.state.iter}: every ring in reach has '
203
+ f'failed before; forgetting {len(self.declined)} of them '
204
+ f'and offering them again')
205
+ self.declined.clear()
206
+ chosen = select_disjoint(cands,
207
+ max_triples=self.dicts['max_rings_per_iteration'])
180
208
  return sites, chosen
181
209
  self.state.radius_index += 1
182
210
  logger.info(f'Radius increased to {self.radius:.3f} nm '
183
211
  f'({len(chosen)}/{floor} ring(s) so far)')
184
212
 
213
+ def _drop_declined(self, cands, sites):
214
+ """Passes over the triples this cure has already failed to pull shut.
215
+
216
+ A declined ring leaves its three groups unreacted by design, and the next search
217
+ offers them again -- so a rigid endgame proposes the same triples, runs the same
218
+ closure ladder, and declines them again. Measured at conversion 0.97 with 24
219
+ groups left: nine iterations running, 77 declines, about 67 s apiece, before one
220
+ triple finally closed and the cure finished at 0.971.
221
+
222
+ A preference, not a prohibition, because the geometry between one decline and the
223
+ next search is not identical -- the inter-iteration relaxation moves the groups,
224
+ which is how that cure escaped. Skipping a triple saves a ladder that would
225
+ almost certainly fail; refusing it outright would have ended that cure three
226
+ iterations early. :meth:`search` therefore lifts the whole memory rather than
227
+ come back empty-handed.
228
+ """
229
+ if not self.declined:
230
+ return cands
231
+ return [c for c in cands
232
+ if _triple_key(sites.at[a, 'donor'] for a in c[1]) not in self.declined]
233
+
185
234
  def record(self, chosen):
186
235
  """Counts the rings formed and the groups they consumed."""
187
236
  self.state.rings += len(chosen)
@@ -244,6 +293,11 @@ class RingController:
244
293
  next iteration, by which time the neighbourhood has moved; only if they can never
245
294
  close does the cure lose them, which is the right outcome.
246
295
 
296
+ The combination itself is recorded for :meth:`_drop_declined`, which prefers not
297
+ to spend another ladder on it while any untried ring is in reach. That is what
298
+ a rigid endgame otherwise does: nine iterations running, 77 declines, the same
299
+ few triples every time.
300
+
247
301
  Args:
248
302
  bdf (pandas.DataFrame): this iteration's bonds, three rows per ring
249
303
  work (pandas.DataFrame): the same pairs with their final distances
@@ -261,9 +315,11 @@ class RingController:
261
315
  return bdf, chosen
262
316
  for n in range(len(chosen)):
263
317
  if n not in keep:
318
+ self.declined.add(_triple_key(bdf[bdf['triple'] == n]['ai']))
264
319
  logger.info(f'Iteration {self.state.iter}: declining a ring still '
265
320
  f'{worst[n]:.3f} nm from closing (limit {limit:.3f} nm); its '
266
- f'groups stay unreacted and will be offered again')
321
+ f'groups stay unreacted, and this combination waits until '
322
+ f'nothing untried is in reach')
267
323
  renumber = {old: new for new, old in enumerate(keep)}
268
324
  bdf = bdf[bdf['triple'].isin(keep)].copy()
269
325
  bdf['triple'] = [renumber[t] for t in bdf['triple']]
@@ -12,7 +12,7 @@ import unittest
12
12
  import numpy as np
13
13
  import pandas as pd
14
14
 
15
- from htpolynet.cure.ringcontroller import RingController, RingCureState
15
+ from htpolynet.cure.ringcontroller import RingController, RingCureState, _triple_key
16
16
 
17
17
  from .test_triplesearch import BOX, triangle
18
18
 
@@ -270,3 +270,90 @@ class TestDecliningRingsThatDidNotClose(unittest.TestCase):
270
270
  bdf, work, chosen = self.bonds_and_work([0.9])
271
271
  out_b, out_c = c.accept(bdf, work, chosen)
272
272
  self.assertEqual(len(out_c), 1)
273
+
274
+
275
+ class TestATripleThatFailedIsNotTriedAgainWhileAnythingElseIsLeft(unittest.TestCase):
276
+ """A declined ring leaves its groups unreacted, so the next search offered the same
277
+ triples, ran the same ladder and declined them again: nine iterations running at
278
+ conversion 0.97, 77 declines, before one finally closed and the cure finished at
279
+ 0.971. The memory skips them; it does not forbid them, because that cure escaped
280
+ only because the geometry between iterations had moved."""
281
+
282
+ def bonds_and_work(self, worsts, donors=None):
283
+ """One ring per entry in `worsts`; `donors` gives each ring's three donor atoms."""
284
+ rows, final = [], []
285
+ for n, w in enumerate(worsts):
286
+ d = donors[n] if donors else [10 * n + k for k in range(3)]
287
+ for k in range(3):
288
+ rows.append({'ai': d[k], 'aj': 10 * n + k + 5, 'triple': n})
289
+ final.append(0.15 if k < 2 else w)
290
+ return (pd.DataFrame(rows),
291
+ pd.DataFrame({'final_distance': final}),
292
+ [object() for _ in worsts])
293
+
294
+ def two_triangles(self):
295
+ """Two rings far enough apart to be independent, and a controller that sees both."""
296
+ a1, p1 = triangle(side=0.2, resnums=(1, 2, 3), molecules=(1, 2, 3))
297
+ a2, p2 = triangle(side=0.2, resnums=(4, 5, 6), molecules=(4, 5, 6))
298
+ a2 = a2.copy()
299
+ a2['globalIdx'] += 100
300
+ p2 = {k + 100: v + np.array([2.0, 0.0, 0.0]) for k, v in p2.items()}
301
+ c = RingController({'search_radius': 0.6})
302
+ c.setup(total_groups=6, max_radius=1.0)
303
+ return c, pd.concat([a1, a2], ignore_index=True), {**p1, **p2}
304
+
305
+ def test_a_declined_ring_is_remembered_by_its_donor_atoms(self):
306
+ # row numbers into the site table name a different ring next iteration; the
307
+ # donors do not move
308
+ c = RingController({})
309
+ bdf, work, chosen = self.bonds_and_work([0.40], donors=[[7, 21, 34]])
310
+ with self.assertLogs(LOG, level='INFO'):
311
+ c.accept(bdf, work, chosen)
312
+ self.assertEqual(c.declined, {_triple_key([34, 7, 21])})
313
+
314
+ def test_a_ring_that_closed_is_not_remembered(self):
315
+ c = RingController({})
316
+ bdf, work, chosen = self.bonds_and_work([0.22])
317
+ c.accept(bdf, work, chosen)
318
+ self.assertEqual(c.declined, set())
319
+
320
+ def test_the_search_takes_the_other_ring_instead(self):
321
+ c, adf, pos = self.two_triangles()
322
+ with self.assertLogs(LOG, level='INFO'):
323
+ sites, chosen = c.search(adf, pos, BOX, 'BCY', (('N1', 'C1'),))
324
+ self.assertEqual(len(chosen), 2)
325
+ first = _triple_key(sites.at[a, 'donor'] for a in chosen[0][1])
326
+ c.declined.add(first)
327
+ with self.assertLogs(LOG, level='INFO') as cm:
328
+ sites, chosen = c.search(adf, pos, BOX, 'BCY', (('N1', 'C1'),))
329
+ self.assertEqual(len(chosen), 1)
330
+ self.assertNotEqual(_triple_key(sites.at[a, 'donor'] for a in chosen[0][1]), first)
331
+ self.assertIn('1 passed over as already failed', '\n'.join(cm.output))
332
+
333
+ def test_it_is_lifted_rather_than_leave_the_iteration_idle(self):
334
+ # the relaxation between iterations moves the groups, so a triple that failed
335
+ # can still close later -- one did, at iteration 41, and it finished that cure
336
+ adf, pos = triangle(side=0.25)
337
+ c = RingController({'search_radius': 0.6})
338
+ c.setup(total_groups=3, max_radius=1.0)
339
+ with self.assertLogs(LOG, level='INFO'):
340
+ sites, chosen = c.search(adf, pos, BOX, 'BCY', (('N1', 'C1'),))
341
+ c.declined.add(_triple_key(sites['donor']))
342
+ with self.assertLogs(LOG, level='INFO') as cm:
343
+ _, chosen = c.search(adf, pos, BOX, 'BCY', (('N1', 'C1'),))
344
+ self.assertEqual(len(chosen), 1)
345
+ self.assertEqual(c.declined, set())
346
+ self.assertIn('offering them again', '\n'.join(cm.output))
347
+
348
+ def test_both_orientations_share_one_key(self):
349
+ # candidate_triples scores both and keeps the better, so the declined one is
350
+ # the better one and the other has farther to go
351
+ self.assertEqual(_triple_key([3, 1, 2]), _triple_key([1, 2, 3]))
352
+
353
+ def test_a_ring_exactly_at_the_limit_is_kept(self):
354
+ # the log rounds to three decimals, so a decline reported at the limit was over it
355
+ c = RingController({'closure': {'max_accept': 0.30}})
356
+ bdf, work, chosen = self.bonds_and_work([0.30])
357
+ _, out_c = c.accept(bdf, work, chosen)
358
+ self.assertEqual(len(out_c), 1)
359
+ self.assertEqual(c.declined, set())
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes