htpolynet 2.7.0__tar.gz → 2.9.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 (357) hide show
  1. htpolynet-2.9.0/.github/workflows/docs.yml +90 -0
  2. {htpolynet-2.7.0 → htpolynet-2.9.0}/.github/workflows/release.yaml +30 -6
  3. {htpolynet-2.7.0 → htpolynet-2.9.0}/.gitignore +3 -0
  4. {htpolynet-2.7.0 → htpolynet-2.9.0}/CHANGELOG.md +277 -0
  5. {htpolynet-2.7.0 → htpolynet-2.9.0}/PKG-INFO +2 -1
  6. {htpolynet-2.7.0 → htpolynet-2.9.0}/ROADMAP.md +280 -28
  7. {htpolynet-2.7.0 → htpolynet-2.9.0}/docker/Dockerfile +8 -1
  8. htpolynet-2.9.0/docs/source/_static/htpolynet-favicon.ico +0 -0
  9. htpolynet-2.9.0/docs/source/_static/htpolynet-landing.jpg +0 -0
  10. htpolynet-2.9.0/docs/source/_static/htpolynet-logo-dark.png +0 -0
  11. htpolynet-2.9.0/docs/source/_static/htpolynet-logo-light.png +0 -0
  12. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/conf.py +13 -0
  13. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/0-liquid-styrene/run.rst +4 -1
  14. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/run.rst +2 -1
  15. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/run.rst +1 -1
  16. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/results.rst +14 -12
  17. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/run.rst +1 -1
  18. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/introduction.rst +7 -6
  19. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/run.rst +56 -75
  20. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/reactions.rst +15 -0
  21. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/run.rst +12 -8
  22. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/index.rst +11 -0
  23. htpolynet-2.9.0/docs/source/index.rst +76 -0
  24. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/install.rst +33 -6
  25. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/configs/configs-for-analyze.rst +2 -2
  26. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/configs/configs-for-run.rst +25 -2
  27. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/index.rst +1 -0
  28. htpolynet-2.9.0/docs/source/user-guide/periodic-networks.rst +137 -0
  29. {htpolynet-2.7.0 → htpolynet-2.9.0}/pyproject.toml +3 -2
  30. {htpolynet-2.7.0 → htpolynet-2.9.0}/scripts/check-conda-sync.py +86 -22
  31. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/core/bondtemplate.py +28 -6
  32. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/core/configuration.py +55 -2
  33. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/core/molecule.py +1 -1
  34. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/core/runtime.py +47 -2
  35. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/core/topocoord.py +163 -11
  36. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/core/topology.py +29 -2
  37. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/cure/curecontroller.py +70 -8
  38. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/cure/expandreactions.py +115 -1
  39. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/repair/cyanate_cap.py +19 -22
  40. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/repair/topology_surgery.py +73 -7
  41. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/example_depot/0-liquid-styrene.yaml +3 -0
  42. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/example_depot/1-polystyrene.yaml +3 -0
  43. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/example_depot/2-bisgma-styrene-thermoset.yaml +3 -0
  44. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/example_depot/3-pacm-dgeba-epoxy-thermoset.yaml +3 -0
  45. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/example_depot/4-dfda-fde-epoxy-thermoset.yaml +3 -0
  46. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/example_depot/5-htpb-ipdi.yaml +3 -0
  47. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/example_depot/6-cyanate-ester.yaml +7 -1
  48. htpolynet-2.9.0/src/htpolynet/schema/base.yaml +936 -0
  49. htpolynet-2.9.0/src/htpolynet/utils/convergence.py +163 -0
  50. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_completion_bias.py +33 -0
  51. htpolynet-2.9.0/tests/unit/test_conda_sync.py +141 -0
  52. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_configuration.py +166 -19
  53. htpolynet-2.9.0/tests/unit/test_convergence.py +155 -0
  54. htpolynet-2.9.0/tests/unit/test_cure_site_functionality.py +154 -0
  55. htpolynet-2.9.0/tests/unit/test_density_gate.py +108 -0
  56. htpolynet-2.9.0/tests/unit/test_mol2_bond_fallback.py +58 -0
  57. htpolynet-2.9.0/tests/unit/test_molecule_charge_report.py +68 -0
  58. htpolynet-2.9.0/tests/unit/test_moleculetype_name.py +56 -0
  59. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_relax_instrumentation.py +18 -0
  60. htpolynet-2.9.0/tests/unit/test_repair_charge_neutrality.py +87 -0
  61. htpolynet-2.9.0/tests/unit/test_sibling_templates.py +181 -0
  62. htpolynet-2.7.0/docs/source/index.rst +0 -38
  63. htpolynet-2.7.0/docs/source/release-history.rst +0 -69
  64. {htpolynet-2.7.0 → htpolynet-2.9.0}/.claude/settings.json +0 -0
  65. {htpolynet-2.7.0 → htpolynet-2.9.0}/.claude/skills/htpolynet/SKILL.md +0 -0
  66. {htpolynet-2.7.0 → htpolynet-2.9.0}/.envrc +0 -0
  67. {htpolynet-2.7.0 → htpolynet-2.9.0}/.github/workflows/conda-forge-sync.yml +0 -0
  68. {htpolynet-2.7.0 → htpolynet-2.9.0}/.github/workflows/docker.yml +0 -0
  69. {htpolynet-2.7.0 → htpolynet-2.9.0}/.github/workflows/test.yml +0 -0
  70. {htpolynet-2.7.0 → htpolynet-2.9.0}/.readthedocs.yaml +0 -0
  71. {htpolynet-2.7.0 → htpolynet-2.9.0}/CITATION.cff +0 -0
  72. {htpolynet-2.7.0 → htpolynet-2.9.0}/CLAUDE.md +0 -0
  73. {htpolynet-2.7.0 → htpolynet-2.9.0}/LICENSE +0 -0
  74. {htpolynet-2.7.0 → htpolynet-2.9.0}/MANIFEST.in +0 -0
  75. {htpolynet-2.7.0 → htpolynet-2.9.0}/README.md +0 -0
  76. {htpolynet-2.7.0 → htpolynet-2.9.0}/docker/compose.yml +0 -0
  77. {htpolynet-2.7.0 → htpolynet-2.9.0}/docker/docker-entrypoint.sh +0 -0
  78. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/Makefile +0 -0
  79. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/README.rst +0 -0
  80. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/make.bat +0 -0
  81. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/requirements.txt +0 -0
  82. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/_static/.gitkeep +0 -0
  83. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/changelog.rst +0 -0
  84. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/0-liquid-styrene/configuration.rst +0 -0
  85. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/0-liquid-styrene/index.rst +0 -0
  86. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/0-liquid-styrene/introduction.rst +0 -0
  87. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/0-liquid-styrene/monomer.rst +0 -0
  88. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/0-liquid-styrene/postsim.rst +0 -0
  89. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/0-liquid-styrene/results.rst +0 -0
  90. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/configuration.rst +0 -0
  91. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/index.rst +0 -0
  92. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/introduction.rst +0 -0
  93. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/monomer.rst +0 -0
  94. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/pics/STY.png +0 -0
  95. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/pics/STYCC.png +0 -0
  96. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/pics/buildtraces.png +0 -0
  97. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/pics/cure_info.png +0 -0
  98. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/pics/densification-density.png +0 -0
  99. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/pics/final-box.png +0 -0
  100. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/pics/reaction_network.png +0 -0
  101. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/pics/sty-coloring.tcl +0 -0
  102. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/pics/sty-cured.png +0 -0
  103. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/pics/sty-detail.png +0 -0
  104. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/pics/sty-liq.png +0 -0
  105. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/pics/styrene-polymerization.png +0 -0
  106. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/postsim.rst +0 -0
  107. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/reactions.rst +0 -0
  108. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/1-polystyrene/results.rst +0 -0
  109. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/configuration.rst +0 -0
  110. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/index.rst +0 -0
  111. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/introduction.rst +0 -0
  112. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/BPA.png +0 -0
  113. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/GMA.png +0 -0
  114. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/HIE.png +0 -0
  115. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/buildtraces.png +0 -0
  116. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/cure_info.png +0 -0
  117. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/densification-density.png +0 -0
  118. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/four_dimers.eps +0 -0
  119. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/four_dimers.fig +0 -0
  120. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/four_dimers.png +0 -0
  121. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-coloring.tcl +0 -0
  122. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-cured.png +0 -0
  123. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-detail.png +0 -0
  124. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/gma-sty-liq.png +0 -0
  125. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/p1-traces.png +0 -0
  126. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/reaction_network.png +0 -0
  127. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/vesys.eps +0 -0
  128. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/vesys.fig +0 -0
  129. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/pics/vesys.png +0 -0
  130. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/postsim.rst +0 -0
  131. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/reactions.rst +0 -0
  132. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/2-bisgma-styrene-thermoset/results.rst +0 -0
  133. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/configuration.rst +0 -0
  134. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/index.rst +0 -0
  135. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/introduction.rst +0 -0
  136. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/monomers.rst +0 -0
  137. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/DGE-epoxy.png +0 -0
  138. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/DGE-labelled.png +0 -0
  139. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/PAC-2d.png +0 -0
  140. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/PAC-labelled.png +0 -0
  141. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/buildtraces.png +0 -0
  142. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/cure_info.png +0 -0
  143. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/densification-density.png +0 -0
  144. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-coloring.tcl +0 -0
  145. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-cured.png +0 -0
  146. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-detail.png +0 -0
  147. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dge-pac-liq.png +0 -0
  148. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dgesys.eps +0 -0
  149. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dgesys.fig +0 -0
  150. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/dgesys.png +0 -0
  151. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/equil-rho_v_ns.png +0 -0
  152. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/postsim-typical.png +0 -0
  153. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-e.png +0 -0
  154. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-equil-rho_v_ns.png +0 -0
  155. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-rho_v_ns.png +0 -0
  156. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/prod-tg.png +0 -0
  157. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/r1.png +0 -0
  158. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/r2.png +0 -0
  159. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/r3.png +0 -0
  160. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/reaction_network.png +0 -0
  161. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/rho_v_ns.png +0 -0
  162. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/short-e.png +0 -0
  163. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/pics/short-tg.png +0 -0
  164. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/postsim.rst +0 -0
  165. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/reactions.rst +0 -0
  166. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/results.rst +0 -0
  167. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/3-pacm-dgeba-epoxy-thermoset/run.rst +0 -0
  168. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/configuration.rst +0 -0
  169. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/index.rst +0 -0
  170. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/introduction.rst +0 -0
  171. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/monomers.rst +0 -0
  172. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/buildtraces.png +0 -0
  173. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/cure_info.png +0 -0
  174. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/densification-density.png +0 -0
  175. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-coloring.tcl +0 -0
  176. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-cured.png +0 -0
  177. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-detail.png +0 -0
  178. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/dfa-fde-liq.png +0 -0
  179. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/pics/reaction_network.png +0 -0
  180. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/postsim.rst +0 -0
  181. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/4-dfda-fde-epoxy-thermoset/reactions.rst +0 -0
  182. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/configuration.rst +0 -0
  183. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/index.rst +0 -0
  184. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/monomers.rst +0 -0
  185. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/buildtraces.png +0 -0
  186. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/cure_info.png +0 -0
  187. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/densification-density.png +0 -0
  188. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-coloring.tcl +0 -0
  189. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-ipdi-cured.png +0 -0
  190. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-ipdi-detail.png +0 -0
  191. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/htpb-ipdi-liq.png +0 -0
  192. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/pics/reaction_network.png +0 -0
  193. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/postsim.rst +0 -0
  194. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/reactions.rst +0 -0
  195. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/5-htpb-ipdi/results.rst +0 -0
  196. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/configuration.rst +0 -0
  197. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/index.rst +0 -0
  198. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/introduction.rst +0 -0
  199. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/monomers.rst +0 -0
  200. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-coloring.tcl +0 -0
  201. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-cured.png +0 -0
  202. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-detail.png +0 -0
  203. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/pics/badcy-liq.png +0 -0
  204. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/pics/buildtraces.png +0 -0
  205. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/pics/cure_info.png +0 -0
  206. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/pics/densification-density.png +0 -0
  207. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/pics/reaction_network.png +0 -0
  208. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/postsim.rst +0 -0
  209. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/example-tutorials/6-cyanate-ester/results.rst +0 -0
  210. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/htpolynetpackage.rst +0 -0
  211. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/references/index.rst +0 -0
  212. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/references/mol2-reference.pdf +0 -0
  213. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/references.bib +0 -0
  214. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/CURE.odg +0 -0
  215. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/bond_filter.odg +0 -0
  216. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/building-a-system.rst +0 -0
  217. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/configs/configs-for-postsim.rst +0 -0
  218. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/configuration-files.rst +0 -0
  219. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/container-usage.rst +0 -0
  220. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/flow1.odg +0 -0
  221. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/flow1yaml.odg +0 -0
  222. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/hydrogenated.eps +0 -0
  223. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/hydrogenated.fig +0 -0
  224. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/molecular-structure-inputs.rst +0 -0
  225. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/pics/STY.png +0 -0
  226. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/pics/STYCC.png +0 -0
  227. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/pics/TypicalUsageFlow.png +0 -0
  228. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/pics/bond_filter.png +0 -0
  229. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/pics/chemdoodle-2dsketcher-emb.png +0 -0
  230. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/pics/chemdoodle-2dsketcher-styrene.png +0 -0
  231. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/pics/hydrogenated.png +0 -0
  232. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/pics/ring_pierce/ring_pierce_cases.png +0 -0
  233. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/pics/ring_pierce/ring_pierce_linkcell.png +0 -0
  234. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/postcure-repair.rst +0 -0
  235. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/program-flow.rst +0 -0
  236. {htpolynet-2.7.0 → htpolynet-2.9.0}/docs/source/user-guide/usage.rst +0 -0
  237. {htpolynet-2.7.0 → htpolynet-2.9.0}/scripts/release.sh +0 -0
  238. {htpolynet-2.7.0 → htpolynet-2.9.0}/scripts/render-detail.sh +0 -0
  239. {htpolynet-2.7.0 → htpolynet-2.9.0}/scripts/render-detail.tcl +0 -0
  240. {htpolynet-2.7.0 → htpolynet-2.9.0}/scripts/render-snapshot.sh +0 -0
  241. {htpolynet-2.7.0 → htpolynet-2.9.0}/scripts/run_all_examples.sh +0 -0
  242. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/__init__.py +0 -0
  243. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/analysis/__init__.py +0 -0
  244. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/analysis/analyze.py +0 -0
  245. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/analysis/plot.py +0 -0
  246. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/analysis/postsim.py +0 -0
  247. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/analysis/utils.py +0 -0
  248. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/cli.py +0 -0
  249. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/core/__init__.py +0 -0
  250. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/core/coordinates.py +0 -0
  251. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/core/paramcache.py +0 -0
  252. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/core/projectfilesystem.py +0 -0
  253. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/cure/__init__.py +0 -0
  254. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/cure/chain.py +0 -0
  255. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/cure/reaction.py +0 -0
  256. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/external/__init__.py +0 -0
  257. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/external/ambertools.py +0 -0
  258. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/external/command.py +0 -0
  259. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/external/gromacs.py +0 -0
  260. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/external/slurm.py +0 -0
  261. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/external/smiles_input.py +0 -0
  262. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/external/software.py +0 -0
  263. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/geometry/__init__.py +0 -0
  264. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/geometry/bondlist.py +0 -0
  265. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/geometry/lattice.py +0 -0
  266. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/geometry/linkcell.py +0 -0
  267. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/geometry/matrix4.py +0 -0
  268. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/geometry/ring.py +0 -0
  269. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/io/__init__.py +0 -0
  270. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/io/gro.py +0 -0
  271. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/io/mol2.py +0 -0
  272. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/io/pdb.py +0 -0
  273. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/repair/__init__.py +0 -0
  274. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/README.md +0 -0
  275. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/__init__.py +0 -0
  276. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/claude/SKILL.md +0 -0
  277. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/mdp/README.md +0 -0
  278. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/mdp/drag-min.mdp +0 -0
  279. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/mdp/drag-npt.mdp +0 -0
  280. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/mdp/drag-nvt.mdp +0 -0
  281. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/mdp/min.mdp +0 -0
  282. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/mdp/npt.mdp +0 -0
  283. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/mdp/nvt.mdp +0 -0
  284. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/mdp/relax-min.mdp +0 -0
  285. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/mdp/relax-npt.mdp +0 -0
  286. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/mdp/relax-nvt.mdp +0 -0
  287. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/mdp/single-molecule-min.mdp +0 -0
  288. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/mdp/single-molecule-nvt.mdp +0 -0
  289. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/inputs/DFA.pdb +0 -0
  290. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/inputs/DGE.mol2 +0 -0
  291. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/inputs/EMB.mol2 +0 -0
  292. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/inputs/FDE.pdb +0 -0
  293. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/inputs/GMA.mol2 +0 -0
  294. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/inputs/PAC.mol2 +0 -0
  295. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/inputs/STY.mol2 +0 -0
  296. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/make-monomers.sh +0 -0
  297. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/pics/DFA.png +0 -0
  298. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/pics/DGE.png +0 -0
  299. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/pics/EMB.png +0 -0
  300. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/pics/FDE.png +0 -0
  301. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/pics/GMA.png +0 -0
  302. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/pics/PAC.png +0 -0
  303. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/pics/STY.png +0 -0
  304. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/sample-inputs/DFA.pdb +0 -0
  305. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/sample-inputs/DGE.mol2 +0 -0
  306. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/sample-inputs/EMB.mol2 +0 -0
  307. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/sample-inputs/FDE.pdb +0 -0
  308. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/sample-inputs/GMA.mol2 +0 -0
  309. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/sample-inputs/PAC.mol2 +0 -0
  310. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/molecules/sample-inputs/STY.mol2 +0 -0
  311. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/tcl/readbonds.tcl +0 -0
  312. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/tcl/readgrx.tcl +0 -0
  313. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/resources/tcl/render.tcl +0 -0
  314. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/utils/__init__.py +0 -0
  315. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/utils/banner.py +0 -0
  316. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/utils/checkpoint.py +0 -0
  317. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/utils/dataframetools.py +0 -0
  318. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/utils/inputcheck.py +0 -0
  319. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/utils/logsetup.py +0 -0
  320. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/utils/profiling.py +0 -0
  321. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/utils/stringthings.py +0 -0
  322. {htpolynet-2.7.0 → htpolynet-2.9.0}/src/htpolynet/utils/vmd_viz.py +0 -0
  323. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/__init__.py +0 -0
  324. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/conftest.py +0 -0
  325. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/__init__.py +0 -0
  326. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/fixtures/config1.gro +0 -0
  327. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/fixtures/config1.top +0 -0
  328. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/fixtures/config2.gro +0 -0
  329. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/fixtures/config2.top +0 -0
  330. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/fixtures/items31.edr +0 -0
  331. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/fixtures/items43.edr +0 -0
  332. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/fixtures/items45.edr +0 -0
  333. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/fixtures/short.mdp +0 -0
  334. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_bondtemplate.py +0 -0
  335. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_cap_placement.py +0 -0
  336. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_chain.py +0 -0
  337. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_dataframetools.py +0 -0
  338. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_gpu_usability.py +0 -0
  339. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_gromacs_get_energy_menu.py +0 -0
  340. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_gromacs_gmx_energy_trace.py +0 -0
  341. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_inputcheck.py +0 -0
  342. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_linkcell_pierce.py +0 -0
  343. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_paramcache.py +0 -0
  344. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_paramcache_ambertools.py +0 -0
  345. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_parameterize_react.py +0 -0
  346. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_plot_smoke.py +0 -0
  347. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_projectfilesystem.py +0 -0
  348. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_repair_conversion.py +0 -0
  349. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_resources.py +0 -0
  350. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_ring.py +0 -0
  351. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_ring_pierce_figs.py +0 -0
  352. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_setup_claude.py +0 -0
  353. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_slurm_script.py +0 -0
  354. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_smiles_input.py +0 -0
  355. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_software_provenance.py +0 -0
  356. {htpolynet-2.7.0 → htpolynet-2.9.0}/tests/unit/test_topology/test.top +0 -0
  357. {htpolynet-2.7.0 → htpolynet-2.9.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,245 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.9.0] - 2026-09-15
11
+
12
+ ### Added
13
+
14
+ - **The build log reports molecules that carry net charge.** After cure,
15
+ after postcure repair, and when the final results are written, htpolynet
16
+ checks every covalently bonded molecule. It logs one line when all are
17
+ neutral to within 0.01 e, and a warning naming the count and the largest
18
+ charge when some are not. The system total is zero by construction, so
19
+ until now a template or repair step that moved charge from one molecule to
20
+ another left no trace. The check can't see charge misplaced *inside* a
21
+ percolated network, because the whole network is a single molecule.
22
+
23
+ ### Fixed
24
+
25
+ - **Later bonds on a triazine reset the charges of its earlier ones.**
26
+ Each cure template shows a single BPA on the ring, and splicing it in
27
+ rewrites the charges of atoms up to two bonds from the new bond, which
28
+ includes the other ring carbons. So every ring carbon that reacted before
29
+ the last one got its *unreacted* charge back. Example 6's fully reacted
30
+ rings had carbons anywhere from 0.14 to 0.31 e, where the template value is
31
+ 0.28. A cured bisphenol-A dicyanate network showed a clean 2:1 split,
32
+ +0.70 against +0.90 e. htpolynet now builds extra templates at setup for
33
+ rings that already carry one or two BPAs; example 6 gets 18 of them. Each
34
+ cure bond picks the one that matches the ring as it stands: templates
35
+ record which atoms two bonds from the bonding atom have already reacted,
36
+ and matching prefers the one that records the most. This applies to any
37
+ reactive atom whose `symmetry_equivalent_atoms` partners sit two bonds
38
+ away. None of the other shipped examples has one, and example 5's
39
+ build-stage molecules are unchanged, charge for charge.
40
+
41
+ Replaying example 6's recorded cure bonds offline puts every bonded ring
42
+ carbon at its template value: 0.275, 0.277 or 0.279 e for one, two or
43
+ three BPAs. All 13 molecules after cure are now neutral, where before
44
+ they ranged from -0.37 to +0.29 e. Cyanate-ester builds should be
45
+ rebuilt.
46
+
47
+ - **A template that matched a bond only in reverse crashed the cure** with
48
+ `mapping mismatch -- bug`. After reversing the bond to line up with the
49
+ template, the mapping check still compared it the original way round. No
50
+ shipped example had reached this path.
51
+
52
+ - **Cyanate-cap repair left molecules charged.** `triazine_to_cyanate_cap`
53
+ kept the system neutral, but not each molecule. It settled charge twice,
54
+ both times system-wide:
55
+ - once while splicing the cap template, when the sacrificial H's still
56
+ existed;
57
+ - once after deleting them, onto only the atoms those H's had been bonded
58
+ to.
59
+
60
+ Caps formed in place and caps transferred to a free BPA-OH therefore ended
61
+ with charges 0.24 e apart on the phenolic O and the cap C. In a
62
+ zero-conversion bisphenol-A dicyanate melt, every molecule came out at
63
+ either +0.21 or -0.27 e. In example 6, the 27 molecules left after repair
64
+ ranged from -3.59 to +0.62 e. Repair now brings each molecule it touched
65
+ back to neutral, and makes the correction only on the atoms it changed.
66
+ Example 6's molecules are all neutral, and its cap residues sit at
67
+ 0.05-0.09 e, near the template's 0.069, instead of splitting between 0.04
68
+ and 0.20. Builds that used `postcure_repair` should be rebuilt.
69
+
70
+ - **A false percolation warning on linear polymers.** The end-of-cure check
71
+ warned that too few residues had reacted at every site to assume the system
72
+ percolates, and it fired on chain-growth systems like example 1's
73
+ polystyrene -- "only 902 of 1000 STY (90.2%) ... below the 100.0% ... at its
74
+ gel point". For a difunctional monomer that threshold, `(1/(f-1))^f`, is
75
+ exactly 100%, and a fully reacted difunctional unit is a chain interior
76
+ rather than a crosslink junction, so neither the warning nor its premise
77
+ applied. The check now runs only when some residue has at least three
78
+ reactive sites.
79
+
80
+ - **The percolation check counted sites the cure never uses.** It summed
81
+ every reactive site a residue was built with, including bonds made while
82
+ assembling molecules and valences no cure reaction can consume. Example 2
83
+ warned that "0 of 150 HIE" had reacted at all four sites, which was
84
+ impossible: two of those sites sit on an atom only the molecule-building
85
+ reactions touch. Example 5's warning about TB was the same mistake, since
86
+ every TB site is a chain bond made before the cure. In examples 3 and 4 the
87
+ diepoxide and the diamine tied at four sites, so the reported fraction
88
+ mixed both residue types ("83 of 300 DGE"). Functionality and completion are
89
+ now counted only on atoms a cure reaction can bond, taken from the
90
+ symmetry-expanded reaction list the bond search itself uses. Example 3 now
91
+ reports "83 of 100 PAC", and example 6's check is unchanged. When no
92
+ residue has three or more cure sites, the check says crosslink percolation
93
+ was not assessed, rather than staying silent: systems that crosslink through
94
+ a multi-residue molecule, such as a dimethacrylate, are outside what a
95
+ residue-level count can see.
96
+
97
+ - **Bondless MOL2 files for symmetry-sibling molecules.** A molecule built by
98
+ copying a parent's topology (for example `GMAS-4`, from `GMA`) has its bonds
99
+ in the topology but no MOL2 bond table, so writing it as MOL2 produced a file
100
+ with no bonds and a "Cannot write any bonds to MOL2 file" warning -- twelve
101
+ times in example 2 on a fresh parameterization. Those writes are now filled
102
+ from the topology's bonds, as single bonds. In every shipped example the
103
+ affected files were diagnostic `*-prebonding.mol2` outputs that nothing reads,
104
+ so no parameterization input was ever affected.
105
+
106
+ - **The CPU container image failed to build for 2.8.0**, so
107
+ `ghcr.io/cameronabrams/htpolynet:v2.8.0` was never published (the CUDA image
108
+ was). The base image `condaforge/miniforge3:latest` moved to mamba 2.9.0,
109
+ whose `mamba clean -afy` fails on a symlink inside the CPU AmberTools
110
+ package. The install was succeeding; only the cleanup step failed. The
111
+ Dockerfile now cleans with `conda clean`.
112
+
113
+ ### Documentation
114
+
115
+ - **The installation page now recommends the container as the default way to
116
+ run htpolynet**, in a callout at the top with the two commands you need on a
117
+ desktop (Docker Compose) or on a cluster (Singularity/Apptainer), plus the
118
+ note that the default image is CPU-only and GPU users want the `:cuda` tag.
119
+ Installing htpolynet and its tools natively is still documented below it,
120
+ for development and for systems without containers.
121
+
122
+ - **The documentation has a logo and a landing-page illustration.** The
123
+ logo appears in every page's sidebar, in black-on-transparent for the light
124
+ theme and white-on-transparent for the dark one, so it never shows as a white
125
+ box in dark mode. The browser tab shows it too, as a favicon on a white disc
126
+ so it stays visible whether the tab bar is light or dark.
127
+
128
+ ## [2.8.0] - 2026-09-12
129
+
130
+ ### Added
131
+
132
+ - **Configuration files are now validated.** `htpolynet run` checks every
133
+ configuration against a schema before doing anything else, and fills in
134
+ every documented default from that same schema. Previously a configuration
135
+ was read by picking out the keys htpolynet recognized and silently discarding
136
+ the rest, so a misspelled key did nothing and said nothing: a
137
+ `desired_converson: 0.9` typo produced a default-value build -- a half-cure --
138
+ with no message. Errors now name the offending location, for example
139
+ `Attribute 'smilse' invalid ... under 'constituents[STY]'` or
140
+ `Attribute 'stage' of 'reactions[1]' must be one of build, param, cure, cap,
141
+ repair`. Validation covers every section, including molecule records,
142
+ reactions and postcure repair specs; only `gromacs.mdrun_options` is left
143
+ open on purpose. This adds a runtime dependency on
144
+ [ycleptic](https://pypi.org/project/ycleptic/) 2.4.1 or later.
145
+
146
+ - **Densification can gate on measured density convergence instead of a fixed
147
+ step count.** An NPT record in `densification.equilibration` may carry a
148
+ `converge` block; the stage then repeats until the density settles or a
149
+ ceiling is hit. It is off unless configured, so existing configurations
150
+ reproduce exactly. The criterion is an autocorrelation-corrected standard
151
+ error, `sigma/sqrt(N/tau_int)` -- an NPT cell density is correlated over
152
+ hundreds of steps, so successive frames are not independent samples and a
153
+ naive standard error is optimistic by roughly 1.5x, which would stop the
154
+ gate early. It also makes the tolerance size-aware for free. A small
155
+ standard error alone is not accepted as convergence, because a trace that is
156
+ still climbing looks tight in every short window; the window's two halves
157
+ are compared as well. **Reaching the ceiling is reported as a failure**,
158
+ with a warning saying the number is an unsettled box rather than the
159
+ system's density.
160
+
161
+ Densification is the one place this belongs: the 200 to ~1100 kg/m^3
162
+ compaction happens once and involves a large volume change. Gating the CURE
163
+ relaxation loop was measured and rejected -- past the gel point the
164
+ unreacted species are bonded into the network and topologically constrained,
165
+ the effective diffusion exponent falls to about 0.14, and restoring the
166
+ mobility a gate would wait for takes of order 10^4 times the relaxation
167
+ time. Note also that the gate certifies convergence of the Berendsen
168
+ barostat `npt.mdp` currently uses, which does not sample a correct NPT
169
+ ensemble; treat it as a reproducibility criterion, not a physical one.
170
+
171
+ ### Changed
172
+
173
+ - **A configuration that 2.7.0 accepted may now be rejected.** This is the
174
+ point of the validation above, but it is a change in behavior: a key
175
+ htpolynet does not know, a value of the wrong type, a value outside its
176
+ allowed choices, or a missing required field now stops the run with a
177
+ message instead of being ignored. Every shipped example validates. If an
178
+ existing configuration of yours is rejected, the message says where; the fix
179
+ is almost always a misspelled or obsolete key that was already having no
180
+ effect.
181
+
182
+ - **Every shipped example now gates its densification on density
183
+ convergence**, using the `converge` block described under Added, so their
184
+ densification stages run until the box settles rather than for a fixed
185
+ duration.
186
+
187
+ - **The conda-forge package for this release will follow later.** ycleptic,
188
+ the new dependency, is not yet available on conda-forge, so the conda-forge
189
+ build of this version cannot be published until it is. In the meantime the
190
+ release is available from PyPI (`pip install htpolynet`) and in the container
191
+ image (`ghcr.io/cameronabrams/htpolynet`); conda-forge users will stay on
192
+ 2.7.0 until then.
193
+
194
+ - **The single moleculetype htpolynet writes is now named `whole_system`, not
195
+ `None`.** An entire build is written as one moleculetype on purpose -- a
196
+ cured network is one covalently connected molecule -- but the default name
197
+ was the literal string `None`, which reads like an unset field or a bug. It
198
+ sits on exactly the line users inspect after GROMACS warns about
199
+ "inconsistent shifts", so it was sending them looking for a topology error
200
+ that is not there. Purely cosmetic: GROMACS accepts either, and existing
201
+ topologies that say `None` still read back unchanged.
202
+
203
+ ### Fixed
204
+
205
+ - **A config that omitted `CURE.relax.increment` crashed at the first
206
+ relax.** The default was `0.0`, and `_distance_attenuation` derives its
207
+ stage count as `int(maxL/increment)` with no guard, so the build died with
208
+ `ZeroDivisionError` rather than any message about the config. The
209
+ documented default -- 0.08 -- is now the actual one. Dragging's `increment`
210
+ stays 0.0, which is a sentinel rather than the same bug: its own 0.0 `limit`
211
+ disables dragging before anything divides. Every shipped example sets
212
+ `relax.increment` explicitly, which is why this went unnoticed.
213
+
214
+ ### Documentation
215
+
216
+ - **New page: analyzing trajectories of periodic networks.** Explains why
217
+ `gmx trjconv -pbc whole` reports "There were N inconsistent shifts" on a
218
+ cured network (the bond graph wraps through the periodic boundaries, so no
219
+ consistent unwrapped image exists), and that this is expected rather than a
220
+ topology error -- on example 3 the count is zero until the network
221
+ percolates, then 2 at 69% conversion and 140 at 95%. It gives tested recipes
222
+ for visualization, MSD and free volume. The MSD one carries a real
223
+ warning: `gmx msd`'s default `-rmpbc` tries to make the network whole every
224
+ frame and silently inflates the MSD, by about 2.4x at 100 ps on example 3,
225
+ while still exiting normally; use `-pbc nojump` and then `-normpbc`. Prompted
226
+ by a user report.
227
+
228
+ - The `htpolynet analyze` free-volume docs now say that the per-molecule lines
229
+ in `gmx freevolume`'s output describe the whole box as one molecule, and two
230
+ instances of `poststim` now read `postsim`.
231
+
232
+ - **The docs landing page carries the standard badge row, and the release
233
+ history is gone from the table of contents.** `release-history.rst`
234
+ duplicated what this file already records from 1.0.8 forward, so it is
235
+ deleted and `changelog` moves to the *end* of the contents tree rather than
236
+ sitting second. The seven pre-1.0.8 entries it held -- 1.0.7.2 back to
237
+ 0.0.1, which this file did not cover -- were migrated here first, so nothing
238
+ is lost by the deletion. The landing page now shows the same eight badges
239
+ as the README: tests, PyPI, conda-forge, Python versions, license, docs,
240
+ downloads and DOI.
241
+
242
+ - **Two more `CURE`/`densification` defaults in the config tables were
243
+ wrong.** `densification.initial_density` is 200.0 kg/m^3, not the 300.0 the
244
+ table gave; and the prose under `min_allowable_bondcycle_length` still said
245
+ "setting it to zero (the default)" after the table had been corrected to -1.
246
+ Found while transcribing the defaults into a machine-readable schema, which
247
+ is the point of doing so.
248
+
10
249
  ## [2.7.0] - 2026-09-08
11
250
 
12
251
  ### Changed
@@ -1018,3 +1257,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1018
1257
  ### Changed
1019
1258
 
1020
1259
  - Uses `chordless_cycles` to find rings; `ringidx` is no longer a unique atom attribute; improved ring-pierce detection.
1260
+
1261
+ ## [1.0.7.2] - untagged
1262
+
1263
+ ### Changed
1264
+
1265
+ - Moved the Library package to the `resources` subpackage of `htpolynet`.
1266
+
1267
+ ## [1.0.6] - 2023-06-21
1268
+
1269
+ ### Added
1270
+
1271
+ - `gmx`-style `analyze` subcommand.
1272
+
1273
+ ## [1.0.5] - 2022-09-29
1274
+
1275
+ ### Added
1276
+
1277
+ - Post-build MD simulations and plotting functionality.
1278
+
1279
+ ## [1.0.2] - 2022-09-16
1280
+
1281
+ ### Changed
1282
+
1283
+ - Enhanced molecule-network graph drawing in the `plot` subcommand.
1284
+
1285
+ ## [1.0.1] - 2022-09-07
1286
+
1287
+ ### Fixed
1288
+
1289
+ - Atom index assignment for systems with more than 100,000 atoms.
1290
+
1291
+ ## [1.0.0] - 2022-09-03
1292
+
1293
+ - First release.
1294
+
1295
+ ## [0.0.1] - 2022-08-29
1296
+
1297
+ - Initial beta version.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: htpolynet
3
- Version: 2.7.0
3
+ Version: 2.9.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