scikit-base 0.6.2__py3-none-any.whl → 0.7.0__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scikit-base
3
- Version: 0.6.2
3
+ Version: 0.7.0
4
4
  Summary: Base classes for sklearn-like parametric objects
5
5
  Author-email: sktime developers <sktime.toolbox@gmail.com>
6
6
  Maintainer: Franz Király
@@ -114,7 +114,7 @@ Requires-Dist: scikit-learn >=0.24.0 ; extra == 'test'
114
114
  `skbase` provides base classes for creating scikit-learn-like parametric objects,
115
115
  along with tools to make it easier to build your own packages that follow these design patterns.
116
116
 
117
- :rocket: Version 0.6.1 is now available. Check out our
117
+ :rocket: Version 0.6.2 is now available. Check out our
118
118
  [release notes](https://skbase.readthedocs.io/en/latest/changelog.html).
119
119
 
120
120
  | Overview | |
@@ -1,9 +1,9 @@
1
1
  docs/source/conf.py,sha256=kFc-4qkb0ZGD5cDej5KPJhMePp9kpVu6ZqFoF0fgovg,9951
2
- skbase/__init__.py,sha256=Bp2C-xPxN2UmAAsk7oVkhtVVg5N1fAbri0DcnsR4fvo,345
2
+ skbase/__init__.py,sha256=A32x7MB8vCuf2dPjV5n12AlDkXZH3yajYQObXDNY6VA,345
3
3
  skbase/_exceptions.py,sha256=KXfcVa7Xit-w-Xs_qFSJOEa_Mfp1oJeiHEC3v4Z0h1Q,1112
4
4
  skbase/_nopytest_tests.py,sha256=npL5pibSgCpulEGw0NqLKcG0majh6xcdW5A4Zibf78s,1077
5
5
  skbase/base/__init__.py,sha256=5ZLlwJeyfKDA1lAylBJgZd3t5JY25xsgQB4waQnroa8,751
6
- skbase/base/_base.py,sha256=1_tsrQhuuG-ludCfwW_8PFbPl8i7glnXVIbCIiBBCRY,50692
6
+ skbase/base/_base.py,sha256=uWfb7xCEh7-9o3gs0ueF_HFEgxc9seUWSGCLLoM7ejo,50947
7
7
  skbase/base/_meta.py,sha256=6jhg0JSDt15CN-gutnR8vOF2bHBln9u6u3MmXEgQdMs,39599
8
8
  skbase/base/_tagmanager.py,sha256=nKoiIC1yXFFSpN5ljWbMrwA-pwlbxsljgKuUywh1MR4,7289
9
9
  skbase/base/_pretty_printing/__init__.py,sha256=bVuKnwafn8c2q2AGJ9BOu9cmu-xBjiOxHf1hxjm8K2A,492
@@ -20,7 +20,7 @@ skbase/testing/utils/_conditional_fixtures.py,sha256=QwI7K28Lsy6RAkDP94goo8uWWvM
20
20
  skbase/testing/utils/inspect.py,sha256=XcPdm1-J3YXCTxsrqeJlStPvbC0vH1cgaApN5lzRI2c,741
21
21
  skbase/tests/__init__.py,sha256=d2_OTTnt0GX5otQsBuNAb1evg8C5Fi0JjqK2VsfMtXU,37
22
22
  skbase/tests/conftest.py,sha256=Uo0Ztm91jmNKYy9Abul99DjQoE_MqDvNogjB0Cfb2Hw,8663
23
- skbase/tests/test_base.py,sha256=HA4Dg90z_rvzP9CewF6DCWFTz474xGcrrla4i35YRBI,46501
23
+ skbase/tests/test_base.py,sha256=oGDXTZf0aWtu--pYOC_lk9X8uOzvKRuQE9Ce210jz5U,48603
24
24
  skbase/tests/test_baseestimator.py,sha256=fuzpwxjYzyl-Vrte1va4AWdbYElhWnED8W10236Xprc,4731
25
25
  skbase/tests/test_exceptions.py,sha256=wOdk7Gp8pvbhucna3_9FxTk9xFLjC9XNsGsVabQLYEE,629
26
26
  skbase/tests/test_meta.py,sha256=TTZW_BlEbirLjeEQCV1x3IYCf6V2ULJ_KfyVHgs0wkU,5662
@@ -33,14 +33,14 @@ skbase/utils/_nested_iter.py,sha256=omDI2Y75ajWTSV9d59iJTj1RcCk5YFbc7cZNQjz8AC8,
33
33
  skbase/utils/_utils.py,sha256=A6sTIUEscEy9TjBmCvXEuhk9q8ROBPyfJGhrjlSA4LY,3134
34
34
  skbase/utils/deep_equals/__init__.py,sha256=1II3GWV1c1s43y62IidMiTjjyOnE9MFysQ5AKCXMB2g,235
35
35
  skbase/utils/deep_equals/_common.py,sha256=O0ODPJGwdq6G-KdeGoHgyote53tNcxu3y2jHvej3bdQ,1273
36
- skbase/utils/deep_equals/_deep_equals.py,sha256=szrgpxI4fMOZfnqFtBkOL-mxowSg-CGVAsRxV66tVIg,17212
36
+ skbase/utils/deep_equals/_deep_equals.py,sha256=dhsbUn_CsXD-110uztxL7-wBhYMbZ6A6H94faFGyQXc,17215
37
37
  skbase/utils/dependencies/__init__.py,sha256=89TNnES--f1PeoPm-_h6a2mCtoGXt6mAd-n89FdusMM,352
38
38
  skbase/utils/dependencies/_dependencies.py,sha256=zmlWZ10HtiHE2PK2T7AzsFNKIA95O8hmIySlz2t4Mrs,10359
39
39
  skbase/utils/dependencies/tests/__init__.py,sha256=UqE6wenG-HffjT2Z974OLzmXG-M8PNOP9nUnNfqtfT4,74
40
40
  skbase/utils/dependencies/tests/test_check_dependencies.py,sha256=uxAC3gr4VWTlgctN90pnT1ra_UYkPxQHEla-IljX-n0,2238
41
41
  skbase/utils/tests/__init__.py,sha256=YfvP5lpCrTC_6SIakU7jBBdqYyuqE07nZ56ZYKTs3f0,165
42
42
  skbase/utils/tests/test_check.py,sha256=rMxaQtKegaKZPGjocNB9ntMwMIAq5-7SmNZuFsWFGZE,754
43
- skbase/utils/tests/test_deep_equals.py,sha256=4nKEYICi8SvvNWSgbY0dr2ukaW_FnKPgWjPXpLQcUNo,2430
43
+ skbase/utils/tests/test_deep_equals.py,sha256=WwQm_WHpCjZsypAPS_GCX9Ni6fMl4tcva-y2VfZYW8s,2488
44
44
  skbase/utils/tests/test_iter.py,sha256=HSPprp920q3HPbVoscY7mB9fYLwe8S7_DLblr9vUGAk,4918
45
45
  skbase/utils/tests/test_nested_iter.py,sha256=3ytT_qqZKBr90uNDTK6pzCjDv6EpnJOmzkyAnejyKYc,2230
46
46
  skbase/utils/tests/test_utils.py,sha256=13P1zYpsyNoX9Ugj37lHZAQm4hIORvsKEo1pF3tTIP0,1182
@@ -50,9 +50,9 @@ skbase/validate/_types.py,sha256=riVEVlj8ipErZX07OVbzv6zdGKssfegHyMr8XwaBm6M,121
50
50
  skbase/validate/tests/__init__.py,sha256=wunQBy6rajyrDymKvuFVajsBjj90VP5IFey5b6ZIRCk,70
51
51
  skbase/validate/tests/test_iterable_named_objects.py,sha256=NaEwdmtQJJy4GXMSh9ULOaR4ua7R11BcE6Khz5RKWUk,7438
52
52
  skbase/validate/tests/test_type_validations.py,sha256=G-qwFjXk-8WvXoeOvo2omfFKKjbpWhP-sPf6hsw8q30,14131
53
- scikit_base-0.6.2.dist-info/LICENSE,sha256=W2h8EYZ_G_mvCmCmXTTYqv66QF5NgSMbzLYJdk8qHVg,1525
54
- scikit_base-0.6.2.dist-info/METADATA,sha256=zT3z1JIywbNleTdlZPvQaOrH9XIO7XTM4HFD6WStbcw,8704
55
- scikit_base-0.6.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
56
- scikit_base-0.6.2.dist-info/top_level.txt,sha256=FbRMsZcP-O6pMLGZpxA5pQ-ClfRzoB6Yr-hTViYqwT0,57
57
- scikit_base-0.6.2.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
58
- scikit_base-0.6.2.dist-info/RECORD,,
53
+ scikit_base-0.7.0.dist-info/LICENSE,sha256=W2h8EYZ_G_mvCmCmXTTYqv66QF5NgSMbzLYJdk8qHVg,1525
54
+ scikit_base-0.7.0.dist-info/METADATA,sha256=0BalNSQbERguz3MplLtPZKwKlpQnSO_hb2a-Z1WvUQg,8704
55
+ scikit_base-0.7.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
56
+ scikit_base-0.7.0.dist-info/top_level.txt,sha256=FbRMsZcP-O6pMLGZpxA5pQ-ClfRzoB6Yr-hTViYqwT0,57
57
+ scikit_base-0.7.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
58
+ scikit_base-0.7.0.dist-info/RECORD,,
skbase/__init__.py CHANGED
@@ -6,4 +6,4 @@
6
6
  The included functionality makes it easy to reuse scikit-learn and
7
7
  sktime design principles in your project.
8
8
  """
9
- __version__: str = "0.6.2"
9
+ __version__: str = "0.7.0"
skbase/base/_base.py CHANGED
@@ -77,6 +77,7 @@ class BaseObject(_FlagManager):
77
77
  "display": "diagram",
78
78
  "print_changed_only": True,
79
79
  "check_clone": False, # whether to execute validity checks in clone
80
+ "clone_config": True, # clone config values (True) or use defaults (False)
80
81
  }
81
82
 
82
83
  def __init__(self):
@@ -127,6 +128,7 @@ class BaseObject(_FlagManager):
127
128
  """
128
129
  # retrieve parameters to copy them later
129
130
  params = self.get_params(deep=False)
131
+ config = self.get_config()
130
132
 
131
133
  # delete all object attributes in self
132
134
  attrs = [attr for attr in dir(self) if "__" not in attr]
@@ -137,6 +139,7 @@ class BaseObject(_FlagManager):
137
139
 
138
140
  # run init with a copy of parameters self had at the start
139
141
  self.__init__(**params)
142
+ self.set_config(**config)
140
143
 
141
144
  return self
142
145
 
@@ -157,6 +160,9 @@ class BaseObject(_FlagManager):
157
160
  self_params = self.get_params(deep=False)
158
161
  self_clone = self._clone(self)
159
162
 
163
+ if self.get_config()["clone_config"]:
164
+ self_clone.set_config(**self.get_config())
165
+
160
166
  # if checking the clone is turned off, return now
161
167
  if not self.get_config()["check_clone"]:
162
168
  return self_clone
skbase/tests/test_base.py CHANGED
@@ -931,6 +931,41 @@ def test_clone_raises_error_for_nonconforming_objects(
931
931
  # obj_that_modifies.clone()
932
932
 
933
933
 
934
+ @pytest.mark.parametrize("clone_config", [True, False])
935
+ def test_config_after_clone_tags(clone_config):
936
+ """Test clone also clones config works as expected."""
937
+
938
+ class TestClass(BaseObject):
939
+ _tags = {"some_tag": True, "another_tag": 37}
940
+ _config = {"check_clone": 0}
941
+
942
+ test_obj = TestClass()
943
+ test_obj.set_config(**{"check_clone": 42, "foo": "bar"})
944
+
945
+ if not clone_config:
946
+ # if clone_config config is set to False:
947
+ # config key check_clone should be default, 0
948
+ # the new config key foo should not be present
949
+ test_obj.set_config(**{"clone_config": False})
950
+ expected = 0
951
+ else:
952
+ # if clone_config config is set to True:
953
+ # config key check_clone should be 42, as set above
954
+ # the new config key foo should be present, as it has non default
955
+ expected = 42
956
+
957
+ test_obj_clone = test_obj.clone()
958
+
959
+ assert "check_clone" in test_obj_clone.get_config().keys()
960
+ assert test_obj_clone.get_config()["check_clone"] == expected
961
+
962
+ if clone_config:
963
+ assert "foo" in test_obj_clone.get_config().keys()
964
+ assert test_obj_clone.get_config()["foo"] == "bar"
965
+ else:
966
+ assert "foo" not in test_obj_clone.get_config().keys()
967
+
968
+
934
969
  @pytest.mark.skipif(
935
970
  not _check_soft_dependencies("sklearn", severity="none"),
936
971
  reason="skip test if sklearn is not available",
@@ -1297,3 +1332,37 @@ def test_eq_dunder():
1297
1332
  assert composite == composite_2
1298
1333
  assert composite != composite_3
1299
1334
  assert composite_2 != composite_3
1335
+
1336
+
1337
+ def test_get_set_config():
1338
+ """Tests get_config and set_config methods."""
1339
+
1340
+ class _TestConfig(BaseObject):
1341
+ _config = {"foo_config": 42, "bar": "a"}
1342
+
1343
+ clsvar = 210
1344
+
1345
+ def __init__(self, a, b=42):
1346
+ self.a = a
1347
+ self.b = b
1348
+ self.c = 84
1349
+
1350
+ test_obj = _TestConfig(7)
1351
+
1352
+ expected_config_orig = BaseObject._config.copy()
1353
+ expected_config_orig.update({"foo_config": 42, "bar": "a"})
1354
+
1355
+ # Test get_config
1356
+ assert test_obj.get_config() == expected_config_orig
1357
+
1358
+ expected_config = BaseObject._config.copy()
1359
+ expected_config.update({"foo_config": 37, "bar": "a"})
1360
+
1361
+ # Test set_config
1362
+ test_obj.set_config(foo_config=37)
1363
+
1364
+ assert test_obj.get_config() == expected_config
1365
+
1366
+ # test that reset does not reset config
1367
+ test_obj.reset()
1368
+ assert test_obj.get_config() == expected_config
@@ -488,7 +488,7 @@ def deep_equals_custom(x, y, return_msg=False, plugins=None):
488
488
  import numpy as np
489
489
 
490
490
  # deal with the case where != returns a vector
491
- if numpy_available and np.any(x != y) or any(_coerce_list(x != y)):
491
+ if numpy_available and np.any(x != y) or np.any(_coerce_list(x != y)):
492
492
  return ret(False, f" !=, {x} != {y}")
493
493
 
494
494
  return ret(True, "")
@@ -40,6 +40,8 @@ if _check_soft_dependencies("pandas", severity="none"):
40
40
  (np.array([1, 2, 4]), [pd.DataFrame({"a": [4, 2]})]),
41
41
  {"foo": [42], "bar": pd.Series([1, 2])},
42
42
  {"bar": [42], "foo": pd.Series([1, 2])},
43
+ pd.Index([1, 2, 3]),
44
+ pd.Index([2, 3, 4]),
43
45
  ]
44
46
 
45
47
  # nested DataFrame example