diff --git a/skbase/base/_meta.py b/skbase/base/_meta.py index c87f557e..b4b25104 100644 --- a/skbase/base/_meta.py +++ b/skbase/base/_meta.py @@ -121,7 +121,9 @@ def set_params(self, **kwargs): """ # Use tag interface that will be available when mixin is used named_object_attr = self.get_tag("named_object_parameters") # type: ignore - return self._set_params(named_object_attr, **kwargs) + result = self._set_params(named_object_attr, **kwargs) + self.reset() # <- Call reset after parameters are set + return result def _get_fitted_params(self): """Get fitted parameters. diff --git a/skbase/tests/test_meta.py b/skbase/tests/test_meta.py index df672027..7a0e9286 100644 --- a/skbase/tests/test_meta.py +++ b/skbase/tests/test_meta.py @@ -168,3 +168,23 @@ def test_metaestimator_composite(long_steps): meta_est.set_params(bar__b="something else") assert meta_est.get_params()["bar__b"] == "something else" + + +def test_basemetaobject_set_params_uses_baseobject_reset(): + """Test that BaseMetaObject.set_params correctly triggers BaseObject.reset.""" + + class ResetCheckMetaObject(BaseMetaObject): + def __init__(self, a=1, steps=None): + self.a = a + self.steps = steps if steps is not None else [] + self.set_tags(foo="bar") # optional tag use + super().__init__() + self.b_ = 2 * self.a # Dependent attribute + + obj = ResetCheckMetaObject() + assert obj.b_ == 2 + + # set_params should update 'a' and trigger reset (from BaseObject) which updates 'b_' + obj.set_params(a=10) + assert obj.a == 10 + assert obj.b_ == 20 # This confirms reset updated the dependent value