MDescriptor 0.2.2__tar.gz → 0.2.4__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.
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/PKG-INFO +118 -11
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/README.md +89 -5
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/descriptor.hpp +2 -2
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/common/control.cpp +5 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/common/nep.cpp +15 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/ace.cpp +1 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/c00ps_mlff.cpp +17 -17
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/mtp.cpp +3 -0
- mdescriptor-0.2.4/cpp/tests/CMakeLists.txt +19 -0
- mdescriptor-0.2.4/cpp/tests/test_public_api.cpp +106 -0
- mdescriptor-0.2.4/docs/descriptor-inventory.md +110 -0
- mdescriptor-0.2.4/docs/numerical-baselines.md +49 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/pyproject.toml +63 -6
- mdescriptor-0.2.4/scripts/ace1_reference.jl +55 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/scripts/check_descriptor_inventory.py +37 -6
- mdescriptor-0.2.4/scripts/check_numerical_baselines.py +293 -0
- mdescriptor-0.2.4/scripts/deepmd_reference.py +156 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/scripts/descriptor_reference.py +6 -2
- mdescriptor-0.2.4/scripts/external_reference.py +111 -0
- mdescriptor-0.2.4/scripts/generate_ace1_reference.py +225 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/scripts/generate_descriptor_goldens.py +22 -32
- mdescriptor-0.2.4/scripts/generate_external_c00ps_reference.py +327 -0
- mdescriptor-0.2.4/scripts/generate_external_static_goldens.py +793 -0
- mdescriptor-0.2.4/scripts/numerical_baselines.py +255 -0
- mdescriptor-0.2.4/src/mdescriptor/__init__.py +89 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/_version.py +3 -3
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/core/adapter.py +314 -100
- mdescriptor-0.2.4/src/mdescriptor/core/control.py +88 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/core/descriptor.py +38 -4
- mdescriptor-0.2.4/src/mdescriptor/core/errors.py +108 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/core/input.py +64 -8
- mdescriptor-0.2.4/src/mdescriptor/core/json_value.py +112 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/core/model_adapter.py +62 -29
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/core/options.py +3 -27
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/core/result.py +202 -32
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/core/species.py +30 -10
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/_kernels/ace.py +104 -27
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/_kernels/c00ps_mlff.py +1 -1
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/_kernels/core.py +23 -4
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/_kernels/extra.py +9 -3
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/_kernels/mtp.py +7 -1
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/_kernels/soap_turbo.py +43 -4
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/models/__init__.py +15 -15
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/models/resource.py +2 -0
- mdescriptor-0.2.4/src/mdescriptor/registry/__init__.py +211 -0
- mdescriptor-0.2.4/src/mdescriptor/registry/builtins.py +653 -0
- mdescriptor-0.2.4/src/mdescriptor/registry/info.py +581 -0
- mdescriptor-0.2.4/src/mdescriptor/registry/model_defaults.py +41 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/registry/spec.py +5 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/_golden.py +24 -3
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/contracts/test_capabilities.py +1 -0
- mdescriptor-0.2.4/tests/contracts/test_descriptor_info.py +384 -0
- mdescriptor-0.2.4/tests/contracts/test_input_schema.py +48 -0
- mdescriptor-0.2.4/tests/contracts/test_public_api.py +474 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/contracts/test_result_schema.py +41 -1
- mdescriptor-0.2.4/tests/data/mlip4_mtp6_carbon.json +1 -0
- mdescriptor-0.2.4/tests/external_reference/__init__.py +1 -0
- mdescriptor-0.2.4/tests/external_reference/test_deepmd.py +119 -0
- mdescriptor-0.2.4/tests/external_reference/test_dscribe.py +289 -0
- mdescriptor-0.2.4/tests/external_reference/test_featomic.py +370 -0
- mdescriptor-0.2.4/tests/external_reference/test_nep_adapters.py +45 -0
- mdescriptor-0.2.4/tests/external_reference/test_pyxtalff.py +153 -0
- mdescriptor-0.2.4/tests/golden/ace/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/ace/manifest.json +29 -3
- mdescriptor-0.2.4/tests/golden/acsf/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/acsf/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/acsf/external_manifest.json +179 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/acsf/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/atomiccomposition/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/atomiccomposition/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/atomiccomposition/external_manifest.json +83 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/atomiccomposition/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/c00psmlff/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/c00psmlff/manifest.json +37 -7
- mdescriptor-0.2.4/tests/golden/coulombmatrix/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/coulombmatrix/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/coulombmatrix/external_manifest.json +78 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/coulombmatrix/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/dpa4/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/dpa4/manifest.json +31 -4
- mdescriptor-0.2.4/tests/golden/dpa4c/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/dpa4c/manifest.json +31 -4
- mdescriptor-0.2.4/tests/golden/ead/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/ead/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/ead/external_manifest.json +88 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/ead/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/ewaldsummatrix/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/ewaldsummatrix/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/ewaldsummatrix/external_manifest.json +83 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/ewaldsummatrix/manifest.json +16 -2
- mdescriptor-0.2.4/tests/golden/lbispectrum/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/lbispectrum/manifest.json +27 -6
- mdescriptor-0.2.4/tests/golden/lmbtr/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/lmbtr/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/lmbtr/external_manifest.json +155 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/lmbtr/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/lodesphericalexpansion/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/lodesphericalexpansion/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/lodesphericalexpansion/external_manifest.json +195 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/lodesphericalexpansion/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/mbtr/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/mbtr/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/mbtr/external_manifest.json +152 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/mbtr/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/mtp/expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/mtp/manifest.json +146 -0
- mdescriptor-0.2.4/tests/golden/neighborlist/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/neighborlist/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/neighborlist/external_manifest.json +77 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/neighborlist/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/nep/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/nep/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/nep/external_manifest.json +228 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/nep/manifest.json +24 -0
- mdescriptor-0.2.4/tests/golden/sinematrix/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/sinematrix/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/sinematrix/external_manifest.json +78 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/sinematrix/manifest.json +15 -1
- mdescriptor-0.2.4/tests/golden/snap/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/snap/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/snap/external_manifest.json +91 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/snap/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/so3/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/so3/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/so3/external_manifest.json +84 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/so3/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/so4/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/so4/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/so4/external_manifest.json +87 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/so4/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/soap/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/soap/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/soap/external_manifest.json +164 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/soap/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/soappowerspectrum/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/soappowerspectrum/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/soappowerspectrum/external_manifest.json +246 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/soappowerspectrum/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/soapradialspectrum/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/soapradialspectrum/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/soapradialspectrum/external_manifest.json +96 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/soapradialspectrum/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/soapturbo/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/soapturbo/manifest.json +18 -6
- mdescriptor-0.2.4/tests/golden/sorteddistances/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/sorteddistances/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/sorteddistances/external_manifest.json +91 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/sorteddistances/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/sphericalexpansion/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/sphericalexpansion/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/sphericalexpansion/external_manifest.json +192 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/sphericalexpansion/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/sphericalexpansionbypair/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/sphericalexpansionbypair/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/sphericalexpansionbypair/external_manifest.json +111 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/sphericalexpansionbypair/manifest.json +14 -0
- mdescriptor-0.2.4/tests/golden/valleoganov/external_expected_output.npz +0 -0
- mdescriptor-0.2.4/tests/golden/valleoganov/external_input.npz +0 -0
- mdescriptor-0.2.4/tests/golden/valleoganov/external_manifest.json +141 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/valleoganov/manifest.json +14 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_ace.py +30 -1
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_all_descriptors.py +0 -86
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_c00ps_mlff.py +6 -6
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_coulombmatrix_openmp.py +3 -1
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_descriptor_symmetry.py +2 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_dpa4_golden.py +4 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_dpa4c_golden.py +4 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_ewaldsummatrix_openmp.py +3 -1
- mdescriptor-0.2.4/tests/test_external_static_goldens.py +27 -0
- mdescriptor-0.2.4/tests/test_golden_independence.py +161 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_lmbtr_openmp.py +2 -1
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_nep_golden.py +4 -0
- mdescriptor-0.2.4/tests/test_soap_acsf_advanced.py +40 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_valleoganov_openmp.py +2 -1
- mdescriptor-0.2.2/docs/descriptor-cpp-plan.md +0 -75
- mdescriptor-0.2.2/docs/descriptor-inventory.md +0 -93
- mdescriptor-0.2.2/docs/ecosystem-comparison.md +0 -90
- mdescriptor-0.2.2/docs/file-inventory.md +0 -276
- mdescriptor-0.2.2/docs/plan.md +0 -60
- mdescriptor-0.2.2/docs/real-data-benchmark.md +0 -70
- mdescriptor-0.2.2/src/mdescriptor/__init__.py +0 -53
- mdescriptor-0.2.2/src/mdescriptor/core/control.py +0 -34
- mdescriptor-0.2.2/src/mdescriptor/core/errors.py +0 -38
- mdescriptor-0.2.2/src/mdescriptor/registry/__init__.py +0 -68
- mdescriptor-0.2.2/src/mdescriptor/registry/builtins.py +0 -50
- mdescriptor-0.2.2/tests/contracts/test_public_api.py +0 -208
- mdescriptor-0.2.2/tests/golden/ace/expected_output.npz +0 -0
- mdescriptor-0.2.2/tests/golden/c00psmlff/expected_output.npz +0 -0
- mdescriptor-0.2.2/tests/golden/dpa4/expected_output.npz +0 -0
- mdescriptor-0.2.2/tests/golden/dpa4c/expected_output.npz +0 -0
- mdescriptor-0.2.2/tests/golden/lbispectrum/expected_output.npz +0 -0
- mdescriptor-0.2.2/tests/golden/mtp/expected_output.npz +0 -0
- mdescriptor-0.2.2/tests/golden/mtp/manifest.json +0 -626
- mdescriptor-0.2.2/tests/golden/soapturbo/expected_output.npz +0 -0
- mdescriptor-0.2.2/tests/reference/test_dscribe_reference.py +0 -153
- mdescriptor-0.2.2/tests/test_golden_independence.py +0 -20
- mdescriptor-0.2.2/tests/test_soap_acsf_advanced.py +0 -114
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/CMakeLists.txt +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/LICENSE +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/ace.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/detail/batch.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/detail/blas.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/detail/control.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/detail/math3.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/detail/species.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/dpa4.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/dpa4_wigner.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/dpa4c.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/extra.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/local_descriptors.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/mtp4.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/mtp_cinf_coeffs.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/neighbor.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/include/mdescriptor/nep.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/bindings/module.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/common/descriptor_common.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/common/extra_common.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/common/local_common.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/common/local_spherical_common.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/common/matrix_common.hpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/common/neighbor.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/model_backed/dpa4.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/model_backed/dpa4_wigner.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/model_backed/dpa4c.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/acsf.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/atomic_composition.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/coulomb_matrix.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/ead.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/ewald_sum_matrix.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/matrix_dispatch.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/mbtr.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/mtp4.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/neighbor_list.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/rotational_descriptors.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/sine_matrix.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/soap.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/soap_turbo.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/sorted_distances.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/spherical_expansion.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/cpp/src/standalone/spherical_expansion_by_pair.cpp +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/scripts/benchmark_dpa_native.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/scripts/benchmarking/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/scripts/benchmarking/benchmark_openmp_small.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/scripts/benchmarking/run_descriptor_benchmark.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/scripts/build_reference_wheel.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/scripts/promote_descriptor_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/scripts/run_benchmark.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/scripts/verify_wheel.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/_native.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/_native.pyi +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/core/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/_kernels/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/_kernels/dpa4.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/_kernels/dpa4c.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/_kernels/local.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/_kernels/nep.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/_kernels/rotational.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/LICENSE-LGPL-3.0-or-later.txt +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/NOTICE.md +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/api.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/common.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/array_api.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/common.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/base_descriptor.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/activation.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/attention.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/attn_res.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/block.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/cartesian.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/edge_cache.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/embedding.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/ffn.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/grid_net.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/indexing.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/mlp.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/norm.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/projection.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/radial.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/so2.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/so3.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/utils.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4_nn/wignerd.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/bispectrum.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/charge_state.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/geometry.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/pair_film.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/readout.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/dpa4c_nn/spin.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/descriptor/make_base_descriptor.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/env_mat.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/exclude_mask.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/lebedev.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/lebedev_rules.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/builder.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/csr.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/from_ijs.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/graph.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/pairs.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/neighbor_graph/segment.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/network.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/nlist.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/region.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/safe_gradient.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/seed.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/spherical_harmonics.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/dpmodel/utils/type_embed.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/env.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/utils/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/utils/charge_state.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/utils/plugin.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/utils/version.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/_vendor/dpa4desc/weights.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/dpa.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/dpa4/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/dpa4/descriptor.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/dpa4c/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/dpa4c/descriptor.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/graph.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/nep/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/model_backed/nep/descriptor.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/standalone/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/standalone/ace.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/standalone/acsf.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/standalone/c00ps_mlff.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/standalone/local/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/standalone/many_body/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/standalone/matrices/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/standalone/mtp.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/standalone/rotational/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/standalone/soap.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/descriptors/standalone/soap_turbo.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/models/assets/DPA4-Air-OMat24-v20260704.pt +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/models/assets/DPA4C-Air-OMat24-v20260819.pt +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/models/assets/nep89_20250409.txt +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/models/resolver.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/models/session.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/src/mdescriptor/registry/registry.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/__init__.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/_public.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/contracts/test_model_resources.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/data/mlip4_test_mtp.json +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/ace/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/acsf/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/acsf/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/atomiccomposition/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/atomiccomposition/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/c00psmlff/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/coulombmatrix/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/coulombmatrix/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/dpa4/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/dpa4c/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/ead/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/ead/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/ewaldsummatrix/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/ewaldsummatrix/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/lbispectrum/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/lmbtr/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/lmbtr/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/lodesphericalexpansion/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/lodesphericalexpansion/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/mbtr/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/mbtr/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/mtp/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/neighborlist/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/neighborlist/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/nep/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/nep/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/sinematrix/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/sinematrix/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/snap/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/snap/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/so3/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/so3/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/so4/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/so4/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/soap/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/soap/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/soappowerspectrum/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/soappowerspectrum/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/soapradialspectrum/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/soapradialspectrum/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/soapturbo/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/sorteddistances/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/sorteddistances/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/sphericalexpansion/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/sphericalexpansion/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/sphericalexpansionbypair/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/sphericalexpansionbypair/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/valleoganov/expected_output.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/golden/valleoganov/input.npz +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_ace_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_acsf_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_atomiccomposition_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_c00psmlff_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_coulombmatrix_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_dpa4.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_dpa4c.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_ead_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_ewaldsummatrix_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_lbispectrum_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_lmbtr_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_lodesphericalexpansion_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_mbtr_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_mtp.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_mtp_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_neighbor_graph.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_neighborlist_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_nep.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_nonperiodic.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_openmp_support.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_reference.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_sinematrix_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_sinematrix_openmp.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_snap_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_so3_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_so4_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_soap_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_soappowerspectrum_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_soapradialspectrum_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_soapturbo_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_sorteddistances_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_sphericalexpansion_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_sphericalexpansionbypair_golden.py +0 -0
- {mdescriptor-0.2.2 → mdescriptor-0.2.4}/tests/test_valleoganov_golden.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: MDescriptor
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
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
|
|
@@ -687,18 +687,41 @@ Provides-Extra: sparse
|
|
|
687
687
|
Requires-Dist: scipy>=1.11; extra == "sparse"
|
|
688
688
|
Provides-Extra: test
|
|
689
689
|
Requires-Dist: pytest>=8; extra == "test"
|
|
690
|
+
Requires-Dist: pytest-cov>=7; extra == "test"
|
|
690
691
|
Requires-Dist: ase>=3.22; extra == "test"
|
|
691
692
|
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"
|
|
693
|
+
Provides-Extra: reference-dscribe
|
|
694
|
+
Requires-Dist: pytest>=8; extra == "reference-dscribe"
|
|
695
|
+
Requires-Dist: ase==3.26.0; extra == "reference-dscribe"
|
|
696
|
+
Requires-Dist: scipy>=1.11; extra == "reference-dscribe"
|
|
697
|
+
Requires-Dist: dscribe==2.1.2; extra == "reference-dscribe"
|
|
698
|
+
Provides-Extra: reference-featomic
|
|
699
|
+
Requires-Dist: pytest>=8; extra == "reference-featomic"
|
|
700
|
+
Requires-Dist: ase==3.26.0; extra == "reference-featomic"
|
|
701
|
+
Requires-Dist: scipy>=1.11; extra == "reference-featomic"
|
|
702
|
+
Requires-Dist: featomic==0.6.6; extra == "reference-featomic"
|
|
703
|
+
Provides-Extra: reference-pyxtalff
|
|
704
|
+
Requires-Dist: pytest>=8; extra == "reference-pyxtalff"
|
|
705
|
+
Requires-Dist: ase==3.26.0; extra == "reference-pyxtalff"
|
|
706
|
+
Requires-Dist: scipy>=1.11; extra == "reference-pyxtalff"
|
|
707
|
+
Requires-Dist: numba>=0.50.1; extra == "reference-pyxtalff"
|
|
708
|
+
Requires-Dist: pyxtal_ff==0.2.3; extra == "reference-pyxtalff"
|
|
709
|
+
Provides-Extra: reference-deepmd
|
|
710
|
+
Requires-Dist: pytest>=8; extra == "reference-deepmd"
|
|
711
|
+
Requires-Dist: ase==3.26.0; extra == "reference-deepmd"
|
|
712
|
+
Requires-Dist: scipy>=1.11; extra == "reference-deepmd"
|
|
713
|
+
Requires-Dist: deepmd-kit[torch]==3.2.0; extra == "reference-deepmd"
|
|
714
|
+
Provides-Extra: reference-nepadapters
|
|
715
|
+
Requires-Dist: pytest>=8; extra == "reference-nepadapters"
|
|
716
|
+
Requires-Dist: ase==3.26.0; extra == "reference-nepadapters"
|
|
717
|
+
Requires-Dist: scipy>=1.11; extra == "reference-nepadapters"
|
|
718
|
+
Requires-Dist: nep-adapters==1.0.2; extra == "reference-nepadapters"
|
|
697
719
|
Provides-Extra: all
|
|
698
720
|
Requires-Dist: ase>=3.22; extra == "all"
|
|
699
721
|
Requires-Dist: scipy>=1.11; extra == "all"
|
|
700
722
|
Provides-Extra: dev
|
|
701
723
|
Requires-Dist: pytest>=8; extra == "dev"
|
|
724
|
+
Requires-Dist: pytest-cov>=7; extra == "dev"
|
|
702
725
|
Requires-Dist: ase>=3.22; extra == "dev"
|
|
703
726
|
Requires-Dist: scipy>=1.11; extra == "dev"
|
|
704
727
|
Requires-Dist: ruff>=0.8; extra == "dev"
|
|
@@ -726,8 +749,10 @@ src/mdescriptor/descriptors/
|
|
|
726
749
|
model_backed/ graph seam plus NEP, DPA4, DPA4C
|
|
727
750
|
src/mdescriptor/models/assets/ packaged, hash-verified model resources
|
|
728
751
|
tests/golden/ descriptor-owned, benchmark-independent accuracy fixtures
|
|
752
|
+
docs/numerical-baselines.md static-golden and external-runtime oracle inventory
|
|
729
753
|
scripts/benchmarking/ controlled local benchmark runners
|
|
730
|
-
benchmarks/ local
|
|
754
|
+
benchmarks/ local benchmark snapshots (ignored except for tracked oracles)
|
|
755
|
+
benchmarks/_legacy_oracles/ pinned independent upstream oracle adapters
|
|
731
756
|
```
|
|
732
757
|
|
|
733
758
|
`standalone` descriptors never require a model file. `model_backed` descriptors
|
|
@@ -760,6 +785,23 @@ installing Torch; the supported default graphs run through the C++17/OpenMP
|
|
|
760
785
|
backend and specialised configurations retain the NumPy fallback. No network
|
|
761
786
|
model download is performed.
|
|
762
787
|
|
|
788
|
+
可选的外部数值对照固定使用 `deepmd-kit==3.2.0`:
|
|
789
|
+
|
|
790
|
+
```bash
|
|
791
|
+
python -m pip install ".[reference-deepmd]"
|
|
792
|
+
python -m pytest -m deepmd tests/external_reference/test_deepmd.py
|
|
793
|
+
```
|
|
794
|
+
|
|
795
|
+
该对照同时覆盖周期和非周期输入;非周期帧按 DeepMD 的 `cells=None` 语义传入。
|
|
796
|
+
`tests/golden/dpa4*` 的 expected output(包括非周期行)也由该外部 evaluator 生成,
|
|
797
|
+
manifest 记录了 evaluator 脚本、模型 hash 和 `deepmd-kit` 版本;运行时仍只加载已
|
|
798
|
+
提交的 NPZ,不要求安装 DeepMD。
|
|
799
|
+
|
|
800
|
+
所有 28 个描述符都登记在[数值基线清单](docs/numerical-baselines.md),并都有外部
|
|
801
|
+
静态 golden:7 个沿用独立上游/source NPZ,另外 21 个在对应目录的
|
|
802
|
+
`external_manifest.json` 中保存固定版本 provider 生成的数值。默认测试只依赖提交的
|
|
803
|
+
fixture;外部 provider 缺失或版本漂移会使 reference job 失败,而不会静默跳过。
|
|
804
|
+
|
|
763
805
|
性能说明:DPA4 native 路径现在使用固定大小分块的 SGEMM、可复用的计算工作区,
|
|
764
806
|
并只为每条边计算一次 attention logit;DPA4C 的类型对 MLP 采用每个 calculator
|
|
765
807
|
实例独立的惰性缓存。OpenBLAS 仅作为构建依赖,官方 wheel 会内置 prefixed 的
|
|
@@ -796,7 +838,8 @@ batch = StructureBatch(
|
|
|
796
838
|
)
|
|
797
839
|
```
|
|
798
840
|
|
|
799
|
-
`StructureBatch`
|
|
841
|
+
`StructureBatch` takes an owned, read-only snapshot of its contiguous arrays
|
|
842
|
+
and validates integer fields before narrowing, finite positions/cells,
|
|
800
843
|
nonsingular cells, positive atomic numbers, monotonic offsets and fully
|
|
801
844
|
periodic `pbc == (1, 1, 1)`. ASE conversion is available through
|
|
802
845
|
`StructureBatch.from_ase(...)`.
|
|
@@ -841,7 +884,51 @@ Instances are synchronous and not promised to be thread-safe.
|
|
|
841
884
|
`structure_ids`, row offsets, stable `labels`, JSON-safe `metadata`, per-row
|
|
842
885
|
`samples`, and `feature_count`. The descriptor itself also retains the latest
|
|
843
886
|
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.
|
|
887
|
+
and `(P, F)` for atom, structure and pair outputs respectively. Result arrays
|
|
888
|
+
are owned snapshots and exposed read-only.
|
|
889
|
+
|
|
890
|
+
## Supported descriptors / 支持的描述符
|
|
891
|
+
|
|
892
|
+
The built-in registry currently provides 28 descriptors. `None` means no model
|
|
893
|
+
file is needed; `Optional` means a model can be supplied (as with MTP); and
|
|
894
|
+
`Required` means the descriptor always resolves a local model resource. See
|
|
895
|
+
the [full descriptor inventory](docs/descriptor-inventory.md) for parameters,
|
|
896
|
+
capabilities and backend details.
|
|
897
|
+
|
|
898
|
+
内置注册表目前提供 28 个描述符。`None` 表示不需要模型文件;`Optional` 表示
|
|
899
|
+
可以提供模型(例如 MTP);`Required` 表示描述符始终解析本地模型资源。参数、
|
|
900
|
+
能力和后端详情请参阅[完整描述符清单](docs/descriptor-inventory.md)。
|
|
901
|
+
|
|
902
|
+
| Descriptor / 描述符 | Category / 类型 | Output / 输出 | Model / 模型 |
|
|
903
|
+
|---|---|---|---|
|
|
904
|
+
| `SOAP` | Local / 局部 | Structure / 结构 | `None` |
|
|
905
|
+
| `SOAPTurbo` | Local / 局部 | Atom / 原子 | `None` |
|
|
906
|
+
| `ACSF` | Local / 局部 | Atom / 原子 | `None` |
|
|
907
|
+
| `ACE` | Local / 局部 | Atom / 原子 | `None` |
|
|
908
|
+
| `CoulombMatrix` | Matrix / 矩阵 | Structure / 结构 | `None` |
|
|
909
|
+
| `SineMatrix` | Matrix / 矩阵 | Structure / 结构 | `None` |
|
|
910
|
+
| `EwaldSumMatrix` | Matrix / 矩阵 | Structure / 结构 | `None` |
|
|
911
|
+
| `MBTR` | Many-body / 多体 | Structure / 结构 | `None` |
|
|
912
|
+
| `LMBTR` | Many-body / 多体 | Atom / 原子 | `None` |
|
|
913
|
+
| `ValleOganov` | Many-body / 多体 | Structure / 结构 | `None` |
|
|
914
|
+
| `AtomicComposition` | Local / 局部 | Structure / 结构 | `None` |
|
|
915
|
+
| `NeighborList` | Local / 局部 | Pair / 原子对 | `None` |
|
|
916
|
+
| `SortedDistances` | Local / 局部 | Atom / 原子 | `None` |
|
|
917
|
+
| `SphericalExpansion` | Local / 局部 | Atom / 原子 | `None` |
|
|
918
|
+
| `SphericalExpansionByPair` | Local / 局部 | Pair / 原子对 | `None` |
|
|
919
|
+
| `SoapRadialSpectrum` | Local / 局部 | Atom / 原子 | `None` |
|
|
920
|
+
| `SoapPowerSpectrum` | Local / 局部 | Atom / 原子 | `None` |
|
|
921
|
+
| `LodeSphericalExpansion` | Local / 局部 | Atom / 原子 | `None` |
|
|
922
|
+
| `EAD` | Rotational / 旋转 | Atom / 原子 | `None` |
|
|
923
|
+
| `SO3` | Rotational / 旋转 | Atom / 原子 | `None` |
|
|
924
|
+
| `SO4` | Rotational / 旋转 | Atom / 原子 | `None` |
|
|
925
|
+
| `SNAP` | Rotational / 旋转 | Atom / 原子 | `None` |
|
|
926
|
+
| `LBispectrum` | Rotational / 旋转 | Atom / 原子 | `None` |
|
|
927
|
+
| `MTP` | Local / 局部 | Atom / 原子 | `Optional` |
|
|
928
|
+
| `C00PSMLFF` | Local / 局部 | Atom / 原子 | `None` |
|
|
929
|
+
| `NEP` | Model-backed / 模型 | Atom / 原子 | `Required` |
|
|
930
|
+
| `DPA4` | Model-backed / 模型 | Atom / 原子 | `Required` |
|
|
931
|
+
| `DPA4C` | Model-backed / 模型 | Atom / 原子 | `Required` |
|
|
845
932
|
|
|
846
933
|
## Registry / 注册表
|
|
847
934
|
|
|
@@ -853,6 +940,8 @@ import mdescriptor
|
|
|
853
940
|
from mdescriptor.descriptors import SOAP
|
|
854
941
|
|
|
855
942
|
print(mdescriptor.list_descriptors())
|
|
943
|
+
metadata = mdescriptor.describe_descriptor("SOAP")
|
|
944
|
+
runtime = mdescriptor.get_runtime_info()
|
|
856
945
|
soap = SOAP(species=[1, 8], r_cut=4.5, n_max=2, l_max=2)
|
|
857
946
|
rebuilt = mdescriptor.create_descriptor(soap.configuration)
|
|
858
947
|
|
|
@@ -863,7 +952,10 @@ child.register(my_spec)
|
|
|
863
952
|
The built-in list separates `AssetPolicy.NONE`, `OPTIONAL` (for example MTP
|
|
864
953
|
potentials), and `REQUIRED` (NEP/DPA4/DPA4C). The root package exposes stable
|
|
865
954
|
contracts, registry functions and errors only; algorithm implementations are
|
|
866
|
-
not re-exported from the root.
|
|
955
|
+
not re-exported from the root. `describe_descriptor(name)` reads static,
|
|
956
|
+
JSON-safe GUI metadata from the registry without constructing a descriptor or
|
|
957
|
+
resolving a model. `get_runtime_info()` reports the package and contract
|
|
958
|
+
schema versions, including `result_schema_version`.
|
|
867
959
|
|
|
868
960
|
## Model resources / 模型资源
|
|
869
961
|
|
|
@@ -882,7 +974,11 @@ dpa4 = DPA4(
|
|
|
882
974
|
result = dpa4.compute(batch)
|
|
883
975
|
```
|
|
884
976
|
|
|
885
|
-
|
|
977
|
+
For GUI configuration JSON, a model parameter may be an explicit path string
|
|
978
|
+
or the tagged object returned by `ModelResource.to_dict()`; the latter is used
|
|
979
|
+
for named/checksummed resources.
|
|
980
|
+
|
|
981
|
+
The DPA4/DPA4C checkpoint readers and NumPy fallback path remain isolated
|
|
886
982
|
vendor adapters. The default inference graphs are lowered into the private
|
|
887
983
|
`mdescriptor._native` C++17/OpenMP extension.
|
|
888
984
|
|
|
@@ -891,8 +987,19 @@ vendor adapters. The default inference graphs are lowered into the private
|
|
|
891
987
|
```bash
|
|
892
988
|
.venv/bin/python -m pip install -e . --no-build-isolation
|
|
893
989
|
.venv/bin/python -m pytest --import-mode=importlib tests -q
|
|
990
|
+
.venv/bin/python -m pytest --cov=mdescriptor --cov-report=term-missing tests
|
|
991
|
+
|
|
992
|
+
.venv/bin/cmake -S cpp/tests -B build/cpp-tests -DCMAKE_BUILD_TYPE=Release
|
|
993
|
+
.venv/bin/cmake --build build/cpp-tests --config Release
|
|
994
|
+
.venv/bin/ctest --test-dir build/cpp-tests -C Release --output-on-failure
|
|
894
995
|
```
|
|
895
996
|
|
|
997
|
+
Coverage excludes the isolated vendored DPA implementation and enforces 75%
|
|
998
|
+
branch coverage for project-owned Python code. Tests marked `timing` record
|
|
999
|
+
repeatable timing samples but intentionally do not impose a runner-dependent
|
|
1000
|
+
speedup threshold; controlled performance reports are produced by
|
|
1001
|
+
`scripts/run_benchmark.py`.
|
|
1002
|
+
|
|
896
1003
|
The extension is private (`mdescriptor._native`). C++ shared math and batch
|
|
897
1004
|
helpers live in named headers under `cpp/include/mdescriptor/detail/`.
|
|
898
1005
|
|
|
@@ -19,8 +19,10 @@ src/mdescriptor/descriptors/
|
|
|
19
19
|
model_backed/ graph seam plus NEP, DPA4, DPA4C
|
|
20
20
|
src/mdescriptor/models/assets/ packaged, hash-verified model resources
|
|
21
21
|
tests/golden/ descriptor-owned, benchmark-independent accuracy fixtures
|
|
22
|
+
docs/numerical-baselines.md static-golden and external-runtime oracle inventory
|
|
22
23
|
scripts/benchmarking/ controlled local benchmark runners
|
|
23
|
-
benchmarks/ local
|
|
24
|
+
benchmarks/ local benchmark snapshots (ignored except for tracked oracles)
|
|
25
|
+
benchmarks/_legacy_oracles/ pinned independent upstream oracle adapters
|
|
24
26
|
```
|
|
25
27
|
|
|
26
28
|
`standalone` descriptors never require a model file. `model_backed` descriptors
|
|
@@ -53,6 +55,23 @@ installing Torch; the supported default graphs run through the C++17/OpenMP
|
|
|
53
55
|
backend and specialised configurations retain the NumPy fallback. No network
|
|
54
56
|
model download is performed.
|
|
55
57
|
|
|
58
|
+
可选的外部数值对照固定使用 `deepmd-kit==3.2.0`:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
python -m pip install ".[reference-deepmd]"
|
|
62
|
+
python -m pytest -m deepmd tests/external_reference/test_deepmd.py
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
该对照同时覆盖周期和非周期输入;非周期帧按 DeepMD 的 `cells=None` 语义传入。
|
|
66
|
+
`tests/golden/dpa4*` 的 expected output(包括非周期行)也由该外部 evaluator 生成,
|
|
67
|
+
manifest 记录了 evaluator 脚本、模型 hash 和 `deepmd-kit` 版本;运行时仍只加载已
|
|
68
|
+
提交的 NPZ,不要求安装 DeepMD。
|
|
69
|
+
|
|
70
|
+
所有 28 个描述符都登记在[数值基线清单](docs/numerical-baselines.md),并都有外部
|
|
71
|
+
静态 golden:7 个沿用独立上游/source NPZ,另外 21 个在对应目录的
|
|
72
|
+
`external_manifest.json` 中保存固定版本 provider 生成的数值。默认测试只依赖提交的
|
|
73
|
+
fixture;外部 provider 缺失或版本漂移会使 reference job 失败,而不会静默跳过。
|
|
74
|
+
|
|
56
75
|
性能说明:DPA4 native 路径现在使用固定大小分块的 SGEMM、可复用的计算工作区,
|
|
57
76
|
并只为每条边计算一次 attention logit;DPA4C 的类型对 MLP 采用每个 calculator
|
|
58
77
|
实例独立的惰性缓存。OpenBLAS 仅作为构建依赖,官方 wheel 会内置 prefixed 的
|
|
@@ -89,7 +108,8 @@ batch = StructureBatch(
|
|
|
89
108
|
)
|
|
90
109
|
```
|
|
91
110
|
|
|
92
|
-
`StructureBatch`
|
|
111
|
+
`StructureBatch` takes an owned, read-only snapshot of its contiguous arrays
|
|
112
|
+
and validates integer fields before narrowing, finite positions/cells,
|
|
93
113
|
nonsingular cells, positive atomic numbers, monotonic offsets and fully
|
|
94
114
|
periodic `pbc == (1, 1, 1)`. ASE conversion is available through
|
|
95
115
|
`StructureBatch.from_ase(...)`.
|
|
@@ -134,7 +154,51 @@ Instances are synchronous and not promised to be thread-safe.
|
|
|
134
154
|
`structure_ids`, row offsets, stable `labels`, JSON-safe `metadata`, per-row
|
|
135
155
|
`samples`, and `feature_count`. The descriptor itself also retains the latest
|
|
136
156
|
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.
|
|
157
|
+
and `(P, F)` for atom, structure and pair outputs respectively. Result arrays
|
|
158
|
+
are owned snapshots and exposed read-only.
|
|
159
|
+
|
|
160
|
+
## Supported descriptors / 支持的描述符
|
|
161
|
+
|
|
162
|
+
The built-in registry currently provides 28 descriptors. `None` means no model
|
|
163
|
+
file is needed; `Optional` means a model can be supplied (as with MTP); and
|
|
164
|
+
`Required` means the descriptor always resolves a local model resource. See
|
|
165
|
+
the [full descriptor inventory](docs/descriptor-inventory.md) for parameters,
|
|
166
|
+
capabilities and backend details.
|
|
167
|
+
|
|
168
|
+
内置注册表目前提供 28 个描述符。`None` 表示不需要模型文件;`Optional` 表示
|
|
169
|
+
可以提供模型(例如 MTP);`Required` 表示描述符始终解析本地模型资源。参数、
|
|
170
|
+
能力和后端详情请参阅[完整描述符清单](docs/descriptor-inventory.md)。
|
|
171
|
+
|
|
172
|
+
| Descriptor / 描述符 | Category / 类型 | Output / 输出 | Model / 模型 |
|
|
173
|
+
|---|---|---|---|
|
|
174
|
+
| `SOAP` | Local / 局部 | Structure / 结构 | `None` |
|
|
175
|
+
| `SOAPTurbo` | Local / 局部 | Atom / 原子 | `None` |
|
|
176
|
+
| `ACSF` | Local / 局部 | Atom / 原子 | `None` |
|
|
177
|
+
| `ACE` | Local / 局部 | Atom / 原子 | `None` |
|
|
178
|
+
| `CoulombMatrix` | Matrix / 矩阵 | Structure / 结构 | `None` |
|
|
179
|
+
| `SineMatrix` | Matrix / 矩阵 | Structure / 结构 | `None` |
|
|
180
|
+
| `EwaldSumMatrix` | Matrix / 矩阵 | Structure / 结构 | `None` |
|
|
181
|
+
| `MBTR` | Many-body / 多体 | Structure / 结构 | `None` |
|
|
182
|
+
| `LMBTR` | Many-body / 多体 | Atom / 原子 | `None` |
|
|
183
|
+
| `ValleOganov` | Many-body / 多体 | Structure / 结构 | `None` |
|
|
184
|
+
| `AtomicComposition` | Local / 局部 | Structure / 结构 | `None` |
|
|
185
|
+
| `NeighborList` | Local / 局部 | Pair / 原子对 | `None` |
|
|
186
|
+
| `SortedDistances` | Local / 局部 | Atom / 原子 | `None` |
|
|
187
|
+
| `SphericalExpansion` | Local / 局部 | Atom / 原子 | `None` |
|
|
188
|
+
| `SphericalExpansionByPair` | Local / 局部 | Pair / 原子对 | `None` |
|
|
189
|
+
| `SoapRadialSpectrum` | Local / 局部 | Atom / 原子 | `None` |
|
|
190
|
+
| `SoapPowerSpectrum` | Local / 局部 | Atom / 原子 | `None` |
|
|
191
|
+
| `LodeSphericalExpansion` | Local / 局部 | Atom / 原子 | `None` |
|
|
192
|
+
| `EAD` | Rotational / 旋转 | Atom / 原子 | `None` |
|
|
193
|
+
| `SO3` | Rotational / 旋转 | Atom / 原子 | `None` |
|
|
194
|
+
| `SO4` | Rotational / 旋转 | Atom / 原子 | `None` |
|
|
195
|
+
| `SNAP` | Rotational / 旋转 | Atom / 原子 | `None` |
|
|
196
|
+
| `LBispectrum` | Rotational / 旋转 | Atom / 原子 | `None` |
|
|
197
|
+
| `MTP` | Local / 局部 | Atom / 原子 | `Optional` |
|
|
198
|
+
| `C00PSMLFF` | Local / 局部 | Atom / 原子 | `None` |
|
|
199
|
+
| `NEP` | Model-backed / 模型 | Atom / 原子 | `Required` |
|
|
200
|
+
| `DPA4` | Model-backed / 模型 | Atom / 原子 | `Required` |
|
|
201
|
+
| `DPA4C` | Model-backed / 模型 | Atom / 原子 | `Required` |
|
|
138
202
|
|
|
139
203
|
## Registry / 注册表
|
|
140
204
|
|
|
@@ -146,6 +210,8 @@ import mdescriptor
|
|
|
146
210
|
from mdescriptor.descriptors import SOAP
|
|
147
211
|
|
|
148
212
|
print(mdescriptor.list_descriptors())
|
|
213
|
+
metadata = mdescriptor.describe_descriptor("SOAP")
|
|
214
|
+
runtime = mdescriptor.get_runtime_info()
|
|
149
215
|
soap = SOAP(species=[1, 8], r_cut=4.5, n_max=2, l_max=2)
|
|
150
216
|
rebuilt = mdescriptor.create_descriptor(soap.configuration)
|
|
151
217
|
|
|
@@ -156,7 +222,10 @@ child.register(my_spec)
|
|
|
156
222
|
The built-in list separates `AssetPolicy.NONE`, `OPTIONAL` (for example MTP
|
|
157
223
|
potentials), and `REQUIRED` (NEP/DPA4/DPA4C). The root package exposes stable
|
|
158
224
|
contracts, registry functions and errors only; algorithm implementations are
|
|
159
|
-
not re-exported from the root.
|
|
225
|
+
not re-exported from the root. `describe_descriptor(name)` reads static,
|
|
226
|
+
JSON-safe GUI metadata from the registry without constructing a descriptor or
|
|
227
|
+
resolving a model. `get_runtime_info()` reports the package and contract
|
|
228
|
+
schema versions, including `result_schema_version`.
|
|
160
229
|
|
|
161
230
|
## Model resources / 模型资源
|
|
162
231
|
|
|
@@ -175,7 +244,11 @@ dpa4 = DPA4(
|
|
|
175
244
|
result = dpa4.compute(batch)
|
|
176
245
|
```
|
|
177
246
|
|
|
178
|
-
|
|
247
|
+
For GUI configuration JSON, a model parameter may be an explicit path string
|
|
248
|
+
or the tagged object returned by `ModelResource.to_dict()`; the latter is used
|
|
249
|
+
for named/checksummed resources.
|
|
250
|
+
|
|
251
|
+
The DPA4/DPA4C checkpoint readers and NumPy fallback path remain isolated
|
|
179
252
|
vendor adapters. The default inference graphs are lowered into the private
|
|
180
253
|
`mdescriptor._native` C++17/OpenMP extension.
|
|
181
254
|
|
|
@@ -184,8 +257,19 @@ vendor adapters. The default inference graphs are lowered into the private
|
|
|
184
257
|
```bash
|
|
185
258
|
.venv/bin/python -m pip install -e . --no-build-isolation
|
|
186
259
|
.venv/bin/python -m pytest --import-mode=importlib tests -q
|
|
260
|
+
.venv/bin/python -m pytest --cov=mdescriptor --cov-report=term-missing tests
|
|
261
|
+
|
|
262
|
+
.venv/bin/cmake -S cpp/tests -B build/cpp-tests -DCMAKE_BUILD_TYPE=Release
|
|
263
|
+
.venv/bin/cmake --build build/cpp-tests --config Release
|
|
264
|
+
.venv/bin/ctest --test-dir build/cpp-tests -C Release --output-on-failure
|
|
187
265
|
```
|
|
188
266
|
|
|
267
|
+
Coverage excludes the isolated vendored DPA implementation and enforces 75%
|
|
268
|
+
branch coverage for project-owned Python code. Tests marked `timing` record
|
|
269
|
+
repeatable timing samples but intentionally do not impose a runner-dependent
|
|
270
|
+
speedup threshold; controlled performance reports are produced by
|
|
271
|
+
`scripts/run_benchmark.py`.
|
|
272
|
+
|
|
189
273
|
The extension is private (`mdescriptor._native`). C++ shared math and batch
|
|
190
274
|
helpers live in named headers under `cpp/include/mdescriptor/detail/`.
|
|
191
275
|
|
|
@@ -86,7 +86,7 @@ struct C00PSMlffOptions {
|
|
|
86
86
|
int n_radial = 8;
|
|
87
87
|
int l_max = 4;
|
|
88
88
|
int cutoff_function = 0; // 0: BP, 1: MO, 2: RJ, 3: WMC
|
|
89
|
-
// Gaussian width sigma_atom in the
|
|
89
|
+
// Gaussian width sigma_atom in the reference MLFF convention (Angstrom). A
|
|
90
90
|
// positive value enables the Gaussian atomic distribution; zero keeps
|
|
91
91
|
// the unsmoothed delta-distribution limit.
|
|
92
92
|
double radial_sigma = 0.5;
|
|
@@ -97,7 +97,7 @@ struct C00PSMlffOptions {
|
|
|
97
97
|
bool super_vector = false;
|
|
98
98
|
double radial_weight = 1.0;
|
|
99
99
|
double angular_weight = 1.0;
|
|
100
|
-
//
|
|
100
|
+
// Reference MLFF LSIC semantics: subtract self terms only from PS
|
|
101
101
|
// channels whose neighbour species is the centre species.
|
|
102
102
|
bool exclude_self_interaction = true;
|
|
103
103
|
int num_threads = 0;
|
|
@@ -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) {
|
|
@@ -21,10 +21,10 @@ using detail::run_parallel_structures;
|
|
|
21
21
|
|
|
22
22
|
constexpr double kPi = 3.141592653589793238462643383279502884;
|
|
23
23
|
constexpr double kSqrtFourPi = 3.544907701811032054596334966682290365;
|
|
24
|
-
//
|
|
24
|
+
// The reference MLFF constructs the radial basis on NR equally spaced points and
|
|
25
25
|
// normalizes it with the corresponding right-endpoint sum. The same grid is
|
|
26
26
|
// used here for the one-time basis setup.
|
|
27
|
-
constexpr int
|
|
27
|
+
constexpr int kReferenceRadialGridPoints = 10000;
|
|
28
28
|
constexpr int kRadialQuadraturePoints = 240;
|
|
29
29
|
|
|
30
30
|
double spherical_bessel(int l, double x) {
|
|
@@ -136,7 +136,7 @@ double double_factorial_odd(int l) {
|
|
|
136
136
|
return value;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
-
//
|
|
139
|
+
// The reference radial integral returns i_l(x) multiplied by exp(-W*s^2-W*r^2), evaluated in a
|
|
140
140
|
// form that remains finite for the Gaussian broadening integral.
|
|
141
141
|
double scaled_modified_spherical_bessel(int l, double x, double w, double sample, double radius) {
|
|
142
142
|
const double gaussian = std::exp(-w * (sample * sample + radius * radius));
|
|
@@ -280,8 +280,8 @@ void prepare_basis(
|
|
|
280
280
|
for (int n = 0; n < radial_counts[static_cast<std::size_t>(l)]; ++n) {
|
|
281
281
|
const double root = zeros[static_cast<std::size_t>(l)][static_cast<std::size_t>(n)];
|
|
282
282
|
double norm2 = 0.0;
|
|
283
|
-
const double dr = options.r_cut / static_cast<double>(
|
|
284
|
-
for (int point = 1; point <=
|
|
283
|
+
const double dr = options.r_cut / static_cast<double>(kReferenceRadialGridPoints);
|
|
284
|
+
for (int point = 1; point <= kReferenceRadialGridPoints; ++point) {
|
|
285
285
|
const double radius = static_cast<double>(point) * dr;
|
|
286
286
|
const double basis = spherical_bessel(l, root * radius / options.r_cut);
|
|
287
287
|
norm2 += radius * radius * basis * basis * dr;
|
|
@@ -294,11 +294,11 @@ void prepare_basis(
|
|
|
294
294
|
return;
|
|
295
295
|
}
|
|
296
296
|
|
|
297
|
-
//
|
|
297
|
+
// The reference radial routine first convolves every normalized spherical Bessel
|
|
298
298
|
// function with the Gaussian atom distribution and then tabulates the
|
|
299
299
|
// result on the same radial mesh. The integrand vanishes at both mesh
|
|
300
300
|
// endpoints for the Bessel basis, so high-order Gauss integration matches
|
|
301
|
-
//
|
|
301
|
+
// The right-endpoint grid sum is retained to the precision needed here while
|
|
302
302
|
// avoiding an O(NR^2) setup.
|
|
303
303
|
std::vector<double> nodes;
|
|
304
304
|
std::vector<double> weights;
|
|
@@ -306,7 +306,7 @@ void prepare_basis(
|
|
|
306
306
|
const double width_parameter = 0.5 / (options.radial_sigma * options.radial_sigma);
|
|
307
307
|
const double prefactor = 4.0 * kPi * std::pow(width_parameter / kPi, 1.5);
|
|
308
308
|
const double quadrature_scale = 0.5 * options.r_cut;
|
|
309
|
-
const std::size_t table_width = static_cast<std::size_t>(
|
|
309
|
+
const std::size_t table_width = static_cast<std::size_t>(kReferenceRadialGridPoints + 1);
|
|
310
310
|
for (int l = 0; l <= options.l_max; ++l) {
|
|
311
311
|
const std::int32_t count = radial_counts[static_cast<std::size_t>(l)];
|
|
312
312
|
auto& table = radial_values[static_cast<std::size_t>(l)];
|
|
@@ -323,9 +323,9 @@ void prepare_basis(
|
|
|
323
323
|
= spherical_bessel(l, root * radius / options.r_cut) / norm;
|
|
324
324
|
}
|
|
325
325
|
}
|
|
326
|
-
for (int point = 0; point <=
|
|
326
|
+
for (int point = 0; point <= kReferenceRadialGridPoints; ++point) {
|
|
327
327
|
const double sample = options.r_cut * static_cast<double>(point)
|
|
328
|
-
/ static_cast<double>(
|
|
328
|
+
/ static_cast<double>(kReferenceRadialGridPoints);
|
|
329
329
|
const double cutoff = cutoff_value(options.cutoff_function, sample, options.r_cut);
|
|
330
330
|
for (int n = 0; n < count; ++n) {
|
|
331
331
|
double integral = 0.0;
|
|
@@ -353,18 +353,18 @@ double radial_value(
|
|
|
353
353
|
double distance
|
|
354
354
|
) {
|
|
355
355
|
if (options.radial_sigma > 0.0) {
|
|
356
|
-
const std::size_t table_width = static_cast<std::size_t>(
|
|
356
|
+
const std::size_t table_width = static_cast<std::size_t>(kReferenceRadialGridPoints + 1);
|
|
357
357
|
const auto& table = radial_values[static_cast<std::size_t>(l)];
|
|
358
358
|
const double coordinate = std::max(0.0, std::min(1.0, distance / options.r_cut))
|
|
359
|
-
* static_cast<double>(
|
|
360
|
-
const int left = std::min(
|
|
359
|
+
* static_cast<double>(kReferenceRadialGridPoints);
|
|
360
|
+
const int left = std::min(kReferenceRadialGridPoints - 1, static_cast<int>(coordinate));
|
|
361
361
|
const double fraction = coordinate - static_cast<double>(left);
|
|
362
362
|
const auto value = [&](int point) {
|
|
363
|
-
const int bounded = std::max(0, std::min(
|
|
363
|
+
const int bounded = std::max(0, std::min(kReferenceRadialGridPoints, point));
|
|
364
364
|
return table[static_cast<std::size_t>(n) * table_width + static_cast<std::size_t>(bounded)];
|
|
365
365
|
};
|
|
366
366
|
// Four-point cubic interpolation keeps the tabulated path smooth and
|
|
367
|
-
// mirrors the cubic spline evaluation
|
|
367
|
+
// mirrors the reference cubic spline evaluation.
|
|
368
368
|
const double p0 = value(left - 1);
|
|
369
369
|
const double p1 = value(left);
|
|
370
370
|
const double p2 = value(left + 1);
|
|
@@ -603,7 +603,7 @@ void C00PSMlffCalculator::compute(
|
|
|
603
603
|
* radial_count;
|
|
604
604
|
const double addition = (2.0 * l + 1.0) / (4.0 * kPi);
|
|
605
605
|
for (std::size_t neighbor = 0; neighbor < neighbor_count; ++neighbor) {
|
|
606
|
-
// Match
|
|
606
|
+
// Match the reference MLFF LSIC: only the centre
|
|
607
607
|
// species receives a self-interaction correction.
|
|
608
608
|
if (types[neighbor] != center_type) {
|
|
609
609
|
continue;
|
|
@@ -651,7 +651,7 @@ void C00PSMlffCalculator::compute(
|
|
|
651
651
|
total -= self_power[
|
|
652
652
|
self_power_offsets[static_cast<std::size_t>(l)] + pair_index];
|
|
653
653
|
}
|
|
654
|
-
//
|
|
654
|
+
// The reference WVAR distinguishes radial indices, not
|
|
655
655
|
// flattened species/radial channels. Therefore
|
|
656
656
|
// cross-species channels with equal radial index
|
|
657
657
|
// retain weight 1.0.
|
|
@@ -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,19 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.15...4.0)
|
|
2
|
+
project(MDescriptorCppTests LANGUAGES CXX)
|
|
3
|
+
|
|
4
|
+
include(CTest)
|
|
5
|
+
find_package(OpenMP)
|
|
6
|
+
|
|
7
|
+
add_executable(
|
|
8
|
+
mdescriptor_cpp_public_api
|
|
9
|
+
test_public_api.cpp
|
|
10
|
+
../src/common/control.cpp
|
|
11
|
+
../src/common/neighbor.cpp
|
|
12
|
+
)
|
|
13
|
+
target_compile_features(mdescriptor_cpp_public_api PRIVATE cxx_std_17)
|
|
14
|
+
target_include_directories(mdescriptor_cpp_public_api PRIVATE ../include)
|
|
15
|
+
if(OpenMP_CXX_FOUND)
|
|
16
|
+
target_link_libraries(mdescriptor_cpp_public_api PRIVATE OpenMP::OpenMP_CXX)
|
|
17
|
+
endif()
|
|
18
|
+
|
|
19
|
+
add_test(NAME cpp_public_api COMMAND mdescriptor_cpp_public_api)
|