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.
Files changed (285) hide show
  1. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/MetatomicEngineAbi.cc +38 -0
  2. {rgpot-2.4.0 → rgpot-2.4.2}/PKG-INFO +34 -3
  3. {rgpot-2.4.0 → rgpot-2.4.2}/README.md +32 -1
  4. rgpot-2.4.2/docs/newsfragments/+gil-c-abi-force.fixed.md +1 -0
  5. rgpot-2.4.2/docs/newsfragments/+gil-nested-safe.fixed.md +1 -0
  6. {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/+pip-multi-torch-engines.added.md +2 -1
  7. {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/+pip-nanobind-abi3-multi-torch.added.md +2 -1
  8. rgpot-2.4.2/docs/newsfragments/+pip-rgpot-wheel.added.md +3 -0
  9. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/howto/embedding.org +9 -0
  10. rgpot-2.4.2/docs/orgmode/howto/pip-python.org +91 -0
  11. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/index.org +10 -0
  12. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/reference/architecture.org +13 -0
  13. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/tutorials/quickstart.org +8 -7
  14. {rgpot-2.4.0 → rgpot-2.4.2}/pyproject.toml +6 -4
  15. {rgpot-2.4.0 → rgpot-2.4.2}/python/rgpot/__init__.py +7 -1
  16. {rgpot-2.4.0 → rgpot-2.4.2}/readme_src.org +33 -1
  17. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/rgpot_build_multi_abi_engines.sh +22 -5
  18. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/rgpot_pack_multi_abi_engines.sh +4 -2
  19. rgpot-2.4.0/docs/newsfragments/+pip-rgpot-wheel.added.md +0 -1
  20. {rgpot-2.4.0 → rgpot-2.4.2}/.gitattributes +0 -0
  21. {rgpot-2.4.0 → rgpot-2.4.2}/.github/CODEOWNERS +0 -0
  22. {rgpot-2.4.0 → rgpot-2.4.2}/.github/actions/ensure-potctl/action.yml +0 -0
  23. {rgpot-2.4.0 → rgpot-2.4.2}/.github/actions/restore-ci-tools/action.yml +0 -0
  24. {rgpot-2.4.0 → rgpot-2.4.2}/.github/actions/setup-ci-tools/action.yml +0 -0
  25. {rgpot-2.4.0 → rgpot-2.4.2}/.github/dependabot.yml +0 -0
  26. {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/ci-orchestrator.yml +0 -0
  27. {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/ci_doc_commenter.yml +0 -0
  28. {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/ci_docs.yml +0 -0
  29. {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/cosmo-potctl.yml +0 -0
  30. {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/coverage.yml +0 -0
  31. {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/release-prepare.yml +0 -0
  32. {rgpot-2.4.0 → rgpot-2.4.2}/.github/workflows/release.yml +0 -0
  33. {rgpot-2.4.0 → rgpot-2.4.2}/.gitignore +0 -0
  34. {rgpot-2.4.0 → rgpot-2.4.2}/.lychee.toml +0 -0
  35. {rgpot-2.4.0 → rgpot-2.4.2}/.snapper.toml +0 -0
  36. {rgpot-2.4.0 → rgpot-2.4.2}/CHANGELOG.md +0 -0
  37. {rgpot-2.4.0 → rgpot-2.4.2}/CMakeLists.txt +0 -0
  38. {rgpot-2.4.0 → rgpot-2.4.2}/CODEOWNERS +0 -0
  39. {rgpot-2.4.0 → rgpot-2.4.2}/CODE_OF_CONDUCT.md +0 -0
  40. {rgpot-2.4.0 → rgpot-2.4.2}/Cargo.lock +0 -0
  41. {rgpot-2.4.0 → rgpot-2.4.2}/Cargo.toml +0 -0
  42. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/.clang-format +0 -0
  43. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/examples/call_cuh2.cc +0 -0
  44. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/examples/eigen_call_cuh2.cc +0 -0
  45. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/examples/eigen_call_ljpot.cc +0 -0
  46. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/examples/xt_call_cuh2.cc +0 -0
  47. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/meson.build +0 -0
  48. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/CPMDPot.cc +0 -0
  49. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/CPMDPot.hpp +0 -0
  50. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/README.md +0 -0
  51. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/cpmd_c_abi.h +0 -0
  52. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/cpmd_c_abi_stub.c +0 -0
  53. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/cpmd_feature_table.inc +0 -0
  54. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CPMDPot/meson.build +0 -0
  55. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/CuH2Pot.cc +0 -0
  56. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/CuH2Pot.hpp +0 -0
  57. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/cuh2Utils.cc +0 -0
  58. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/cuh2Utils.hpp +0 -0
  59. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/meson.build +0 -0
  60. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/tmp.con +0 -0
  61. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/CuH2/tmp_tiny.con +0 -0
  62. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/ForceStructs.hpp +0 -0
  63. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/LennardJones/LJPot.cc +0 -0
  64. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/LennardJones/LJPot.hpp +0 -0
  65. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/LennardJones/meson.build +0 -0
  66. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/MetatomicConfig.hpp +0 -0
  67. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/MetatomicDlopen.cc +0 -0
  68. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/MetatomicDlopen.hpp +0 -0
  69. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/MetatomicPot.cc +0 -0
  70. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/MetatomicPot.hpp +0 -0
  71. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/meson.build +0 -0
  72. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/metatomic_c_abi.h +0 -0
  73. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/MetatomicPot/vesin_compat.hpp +0 -0
  74. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/DynLib.hpp +0 -0
  75. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/NWChemPot.cc +0 -0
  76. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/NWChemPot.hpp +0 -0
  77. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/README.md +0 -0
  78. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/meson.build +0 -0
  79. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/nwchem_c_abi.h +0 -0
  80. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/NWChemPot/nwchem_c_abi_stub.c +0 -0
  81. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/PotHelpers.cc +0 -0
  82. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/PotHelpers.hpp +0 -0
  83. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/Potential.hpp +0 -0
  84. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/PotentialCache.cc +0 -0
  85. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/PotentialCache.hpp +0 -0
  86. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/TBLitePot/TBLitePot.cc +0 -0
  87. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/TBLitePot/TBLitePot.hpp +0 -0
  88. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/TBLitePot/meson.build +0 -0
  89. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/XTBPot/XTBPot.cc +0 -0
  90. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/XTBPot/XTBPot.hpp +0 -0
  91. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/XTBPot/meson.build +0 -0
  92. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/abi/ProfileLoader.hpp +0 -0
  93. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/base_types.hpp +0 -0
  94. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/pot_types.hpp +0 -0
  95. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/Potentials.capnp +0 -0
  96. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/ase_calculator.py +0 -0
  97. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/ase_helpers.py +0 -0
  98. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/capnp_compile.py +0 -0
  99. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/meson.build +0 -0
  100. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/pot_bridge.cc +0 -0
  101. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/pot_bridge.h +0 -0
  102. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/py_comp_multiprocess.py +0 -0
  103. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/py_mpi_comp.py +0 -0
  104. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/py_parclient.py +0 -0
  105. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/pyclient.py +0 -0
  106. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/rpc/server.cpp +0 -0
  107. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/types/AtomMatrix.hpp +0 -0
  108. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/types/adapters/capnp/capnp_adapter.hpp +0 -0
  109. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/types/adapters/eigen.hpp +0 -0
  110. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/types/adapters/xtensor.hpp +0 -0
  111. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/units.cc +0 -0
  112. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/rgpot/units.hpp +0 -0
  113. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/BridgeStressTest.cc +0 -0
  114. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/CPMDPotMessageAbiTest.cc +0 -0
  115. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/CacheTest.cc +0 -0
  116. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/CapnpAdapterTest.cc +0 -0
  117. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/CuH2PotTest.cc +0 -0
  118. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/InvarianceTest.cc +0 -0
  119. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/MetatomicPotTest.cc +0 -0
  120. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/NWChemPotMessageAbiTest.cc +0 -0
  121. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/NWChemPotTest.cc +0 -0
  122. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/ProfileLoaderTest.cc +0 -0
  123. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/TBLitePotTest.cc +0 -0
  124. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/UnitsTest.cc +0 -0
  125. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/XTBPotTest.cc +0 -0
  126. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/cpmdc_fake_engine.cc +0 -0
  127. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/cuh2UtilsTest.cc +0 -0
  128. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/data/lj38/lennard-jones.pt +0 -0
  129. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/nwchemc_fake_engine.c +0 -0
  130. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/test_cpmd_abi_main.c +0 -0
  131. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/test_cpmd_dlopen_contract.py +0 -0
  132. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/test_nwchem_abi_main.c +0 -0
  133. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/test_nwchem_dlopen_contract.py +0 -0
  134. {rgpot-2.4.0 → rgpot-2.4.2}/CppCore/tests/test_rpc_schema_sync.py +0 -0
  135. {rgpot-2.4.0 → rgpot-2.4.2}/LICENSE +0 -0
  136. {rgpot-2.4.0 → rgpot-2.4.2}/SECURITY.md +0 -0
  137. {rgpot-2.4.0 → rgpot-2.4.2}/branding/logo/rgpot_logo.webp +0 -0
  138. {rgpot-2.4.0 → rgpot-2.4.2}/branding/logo/rgpot_logo_dark.webp +0 -0
  139. {rgpot-2.4.0 → rgpot-2.4.2}/branding/logo/rgpot_logo_light.webp +0 -0
  140. {rgpot-2.4.0 → rgpot-2.4.2}/branding/logo/rgpot_notext.svg +0 -0
  141. {rgpot-2.4.0 → rgpot-2.4.2}/branding/logo/rgpot_notext_dark.webp +0 -0
  142. {rgpot-2.4.0 → rgpot-2.4.2}/branding/logo/rgpot_notext_light.webp +0 -0
  143. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/README.md +0 -0
  144. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/build.ncl +0 -0
  145. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/check-drift.sh +0 -0
  146. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/ci_doc_commenter.ncl +0 -0
  147. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/ci_docs.ncl +0 -0
  148. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/cosmo_potctl.ncl +0 -0
  149. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/docs_quality.ncl +0 -0
  150. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/export-plan.sh +0 -0
  151. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/format.sh +0 -0
  152. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/gen.sh +0 -0
  153. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/lib/pins.ncl +0 -0
  154. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/lib/steps.ncl +0 -0
  155. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/plan.ncl +0 -0
  156. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/potentials.ncl +0 -0
  157. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/prek.ncl +0 -0
  158. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/release.ncl +0 -0
  159. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/release_prepare.ncl +0 -0
  160. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/towncrier.ncl +0 -0
  161. {rgpot-2.4.0 → rgpot-2.4.2}/ci/gha/workflow.ncl +0 -0
  162. {rgpot-2.4.0 → rgpot-2.4.2}/codecov.yml +0 -0
  163. {rgpot-2.4.0 → rgpot-2.4.2}/cog.toml +0 -0
  164. {rgpot-2.4.0 → rgpot-2.4.2}/docs/export.el +0 -0
  165. {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/+metatomic-engine-dlopen.added.md +0 -0
  166. {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/+metatomic-strict-determinism.added.md +0 -0
  167. {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/+pip-metatomic-dlopen.added.md +0 -0
  168. {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/+pip-rpath-repair-hook.added.md +0 -0
  169. {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/.gitkeep +0 -0
  170. {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/47.added.md +0 -0
  171. {rgpot-2.4.0 → rgpot-2.4.2}/docs/newsfragments/README.md +0 -0
  172. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/_static/eon_min_landscape.png +0 -0
  173. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/_static/pes_double_well.png +0 -0
  174. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/changelog.org +0 -0
  175. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/code_of_conduct.org +0 -0
  176. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/contributing/developer/faq.org +0 -0
  177. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/contributing/developer/index.org +0 -0
  178. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/contributing/developer/release.org +0 -0
  179. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/contributing/developer/testing.org +0 -0
  180. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/contributing/index.org +0 -0
  181. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/howto/eindir-anneal.org +0 -0
  182. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/howto/eon-rgpot.org +0 -0
  183. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/howto/integration.org +0 -0
  184. {rgpot-2.4.0 → rgpot-2.4.2}/docs/orgmode/tutorials/molecular-global-optimization.org +0 -0
  185. {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/Doxyfile_base.cfg +0 -0
  186. {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/Doxyfile_potlib.cfg +0 -0
  187. {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_static/custom.css +0 -0
  188. {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_static/rgpot_logo_dark.webp +0 -0
  189. {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_static/rgpot_logo_light.webp +0 -0
  190. {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_static/rgpot_notext_dark.webp +0 -0
  191. {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_static/rgpot_notext_light.webp +0 -0
  192. {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_templates/partials/extra-head.html +0 -0
  193. {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/_templates/partials/site-foot.html +0 -0
  194. {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/conf.py +0 -0
  195. {rgpot-2.4.0 → rgpot-2.4.2}/docs/source/doxyrest-config.lua +0 -0
  196. {rgpot-2.4.0 → rgpot-2.4.2}/docs/style_guide.org +0 -0
  197. {rgpot-2.4.0 → rgpot-2.4.2}/include/rgpot/errors.hpp +0 -0
  198. {rgpot-2.4.0 → rgpot-2.4.2}/include/rgpot/potential.hpp +0 -0
  199. {rgpot-2.4.0 → rgpot-2.4.2}/include/rgpot/rgpot.hpp +0 -0
  200. {rgpot-2.4.0 → rgpot-2.4.2}/include/rgpot/rpc_client.hpp +0 -0
  201. {rgpot-2.4.0 → rgpot-2.4.2}/include/rgpot/types.hpp +0 -0
  202. {rgpot-2.4.0 → rgpot-2.4.2}/meson.build +0 -0
  203. {rgpot-2.4.0 → rgpot-2.4.2}/meson_options.txt +0 -0
  204. {rgpot-2.4.0 → rgpot-2.4.2}/pixi.lock +0 -0
  205. {rgpot-2.4.0 → rgpot-2.4.2}/pixi.toml +0 -0
  206. {rgpot-2.4.0 → rgpot-2.4.2}/potctl/Cargo.toml +0 -0
  207. {rgpot-2.4.0 → rgpot-2.4.2}/potctl/README.md +0 -0
  208. {rgpot-2.4.0 → rgpot-2.4.2}/potctl/cosmo/README.md +0 -0
  209. {rgpot-2.4.0 → rgpot-2.4.2}/potctl/cosmo/aarch64-unknown-linux-cosmo.json +0 -0
  210. {rgpot-2.4.0 → rgpot-2.4.2}/potctl/cosmo/x86_64-unknown-linux-cosmo.json +0 -0
  211. {rgpot-2.4.0 → rgpot-2.4.2}/potctl/src/ci.rs +0 -0
  212. {rgpot-2.4.0 → rgpot-2.4.2}/potctl/src/cosmo.rs +0 -0
  213. {rgpot-2.4.0 → rgpot-2.4.2}/potctl/src/cosmo_ld.rs +0 -0
  214. {rgpot-2.4.0 → rgpot-2.4.2}/potctl/src/lockstep.rs +0 -0
  215. {rgpot-2.4.0 → rgpot-2.4.2}/potctl/src/main.rs +0 -0
  216. {rgpot-2.4.0 → rgpot-2.4.2}/prek.toml +0 -0
  217. {rgpot-2.4.0 → rgpot-2.4.2}/python/bind/bind_module.cpp +0 -0
  218. {rgpot-2.4.0 → rgpot-2.4.2}/python/meson.build +0 -0
  219. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/Cargo.lock +0 -0
  220. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/Cargo.toml +0 -0
  221. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/README.md +0 -0
  222. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/README.org +0 -0
  223. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/build.rs +0 -0
  224. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/cbindgen.toml +0 -0
  225. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/include/rgpot.h +0 -0
  226. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/schema/Potentials.capnp +0 -0
  227. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/c_api/mod.rs +0 -0
  228. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/c_api/potential.rs +0 -0
  229. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/c_api/rpc.rs +0 -0
  230. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/c_api/types.rs +0 -0
  231. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/eindir.rs +0 -0
  232. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/lib.rs +0 -0
  233. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/potential.rs +0 -0
  234. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/rpc/client.rs +0 -0
  235. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/rpc/mod.rs +0 -0
  236. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/rpc/server.rs +0 -0
  237. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/status.rs +0 -0
  238. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/tensor.rs +0 -0
  239. {rgpot-2.4.0 → rgpot-2.4.2}/rgpot-core/src/types.rs +0 -0
  240. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/ase_anneal_compare.sh +0 -0
  241. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/check_codecov_config.sh +0 -0
  242. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/cpmd_inprocess_vs_subprocess_timing.sh +0 -0
  243. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/org_to_md.sh +0 -0
  244. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/patches/doxyrest/doxyrest.py +0 -0
  245. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/patches/doxyrest/enum_class_fix.patch +0 -0
  246. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/patches/doxyrest/readme.org +0 -0
  247. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/pes_double_well.sh +0 -0
  248. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/rgpot_build_wheel.sh +0 -0
  249. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/rgpot_finalize_wheel.sh +0 -0
  250. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/rgpot_inject_multi_abi_engines.sh +0 -0
  251. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/rgpot_repair_wheel.sh +0 -0
  252. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/run_coverage_cpp.sh +0 -0
  253. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/run_coverage_fortran.sh +0 -0
  254. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/run_coverage_python.sh +0 -0
  255. {rgpot-2.4.0 → rgpot-2.4.2}/scripts/run_coverage_rust.sh +0 -0
  256. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/eigen.wrap +0 -0
  257. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fmt.wrap +0 -0
  258. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/.gitignore +0 -0
  259. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/LICENSE +0 -0
  260. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/eam_dat.f90 +0 -0
  261. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/eam_isoc.f90 +0 -0
  262. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/eamroutines.f90 +0 -0
  263. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/main.f90 +0 -0
  264. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/meson.build +0 -0
  265. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/readme.md +0 -0
  266. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2/tmp.con +0 -0
  267. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/fortcuh2.wrap +0 -0
  268. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/packagefiles/fortcuh2/meson.build +0 -0
  269. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/potentials-schema.wrap +0 -0
  270. {rgpot-2.4.0 → rgpot-2.4.2}/subprojects/xxhash.wrap +0 -0
  271. {rgpot-2.4.0 → rgpot-2.4.2}/tests/ase_vs_anneal.py +0 -0
  272. {rgpot-2.4.0 → rgpot-2.4.2}/tests/con_relax_demo.py +0 -0
  273. {rgpot-2.4.0 → rgpot-2.4.2}/tests/cpmd_params.py +0 -0
  274. {rgpot-2.4.0 → rgpot-2.4.2}/tests/eon_min_landscape.py +0 -0
  275. {rgpot-2.4.0 → rgpot-2.4.2}/tests/nwchem_params.py +0 -0
  276. {rgpot-2.4.0 → rgpot-2.4.2}/tests/pes_double_well.py +0 -0
  277. {rgpot-2.4.0 → rgpot-2.4.2}/tests/rpc_integ.py +0 -0
  278. {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_cpmd_params.py +0 -0
  279. {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_nwchem_params.py +0 -0
  280. {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_rgpot_metatomic_dlopen.py +0 -0
  281. {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_rgpot_pip_core.py +0 -0
  282. {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_rpc_e2e_c_abi.py +0 -0
  283. {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_rpc_integ_cpmd.py +0 -0
  284. {rgpot-2.4.0 → rgpot-2.4.2}/tests/test_rpc_integ_nwchem.py +0 -0
  285. {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.0
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.3; extra == "metatomic"
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:&lt;model_path&gt;</code></td>
139
- <td class="org-left">Enable with <code>-Dwith_metatomic=true</code>; use pixi env <code>metatomicbld</code></td>
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:&lt;model_path&gt;</code></td>
104
- <td class="org-left">Enable with <code>-Dwith_metatomic=true</code>; use pixi env <code>metatomicbld</code></td>
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 every torch major shipped by metatomic-torch
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.
@@ -0,0 +1,3 @@
1
+ Python package `rgpot` is pip-installable: core Lennard-Jones bindings via
2
+ meson-python wheels (`import rgpot; rgpot.evaluate_lj(...)`), plus optional
3
+ Metatomic multi-ABI engines for **torch 2.7+**.
@@ -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
- - [[file:../reference/architecture.org][Architecture overview]] for the layer
82
- diagram and design rationale
83
- - [[file:../howto/integration.org][Integration guide]] for embedding rgpot into
84
- external projects (e.g. eOn)
85
- - [[file:../howto/embedding.org][Embedding as a subproject]] for using rgpot as a
86
- meson/cmake dependency
87
- - [[file:../changelog.org][Changelog]] for release history
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.0"
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.3",
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
- "torch>=2.3",
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 every torch major metatomic ships.
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 an old major, downloads a manylinux wheel for cp312 and
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" - <<'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
- print(" ".join(sorted(d.name.removeprefix("torch-") for d in p.glob("torch-*") if d.is_dir())))
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