From faed44285f122679df804c2223d31b7232ef6089 Mon Sep 17 00:00:00 2001 From: Ankush Chudiwal <154556772+Ankush1oo8@users.noreply.github.com> Date: Mon, 7 Apr 2025 09:57:17 +0000 Subject: [PATCH 1/6] Fix: Ensure BaseMetaObject.set_params calls reset; add test --- skbase/base/_meta.py | 1 + skbase/tests/test_meta.py | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/skbase/base/_meta.py b/skbase/base/_meta.py index c87f557e..53dcbf3d 100644 --- a/skbase/base/_meta.py +++ b/skbase/base/_meta.py @@ -120,6 +120,7 @@ def set_params(self, **kwargs): Instance of self. """ # Use tag interface that will be available when mixin is used + self.reset() # <- Add this line to align behavior with BaseObject named_object_attr = self.get_tag("named_object_parameters") # type: ignore return self._set_params(named_object_attr, **kwargs) diff --git a/skbase/tests/test_meta.py b/skbase/tests/test_meta.py index df672027..844cf6d5 100644 --- a/skbase/tests/test_meta.py +++ b/skbase/tests/test_meta.py @@ -168,3 +168,21 @@ 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_calls_reset(): + """Test that BaseMetaObject.set_params calls reset.""" + + class ResetCheckMetaObject(BaseMetaObject): + def __init__(self, a=1, steps=[]): # ✅ change None → [] + self.a = a + self.steps = steps + self.was_reset = False + super().__init__() + + def reset(self): + self.was_reset = True + + obj = ResetCheckMetaObject() + obj.set_params(a=42) + assert obj.a == 42 + assert obj.was_reset is True, "`reset` should be called in set_params for BaseMetaObject" From 93650e1018d22827df5d0b82fe818d910d6f41c5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 10:01:20 +0000 Subject: [PATCH 2/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- skbase/tests/test_meta.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/skbase/tests/test_meta.py b/skbase/tests/test_meta.py index 844cf6d5..6125aa7a 100644 --- a/skbase/tests/test_meta.py +++ b/skbase/tests/test_meta.py @@ -169,6 +169,7 @@ 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_calls_reset(): """Test that BaseMetaObject.set_params calls reset.""" @@ -185,4 +186,6 @@ def reset(self): obj = ResetCheckMetaObject() obj.set_params(a=42) assert obj.a == 42 - assert obj.was_reset is True, "`reset` should be called in set_params for BaseMetaObject" + assert ( + obj.was_reset is True + ), "`reset` should be called in set_params for BaseMetaObject" From 6b3b4a2839ae70668674ba36e648f75dd6fc625c Mon Sep 17 00:00:00 2001 From: Ankush Chudiwal <154556772+Ankush1oo8@users.noreply.github.com> Date: Tue, 8 Apr 2025 17:02:52 +0530 Subject: [PATCH 3/6] Update test_meta.py --- skbase/tests/test_meta.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/skbase/tests/test_meta.py b/skbase/tests/test_meta.py index 6125aa7a..3662ef1e 100644 --- a/skbase/tests/test_meta.py +++ b/skbase/tests/test_meta.py @@ -171,21 +171,21 @@ def test_metaestimator_composite(long_steps): def test_basemetaobject_set_params_calls_reset(): - """Test that BaseMetaObject.set_params calls reset.""" + """Test that BaseMetaObject.set_params calls reset and updates dependent attributes.""" class ResetCheckMetaObject(BaseMetaObject): - def __init__(self, a=1, steps=[]): # ✅ change None → [] + def __init__(self, a=1, steps=None): self.a = a - self.steps = steps - self.was_reset = False + self.steps = steps if steps is not None else [] + self.b_ = 2 * a # Dependent variable super().__init__() def reset(self): - self.was_reset = True + self.b_ = 2 * self.a # Simulate logic that depends on 'a' obj = ResetCheckMetaObject() - obj.set_params(a=42) - assert obj.a == 42 - assert ( - obj.was_reset is True - ), "`reset` should be called in set_params for BaseMetaObject" + assert obj.b_ == 2 # 2 * default a + + obj.set_params(a=5) + assert obj.a == 5 + assert obj.b_ == 10, "`reset` should update b_ after a is changed" From 2f5cb47d9102c00f7585d87b52fd7bee89bf5ff9 Mon Sep 17 00:00:00 2001 From: Ankush Chudiwal <154556772+Ankush1oo8@users.noreply.github.com> Date: Tue, 8 Apr 2025 17:06:17 +0530 Subject: [PATCH 4/6] Update _meta.py --- skbase/base/_meta.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/skbase/base/_meta.py b/skbase/base/_meta.py index 53dcbf3d..b4b25104 100644 --- a/skbase/base/_meta.py +++ b/skbase/base/_meta.py @@ -120,9 +120,10 @@ def set_params(self, **kwargs): Instance of self. """ # Use tag interface that will be available when mixin is used - self.reset() # <- Add this line to align behavior with BaseObject 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. From 5c7f2c4e4699c0dae7e6ed41a566d46c4cc3d371 Mon Sep 17 00:00:00 2001 From: Ankush Chudiwal <154556772+Ankush1oo8@users.noreply.github.com> Date: Tue, 8 Apr 2025 17:09:19 +0530 Subject: [PATCH 5/6] Update test_meta.py --- skbase/tests/test_meta.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/skbase/tests/test_meta.py b/skbase/tests/test_meta.py index 3662ef1e..e67416e2 100644 --- a/skbase/tests/test_meta.py +++ b/skbase/tests/test_meta.py @@ -171,7 +171,8 @@ def test_metaestimator_composite(long_steps): def test_basemetaobject_set_params_calls_reset(): - """Test that BaseMetaObject.set_params calls reset and updates dependent attributes.""" + """Test that BaseMetaObject.set_params calls + reset and updates dependent attributes.""" class ResetCheckMetaObject(BaseMetaObject): def __init__(self, a=1, steps=None): From 2b36996aa54fbfe6e148e03996978b02e0757cb8 Mon Sep 17 00:00:00 2001 From: Ankush Chudiwal <154556772+Ankush1oo8@users.noreply.github.com> Date: Wed, 9 Apr 2025 14:48:29 +0530 Subject: [PATCH 6/6] Update test_meta.py --- skbase/tests/test_meta.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/skbase/tests/test_meta.py b/skbase/tests/test_meta.py index e67416e2..7a0e9286 100644 --- a/skbase/tests/test_meta.py +++ b/skbase/tests/test_meta.py @@ -170,23 +170,21 @@ def test_metaestimator_composite(long_steps): assert meta_est.get_params()["bar__b"] == "something else" -def test_basemetaobject_set_params_calls_reset(): - """Test that BaseMetaObject.set_params calls - reset and updates dependent attributes.""" +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.b_ = 2 * a # Dependent variable + self.set_tags(foo="bar") # optional tag use super().__init__() - - def reset(self): - self.b_ = 2 * self.a # Simulate logic that depends on 'a' + self.b_ = 2 * self.a # Dependent attribute obj = ResetCheckMetaObject() - assert obj.b_ == 2 # 2 * default a + assert obj.b_ == 2 - obj.set_params(a=5) - assert obj.a == 5 - assert obj.b_ == 10, "`reset` should update b_ after a is changed" + # 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