From 93f2f5f154cc4d169b25c89c9c20feea9c7ffdc5 Mon Sep 17 00:00:00 2001 From: Johannes Spies <13813209+johannes-spies@users.noreply.github.com> Date: Wed, 24 Jun 2026 18:54:05 +0200 Subject: [PATCH 1/3] Use metatensor public API instead of private methods Migrate the Python package off metatensor's private methods, which were made public in metatensor v0.2 and only kept as shims for featomic: - Labels._as_mts_labels_t() -> Labels.as_mts_labels_t() - TensorMap._ptr -> TensorMap.as_mts_tensormap_t() - TensorMap._from_ptr() -> TensorMap.unsafe_from_ptr() This lets metatensor drop the backward-compat shims added in metatensor#1146. Fixes metatensor/featomic#437. Co-Authored-By: Claude Opus 4.8 --- python/featomic/featomic/calculator_base.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/python/featomic/featomic/calculator_base.py b/python/featomic/featomic/calculator_base.py index f4b1220cb..2c2857d5b 100644 --- a/python/featomic/featomic/calculator_base.py +++ b/python/featomic/featomic/calculator_base.py @@ -78,10 +78,10 @@ def _options_to_c( # nothing to do, all pointers are already NULL pass elif isinstance(selected_samples, Labels): - c_options.selected_samples.subset = selected_samples._as_mts_labels_t() + c_options.selected_samples.subset = selected_samples.as_mts_labels_t() c_options.__keepalive["selected_samples"] = selected_samples elif isinstance(selected_samples, TensorMap): - c_options.selected_samples.predefined = selected_samples._ptr + c_options.selected_samples.predefined = selected_samples.as_mts_tensormap_t() else: raise ValueError( "expected selected samples to be either an `metatensor.Labels` " @@ -93,10 +93,10 @@ def _options_to_c( # nothing to do, all pointers are already NULL pass elif isinstance(selected_properties, Labels): - c_options.selected_properties.subset = selected_properties._as_mts_labels_t() + c_options.selected_properties.subset = selected_properties.as_mts_labels_t() c_options.__keepalive["selected_properties"] = selected_properties elif isinstance(selected_properties, TensorMap): - c_options.selected_properties.predefined = selected_properties._ptr + c_options.selected_properties.predefined = selected_properties.as_mts_tensormap_t() else: raise ValueError( "expected selected properties to be either an `metatensor.Labels` " @@ -108,7 +108,7 @@ def _options_to_c( # nothing to do, all pointers are already NULL pass elif isinstance(selected_keys, Labels): - c_options.selected_keys = selected_keys._as_mts_labels_t() + c_options.selected_keys = selected_keys.as_mts_labels_t() c_options.__keepalive["selected_keys"] = selected_keys return c_options @@ -308,4 +308,4 @@ def compute( self, tensor_map_ptr, c_systems, c_systems._length_, c_options ) - return TensorMap._from_ptr(tensor_map_ptr) + return TensorMap.unsafe_from_ptr(tensor_map_ptr) From fdcda8a764d5edd3880b0157cc9a3bfbf42abf0c Mon Sep 17 00:00:00 2001 From: Johannes Spies <13813209+johannes-spies@users.noreply.github.com> Date: Wed, 24 Jun 2026 19:12:52 +0200 Subject: [PATCH 2/3] Format calculator_base.py with ruff The switch to the public `as_mts_tensormap_t()` API pushed this line over the line-length limit; wrap it to satisfy `ruff format`. Co-Authored-By: Claude Opus 4.8 --- python/featomic/featomic/calculator_base.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python/featomic/featomic/calculator_base.py b/python/featomic/featomic/calculator_base.py index 2c2857d5b..c305f225c 100644 --- a/python/featomic/featomic/calculator_base.py +++ b/python/featomic/featomic/calculator_base.py @@ -96,7 +96,9 @@ def _options_to_c( c_options.selected_properties.subset = selected_properties.as_mts_labels_t() c_options.__keepalive["selected_properties"] = selected_properties elif isinstance(selected_properties, TensorMap): - c_options.selected_properties.predefined = selected_properties.as_mts_tensormap_t() + c_options.selected_properties.predefined = ( + selected_properties.as_mts_tensormap_t() + ) else: raise ValueError( "expected selected properties to be either an `metatensor.Labels` " From e580b5353a38070904c727cc01654feba3ddcde2 Mon Sep 17 00:00:00 2001 From: Johannes Spies <13813209+johannes-spies@users.noreply.github.com> Date: Wed, 24 Jun 2026 23:20:32 +0200 Subject: [PATCH 3/3] docs: point ASE intersphinx at docs.ase-lib.org ASE moved its documentation; the old wiki.fysik.dtu.dk/ase/ URL now redirects to ase-lib.org where objects.inv 404s, breaking the docs build. The inventory now lives at https://docs.ase-lib.org/. Co-Authored-By: Claude Opus 4.8 --- docs/src/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/conf.py b/docs/src/conf.py index d0d0a8249..39a260115 100644 --- a/docs/src/conf.py +++ b/docs/src/conf.py @@ -140,7 +140,7 @@ def setup(app): } intersphinx_mapping = { - "ase": ("https://wiki.fysik.dtu.dk/ase/", None), + "ase": ("https://docs.ase-lib.org/", None), "chemfiles": ("https://chemfiles.org/chemfiles.py/latest/", None), "metatensor": ("https://docs.metatensor.org/latest/", None), "matplotlib": ("https://matplotlib.org/stable/", None),