MDescriptor 0.2.2__tar.gz → 0.2.3__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 (351) hide show
  1. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/PKG-INFO +84 -9
  2. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/README.md +57 -3
  3. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/common/control.cpp +5 -0
  4. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/common/nep.cpp +15 -0
  5. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/ace.cpp +1 -0
  6. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/mtp.cpp +3 -0
  7. mdescriptor-0.2.3/docs/descriptor-inventory.md +110 -0
  8. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/pyproject.toml +28 -3
  9. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/scripts/check_descriptor_inventory.py +37 -6
  10. mdescriptor-0.2.3/src/mdescriptor/__init__.py +89 -0
  11. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/_version.py +3 -3
  12. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/core/adapter.py +314 -100
  13. mdescriptor-0.2.3/src/mdescriptor/core/control.py +88 -0
  14. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/core/descriptor.py +38 -4
  15. mdescriptor-0.2.3/src/mdescriptor/core/errors.py +108 -0
  16. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/core/input.py +64 -8
  17. mdescriptor-0.2.3/src/mdescriptor/core/json_value.py +112 -0
  18. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/core/model_adapter.py +62 -29
  19. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/core/options.py +3 -27
  20. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/core/result.py +202 -32
  21. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/core/species.py +30 -10
  22. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/_kernels/ace.py +104 -27
  23. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/_kernels/c00ps_mlff.py +1 -1
  24. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/_kernels/core.py +23 -4
  25. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/_kernels/extra.py +9 -3
  26. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/_kernels/mtp.py +7 -1
  27. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/_kernels/soap_turbo.py +43 -4
  28. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/models/__init__.py +15 -15
  29. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/models/resource.py +2 -0
  30. mdescriptor-0.2.3/src/mdescriptor/registry/__init__.py +211 -0
  31. mdescriptor-0.2.3/src/mdescriptor/registry/builtins.py +653 -0
  32. mdescriptor-0.2.3/src/mdescriptor/registry/info.py +581 -0
  33. mdescriptor-0.2.3/src/mdescriptor/registry/model_defaults.py +41 -0
  34. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/registry/spec.py +5 -0
  35. mdescriptor-0.2.3/tests/contracts/test_descriptor_info.py +383 -0
  36. mdescriptor-0.2.3/tests/contracts/test_input_schema.py +48 -0
  37. mdescriptor-0.2.3/tests/contracts/test_public_api.py +472 -0
  38. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/contracts/test_result_schema.py +41 -1
  39. mdescriptor-0.2.3/tests/external_reference/__init__.py +1 -0
  40. mdescriptor-0.2.3/tests/external_reference/test_deepmd.py +113 -0
  41. mdescriptor-0.2.3/tests/external_reference/test_dscribe.py +289 -0
  42. mdescriptor-0.2.3/tests/external_reference/test_featomic.py +356 -0
  43. mdescriptor-0.2.3/tests/external_reference/test_nep_adapters.py +45 -0
  44. mdescriptor-0.2.3/tests/external_reference/test_pyxtalff.py +144 -0
  45. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/dpa4/manifest.json +10 -0
  46. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/dpa4c/manifest.json +10 -0
  47. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/ewaldsummatrix/manifest.json +2 -2
  48. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/nep/manifest.json +10 -0
  49. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/sinematrix/manifest.json +1 -1
  50. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_ace.py +30 -1
  51. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_all_descriptors.py +0 -86
  52. mdescriptor-0.2.3/tests/test_soap_acsf_advanced.py +40 -0
  53. mdescriptor-0.2.2/docs/descriptor-cpp-plan.md +0 -75
  54. mdescriptor-0.2.2/docs/descriptor-inventory.md +0 -93
  55. mdescriptor-0.2.2/docs/ecosystem-comparison.md +0 -90
  56. mdescriptor-0.2.2/docs/file-inventory.md +0 -276
  57. mdescriptor-0.2.2/docs/plan.md +0 -60
  58. mdescriptor-0.2.2/docs/real-data-benchmark.md +0 -70
  59. mdescriptor-0.2.2/src/mdescriptor/__init__.py +0 -53
  60. mdescriptor-0.2.2/src/mdescriptor/core/control.py +0 -34
  61. mdescriptor-0.2.2/src/mdescriptor/core/errors.py +0 -38
  62. mdescriptor-0.2.2/src/mdescriptor/registry/__init__.py +0 -68
  63. mdescriptor-0.2.2/src/mdescriptor/registry/builtins.py +0 -50
  64. mdescriptor-0.2.2/tests/contracts/test_public_api.py +0 -208
  65. mdescriptor-0.2.2/tests/reference/test_dscribe_reference.py +0 -153
  66. mdescriptor-0.2.2/tests/test_soap_acsf_advanced.py +0 -114
  67. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/CMakeLists.txt +0 -0
  68. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/LICENSE +0 -0
  69. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/ace.hpp +0 -0
  70. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/descriptor.hpp +0 -0
  71. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/detail/batch.hpp +0 -0
  72. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/detail/blas.hpp +0 -0
  73. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/detail/control.hpp +0 -0
  74. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/detail/math3.hpp +0 -0
  75. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/detail/species.hpp +0 -0
  76. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/dpa4.hpp +0 -0
  77. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/dpa4_wigner.hpp +0 -0
  78. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/dpa4c.hpp +0 -0
  79. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/extra.hpp +0 -0
  80. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/local_descriptors.hpp +0 -0
  81. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/mtp4.hpp +0 -0
  82. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/mtp_cinf_coeffs.hpp +0 -0
  83. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/neighbor.hpp +0 -0
  84. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/include/mdescriptor/nep.hpp +0 -0
  85. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/bindings/module.cpp +0 -0
  86. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/common/descriptor_common.hpp +0 -0
  87. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/common/extra_common.hpp +0 -0
  88. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/common/local_common.hpp +0 -0
  89. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/common/local_spherical_common.hpp +0 -0
  90. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/common/matrix_common.hpp +0 -0
  91. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/common/neighbor.cpp +0 -0
  92. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/model_backed/dpa4.cpp +0 -0
  93. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/model_backed/dpa4_wigner.cpp +0 -0
  94. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/model_backed/dpa4c.cpp +0 -0
  95. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/acsf.cpp +0 -0
  96. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/atomic_composition.cpp +0 -0
  97. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/c00ps_mlff.cpp +0 -0
  98. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/coulomb_matrix.cpp +0 -0
  99. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/ead.cpp +0 -0
  100. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/ewald_sum_matrix.cpp +0 -0
  101. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/matrix_dispatch.cpp +0 -0
  102. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/mbtr.cpp +0 -0
  103. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/mtp4.cpp +0 -0
  104. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/neighbor_list.cpp +0 -0
  105. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/rotational_descriptors.cpp +0 -0
  106. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/sine_matrix.cpp +0 -0
  107. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/soap.cpp +0 -0
  108. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/soap_turbo.cpp +0 -0
  109. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/sorted_distances.cpp +0 -0
  110. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/spherical_expansion.cpp +0 -0
  111. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/cpp/src/standalone/spherical_expansion_by_pair.cpp +0 -0
  112. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/scripts/benchmark_dpa_native.py +0 -0
  113. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/scripts/benchmarking/__init__.py +0 -0
  114. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/scripts/benchmarking/benchmark_openmp_small.py +0 -0
  115. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/scripts/benchmarking/run_descriptor_benchmark.py +0 -0
  116. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/scripts/build_reference_wheel.py +0 -0
  117. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/scripts/descriptor_reference.py +0 -0
  118. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/scripts/generate_descriptor_goldens.py +0 -0
  119. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/scripts/promote_descriptor_golden.py +0 -0
  120. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/scripts/run_benchmark.py +0 -0
  121. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/scripts/verify_wheel.py +0 -0
  122. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/_native.py +0 -0
  123. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/_native.pyi +0 -0
  124. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/core/__init__.py +0 -0
  125. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/__init__.py +0 -0
  126. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/_kernels/__init__.py +0 -0
  127. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/_kernels/dpa4.py +0 -0
  128. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/_kernels/dpa4c.py +0 -0
  129. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/_kernels/local.py +0 -0
  130. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/_kernels/nep.py +0 -0
  131. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/_kernels/rotational.py +0 -0
  132. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/__init__.py +0 -0
  133. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/LICENSE-LGPL-3.0-or-later.txt +0 -0
  134. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/NOTICE.md +0 -0
  135. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/__init__.py +0 -0
  136. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/__init__.py +0 -0
  137. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/api.py +0 -0
  138. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/common.py +0 -0
  139. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/__init__.py +0 -0
  140. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/array_api.py +0 -0
  141. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/common.py +0 -0
  142. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/__init__.py +0 -0
  143. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/base_descriptor.py +0 -0
  144. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4.py +0 -0
  145. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/__init__.py +0 -0
  146. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/activation.py +0 -0
  147. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/attention.py +0 -0
  148. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/attn_res.py +0 -0
  149. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/block.py +0 -0
  150. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/cartesian.py +0 -0
  151. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/edge_cache.py +0 -0
  152. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/embedding.py +0 -0
  153. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/ffn.py +0 -0
  154. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/grid_net.py +0 -0
  155. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/indexing.py +0 -0
  156. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/mlp.py +0 -0
  157. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/norm.py +0 -0
  158. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/projection.py +0 -0
  159. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/radial.py +0 -0
  160. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/so2.py +0 -0
  161. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/so3.py +0 -0
  162. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/utils.py +0 -0
  163. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/wignerd.py +0 -0
  164. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c.py +0 -0
  165. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/__init__.py +0 -0
  166. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/bispectrum.py +0 -0
  167. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/charge_state.py +0 -0
  168. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/geometry.py +0 -0
  169. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/pair_film.py +0 -0
  170. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/readout.py +0 -0
  171. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/spin.py +0 -0
  172. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/make_base_descriptor.py +0 -0
  173. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/__init__.py +0 -0
  174. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/env_mat.py +0 -0
  175. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/exclude_mask.py +0 -0
  176. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/lebedev.py +0 -0
  177. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/lebedev_rules.npz +0 -0
  178. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/__init__.py +0 -0
  179. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/builder.py +0 -0
  180. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/csr.py +0 -0
  181. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/from_ijs.py +0 -0
  182. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/graph.py +0 -0
  183. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/pairs.py +0 -0
  184. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/segment.py +0 -0
  185. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/network.py +0 -0
  186. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/nlist.py +0 -0
  187. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/region.py +0 -0
  188. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/safe_gradient.py +0 -0
  189. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/seed.py +0 -0
  190. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/spherical_harmonics.py +0 -0
  191. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/type_embed.py +0 -0
  192. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/env.py +0 -0
  193. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/utils/__init__.py +0 -0
  194. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/utils/charge_state.py +0 -0
  195. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/utils/plugin.py +0 -0
  196. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/utils/version.py +0 -0
  197. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/weights.py +0 -0
  198. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/dpa.py +0 -0
  199. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/dpa4/__init__.py +0 -0
  200. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/dpa4/descriptor.py +0 -0
  201. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/dpa4c/__init__.py +0 -0
  202. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/dpa4c/descriptor.py +0 -0
  203. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/graph.py +0 -0
  204. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/nep/__init__.py +0 -0
  205. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/model_backed/nep/descriptor.py +0 -0
  206. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/standalone/__init__.py +0 -0
  207. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/standalone/ace.py +0 -0
  208. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/standalone/acsf.py +0 -0
  209. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/standalone/c00ps_mlff.py +0 -0
  210. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/standalone/local/__init__.py +0 -0
  211. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/standalone/many_body/__init__.py +0 -0
  212. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/standalone/matrices/__init__.py +0 -0
  213. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/standalone/mtp.py +0 -0
  214. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/standalone/rotational/__init__.py +0 -0
  215. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/standalone/soap.py +0 -0
  216. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/descriptors/standalone/soap_turbo.py +0 -0
  217. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/models/assets/DPA4-Air-OMat24-v20260704.pt +0 -0
  218. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/models/assets/DPA4C-Air-OMat24-v20260819.pt +0 -0
  219. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/models/assets/nep89_20250409.txt +0 -0
  220. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/models/resolver.py +0 -0
  221. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/models/session.py +0 -0
  222. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/src/mdescriptor/registry/registry.py +0 -0
  223. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/__init__.py +0 -0
  224. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/_golden.py +0 -0
  225. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/_public.py +0 -0
  226. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/contracts/test_capabilities.py +0 -0
  227. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/contracts/test_model_resources.py +0 -0
  228. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/data/mlip4_test_mtp.json +0 -0
  229. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/ace/expected_output.npz +0 -0
  230. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/ace/input.npz +0 -0
  231. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/ace/manifest.json +0 -0
  232. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/acsf/expected_output.npz +0 -0
  233. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/acsf/input.npz +0 -0
  234. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/acsf/manifest.json +0 -0
  235. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/atomiccomposition/expected_output.npz +0 -0
  236. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/atomiccomposition/input.npz +0 -0
  237. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/atomiccomposition/manifest.json +0 -0
  238. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/c00psmlff/expected_output.npz +0 -0
  239. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/c00psmlff/input.npz +0 -0
  240. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/c00psmlff/manifest.json +0 -0
  241. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/coulombmatrix/expected_output.npz +0 -0
  242. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/coulombmatrix/input.npz +0 -0
  243. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/coulombmatrix/manifest.json +0 -0
  244. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/dpa4/expected_output.npz +0 -0
  245. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/dpa4/input.npz +0 -0
  246. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/dpa4c/expected_output.npz +0 -0
  247. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/dpa4c/input.npz +0 -0
  248. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/ead/expected_output.npz +0 -0
  249. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/ead/input.npz +0 -0
  250. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/ead/manifest.json +0 -0
  251. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/ewaldsummatrix/expected_output.npz +0 -0
  252. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/ewaldsummatrix/input.npz +0 -0
  253. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/lbispectrum/expected_output.npz +0 -0
  254. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/lbispectrum/input.npz +0 -0
  255. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/lbispectrum/manifest.json +0 -0
  256. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/lmbtr/expected_output.npz +0 -0
  257. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/lmbtr/input.npz +0 -0
  258. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/lmbtr/manifest.json +0 -0
  259. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/lodesphericalexpansion/expected_output.npz +0 -0
  260. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/lodesphericalexpansion/input.npz +0 -0
  261. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/lodesphericalexpansion/manifest.json +0 -0
  262. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/mbtr/expected_output.npz +0 -0
  263. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/mbtr/input.npz +0 -0
  264. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/mbtr/manifest.json +0 -0
  265. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/mtp/expected_output.npz +0 -0
  266. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/mtp/input.npz +0 -0
  267. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/mtp/manifest.json +0 -0
  268. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/neighborlist/expected_output.npz +0 -0
  269. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/neighborlist/input.npz +0 -0
  270. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/neighborlist/manifest.json +0 -0
  271. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/nep/expected_output.npz +0 -0
  272. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/nep/input.npz +0 -0
  273. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/sinematrix/expected_output.npz +0 -0
  274. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/sinematrix/input.npz +0 -0
  275. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/snap/expected_output.npz +0 -0
  276. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/snap/input.npz +0 -0
  277. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/snap/manifest.json +0 -0
  278. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/so3/expected_output.npz +0 -0
  279. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/so3/input.npz +0 -0
  280. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/so3/manifest.json +0 -0
  281. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/so4/expected_output.npz +0 -0
  282. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/so4/input.npz +0 -0
  283. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/so4/manifest.json +0 -0
  284. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/soap/expected_output.npz +0 -0
  285. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/soap/input.npz +0 -0
  286. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/soap/manifest.json +0 -0
  287. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/soappowerspectrum/expected_output.npz +0 -0
  288. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/soappowerspectrum/input.npz +0 -0
  289. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/soappowerspectrum/manifest.json +0 -0
  290. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/soapradialspectrum/expected_output.npz +0 -0
  291. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/soapradialspectrum/input.npz +0 -0
  292. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/soapradialspectrum/manifest.json +0 -0
  293. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/soapturbo/expected_output.npz +0 -0
  294. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/soapturbo/input.npz +0 -0
  295. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/soapturbo/manifest.json +0 -0
  296. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/sorteddistances/expected_output.npz +0 -0
  297. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/sorteddistances/input.npz +0 -0
  298. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/sorteddistances/manifest.json +0 -0
  299. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/sphericalexpansion/expected_output.npz +0 -0
  300. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/sphericalexpansion/input.npz +0 -0
  301. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/sphericalexpansion/manifest.json +0 -0
  302. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/sphericalexpansionbypair/expected_output.npz +0 -0
  303. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/sphericalexpansionbypair/input.npz +0 -0
  304. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/sphericalexpansionbypair/manifest.json +0 -0
  305. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/valleoganov/expected_output.npz +0 -0
  306. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/valleoganov/input.npz +0 -0
  307. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/golden/valleoganov/manifest.json +0 -0
  308. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_ace_golden.py +0 -0
  309. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_acsf_golden.py +0 -0
  310. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_atomiccomposition_golden.py +0 -0
  311. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_c00ps_mlff.py +0 -0
  312. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_c00psmlff_golden.py +0 -0
  313. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_coulombmatrix_golden.py +0 -0
  314. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_coulombmatrix_openmp.py +0 -0
  315. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_descriptor_symmetry.py +0 -0
  316. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_dpa4.py +0 -0
  317. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_dpa4_golden.py +0 -0
  318. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_dpa4c.py +0 -0
  319. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_dpa4c_golden.py +0 -0
  320. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_ead_golden.py +0 -0
  321. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_ewaldsummatrix_golden.py +0 -0
  322. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_ewaldsummatrix_openmp.py +0 -0
  323. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_golden_independence.py +0 -0
  324. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_lbispectrum_golden.py +0 -0
  325. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_lmbtr_golden.py +0 -0
  326. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_lmbtr_openmp.py +0 -0
  327. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_lodesphericalexpansion_golden.py +0 -0
  328. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_mbtr_golden.py +0 -0
  329. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_mtp.py +0 -0
  330. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_mtp_golden.py +0 -0
  331. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_neighbor_graph.py +0 -0
  332. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_neighborlist_golden.py +0 -0
  333. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_nep.py +0 -0
  334. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_nep_golden.py +0 -0
  335. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_nonperiodic.py +0 -0
  336. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_openmp_support.py +0 -0
  337. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_reference.py +0 -0
  338. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_sinematrix_golden.py +0 -0
  339. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_sinematrix_openmp.py +0 -0
  340. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_snap_golden.py +0 -0
  341. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_so3_golden.py +0 -0
  342. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_so4_golden.py +0 -0
  343. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_soap_golden.py +0 -0
  344. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_soappowerspectrum_golden.py +0 -0
  345. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_soapradialspectrum_golden.py +0 -0
  346. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_soapturbo_golden.py +0 -0
  347. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_sorteddistances_golden.py +0 -0
  348. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_sphericalexpansion_golden.py +0 -0
  349. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_sphericalexpansionbypair_golden.py +0 -0
  350. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_valleoganov_golden.py +0 -0
  351. {mdescriptor-0.2.2 → mdescriptor-0.2.3}/tests/test_valleoganov_openmp.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: MDescriptor
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: Batch-oriented periodic atomic descriptors with C++17 kernels
5
5
  License: GNU GENERAL PUBLIC LICENSE
6
6
  Version 3, 29 June 2007
@@ -689,11 +689,32 @@ Provides-Extra: test
689
689
  Requires-Dist: pytest>=8; extra == "test"
690
690
  Requires-Dist: ase>=3.22; extra == "test"
691
691
  Requires-Dist: scipy>=1.11; extra == "test"
692
- Provides-Extra: reference
693
- Requires-Dist: pytest>=8; extra == "reference"
694
- Requires-Dist: ase==3.26.0; extra == "reference"
695
- Requires-Dist: scipy>=1.11; extra == "reference"
696
- Requires-Dist: dscribe==2.1.2; extra == "reference"
692
+ Provides-Extra: reference-dscribe
693
+ Requires-Dist: pytest>=8; extra == "reference-dscribe"
694
+ Requires-Dist: ase==3.26.0; extra == "reference-dscribe"
695
+ Requires-Dist: scipy>=1.11; extra == "reference-dscribe"
696
+ Requires-Dist: dscribe==2.1.2; extra == "reference-dscribe"
697
+ Provides-Extra: reference-featomic
698
+ Requires-Dist: pytest>=8; extra == "reference-featomic"
699
+ Requires-Dist: ase==3.26.0; extra == "reference-featomic"
700
+ Requires-Dist: scipy>=1.11; extra == "reference-featomic"
701
+ Requires-Dist: featomic==0.6.6; extra == "reference-featomic"
702
+ Provides-Extra: reference-pyxtalff
703
+ Requires-Dist: pytest>=8; extra == "reference-pyxtalff"
704
+ Requires-Dist: ase==3.26.0; extra == "reference-pyxtalff"
705
+ Requires-Dist: scipy>=1.11; extra == "reference-pyxtalff"
706
+ Requires-Dist: numba>=0.50.1; extra == "reference-pyxtalff"
707
+ Requires-Dist: pyxtal_ff==0.2.3; extra == "reference-pyxtalff"
708
+ Provides-Extra: reference-deepmd
709
+ Requires-Dist: pytest>=8; extra == "reference-deepmd"
710
+ Requires-Dist: ase==3.26.0; extra == "reference-deepmd"
711
+ Requires-Dist: scipy>=1.11; extra == "reference-deepmd"
712
+ Requires-Dist: deepmd-kit[torch]==3.2.0; extra == "reference-deepmd"
713
+ Provides-Extra: reference-nepadapters
714
+ Requires-Dist: pytest>=8; extra == "reference-nepadapters"
715
+ Requires-Dist: ase==3.26.0; extra == "reference-nepadapters"
716
+ Requires-Dist: scipy>=1.11; extra == "reference-nepadapters"
717
+ Requires-Dist: nep-adapters==1.0.2; extra == "reference-nepadapters"
697
718
  Provides-Extra: all
698
719
  Requires-Dist: ase>=3.22; extra == "all"
699
720
  Requires-Dist: scipy>=1.11; extra == "all"
@@ -796,7 +817,8 @@ batch = StructureBatch(
796
817
  )
797
818
  ```
798
819
 
799
- `StructureBatch` validates contiguous arrays, finite positions/cells,
820
+ `StructureBatch` takes an owned, read-only snapshot of its contiguous arrays
821
+ and validates integer fields before narrowing, finite positions/cells,
800
822
  nonsingular cells, positive atomic numbers, monotonic offsets and fully
801
823
  periodic `pbc == (1, 1, 1)`. ASE conversion is available through
802
824
  `StructureBatch.from_ase(...)`.
@@ -841,7 +863,51 @@ Instances are synchronous and not promised to be thread-safe.
841
863
  `structure_ids`, row offsets, stable `labels`, JSON-safe `metadata`, per-row
842
864
  `samples`, and `feature_count`. The descriptor itself also retains the latest
843
865
  JSON-safe `metadata` and its `configuration` after `close()`. The standard shapes are `(N, F)`, `(S, F)`,
844
- and `(P, F)` for atom, structure and pair outputs respectively.
866
+ and `(P, F)` for atom, structure and pair outputs respectively. Result arrays
867
+ are owned snapshots and exposed read-only.
868
+
869
+ ## Supported descriptors / 支持的描述符
870
+
871
+ The built-in registry currently provides 28 descriptors. `None` means no model
872
+ file is needed; `Optional` means a model can be supplied (as with MTP); and
873
+ `Required` means the descriptor always resolves a local model resource. See
874
+ the [full descriptor inventory](docs/descriptor-inventory.md) for parameters,
875
+ capabilities and backend details.
876
+
877
+ 内置注册表目前提供 28 个描述符。`None` 表示不需要模型文件;`Optional` 表示
878
+ 可以提供模型(例如 MTP);`Required` 表示描述符始终解析本地模型资源。参数、
879
+ 能力和后端详情请参阅[完整描述符清单](docs/descriptor-inventory.md)。
880
+
881
+ | Descriptor / 描述符 | Category / 类型 | Output / 输出 | Model / 模型 |
882
+ |---|---|---|---|
883
+ | `SOAP` | Local / 局部 | Structure / 结构 | `None` |
884
+ | `SOAPTurbo` | Local / 局部 | Atom / 原子 | `None` |
885
+ | `ACSF` | Local / 局部 | Atom / 原子 | `None` |
886
+ | `ACE` | Local / 局部 | Atom / 原子 | `None` |
887
+ | `CoulombMatrix` | Matrix / 矩阵 | Structure / 结构 | `None` |
888
+ | `SineMatrix` | Matrix / 矩阵 | Structure / 结构 | `None` |
889
+ | `EwaldSumMatrix` | Matrix / 矩阵 | Structure / 结构 | `None` |
890
+ | `MBTR` | Many-body / 多体 | Structure / 结构 | `None` |
891
+ | `LMBTR` | Many-body / 多体 | Atom / 原子 | `None` |
892
+ | `ValleOganov` | Many-body / 多体 | Structure / 结构 | `None` |
893
+ | `AtomicComposition` | Local / 局部 | Structure / 结构 | `None` |
894
+ | `NeighborList` | Local / 局部 | Pair / 原子对 | `None` |
895
+ | `SortedDistances` | Local / 局部 | Atom / 原子 | `None` |
896
+ | `SphericalExpansion` | Local / 局部 | Atom / 原子 | `None` |
897
+ | `SphericalExpansionByPair` | Local / 局部 | Pair / 原子对 | `None` |
898
+ | `SoapRadialSpectrum` | Local / 局部 | Atom / 原子 | `None` |
899
+ | `SoapPowerSpectrum` | Local / 局部 | Atom / 原子 | `None` |
900
+ | `LodeSphericalExpansion` | Local / 局部 | Atom / 原子 | `None` |
901
+ | `EAD` | Rotational / 旋转 | Atom / 原子 | `None` |
902
+ | `SO3` | Rotational / 旋转 | Atom / 原子 | `None` |
903
+ | `SO4` | Rotational / 旋转 | Atom / 原子 | `None` |
904
+ | `SNAP` | Rotational / 旋转 | Atom / 原子 | `None` |
905
+ | `LBispectrum` | Rotational / 旋转 | Atom / 原子 | `None` |
906
+ | `MTP` | Local / 局部 | Atom / 原子 | `Optional` |
907
+ | `C00PSMLFF` | Local / 局部 | Atom / 原子 | `None` |
908
+ | `NEP` | Model-backed / 模型 | Atom / 原子 | `Required` |
909
+ | `DPA4` | Model-backed / 模型 | Atom / 原子 | `Required` |
910
+ | `DPA4C` | Model-backed / 模型 | Atom / 原子 | `Required` |
845
911
 
846
912
  ## Registry / 注册表
847
913
 
@@ -853,6 +919,8 @@ import mdescriptor
853
919
  from mdescriptor.descriptors import SOAP
854
920
 
855
921
  print(mdescriptor.list_descriptors())
922
+ metadata = mdescriptor.describe_descriptor("SOAP")
923
+ runtime = mdescriptor.get_runtime_info()
856
924
  soap = SOAP(species=[1, 8], r_cut=4.5, n_max=2, l_max=2)
857
925
  rebuilt = mdescriptor.create_descriptor(soap.configuration)
858
926
 
@@ -863,7 +931,10 @@ child.register(my_spec)
863
931
  The built-in list separates `AssetPolicy.NONE`, `OPTIONAL` (for example MTP
864
932
  potentials), and `REQUIRED` (NEP/DPA4/DPA4C). The root package exposes stable
865
933
  contracts, registry functions and errors only; algorithm implementations are
866
- not re-exported from the root.
934
+ not re-exported from the root. `describe_descriptor(name)` reads static,
935
+ JSON-safe GUI metadata from the registry without constructing a descriptor or
936
+ resolving a model. `get_runtime_info()` reports the package and contract
937
+ schema versions, including `result_schema_version`.
867
938
 
868
939
  ## Model resources / 模型资源
869
940
 
@@ -882,6 +953,10 @@ dpa4 = DPA4(
882
953
  result = dpa4.compute(batch)
883
954
  ```
884
955
 
956
+ For GUI configuration JSON, a model parameter may be an explicit path string
957
+ or the tagged object returned by `ModelResource.to_dict()`; the latter is used
958
+ for named/checksummed resources.
959
+
885
960
  The DPA4/DPA4C checkpoint readers and NumPy reference path remain isolated
886
961
  vendor adapters. The default inference graphs are lowered into the private
887
962
  `mdescriptor._native` C++17/OpenMP extension.
@@ -89,7 +89,8 @@ batch = StructureBatch(
89
89
  )
90
90
  ```
91
91
 
92
- `StructureBatch` validates contiguous arrays, finite positions/cells,
92
+ `StructureBatch` takes an owned, read-only snapshot of its contiguous arrays
93
+ and validates integer fields before narrowing, finite positions/cells,
93
94
  nonsingular cells, positive atomic numbers, monotonic offsets and fully
94
95
  periodic `pbc == (1, 1, 1)`. ASE conversion is available through
95
96
  `StructureBatch.from_ase(...)`.
@@ -134,7 +135,51 @@ Instances are synchronous and not promised to be thread-safe.
134
135
  `structure_ids`, row offsets, stable `labels`, JSON-safe `metadata`, per-row
135
136
  `samples`, and `feature_count`. The descriptor itself also retains the latest
136
137
  JSON-safe `metadata` and its `configuration` after `close()`. The standard shapes are `(N, F)`, `(S, F)`,
137
- and `(P, F)` for atom, structure and pair outputs respectively.
138
+ and `(P, F)` for atom, structure and pair outputs respectively. Result arrays
139
+ are owned snapshots and exposed read-only.
140
+
141
+ ## Supported descriptors / 支持的描述符
142
+
143
+ The built-in registry currently provides 28 descriptors. `None` means no model
144
+ file is needed; `Optional` means a model can be supplied (as with MTP); and
145
+ `Required` means the descriptor always resolves a local model resource. See
146
+ the [full descriptor inventory](docs/descriptor-inventory.md) for parameters,
147
+ capabilities and backend details.
148
+
149
+ 内置注册表目前提供 28 个描述符。`None` 表示不需要模型文件;`Optional` 表示
150
+ 可以提供模型(例如 MTP);`Required` 表示描述符始终解析本地模型资源。参数、
151
+ 能力和后端详情请参阅[完整描述符清单](docs/descriptor-inventory.md)。
152
+
153
+ | Descriptor / 描述符 | Category / 类型 | Output / 输出 | Model / 模型 |
154
+ |---|---|---|---|
155
+ | `SOAP` | Local / 局部 | Structure / 结构 | `None` |
156
+ | `SOAPTurbo` | Local / 局部 | Atom / 原子 | `None` |
157
+ | `ACSF` | Local / 局部 | Atom / 原子 | `None` |
158
+ | `ACE` | Local / 局部 | Atom / 原子 | `None` |
159
+ | `CoulombMatrix` | Matrix / 矩阵 | Structure / 结构 | `None` |
160
+ | `SineMatrix` | Matrix / 矩阵 | Structure / 结构 | `None` |
161
+ | `EwaldSumMatrix` | Matrix / 矩阵 | Structure / 结构 | `None` |
162
+ | `MBTR` | Many-body / 多体 | Structure / 结构 | `None` |
163
+ | `LMBTR` | Many-body / 多体 | Atom / 原子 | `None` |
164
+ | `ValleOganov` | Many-body / 多体 | Structure / 结构 | `None` |
165
+ | `AtomicComposition` | Local / 局部 | Structure / 结构 | `None` |
166
+ | `NeighborList` | Local / 局部 | Pair / 原子对 | `None` |
167
+ | `SortedDistances` | Local / 局部 | Atom / 原子 | `None` |
168
+ | `SphericalExpansion` | Local / 局部 | Atom / 原子 | `None` |
169
+ | `SphericalExpansionByPair` | Local / 局部 | Pair / 原子对 | `None` |
170
+ | `SoapRadialSpectrum` | Local / 局部 | Atom / 原子 | `None` |
171
+ | `SoapPowerSpectrum` | Local / 局部 | Atom / 原子 | `None` |
172
+ | `LodeSphericalExpansion` | Local / 局部 | Atom / 原子 | `None` |
173
+ | `EAD` | Rotational / 旋转 | Atom / 原子 | `None` |
174
+ | `SO3` | Rotational / 旋转 | Atom / 原子 | `None` |
175
+ | `SO4` | Rotational / 旋转 | Atom / 原子 | `None` |
176
+ | `SNAP` | Rotational / 旋转 | Atom / 原子 | `None` |
177
+ | `LBispectrum` | Rotational / 旋转 | Atom / 原子 | `None` |
178
+ | `MTP` | Local / 局部 | Atom / 原子 | `Optional` |
179
+ | `C00PSMLFF` | Local / 局部 | Atom / 原子 | `None` |
180
+ | `NEP` | Model-backed / 模型 | Atom / 原子 | `Required` |
181
+ | `DPA4` | Model-backed / 模型 | Atom / 原子 | `Required` |
182
+ | `DPA4C` | Model-backed / 模型 | Atom / 原子 | `Required` |
138
183
 
139
184
  ## Registry / 注册表
140
185
 
@@ -146,6 +191,8 @@ import mdescriptor
146
191
  from mdescriptor.descriptors import SOAP
147
192
 
148
193
  print(mdescriptor.list_descriptors())
194
+ metadata = mdescriptor.describe_descriptor("SOAP")
195
+ runtime = mdescriptor.get_runtime_info()
149
196
  soap = SOAP(species=[1, 8], r_cut=4.5, n_max=2, l_max=2)
150
197
  rebuilt = mdescriptor.create_descriptor(soap.configuration)
151
198
 
@@ -156,7 +203,10 @@ child.register(my_spec)
156
203
  The built-in list separates `AssetPolicy.NONE`, `OPTIONAL` (for example MTP
157
204
  potentials), and `REQUIRED` (NEP/DPA4/DPA4C). The root package exposes stable
158
205
  contracts, registry functions and errors only; algorithm implementations are
159
- not re-exported from the root.
206
+ not re-exported from the root. `describe_descriptor(name)` reads static,
207
+ JSON-safe GUI metadata from the registry without constructing a descriptor or
208
+ resolving a model. `get_runtime_info()` reports the package and contract
209
+ schema versions, including `result_schema_version`.
160
210
 
161
211
  ## Model resources / 模型资源
162
212
 
@@ -175,6 +225,10 @@ dpa4 = DPA4(
175
225
  result = dpa4.compute(batch)
176
226
  ```
177
227
 
228
+ For GUI configuration JSON, a model parameter may be an explicit path string
229
+ or the tagged object returned by `ModelResource.to_dict()`; the latter is used
230
+ for named/checksummed resources.
231
+
178
232
  The DPA4/DPA4C checkpoint readers and NumPy reference path remain isolated
179
233
  vendor adapters. The default inference graphs are lowered into the private
180
234
  `mdescriptor._native` C++17/OpenMP extension.
@@ -1,8 +1,13 @@
1
1
  #include "mdescriptor/descriptor.hpp"
2
2
 
3
+ #include <stdexcept>
4
+
3
5
  namespace mdescriptor {
4
6
 
5
7
  void ComputeControl::reset(std::int64_t total) {
8
+ if (total < 0) {
9
+ throw std::invalid_argument("control total must be non-negative");
10
+ }
6
11
  cancelled_.store(false, std::memory_order_release);
7
12
  completed_.store(0, std::memory_order_release);
8
13
  total_.store(total, std::memory_order_release);
@@ -693,6 +693,9 @@ void compute_nep(
693
693
  int num_threads,
694
694
  double* output,
695
695
  const std::shared_ptr<ComputeControl>& control) {
696
+ if (control) {
697
+ control->reset(batch.structures);
698
+ }
696
699
  const std::size_t radial_basis = static_cast<std::size_t>(model.basis_size_radial + 1);
697
700
  const std::size_t angular_basis = static_cast<std::size_t>(model.basis_size_angular + 1);
698
701
  const std::size_t radial_n = static_cast<std::size_t>(model.n_max_radial + 1);
@@ -858,6 +861,9 @@ void compute_nep(
858
861
  for (std::int64_t structure = 0; structure < batch.structures; ++structure) {
859
862
  if (control && control->cancelled()) break;
860
863
  compute_structure(structure, radial, sums, angular, basis);
864
+ if (control && !control->cancelled()) {
865
+ control->mark_completed();
866
+ }
861
867
  }
862
868
  if (control && control->cancelled()) throw CancelledError();
863
869
  return;
@@ -883,6 +889,9 @@ void compute_nep(
883
889
  if (control && control->cancelled()) continue;
884
890
  try {
885
891
  compute_structure(structure, radial, sums, angular, basis);
892
+ if (control && !control->cancelled()) {
893
+ control->mark_completed();
894
+ }
886
895
  } catch (...) {
887
896
  record_error(std::current_exception());
888
897
  }
@@ -897,6 +906,9 @@ void compute_nep(
897
906
  if (control && control->cancelled()) break;
898
907
  try {
899
908
  compute_structure(structure, radial, sums, angular, basis);
909
+ if (control && !control->cancelled()) {
910
+ control->mark_completed();
911
+ }
900
912
  } catch (...) {
901
913
  record_error(std::current_exception());
902
914
  break;
@@ -935,6 +947,9 @@ void compute_nep(
935
947
  }
936
948
  #endif
937
949
  if (control && control->cancelled()) throw CancelledError();
950
+ if (control) {
951
+ control->mark_completed();
952
+ }
938
953
  }
939
954
 
940
955
  NepCalculator::NepCalculator(NepOptions options)
@@ -805,6 +805,7 @@ void AceCalculator::compute(
805
805
  const std::shared_ptr<ComputeControl>& control) const {
806
806
  if (closed()) throw std::runtime_error("ACE calculator is closed");
807
807
  std::lock_guard<std::mutex> lock(compute_mutex_);
808
+ if (control) control->reset(batch.structures);
808
809
  const auto graph = build_neighbor_graph(batch, options_.r_cut, control, options_.num_threads);
809
810
  std::map<std::int32_t, int> species_index;
810
811
  for (std::size_t i = 0; i < options_.species.size(); ++i) {
@@ -752,6 +752,9 @@ void MtpCalculator::compute(
752
752
  throw std::runtime_error("MTP calculator is closed");
753
753
  }
754
754
  std::lock_guard<std::mutex> lock(compute_mutex_);
755
+ if (control) {
756
+ control->reset(batch.structures);
757
+ }
755
758
  if (official_model_) {
756
759
  if (official_model_->native_mlip4) {
757
760
  official_model_->native_model->compute(batch, options_.species, options_.num_threads, output, control);
@@ -0,0 +1,110 @@
1
+ # Descriptor inventory / 描述符清单
2
+
3
+ This page is generated from the immutable built-in registry. It is a
4
+ controlled artifact: run `python scripts/check_descriptor_inventory.py
5
+ --write` when a registry spec changes, and keep the `--check` gate in CI.
6
+
7
+ <!-- registry-names: SOAP, SOAPTurbo, ACSF, ACE, CoulombMatrix, SineMatrix, EwaldSumMatrix, MBTR, LMBTR, ValleOganov, AtomicComposition, NeighborList, SortedDistances, SphericalExpansion, SphericalExpansionByPair, SoapRadialSpectrum, SoapPowerSpectrum, LodeSphericalExpansion, EAD, SO3, SO4, SNAP, LBispectrum, MTP, C00PSMLFF, NEP, DPA4, DPA4C -->
8
+
9
+ | Name | Directory group | Category | Asset policy | Backend | Level | Capabilities | Parameters | Extra |
10
+ |---|---|---|---|---|---|---|---|---|
11
+ | SOAP | `standalone` | `local` | `NONE` | `cpp` | `structure` | cooperative_cancel, num_threads, sparse | species, rbf, n_max, l_max, sigma, average, weighting, r_cut, compression | `—` |
12
+ | SOAPTurbo | `standalone` | `local` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | species, alpha_max, l_max, rcut_hard, rcut_soft, nf, radial_enhancement, basis, compression, atom_sigma_r, atom_sigma_r_scaling, atom_sigma_t, atom_sigma_t_scaling, amplitude_scaling, central_weight, central_species | `—` |
13
+ | ACSF | `standalone` | `local` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | species, r_cut, g2_params, g3_params, g4_params, g5_params | `—` |
14
+ | ACE | `standalone` | `local` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | species, N, r0, trans, wL, maxdeg, D, rcut, rin, pcut, pin, constants | `—` |
15
+ | CoulombMatrix | `standalone` | `matrix` | `NONE` | `cpp` | `structure` | cooperative_cancel, num_threads, sparse | n_atoms_max, permutation, exponent | `—` |
16
+ | SineMatrix | `standalone` | `matrix` | `NONE` | `cpp` | `structure` | cooperative_cancel, num_threads, sparse | n_atoms_max, permutation, exponent | `—` |
17
+ | EwaldSumMatrix | `standalone` | `matrix` | `NONE` | `cpp` | `structure` | cooperative_cancel, num_threads, sparse | n_atoms_max, permutation, accuracy, w, r_cut, g_cut, a | `—` |
18
+ | MBTR | `standalone` | `many_body` | `NONE` | `cpp` | `structure` | cooperative_cancel, num_threads, sparse | species, geometry, grid, weighting, periodic, normalize_gaussians, normalization | `—` |
19
+ | LMBTR | `standalone` | `many_body` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | species, geometry, grid, weighting, periodic, normalize_gaussians, normalization | `—` |
20
+ | ValleOganov | `standalone` | `many_body` | `NONE` | `cpp` | `structure` | cooperative_cancel, num_threads, sparse | species, function, n, sigma, r_cut, geometry, grid, weighting, periodic, normalize_gaussians, normalization | `—` |
21
+ | AtomicComposition | `standalone` | `local` | `NONE` | `cpp` | `structure` | cooperative_cancel, num_threads, sparse | species, per_system | `—` |
22
+ | NeighborList | `standalone` | `local` | `NONE` | `cpp` | `pair` | cooperative_cancel, num_threads, sparse | cutoff, full_neighbor_list, self_pairs | `—` |
23
+ | SortedDistances | `standalone` | `local` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | species, cutoff, max_neighbors, separate_neighbor_types | `—` |
24
+ | SphericalExpansion | `standalone` | `local` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | species, cutoff, density_width, max_radial, max_angular | `—` |
25
+ | SphericalExpansionByPair | `standalone` | `local` | `NONE` | `cpp` | `pair` | cooperative_cancel, num_threads, sparse | species, cutoff, density_width, max_radial, max_angular | `—` |
26
+ | SoapRadialSpectrum | `standalone` | `local` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | species, cutoff, density_width, max_radial, max_angular | `—` |
27
+ | SoapPowerSpectrum | `standalone` | `local` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | species, cutoff, density_width, max_radial, max_angular | `—` |
28
+ | LodeSphericalExpansion | `standalone` | `local` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | species, cutoff, density_width, max_radial, max_angular, k_cutoff, exponent, radial_radius | `—` |
29
+ | EAD | `standalone` | `rotational` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | parameters, Rc, cutoff | `—` |
30
+ | SO3 | `standalone` | `rotational` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | nmax, lmax, rcut, alpha, weight_on | `—` |
31
+ | SO4 | `standalone` | `rotational` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | lmax, rcut, normalize_U | `—` |
32
+ | SNAP | `standalone` | `rotational` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | weights, lmax, rcut, normalize_U | `—` |
33
+ | LBispectrum | `standalone` | `rotational` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | twojmax, diagonal, rfac0, rmin0, rcutfac, element_profile, element_radii, weights, rcut, normalize_U | `—` |
34
+ | MTP | `standalone` | `local` | `OPTIONAL` | `cpp` | `atom` | cooperative_cancel, model, num_threads, sparse | species, model, min_dist, max_dist, r_cut, radial_basis_size, radial_funcs_count, max_rank, radial_basis_type | `—` |
35
+ | C00PSMLFF | `standalone` | `local` | `NONE` | `cpp` | `atom` | cooperative_cancel, num_threads, sparse | species, r_cut, n_radial, l_max, cutoff_function, radial_sigma, include_radial, include_angular, normalize_radial, normalize_angular, super_vector, radial_weight, angular_weight, exclude_self_interaction | `—` |
36
+ | NEP | `model_backed` | `model_backed` | `REQUIRED` | `cpp` | `atom` | cooperative_cancel, model, num_threads, sparse | model | `—` |
37
+ | DPA4 | `model_backed` | `model_backed` | `REQUIRED` | `numpy` | `atom` | charge_spin, model, num_threads, sparse, spin | model | `—` |
38
+ | DPA4C | `model_backed` | `model_backed` | `REQUIRED` | `numpy` | `atom` | charge_spin, model, num_threads, sparse, spin | model, calibrate | `—` |
39
+
40
+ ## Static descriptor metadata
41
+
42
+ Each built-in entry carries `DescriptorInfo` schema version
43
+ `1`. Query it without importing an algorithm
44
+ implementation or resolving a model:
45
+
46
+ ```python
47
+ import mdescriptor
48
+
49
+ metadata = mdescriptor.describe_descriptor("SOAP")
50
+ ```
51
+
52
+ The returned object is JSON-safe and contains the canonical parameter schema,
53
+ execution devices, input periodicity, output representation, and model asset
54
+ policy. Historical Python constructor aliases remain available to direct
55
+ callers but are intentionally omitted from the canonical GUI parameter list.
56
+
57
+ The canonical algorithm imports are:
58
+
59
+ ```python
60
+ from mdescriptor.descriptors import SOAP, ACSF, ACE, MTP, NEP, DPA4, DPA4C
61
+ ```
62
+
63
+ The root package exposes contracts, registry queries and the configuration
64
+ factory. Algorithm classes are deliberately not re-exported from the root.
65
+
66
+ ## Backend boundaries
67
+
68
+ - C++17/OpenMP kernels implement the standalone numerical formulas.
69
+ - `mdescriptor._native` is the private pybind11 extension name.
70
+ - Python adapters own input packing, lifecycle, typed options and result
71
+ normalization.
72
+ - DPA4/DPA4C use the bundled NumPy checkpoint loader and fallback inference
73
+ core; supported default graphs are executed by C++17/OpenMP, and official
74
+ ``.pt`` files are parsed without importing Torch.
75
+ - NEP, DPA4 and DPA4C model files are resolved locally and verified by
76
+ streaming SHA-256 before loading.
77
+
78
+ ## Result contract
79
+
80
+ Every public class returns `DescriptorResult` from `compute(...)`. Values are
81
+ two-dimensional and `samples` is a contiguous `int64` array with the fixed
82
+ shape `[structure]`, `[structure, local_atom]`, or
83
+ `[structure, local_atom_1, local_atom_2, shift_a, shift_b, shift_c]` according
84
+ to the output level. Metadata uses the versioned JSON-safe schema; descriptors
85
+ retain configuration and metadata after `close()`.
86
+
87
+ Common representation and execution settings are passed as
88
+ `OutputOptions`/`ExecutionOptions`. Sparse output is SciPy CSR and fails at
89
+ construction when the optional dependency is unavailable.
90
+
91
+ ## Optional dependencies
92
+
93
+ The base import and DPA4/DPA4C computation do not import Torch. Install
94
+ `.[ase]` for ASE input conversion and `.[sparse]` for SciPy CSR output.
95
+ Official `.pt` loads use the package's restricted NumPy checkpoint reader;
96
+ network downloads are not implemented.
97
+
98
+ ## Native source map
99
+
100
+ | Family | Source |
101
+ |---|---|
102
+ | SOAP / ACSF / ACE / SOAPTurbo | `cpp/src/standalone/soap.cpp`, `acsf.cpp`, `ace.cpp`, `soap_turbo.cpp` |
103
+ | matrices / MBTR | `cpp/src/standalone/*_matrix.cpp`, `matrix_dispatch.cpp`, `mbtr.cpp` |
104
+ | local descriptors | `cpp/src/standalone/atomic_composition.cpp`, `neighbor_list.cpp`, `sorted_distances.cpp`, `spherical_expansion*.cpp` |
105
+ | rotational / MTP / C00PS | `cpp/src/standalone/ead.cpp`, `rotational_descriptors.cpp`, `mtp*.cpp`, `c00ps_mlff.cpp` |
106
+ | NEP | `cpp/src/common/nep.cpp` |
107
+ | shared helpers | `cpp/include/mdescriptor/detail/`, `cpp/src/common/` |
108
+
109
+ Algorithm numerical behavior is frozen during this layout refactor. Formula
110
+ changes require a separate reference/golden update.
@@ -24,7 +24,27 @@ dependencies = [
24
24
  ase = ["ase>=3.22"]
25
25
  sparse = ["scipy>=1.11"]
26
26
  test = ["pytest>=8", "ase>=3.22", "scipy>=1.11"]
27
- reference = ["pytest>=8", "ase==3.26.0", "scipy>=1.11", "dscribe==2.1.2"]
27
+ reference-dscribe = ["pytest>=8", "ase==3.26.0", "scipy>=1.11", "dscribe==2.1.2"]
28
+ reference-featomic = ["pytest>=8", "ase==3.26.0", "scipy>=1.11", "featomic==0.6.6"]
29
+ reference-pyxtalff = [
30
+ "pytest>=8",
31
+ "ase==3.26.0",
32
+ "scipy>=1.11",
33
+ "numba>=0.50.1",
34
+ "pyxtal_ff==0.2.3",
35
+ ]
36
+ reference-deepmd = [
37
+ "pytest>=8",
38
+ "ase==3.26.0",
39
+ "scipy>=1.11",
40
+ "deepmd-kit[torch]==3.2.0",
41
+ ]
42
+ reference-nepadapters = [
43
+ "pytest>=8",
44
+ "ase==3.26.0",
45
+ "scipy>=1.11",
46
+ "nep-adapters==1.0.2",
47
+ ]
28
48
  all = ["ase>=3.22", "scipy>=1.11"]
29
49
  dev = ["pytest>=8", "ase>=3.22", "scipy>=1.11", "ruff>=0.8", "mypy>=1.13"]
30
50
 
@@ -77,7 +97,12 @@ testpaths = ["tests"]
77
97
  addopts = "-m 'not reference'"
78
98
  markers = [
79
99
  "model: tests that exercise bundled model-backed descriptors and assets",
80
- "reference: tests that require the pinned external numerical reference stack",
100
+ "reference: tests that require a pinned external numerical reference implementation",
101
+ "dscribe: external numerical comparisons against pinned DScribe",
102
+ "featomic: external numerical comparisons against pinned Featomic",
103
+ "pyxtalff: external numerical comparisons against pinned PyXtal_FF descriptors",
104
+ "deepmd: external numerical comparisons against pinned deepmd-kit DPA4 descriptors",
105
+ "nepadapters: external numerical comparisons against pinned nep-adapters",
81
106
  ]
82
107
 
83
108
  [tool.ruff]
@@ -97,7 +122,7 @@ ignore = ["E501"]
97
122
  # the interpreter used for the quality gate; the package itself still supports
98
123
  # CPython 3.10 at runtime.
99
124
  python_version = "3.12"
100
- files = ["src/mdescriptor/core", "src/mdescriptor/registry", "src/mdescriptor/models"]
125
+ files = ["src/mdescriptor"]
101
126
  check_untyped_defs = true
102
127
  disallow_any_generics = false
103
128
  no_implicit_optional = true
@@ -12,7 +12,11 @@ import argparse
12
12
  import re
13
13
  from pathlib import Path
14
14
 
15
- from mdescriptor import builtin_registry, list_descriptors
15
+ from mdescriptor import (
16
+ DESCRIPTOR_INFO_SCHEMA_VERSION,
17
+ builtin_registry,
18
+ list_descriptors,
19
+ )
16
20
 
17
21
  ROOT = Path(__file__).resolve().parents[1]
18
22
  DOC = ROOT / "docs" / "descriptor-inventory.md"
@@ -26,9 +30,15 @@ def render() -> str:
26
30
  group = "standalone" if ".standalone." in spec.import_path else "model_backed"
27
31
  capabilities = ", ".join(sorted(spec.capabilities)) or "—"
28
32
  extra = spec.optional_extra or "—"
33
+ category = "—" if spec.info is None else spec.info.category
34
+ parameters = (
35
+ "—"
36
+ if spec.info is None or not spec.info.parameters
37
+ else ", ".join(spec.info.parameters)
38
+ )
29
39
  rows.append(
30
- f"| {spec.name} | `{group}` | `{spec.asset_policy.value.upper()}` | "
31
- f"`{spec.backend}` | `{spec.level}` | {capabilities} | `{extra}` |"
40
+ f"| {spec.name} | `{group}` | `{category}` | `{spec.asset_policy.value.upper()}` | "
41
+ f"`{spec.backend}` | `{spec.level}` | {capabilities} | {parameters} | `{extra}` |"
32
42
  )
33
43
  return """# Descriptor inventory / 描述符清单
34
44
 
@@ -38,10 +48,27 @@ controlled artifact: run `python scripts/check_descriptor_inventory.py
38
48
 
39
49
  <!-- registry-names: {names} -->
40
50
 
41
- | Name | Directory group | Asset policy | Backend | Level | Capabilities | Extra |
42
- |---|---|---|---|---|---|---|
51
+ | Name | Directory group | Category | Asset policy | Backend | Level | Capabilities | Parameters | Extra |
52
+ |---|---|---|---|---|---|---|---|---|
43
53
  {rows}
44
54
 
55
+ ## Static descriptor metadata
56
+
57
+ Each built-in entry carries `DescriptorInfo` schema version
58
+ `{DESCRIPTOR_INFO_SCHEMA_VERSION}`. Query it without importing an algorithm
59
+ implementation or resolving a model:
60
+
61
+ ```python
62
+ import mdescriptor
63
+
64
+ metadata = mdescriptor.describe_descriptor("SOAP")
65
+ ```
66
+
67
+ The returned object is JSON-safe and contains the canonical parameter schema,
68
+ execution devices, input periodicity, output representation, and model asset
69
+ policy. Historical Python constructor aliases remain available to direct
70
+ callers but are intentionally omitted from the canonical GUI parameter list.
71
+
45
72
  The canonical algorithm imports are:
46
73
 
47
74
  ```python
@@ -96,7 +123,11 @@ network downloads are not implemented.
96
123
 
97
124
  Algorithm numerical behavior is frozen during this layout refactor. Formula
98
125
  changes require a separate reference/golden update.
99
- """.format(names=names, rows="\n".join(rows)).rstrip() + "\n"
126
+ """.format(
127
+ names=names,
128
+ rows="\n".join(rows),
129
+ DESCRIPTOR_INFO_SCHEMA_VERSION=DESCRIPTOR_INFO_SCHEMA_VERSION,
130
+ ).rstrip() + "\n"
100
131
 
101
132
 
102
133
  def main(argv: list[str] | None = None) -> int:
@@ -0,0 +1,89 @@
1
+ """Stable MDescriptor contracts and explicit registry functions."""
2
+
3
+ from importlib.metadata import PackageNotFoundError
4
+ from importlib.metadata import version as package_version
5
+
6
+ from .core import (
7
+ CONFIGURATION_SCHEMA_VERSION,
8
+ RESULT_SCHEMA_VERSION,
9
+ CancelledError,
10
+ ClosedDescriptorError,
11
+ ComputeControl,
12
+ Descriptor,
13
+ DescriptorConfigError,
14
+ DescriptorInputError,
15
+ DescriptorLevel,
16
+ DescriptorResult,
17
+ ExecutionOptions,
18
+ MDescriptorError,
19
+ ModelLoadError,
20
+ OutputOptions,
21
+ StructureBatch,
22
+ StructureInput,
23
+ )
24
+ from .registry import (
25
+ DESCRIPTOR_INFO_SCHEMA_VERSION,
26
+ AssetPolicy,
27
+ DescriptorConfiguration,
28
+ DescriptorRegistry,
29
+ DescriptorSpec,
30
+ builtin_registry,
31
+ create_descriptor,
32
+ describe_descriptor,
33
+ get_descriptor,
34
+ list_descriptors,
35
+ )
36
+
37
+ API_VERSION = 1
38
+
39
+ try:
40
+ from ._version import __version__
41
+ except ImportError: # pragma: no cover - source tree without generated version
42
+ try:
43
+ __version__ = package_version("MDescriptor")
44
+ except PackageNotFoundError: # pragma: no cover - uninstalled source tree
45
+ __version__ = "0+unknown"
46
+
47
+
48
+ def get_runtime_info() -> dict[str, str | int]:
49
+ """Return package and public schema versions for backend run metadata."""
50
+
51
+ return {
52
+ "version": __version__,
53
+ "api_version": API_VERSION,
54
+ "configuration_schema_version": CONFIGURATION_SCHEMA_VERSION,
55
+ "descriptor_info_schema_version": DESCRIPTOR_INFO_SCHEMA_VERSION,
56
+ "result_schema_version": RESULT_SCHEMA_VERSION,
57
+ }
58
+
59
+ __all__ = [
60
+ "API_VERSION",
61
+ "AssetPolicy",
62
+ "CancelledError",
63
+ "ClosedDescriptorError",
64
+ "ComputeControl",
65
+ "Descriptor",
66
+ "DescriptorConfigError",
67
+ "DescriptorConfiguration",
68
+ "DescriptorInputError",
69
+ "DescriptorLevel",
70
+ "DescriptorRegistry",
71
+ "DescriptorResult",
72
+ "DescriptorSpec",
73
+ "DESCRIPTOR_INFO_SCHEMA_VERSION",
74
+ "CONFIGURATION_SCHEMA_VERSION",
75
+ "ExecutionOptions",
76
+ "MDescriptorError",
77
+ "ModelLoadError",
78
+ "OutputOptions",
79
+ "RESULT_SCHEMA_VERSION",
80
+ "StructureBatch",
81
+ "StructureInput",
82
+ "builtin_registry",
83
+ "create_descriptor",
84
+ "describe_descriptor",
85
+ "get_descriptor",
86
+ "get_runtime_info",
87
+ "list_descriptors",
88
+ "__version__",
89
+ ]
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.2.2'
22
- __version_tuple__ = version_tuple = (0, 2, 2)
21
+ __version__ = version = '0.2.3'
22
+ __version_tuple__ = version_tuple = (0, 2, 3)
23
23
 
24
- __commit_id__ = commit_id = 'g008362543'
24
+ __commit_id__ = commit_id = 'gca2e8c11b'