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