rgpot 2.4.0__tar.gz → 2.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/MetatomicEngineAbi.cc +38 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/PKG-INFO +34 -3
- {rgpot-2.4.0 → rgpot-2.4.2}/README.md +32 -1
- rgpot-2.4.2/docs/newsfragments/+gil-c-abi-force.fixed.md +1 -0
- rgpot-2.4.2/docs/newsfragments/+gil-nested-safe.fixed.md +1 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/+pip-multi-torch-engines.added.md +2 -1
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/+pip-nanobind-abi3-multi-torch.added.md +2 -1
- rgpot-2.4.2/docs/newsfragments/+pip-rgpot-wheel.added.md +3 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/howto/embedding.org +9 -0
- rgpot-2.4.2/docs/orgmode/howto/pip-python.org +91 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/index.org +10 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/reference/architecture.org +13 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/tutorials/quickstart.org +8 -7
- {rgpot-2.4.0 → rgpot-2.4.2}/pyproject.toml +6 -4
- {rgpot-2.4.0 → rgpot-2.4.2}/python/rgpot/__init__.py +7 -1
- {rgpot-2.4.0 → rgpot-2.4.2}/readme_src.org +33 -1
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/rgpot_build_multi_abi_engines.sh +22 -5
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/rgpot_pack_multi_abi_engines.sh +4 -2
- rgpot-2.4.0/docs/newsfragments/+pip-rgpot-wheel.added.md +0 -1
- {rgpot-2.4.0 → rgpot-2.4.2}/.gitattributes +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.github/CODEOWNERS +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.github/actions/ensure-potctl/action.yml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.github/actions/restore-ci-tools/action.yml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.github/actions/setup-ci-tools/action.yml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.github/dependabot.yml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/ci-orchestrator.yml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/ci_doc_commenter.yml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/ci_docs.yml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/cosmo-potctl.yml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/coverage.yml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/release-prepare.yml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/release.yml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.gitignore +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.lychee.toml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/.snapper.toml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CHANGELOG.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CMakeLists.txt +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CODEOWNERS +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CODE_OF_CONDUCT.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/Cargo.lock +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/Cargo.toml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/.clang-format +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/examples/call_cuh2.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/examples/eigen_call_cuh2.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/examples/eigen_call_ljpot.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/examples/xt_call_cuh2.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/meson.build +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/CPMDPot.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/CPMDPot.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/README.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/cpmd_c_abi.h +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/cpmd_c_abi_stub.c +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/cpmd_feature_table.inc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/meson.build +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/CuH2Pot.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/CuH2Pot.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/cuh2Utils.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/cuh2Utils.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/meson.build +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/tmp.con +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/tmp_tiny.con +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/ForceStructs.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/LennardJones/LJPot.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/LennardJones/LJPot.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/LennardJones/meson.build +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/MetatomicConfig.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/MetatomicDlopen.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/MetatomicDlopen.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/MetatomicPot.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/MetatomicPot.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/meson.build +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/metatomic_c_abi.h +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/vesin_compat.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/DynLib.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/NWChemPot.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/NWChemPot.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/README.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/meson.build +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/nwchem_c_abi.h +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/nwchem_c_abi_stub.c +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/PotHelpers.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/PotHelpers.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/Potential.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/PotentialCache.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/PotentialCache.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/TBLitePot/TBLitePot.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/TBLitePot/TBLitePot.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/TBLitePot/meson.build +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/XTBPot/XTBPot.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/XTBPot/XTBPot.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/XTBPot/meson.build +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/abi/ProfileLoader.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/base_types.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/pot_types.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/Potentials.capnp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/ase_calculator.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/ase_helpers.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/capnp_compile.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/meson.build +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/pot_bridge.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/pot_bridge.h +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/py_comp_multiprocess.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/py_mpi_comp.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/py_parclient.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/pyclient.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/server.cpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/types/AtomMatrix.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/types/adapters/capnp/capnp_adapter.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/types/adapters/eigen.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/types/adapters/xtensor.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/units.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/units.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/BridgeStressTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/CPMDPotMessageAbiTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/CacheTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/CapnpAdapterTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/CuH2PotTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/InvarianceTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/MetatomicPotTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/NWChemPotMessageAbiTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/NWChemPotTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/ProfileLoaderTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/TBLitePotTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/UnitsTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/XTBPotTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/cpmdc_fake_engine.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/cuh2UtilsTest.cc +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/data/lj38/lennard-jones.pt +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/nwchemc_fake_engine.c +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/test_cpmd_abi_main.c +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/test_cpmd_dlopen_contract.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/test_nwchem_abi_main.c +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/test_nwchem_dlopen_contract.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/test_rpc_schema_sync.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/LICENSE +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/SECURITY.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/branding/logo/rgpot_logo.webp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/branding/logo/rgpot_logo_dark.webp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/branding/logo/rgpot_logo_light.webp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/branding/logo/rgpot_notext.svg +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/branding/logo/rgpot_notext_dark.webp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/branding/logo/rgpot_notext_light.webp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/README.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/build.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/check-drift.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/ci_doc_commenter.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/ci_docs.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/cosmo_potctl.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/docs_quality.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/export-plan.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/format.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/gen.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/lib/pins.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/lib/steps.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/plan.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/potentials.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/prek.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/release.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/release_prepare.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/towncrier.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/workflow.ncl +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/codecov.yml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/cog.toml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/export.el +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/+metatomic-engine-dlopen.added.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/+metatomic-strict-determinism.added.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/+pip-metatomic-dlopen.added.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/+pip-rpath-repair-hook.added.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/.gitkeep +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/47.added.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/README.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/_static/eon_min_landscape.png +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/_static/pes_double_well.png +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/changelog.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/code_of_conduct.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/contributing/developer/faq.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/contributing/developer/index.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/contributing/developer/release.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/contributing/developer/testing.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/contributing/index.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/howto/eindir-anneal.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/howto/eon-rgpot.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/howto/integration.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/tutorials/molecular-global-optimization.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/Doxyfile_base.cfg +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/Doxyfile_potlib.cfg +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_static/custom.css +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_static/rgpot_logo_dark.webp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_static/rgpot_logo_light.webp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_static/rgpot_notext_dark.webp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_static/rgpot_notext_light.webp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_templates/partials/extra-head.html +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_templates/partials/site-foot.html +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/conf.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/doxyrest-config.lua +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/docs/style_guide.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/include/rgpot/errors.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/include/rgpot/potential.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/include/rgpot/rgpot.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/include/rgpot/rpc_client.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/include/rgpot/types.hpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/meson.build +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/meson_options.txt +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/pixi.lock +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/pixi.toml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/potctl/Cargo.toml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/potctl/README.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/potctl/cosmo/README.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/potctl/cosmo/aarch64-unknown-linux-cosmo.json +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/potctl/cosmo/x86_64-unknown-linux-cosmo.json +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/potctl/src/ci.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/potctl/src/cosmo.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/potctl/src/cosmo_ld.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/potctl/src/lockstep.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/potctl/src/main.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/prek.toml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/python/bind/bind_module.cpp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/python/meson.build +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/Cargo.lock +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/Cargo.toml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/README.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/README.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/build.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/cbindgen.toml +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/include/rgpot.h +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/schema/Potentials.capnp +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/c_api/mod.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/c_api/potential.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/c_api/rpc.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/c_api/types.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/eindir.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/lib.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/potential.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/rpc/client.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/rpc/mod.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/rpc/server.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/status.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/tensor.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/types.rs +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/ase_anneal_compare.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/check_codecov_config.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/cpmd_inprocess_vs_subprocess_timing.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/org_to_md.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/patches/doxyrest/doxyrest.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/patches/doxyrest/enum_class_fix.patch +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/patches/doxyrest/readme.org +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/pes_double_well.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/rgpot_build_wheel.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/rgpot_finalize_wheel.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/rgpot_inject_multi_abi_engines.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/rgpot_repair_wheel.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/run_coverage_cpp.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/run_coverage_fortran.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/run_coverage_python.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/scripts/run_coverage_rust.sh +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/eigen.wrap +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fmt.wrap +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/.gitignore +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/LICENSE +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/eam_dat.f90 +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/eam_isoc.f90 +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/eamroutines.f90 +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/main.f90 +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/meson.build +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/readme.md +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/tmp.con +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2.wrap +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/packagefiles/fortcuh2/meson.build +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/potentials-schema.wrap +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/xxhash.wrap +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/ase_vs_anneal.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/con_relax_demo.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/cpmd_params.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/eon_min_landscape.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/nwchem_params.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/pes_double_well.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/rpc_integ.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_cpmd_params.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_nwchem_params.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_rgpot_metatomic_dlopen.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_rgpot_pip_core.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_rpc_e2e_c_abi.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_rpc_integ_cpmd.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_rpc_integ_nwchem.py +0 -0
- {rgpot-2.4.0 → rgpot-2.4.2}/towncrier.toml +0 -0
|
@@ -7,11 +7,48 @@
|
|
|
7
7
|
|
|
8
8
|
#include <cstdio>
|
|
9
9
|
#include <cstring>
|
|
10
|
+
#include <dlfcn.h>
|
|
10
11
|
#include <exception>
|
|
11
12
|
#include <memory>
|
|
12
13
|
#include <string>
|
|
13
14
|
#include <vector>
|
|
14
15
|
|
|
16
|
+
// When this engine is called from a Python host (pyeonclient / nanobind) the
|
|
17
|
+
// GIL is often still held. Torch autograd refuses that. Soft-resolve CPython
|
|
18
|
+
// thread APIs so pure C++ hosts (eonclient binary) need no libpython link.
|
|
19
|
+
//
|
|
20
|
+
// Only SaveThread when PyGILState_Check() is true — nested release (Job.run
|
|
21
|
+
// already dropped the GIL) must not call SaveThread again.
|
|
22
|
+
namespace {
|
|
23
|
+
struct SoftGilRelease {
|
|
24
|
+
using CheckFn = int (*)();
|
|
25
|
+
using SaveFn = void *(*)();
|
|
26
|
+
using RestoreFn = void (*)(void *);
|
|
27
|
+
void *tstate = nullptr;
|
|
28
|
+
RestoreFn restore = nullptr;
|
|
29
|
+
SoftGilRelease() {
|
|
30
|
+
auto *check = reinterpret_cast<CheckFn>(
|
|
31
|
+
dlsym(RTLD_DEFAULT, "PyGILState_Check"));
|
|
32
|
+
auto *save = reinterpret_cast<SaveFn>(
|
|
33
|
+
dlsym(RTLD_DEFAULT, "PyEval_SaveThread"));
|
|
34
|
+
restore = reinterpret_cast<RestoreFn>(
|
|
35
|
+
dlsym(RTLD_DEFAULT, "PyEval_RestoreThread"));
|
|
36
|
+
// check==nullptr: not in a Python process (or old CPython); skip.
|
|
37
|
+
// check()==0: GIL already released by the host (e.g. nanobind).
|
|
38
|
+
if (check && check() && save && restore) {
|
|
39
|
+
tstate = save();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
~SoftGilRelease() {
|
|
43
|
+
if (tstate && restore) {
|
|
44
|
+
restore(tstate);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
SoftGilRelease(const SoftGilRelease &) = delete;
|
|
48
|
+
SoftGilRelease &operator=(const SoftGilRelease &) = delete;
|
|
49
|
+
};
|
|
50
|
+
} // namespace
|
|
51
|
+
|
|
15
52
|
struct RgpotMtaPot {
|
|
16
53
|
std::unique_ptr<rgpot::MetatomicPot> impl;
|
|
17
54
|
};
|
|
@@ -72,6 +109,7 @@ int rgpot_mta_force(RgpotMtaPot *pot, long nAtoms, const double *positions,
|
|
|
72
109
|
!box || nAtoms <= 0)
|
|
73
110
|
return 1;
|
|
74
111
|
try {
|
|
112
|
+
SoftGilRelease no_gil;
|
|
75
113
|
std::vector<double> Fbuf(static_cast<size_t>(nAtoms) * 3);
|
|
76
114
|
rgpot::ForceOut out{Fbuf.data(), 0.0, 0.0};
|
|
77
115
|
rgpot::ForceInput in{static_cast<size_t>(nAtoms), positions, atomicNrs,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: rgpot
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.2
|
|
4
4
|
Summary: Potential energy surfaces for atomistic simulation (LJ + Metatomic multi-ABI dlopen; nanobind abi3)
|
|
5
5
|
Keywords: potential,Lennard-Jones,metatomic,rgpot,potlib,dlopen,nanobind,abi3
|
|
6
6
|
Author-Email: Rohit Goswami <rgoswami@ieee.org>
|
|
@@ -21,7 +21,7 @@ Project-URL: Changelog, https://github.com/OmniPotentRPC/rgpot/blob/main/CHANGEL
|
|
|
21
21
|
Requires-Python: >=3.10
|
|
22
22
|
Requires-Dist: numpy>=1.24
|
|
23
23
|
Provides-Extra: metatomic
|
|
24
|
-
Requires-Dist: torch>=2.
|
|
24
|
+
Requires-Dist: torch>=2.7; extra == "metatomic"
|
|
25
25
|
Requires-Dist: metatensor-core>=0.1.0; extra == "metatomic"
|
|
26
26
|
Requires-Dist: metatensor-torch>=0.6.0; extra == "metatomic"
|
|
27
27
|
Requires-Dist: metatomic-torch>=0.1.0; extra == "metatomic"
|
|
@@ -58,6 +58,37 @@ RPC clients may request compatible units through `ForceInput.lengthUnit` and
|
|
|
58
58
|
`ForceInput.energyUnit`.
|
|
59
59
|
|
|
60
60
|
|
|
61
|
+
## Python (PyPI)
|
|
62
|
+
|
|
63
|
+
Install the manylinux wheel (nanobind **abi3**, Python >= 3.12 for the stable
|
|
64
|
+
ABI extension; requires-python is >= 3.10 for pure metadata):
|
|
65
|
+
|
|
66
|
+
pip install rgpot
|
|
67
|
+
# Metatomic path (engine libs resolve from these packages at runtime):
|
|
68
|
+
pip install 'rgpot[metatomic]'
|
|
69
|
+
# or: pip install torch metatomic-torch metatensor-torch metatensor-core vesin
|
|
70
|
+
|
|
71
|
+
Lennard-Jones needs only `numpy`. Metatomic uses **dlopen** of a bundled
|
|
72
|
+
engine:
|
|
73
|
+
|
|
74
|
+
- layout: `rgpot/lib/torch-X.Y/libmetatomic_engine.so`
|
|
75
|
+
- picker: installed `torch` major (same multi-ABI idea as metatomic-torch)
|
|
76
|
+
- **supported torch majors: 2.7 and newer** (wheels ship 2.7–2.13 engines)
|
|
77
|
+
- torch 2.6 and older are not supported for Metatomic dlopen
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
import numpy as np
|
|
81
|
+
import rgpot
|
|
82
|
+
|
|
83
|
+
print(rgpot.__version__)
|
|
84
|
+
print(rgpot.available_metatomic_engine_abis()) # e.g. 2.7 .. 2.13
|
|
85
|
+
# energy, forces, variance = rgpot.evaluate_metatomic(
|
|
86
|
+
# positions, atom_types, box, model_path="model.pt")
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
See <https://pypi.org/project/rgpot/>.
|
|
90
|
+
|
|
91
|
+
|
|
61
92
|
## Build And Test
|
|
62
93
|
|
|
63
94
|
Meson is the primary build path.
|
|
@@ -136,7 +167,7 @@ RPC client types:
|
|
|
136
167
|
<tr>
|
|
137
168
|
<td class="org-left"><code>MetatomicPot</code></td>
|
|
138
169
|
<td class="org-left"><code>Metatomic:<model_path></code></td>
|
|
139
|
-
<td class="org-left">Enable with <code>-Dwith_metatomic=true</code>; use pixi env <code>metatomicbld</code
|
|
170
|
+
<td class="org-left">Enable with <code>-Dwith_metatomic=true</code>; use pixi env <code>metatomicbld</code>. Pip engines: torch 2.7+</td>
|
|
140
171
|
</tr>
|
|
141
172
|
|
|
142
173
|
<tr>
|
|
@@ -23,6 +23,37 @@ RPC clients may request compatible units through `ForceInput.lengthUnit` and
|
|
|
23
23
|
`ForceInput.energyUnit`.
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
## Python (PyPI)
|
|
27
|
+
|
|
28
|
+
Install the manylinux wheel (nanobind **abi3**, Python >= 3.12 for the stable
|
|
29
|
+
ABI extension; requires-python is >= 3.10 for pure metadata):
|
|
30
|
+
|
|
31
|
+
pip install rgpot
|
|
32
|
+
# Metatomic path (engine libs resolve from these packages at runtime):
|
|
33
|
+
pip install 'rgpot[metatomic]'
|
|
34
|
+
# or: pip install torch metatomic-torch metatensor-torch metatensor-core vesin
|
|
35
|
+
|
|
36
|
+
Lennard-Jones needs only `numpy`. Metatomic uses **dlopen** of a bundled
|
|
37
|
+
engine:
|
|
38
|
+
|
|
39
|
+
- layout: `rgpot/lib/torch-X.Y/libmetatomic_engine.so`
|
|
40
|
+
- picker: installed `torch` major (same multi-ABI idea as metatomic-torch)
|
|
41
|
+
- **supported torch majors: 2.7 and newer** (wheels ship 2.7–2.13 engines)
|
|
42
|
+
- torch 2.6 and older are not supported for Metatomic dlopen
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
import numpy as np
|
|
46
|
+
import rgpot
|
|
47
|
+
|
|
48
|
+
print(rgpot.__version__)
|
|
49
|
+
print(rgpot.available_metatomic_engine_abis()) # e.g. 2.7 .. 2.13
|
|
50
|
+
# energy, forces, variance = rgpot.evaluate_metatomic(
|
|
51
|
+
# positions, atom_types, box, model_path="model.pt")
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
See <https://pypi.org/project/rgpot/>.
|
|
55
|
+
|
|
56
|
+
|
|
26
57
|
## Build And Test
|
|
27
58
|
|
|
28
59
|
Meson is the primary build path.
|
|
@@ -101,7 +132,7 @@ RPC client types:
|
|
|
101
132
|
<tr>
|
|
102
133
|
<td class="org-left"><code>MetatomicPot</code></td>
|
|
103
134
|
<td class="org-left"><code>Metatomic:<model_path></code></td>
|
|
104
|
-
<td class="org-left">Enable with <code>-Dwith_metatomic=true</code>; use pixi env <code>metatomicbld</code
|
|
135
|
+
<td class="org-left">Enable with <code>-Dwith_metatomic=true</code>; use pixi env <code>metatomicbld</code>. Pip engines: torch 2.7+</td>
|
|
105
136
|
</tr>
|
|
106
137
|
|
|
107
138
|
<tr>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Metatomic C ABI engines soft-release the GIL so pyeonclient Job.run can evaluate forces under torch autograd without a fat metatomic link.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
SoftGilRelease in the metatomic C ABI only calls PyEval_SaveThread when PyGILState_Check is true, so nested GIL release from pyeonclient Job.run is safe.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
Metatomic engines are built for
|
|
1
|
+
Metatomic engines are built for each supported torch major
|
|
2
2
|
(``rgpot/lib/torch-X.Y/libmetatomic_engine.so``) and selected at runtime from
|
|
3
3
|
the installed torch version — same multi-ABI model as metatomic-torch itself.
|
|
4
|
+
The pip product covers **torch 2.7 and newer**; earlier majors are out of scope.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
Python bindings use **nanobind** with **stable ABI** (abi3 / Py_LIMITED_API 3.12)
|
|
2
2
|
when built on Python >= 3.12 (same policy as pyeonclient). Metatomic engines are
|
|
3
3
|
packed multi-ABI under ``rgpot/lib/torch-X.Y/`` and selected from the installed
|
|
4
|
-
torch major at runtime.
|
|
4
|
+
torch major at runtime. Supported libtorch majors start at **2.7** (engines for
|
|
5
|
+
2.7–2.13 ship in the manylinux wheel); torch 2.6 and older are not bundled.
|
|
@@ -82,6 +82,15 @@ The Meson build supplements Torch CMake discovery with explicit =-L= /
|
|
|
82
82
|
=-rpath= / =-ltorch_cpu= taken from =python3 -c 'import torch; ...'= so
|
|
83
83
|
=libtorch_cpu.so= resolves under conda/pixi layouts.
|
|
84
84
|
|
|
85
|
+
For the *pip* wheel (nanobind abi3 + multi-ABI =dlopen= engines, torch *2.7+*),
|
|
86
|
+
see:
|
|
87
|
+
|
|
88
|
+
#+begin_export rst
|
|
89
|
+
:doc:`pip-python`
|
|
90
|
+
#+end_export
|
|
91
|
+
|
|
92
|
+
instead of embedding as a subproject.
|
|
93
|
+
|
|
85
94
|
** CMake
|
|
86
95
|
|
|
87
96
|
rgpot also provides a CMake build.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#+TITLE: Python package (PyPI)
|
|
2
|
+
#+OPTIONS: toc:nil todo:nil num:nil author:nil title:nil
|
|
3
|
+
#+STARTUP: content
|
|
4
|
+
|
|
5
|
+
* Python package (PyPI)
|
|
6
|
+
|
|
7
|
+
The =rgpot= package on [[https://pypi.org/project/rgpot/][PyPI]] ships manylinux wheels with:
|
|
8
|
+
|
|
9
|
+
- Lennard-Jones via a *nanobind* extension (=_core.abi3.so=, stable ABI /
|
|
10
|
+
=Py_LIMITED_API= 3.12 when built on CPython >= 3.12)
|
|
11
|
+
- Metatomic force evaluation via *dlopen* of a portable C-ABI engine plugin
|
|
12
|
+
|
|
13
|
+
This is separate from the Cap'n Proto RPC path (=potserv=).
|
|
14
|
+
LJ needs only =numpy=; Metatomic needs the optional dependency stack below.
|
|
15
|
+
|
|
16
|
+
** Install
|
|
17
|
+
|
|
18
|
+
#+begin_src bash
|
|
19
|
+
pip install -U rgpot
|
|
20
|
+
# Metatomic path (provides the NEEDED shared libs at runtime):
|
|
21
|
+
pip install 'rgpot[metatomic]'
|
|
22
|
+
# equivalent:
|
|
23
|
+
# pip install torch metatomic-torch metatensor-torch metatensor-core vesin
|
|
24
|
+
#+end_src
|
|
25
|
+
|
|
26
|
+
** Multi-ABI engines and torch floor
|
|
27
|
+
|
|
28
|
+
Engines live in the wheel as:
|
|
29
|
+
|
|
30
|
+
#+begin_example
|
|
31
|
+
rgpot/lib/torch-X.Y/libmetatomic_engine.so
|
|
32
|
+
#+end_example
|
|
33
|
+
|
|
34
|
+
At import time, =rgpot.default_metatomic_engine_path()= picks the directory that
|
|
35
|
+
matches the installed =torch= major (same multi-ABI idea as metatomic-torch).
|
|
36
|
+
|
|
37
|
+
| Torch major | Bundled engine (typical wheel) |
|
|
38
|
+
|-------------+--------------------------------|
|
|
39
|
+
| 2.7 and newer | Supported (wheels ship 2.7–2.13) |
|
|
40
|
+
| 2.6 and older | Not supported for Metatomic dlopen |
|
|
41
|
+
|
|
42
|
+
Optional dependency pins match the floor (=torch>=2.7=).
|
|
43
|
+
List what the installed wheel actually contains:
|
|
44
|
+
|
|
45
|
+
#+begin_src python
|
|
46
|
+
import rgpot
|
|
47
|
+
print(rgpot.__version__)
|
|
48
|
+
print(rgpot.available_metatomic_engine_abis())
|
|
49
|
+
print(rgpot.default_metatomic_engine_path())
|
|
50
|
+
#+end_src
|
|
51
|
+
|
|
52
|
+
** Minimal LJ example
|
|
53
|
+
|
|
54
|
+
#+begin_src python
|
|
55
|
+
import numpy as np
|
|
56
|
+
import rgpot
|
|
57
|
+
|
|
58
|
+
pos = np.ascontiguousarray([[0.0, 0.0, 0.0], [1.1, 0.0, 0.0]], dtype=np.float64)
|
|
59
|
+
types = np.ascontiguousarray([1, 1], dtype=np.int32)
|
|
60
|
+
box = np.ascontiguousarray(np.eye(3) * 10.0, dtype=np.float64)
|
|
61
|
+
energy, forces, virial = rgpot.evaluate_lj(pos, types, box)
|
|
62
|
+
print(energy, forces.shape)
|
|
63
|
+
#+end_src
|
|
64
|
+
|
|
65
|
+
** Metatomic dlopen
|
|
66
|
+
|
|
67
|
+
#+begin_src python
|
|
68
|
+
import numpy as np
|
|
69
|
+
import rgpot
|
|
70
|
+
|
|
71
|
+
# torch must be importable first so the engine's DT_NEEDED libs resolve
|
|
72
|
+
# to the same process image.
|
|
73
|
+
energy, forces, variance = rgpot.evaluate_metatomic(
|
|
74
|
+
positions, # (N, 3) float64 C-contiguous
|
|
75
|
+
atom_types, # (N,) int32
|
|
76
|
+
box, # (3, 3) float64
|
|
77
|
+
model_path="model.pt",
|
|
78
|
+
# engine_path=... optional override; default uses torch-X.Y picker
|
|
79
|
+
device="cpu",
|
|
80
|
+
)
|
|
81
|
+
#+end_src
|
|
82
|
+
|
|
83
|
+
Override the engine with =RGPOT_METATOMIC_ENGINE= / =METATOMIC_ENGINE= if needed.
|
|
84
|
+
|
|
85
|
+
** Related
|
|
86
|
+
|
|
87
|
+
#+begin_export rst
|
|
88
|
+
- In-tree C++ ``MetatomicPot`` (Meson ``-Dwith_metatomic=true``):
|
|
89
|
+
:doc:`embedding` and :doc:`../reference/architecture`
|
|
90
|
+
- RPC server path remains ``potserv``; this page is the pip product only
|
|
91
|
+
#+end_export
|
|
@@ -43,6 +43,15 @@ optional xTB / tblite / metatomic backends, and runtime-loaded quantum engines.
|
|
|
43
43
|
Both quantum frontends keep geometry on ~ForceInput~ and carry method options in
|
|
44
44
|
the matching ~PotentialConfig~ arm.
|
|
45
45
|
|
|
46
|
+
The pip package (~pip install rgpot~) ships nanobind abi3 bindings and multi-ABI
|
|
47
|
+
Metatomic engines for *torch 2.7+*.
|
|
48
|
+
See:
|
|
49
|
+
|
|
50
|
+
#+begin_export rst
|
|
51
|
+
:doc:`howto/pip-python`
|
|
52
|
+
#+end_export
|
|
53
|
+
|
|
54
|
+
|
|
46
55
|
#+begin_src bash
|
|
47
56
|
git clone https://github.com/OmniPotentRPC/rgpot.git
|
|
48
57
|
cd rgpot && pixi shell -e rpctest
|
|
@@ -62,6 +71,7 @@ meson compile -C bbdir && meson test -C bbdir
|
|
|
62
71
|
:maxdepth: 2
|
|
63
72
|
:caption: How-To Guides
|
|
64
73
|
|
|
74
|
+
howto/pip-python
|
|
65
75
|
howto/embedding
|
|
66
76
|
howto/integration
|
|
67
77
|
howto/eindir-anneal
|
|
@@ -189,6 +189,19 @@ Build with the =metatomicbld= pixi env (linux-64; pulls torch, metatomic-torch,
|
|
|
189
189
|
and vesin =>=0.5.2,<0.6= from PyPI). CI job =potentials_metatomic= in =ci-
|
|
190
190
|
orchestrator.yml=.
|
|
191
191
|
|
|
192
|
+
The *pip* product (=rgpot= on PyPI) does not link Metatomic into the Python
|
|
193
|
+
extension.
|
|
194
|
+
It =dlopen=s a portable =libmetatomic_engine.so= chosen from
|
|
195
|
+
=rgpot/lib/torch-X.Y/= for the installed torch major.
|
|
196
|
+
Supported torch majors for bundled engines start at *2.7* (wheels ship
|
|
197
|
+
2.7–2.13).
|
|
198
|
+
See:
|
|
199
|
+
|
|
200
|
+
#+begin_export rst
|
|
201
|
+
:doc:`../howto/pip-python`
|
|
202
|
+
#+end_export
|
|
203
|
+
|
|
204
|
+
|
|
192
205
|
All feature-gated potentials are detected via =pkg-config= / =cmake= and
|
|
193
206
|
controlled by Meson options.
|
|
194
207
|
|
|
@@ -78,10 +78,11 @@ NWCHEMC_LIBRARY=/path/to/libnwchemc.so ./bbdir/CppCore/potserv 12345 NWChem
|
|
|
78
78
|
|
|
79
79
|
** Next steps
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
-
|
|
86
|
-
meson/cmake
|
|
87
|
-
-
|
|
81
|
+
#+begin_export rst
|
|
82
|
+
- :doc:`../howto/pip-python` — ``pip install rgpot`` (LJ + Metatomic multi-ABI
|
|
83
|
+
engines, torch 2.7+)
|
|
84
|
+
- :doc:`../reference/architecture` — architecture overview
|
|
85
|
+
- :doc:`../howto/integration` — embedding into external projects
|
|
86
|
+
- :doc:`../howto/embedding` — meson/cmake subproject
|
|
87
|
+
- :doc:`../changelog` — release history
|
|
88
|
+
#+end_export
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "rgpot"
|
|
3
|
-
version = "2.4.
|
|
3
|
+
version = "2.4.2"
|
|
4
4
|
description = "Potential energy surfaces for atomistic simulation (LJ + Metatomic multi-ABI dlopen; nanobind abi3)"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { text = "MIT" }
|
|
@@ -33,8 +33,9 @@ Changelog = "https://github.com/OmniPotentRPC/rgpot/blob/main/CHANGELOG.md"
|
|
|
33
33
|
[project.optional-dependencies]
|
|
34
34
|
# Runtime Python stack for the Metatomic engine (torch + metatomic from PyPI).
|
|
35
35
|
# The engine .so is built into the wheel; these packages provide the NEEDED libs.
|
|
36
|
+
# Bundled multi-ABI engines cover torch 2.7+ (see README).
|
|
36
37
|
metatomic = [
|
|
37
|
-
"torch>=2.
|
|
38
|
+
"torch>=2.7",
|
|
38
39
|
"metatensor-core>=0.1.0",
|
|
39
40
|
"metatensor-torch>=0.6.0",
|
|
40
41
|
"metatomic-torch>=0.1.0",
|
|
@@ -50,8 +51,9 @@ requires = [
|
|
|
50
51
|
"ninja",
|
|
51
52
|
"nanobind>=2.2",
|
|
52
53
|
"numpy>=1.24",
|
|
53
|
-
# Build-time for libmetatomic_engine.so (same purelib layout at runtime)
|
|
54
|
-
|
|
54
|
+
# Build-time for libmetatomic_engine.so (same purelib layout at runtime).
|
|
55
|
+
# Multi-ABI pack targets torch 2.7+; older majors are not shipped.
|
|
56
|
+
"torch>=2.7",
|
|
55
57
|
"metatensor-core",
|
|
56
58
|
"metatensor-torch",
|
|
57
59
|
"metatomic-torch",
|
|
@@ -6,6 +6,9 @@ Core: Lennard-Jones. Metatomic path uses **dlopen** of a portable
|
|
|
6
6
|
``rgpot/lib/torch-X.Y/libmetatomic_engine.so``
|
|
7
7
|
|
|
8
8
|
selected from the installed ``torch`` major (same layout as metatomic-torch).
|
|
9
|
+
|
|
10
|
+
Supported torch majors for bundled engines: **2.7 and newer**. Older torch
|
|
11
|
+
builds may still import LJ, but Metatomic dlopen needs a matching engine.
|
|
9
12
|
"""
|
|
10
13
|
|
|
11
14
|
from __future__ import annotations
|
|
@@ -68,7 +71,10 @@ def default_metatomic_engine_path() -> str | None:
|
|
|
68
71
|
|
|
69
72
|
|
|
70
73
|
def available_metatomic_engine_abis() -> list[str]:
|
|
71
|
-
"""List torch-X.Y majors for which a bundled engine is present.
|
|
74
|
+
"""List torch-X.Y majors for which a bundled engine is present.
|
|
75
|
+
|
|
76
|
+
PyPI wheels ship engines for torch 2.7+ (see package README).
|
|
77
|
+
"""
|
|
72
78
|
here = Path(__file__).resolve().parent / "lib"
|
|
73
79
|
out: list[str] = []
|
|
74
80
|
if not here.is_dir():
|
|
@@ -23,6 +23,38 @@ Native rgpot units are eV and Angstrom.
|
|
|
23
23
|
RPC clients may request compatible units through ~ForceInput.lengthUnit~ and
|
|
24
24
|
~ForceInput.energyUnit~.
|
|
25
25
|
|
|
26
|
+
** Python (PyPI)
|
|
27
|
+
|
|
28
|
+
Install the manylinux wheel (nanobind **abi3**, Python >= 3.12 for the stable
|
|
29
|
+
ABI extension; requires-python is >= 3.10 for pure metadata):
|
|
30
|
+
|
|
31
|
+
#+begin_src bash
|
|
32
|
+
pip install rgpot
|
|
33
|
+
# Metatomic path (engine libs resolve from these packages at runtime):
|
|
34
|
+
pip install 'rgpot[metatomic]'
|
|
35
|
+
# or: pip install torch metatomic-torch metatensor-torch metatensor-core vesin
|
|
36
|
+
#+end_src
|
|
37
|
+
|
|
38
|
+
Lennard-Jones needs only ~numpy~. Metatomic uses **dlopen** of a bundled
|
|
39
|
+
engine:
|
|
40
|
+
|
|
41
|
+
- layout: ~rgpot/lib/torch-X.Y/libmetatomic_engine.so~
|
|
42
|
+
- picker: installed ~torch~ major (same multi-ABI idea as metatomic-torch)
|
|
43
|
+
- **supported torch majors: 2.7 and newer** (wheels ship 2.7–2.13 engines)
|
|
44
|
+
- torch 2.6 and older are not supported for Metatomic dlopen
|
|
45
|
+
|
|
46
|
+
#+begin_src python
|
|
47
|
+
import numpy as np
|
|
48
|
+
import rgpot
|
|
49
|
+
|
|
50
|
+
print(rgpot.__version__)
|
|
51
|
+
print(rgpot.available_metatomic_engine_abis()) # e.g. 2.7 .. 2.13
|
|
52
|
+
# energy, forces, variance = rgpot.evaluate_metatomic(
|
|
53
|
+
# positions, atom_types, box, model_path="model.pt")
|
|
54
|
+
#+end_src
|
|
55
|
+
|
|
56
|
+
See https://pypi.org/project/rgpot/ .
|
|
57
|
+
|
|
26
58
|
** Build And Test
|
|
27
59
|
|
|
28
60
|
Meson is the primary build path.
|
|
@@ -67,7 +99,7 @@ ctest --test-dir build_client --output-on-failure
|
|
|
67
99
|
| =CuH2Pot= | =CuH2= | Built-in Cu-H EAM potential |
|
|
68
100
|
| =XTBPot= | =XTB=, =GFNFF=, =GFN0xTB=, =GFN1xTB= | Enable with =-Dwith_xtb=true=; use pixi env =xtbbld= or =tbbld= |
|
|
69
101
|
| =TBLitePot= | =TBLite=, =TBLiteGFN1=, =TBLiteIPEA1= | Enable with =-Dwith_tblite=true=; use pixi env =tblitebld= or =tbbld= |
|
|
70
|
-
| =MetatomicPot= | =Metatomic:<model_path>= | Enable with =-Dwith_metatomic=true=; use pixi env =metatomicbld
|
|
102
|
+
| =MetatomicPot= | =Metatomic:<model_path>= | Enable with =-Dwith_metatomic=true=; use pixi env =metatomicbld=. Pip engines: torch 2.7+ |
|
|
71
103
|
| =NWChemPot= | =NWChem= | Frontend always builds; load =libnwchemc= from the split =nwchemc= project at runtime |
|
|
72
104
|
| =CPMDPot= | =CPMD= | Frontend always builds; load =libcpmdc= from the split =cpmdc= project at runtime |
|
|
73
105
|
|
|
@@ -1,31 +1,48 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Build libmetatomic_engine.so for
|
|
2
|
+
# Build libmetatomic_engine.so for supported torch majors (product floor: 2.7+).
|
|
3
3
|
# Stages: build/multi-abi-engines/torch-X.Y/libmetatomic_engine.so
|
|
4
4
|
#
|
|
5
5
|
# Links against isolated libtorch per major (CPU). When the build CPython has
|
|
6
|
-
# no torch wheel for
|
|
6
|
+
# no torch wheel for a major, downloads a manylinux wheel for cp312 and
|
|
7
7
|
# extracts libtorch (C++ ABI is per torch major, not per CPython tag).
|
|
8
|
+
#
|
|
9
|
+
# Default majors: intersection of metatomic-torch's torch-* layout with >= 2.7.
|
|
10
|
+
# Override with RGPOT_TORCH_MAJORS="2.7 2.9 2.13".
|
|
8
11
|
set -euo pipefail
|
|
9
12
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
10
13
|
cd "$ROOT"
|
|
11
14
|
PY="${RGPOT_BUILD_PYTHON:-python3}"
|
|
12
15
|
ABI_ROOT="${RGPOT_ABI_ROOT:-$HOME/tmp/rgpot-multi-abi}"
|
|
13
16
|
STAGING="${RGPOT_ABI_STAGING:-$ROOT/build/multi-abi-engines}"
|
|
17
|
+
# Skip libtorch older than this (incomplete CPU wheels / link failures).
|
|
18
|
+
MIN_TORCH_MAJOR="${RGPOT_MIN_TORCH_MAJOR:-2.7}"
|
|
14
19
|
mkdir -p "$ABI_ROOT" "$STAGING"
|
|
15
20
|
|
|
16
21
|
HOST_PURE=$("$PY" -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])')
|
|
17
22
|
[[ -d "$HOST_PURE/metatomic/torch" ]] || { echo "ERROR: need metatomic-torch in $HOST_PURE" >&2; exit 1; }
|
|
18
23
|
|
|
19
24
|
if [[ -z "${RGPOT_TORCH_MAJORS:-}" ]]; then
|
|
20
|
-
RGPOT_TORCH_MAJORS=$("$PY" - <<
|
|
25
|
+
RGPOT_TORCH_MAJORS=$("$PY" - <<PY
|
|
21
26
|
from pathlib import Path
|
|
22
27
|
import sysconfig
|
|
28
|
+
min_maj = tuple(int(x) for x in "$MIN_TORCH_MAJOR".split("."))
|
|
23
29
|
p = Path(sysconfig.get_paths()["purelib"]) / "metatomic" / "torch"
|
|
24
|
-
|
|
30
|
+
out = []
|
|
31
|
+
for d in sorted(p.glob("torch-*")):
|
|
32
|
+
if not d.is_dir():
|
|
33
|
+
continue
|
|
34
|
+
ver = d.name.removeprefix("torch-")
|
|
35
|
+
try:
|
|
36
|
+
maj = tuple(int(x) for x in ver.split(".")[:2])
|
|
37
|
+
except ValueError:
|
|
38
|
+
continue
|
|
39
|
+
if maj >= min_maj:
|
|
40
|
+
out.append(ver)
|
|
41
|
+
print(" ".join(out))
|
|
25
42
|
PY
|
|
26
43
|
)
|
|
27
44
|
fi
|
|
28
|
-
echo "MAJORS=$RGPOT_TORCH_MAJORS"
|
|
45
|
+
echo "MAJORS=$RGPOT_TORCH_MAJORS (floor $MIN_TORCH_MAJOR)"
|
|
29
46
|
echo "STAGING=$STAGING ABI_ROOT=$ABI_ROOT"
|
|
30
47
|
|
|
31
48
|
ensure_torch_prefix() {
|
|
@@ -2,15 +2,17 @@
|
|
|
2
2
|
# Build libmetatomic_engine.so for each torch major and inject into a wheel as
|
|
3
3
|
# rgpot/lib/torch-X.Y/libmetatomic_engine.so
|
|
4
4
|
#
|
|
5
|
+
# Product support floor: torch 2.7+. Defaults cover 2.7–2.13.
|
|
6
|
+
#
|
|
5
7
|
# Usage:
|
|
6
|
-
# RGPOT_TORCH_MAJORS="2.9 2.13" ./scripts/rgpot_pack_multi_abi_engines.sh dist/rgpot-*.whl
|
|
8
|
+
# RGPOT_TORCH_MAJORS="2.7 2.9 2.13" ./scripts/rgpot_pack_multi_abi_engines.sh dist/rgpot-*.whl
|
|
7
9
|
#
|
|
8
10
|
# Requires: existing wheel, compilers, patchelf, pip network (or pre-seeded
|
|
9
11
|
# torch CPU wheels). Builds each ABI in an isolated prefix under $RGPOT_ABI_ROOT.
|
|
10
12
|
set -euo pipefail
|
|
11
13
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
12
14
|
WHL="${1:?path to rgpot wheel}"
|
|
13
|
-
MAJORS="${RGPOT_TORCH_MAJORS:-2.9 2.10 2.11 2.12 2.13}"
|
|
15
|
+
MAJORS="${RGPOT_TORCH_MAJORS:-2.7 2.8 2.9 2.10 2.11 2.12 2.13}"
|
|
14
16
|
ABI_ROOT="${RGPOT_ABI_ROOT:-$HOME/tmp/rgpot-multi-abi}"
|
|
15
17
|
PY="${RGPOT_BUILD_PYTHON:-python3}"
|
|
16
18
|
mkdir -p "$ABI_ROOT"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Python package `rgpot` is pip-installable: core Lennard-Jones bindings via meson-python wheels (`import rgpot; rgpot.evaluate_lj(...)`).
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|