mloda 0.4.3__py3-none-any.whl → 0.4.5__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.
- mloda/core/abstract_plugins/components/domain.py +25 -12
- mloda/core/abstract_plugins/components/feature_chainer/feature_chain_parser.py +2 -6
- mloda/core/abstract_plugins/components/feature_chainer/feature_chain_parser_mixin.py +10 -7
- mloda/core/abstract_plugins/components/feature_collection.py +8 -1
- mloda/core/core/engine.py +13 -3
- {mloda-0.4.3.dist-info → mloda-0.4.5.dist-info}/METADATA +13 -2
- {mloda-0.4.3.dist-info → mloda-0.4.5.dist-info}/RECORD +16 -16
- {mloda-0.4.3.dist-info → mloda-0.4.5.dist-info}/WHEEL +1 -1
- mloda_plugins/feature_group/experimental/clustering/base.py +3 -2
- mloda_plugins/feature_group/experimental/dimensionality_reduction/base.py +15 -15
- mloda_plugins/feature_group/experimental/forecasting/base.py +2 -3
- mloda_plugins/feature_group/experimental/time_window/base.py +3 -2
- {mloda-0.4.3.dist-info → mloda-0.4.5.dist-info}/entry_points.txt +0 -0
- {mloda-0.4.3.dist-info → mloda-0.4.5.dist-info}/licenses/LICENSE.TXT +0 -0
- {mloda-0.4.3.dist-info → mloda-0.4.5.dist-info}/licenses/NOTICE.md +0 -0
- {mloda-0.4.3.dist-info → mloda-0.4.5.dist-info}/top_level.txt +0 -0
|
@@ -3,18 +3,31 @@ from typing import Any
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
class Domain:
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
"""Represents a domain for isolating features across business contexts.
|
|
7
|
+
|
|
8
|
+
Domains enable data isolation between different contexts (Sales, Finance, Test, etc.).
|
|
9
|
+
The framework matches feature domains to feature group domains for resolution.
|
|
10
|
+
|
|
11
|
+
Definition:
|
|
12
|
+
- Feature: via `domain` parameter or `options={"domain": "..."}`
|
|
13
|
+
- FeatureGroup: via `get_domain()` classmethod (default: "default_domain")
|
|
14
|
+
|
|
15
|
+
Propagation:
|
|
16
|
+
When a parent feature has a domain, child features inherit it automatically.
|
|
17
|
+
You can override this by setting an explicit domain on each dependent feature.
|
|
18
|
+
|
|
19
|
+
+------------------------------------------+---------------+------------------+
|
|
20
|
+
| Child Definition | Parent Domain | Result |
|
|
21
|
+
+------------------------------------------+---------------+------------------+
|
|
22
|
+
| "child" (string) | "Sales" | Inherits "Sales" |
|
|
23
|
+
| Feature("child") | "Sales" | Inherits "Sales" |
|
|
24
|
+
| Feature("child", domain="Finance") | "Sales" | Keeps "Finance" |
|
|
25
|
+
| Any | None | No domain |
|
|
26
|
+
+------------------------------------------+---------------+------------------+
|
|
27
|
+
|
|
28
|
+
Validation:
|
|
29
|
+
IdentifyFeatureGroupClass ensures at least one feature group matches the feature's domain.
|
|
30
|
+
If a feature has no domain and multiple groups match, an error is raised.
|
|
18
31
|
"""
|
|
19
32
|
|
|
20
33
|
def __init__(self, name: str):
|
|
@@ -92,11 +92,8 @@ class FeatureChainParser:
|
|
|
92
92
|
"""Internal method for matching pattern-based features - used by match_configuration_feature_chain_parser."""
|
|
93
93
|
_feature_name: FeatureName = FeatureName(feature_name) if isinstance(feature_name, str) else feature_name
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
if has_prefix_configuration is None or source_feature is None:
|
|
98
|
-
return False
|
|
99
|
-
except ValueError:
|
|
95
|
+
has_prefix_configuration, source_feature = cls.parse_feature_name(_feature_name, prefix_patterns, pattern)
|
|
96
|
+
if has_prefix_configuration is None or source_feature is None:
|
|
100
97
|
return False
|
|
101
98
|
return True
|
|
102
99
|
|
|
@@ -304,7 +301,6 @@ class FeatureChainParser:
|
|
|
304
301
|
return True
|
|
305
302
|
|
|
306
303
|
# configuration-based
|
|
307
|
-
|
|
308
304
|
if property_mapping is not None:
|
|
309
305
|
return cls._validate_options_against_property_mapping(options, property_mapping)
|
|
310
306
|
|
|
@@ -131,13 +131,16 @@ class FeatureChainParserMixin:
|
|
|
131
131
|
prefix_patterns = cls._get_prefix_patterns()
|
|
132
132
|
property_mapping = cls._get_property_mapping()
|
|
133
133
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
134
|
+
try:
|
|
135
|
+
# Use the unified parser for basic matching
|
|
136
|
+
result = FeatureChainParser.match_configuration_feature_chain_parser(
|
|
137
|
+
_feature_name,
|
|
138
|
+
options,
|
|
139
|
+
property_mapping=property_mapping,
|
|
140
|
+
prefix_patterns=prefix_patterns,
|
|
141
|
+
)
|
|
142
|
+
except ValueError:
|
|
143
|
+
return False
|
|
141
144
|
|
|
142
145
|
# If basic match succeeded and it's a string-based feature, call validation hook
|
|
143
146
|
if result:
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
from typing import Generator, List, Optional, Set, Union
|
|
3
3
|
from uuid import UUID
|
|
4
|
+
from mloda.core.abstract_plugins.components.domain import Domain
|
|
4
5
|
from mloda.core.abstract_plugins.components.feature import Feature
|
|
5
6
|
from mloda.core.abstract_plugins.components.options import Options
|
|
6
7
|
from mloda_plugins.feature_group.experimental.default_options_key import DefaultOptionKeys
|
|
@@ -17,9 +18,11 @@ class Features:
|
|
|
17
18
|
features: List[Union[Feature, str]],
|
|
18
19
|
child_options: Optional[Options] = None,
|
|
19
20
|
child_uuid: Optional[UUID] = None,
|
|
21
|
+
parent_domain: Optional[str] = None,
|
|
20
22
|
) -> None:
|
|
21
23
|
self.collection: List[Feature] = []
|
|
22
24
|
self.child_uuid: Optional[UUID] = child_uuid
|
|
25
|
+
self.parent_domain: Optional[str] = parent_domain
|
|
23
26
|
|
|
24
27
|
self.parent_uuids: set[UUID] = set()
|
|
25
28
|
|
|
@@ -36,7 +39,11 @@ class Features:
|
|
|
36
39
|
if child_options.group == {} and child_options.context == {}:
|
|
37
40
|
child_options = Options({})
|
|
38
41
|
|
|
39
|
-
|
|
42
|
+
if isinstance(feature, str):
|
|
43
|
+
feature = Feature(name=feature, options=child_options, domain=self.parent_domain)
|
|
44
|
+
else:
|
|
45
|
+
if feature.domain is None and self.parent_domain is not None:
|
|
46
|
+
feature.domain = Domain(self.parent_domain)
|
|
40
47
|
if child_uuid:
|
|
41
48
|
self.parent_uuids.add(feature.uuid)
|
|
42
49
|
self.child_uuid = child_uuid
|
mloda/core/core/engine.py
CHANGED
|
@@ -116,7 +116,10 @@ class Engine:
|
|
|
116
116
|
added = self.add_feature_to_collection(feature_group_class, feature, features.child_uuid)
|
|
117
117
|
|
|
118
118
|
if added:
|
|
119
|
-
|
|
119
|
+
parent_domain = feature.domain.name if feature.domain else None
|
|
120
|
+
self._handle_input_features_recursion(
|
|
121
|
+
feature_group_class, feature.uuid, feature.options, feature.name, parent_domain=parent_domain
|
|
122
|
+
)
|
|
120
123
|
|
|
121
124
|
if self.global_filter:
|
|
122
125
|
self._add_filter_feature(feature_group_class, feature_group, feature, features)
|
|
@@ -265,7 +268,12 @@ class Engine:
|
|
|
265
268
|
self.feature_link_parents[child_uuid].add(wanted_uuid)
|
|
266
269
|
|
|
267
270
|
def _handle_input_features_recursion(
|
|
268
|
-
self,
|
|
271
|
+
self,
|
|
272
|
+
feature_group_class: Type[FeatureGroup],
|
|
273
|
+
uuid: UUID,
|
|
274
|
+
options: Options,
|
|
275
|
+
feature_name: FeatureName,
|
|
276
|
+
parent_domain: Optional[str] = None,
|
|
269
277
|
) -> None:
|
|
270
278
|
"""Handles recursion for input features of a feature group."""
|
|
271
279
|
feature_group = feature_group_class()
|
|
@@ -278,7 +286,9 @@ class Engine:
|
|
|
278
286
|
input_features = None
|
|
279
287
|
|
|
280
288
|
if input_features:
|
|
281
|
-
features = Features(
|
|
289
|
+
features = Features(
|
|
290
|
+
list(input_features), child_options=options, child_uuid=uuid, parent_domain=parent_domain
|
|
291
|
+
)
|
|
282
292
|
if features.child_uuid is None:
|
|
283
293
|
raise ValueError(f"Features {features} has no parent uuid although it should have one.")
|
|
284
294
|
self.feature_link_parents[features.child_uuid] = features.parent_uuids
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mloda
|
|
3
|
-
Version: 0.4.
|
|
4
|
-
Summary: mloda:
|
|
3
|
+
Version: 0.4.5
|
|
4
|
+
Summary: mloda.ai: Open Data Access for ML and AI
|
|
5
5
|
Author-email: Tom Kaltofen <info@mloda.ai>
|
|
6
6
|
License: Apache-2.0
|
|
7
7
|
Project-URL: Bug Tracker, https://github.com/mloda-ai/mloda/issues
|
|
@@ -306,6 +306,17 @@ Built-in and custom extenders give you full lineage - trace any result back to i
|
|
|
306
306
|
|
|
307
307
|
---
|
|
308
308
|
|
|
309
|
+
## Ecosystem
|
|
310
|
+
|
|
311
|
+
Most plugins currently live in `mloda_plugins/` within this repository. The goal is to gradually migrate them to standalone packages in the registry.
|
|
312
|
+
|
|
313
|
+
| Repository | Description |
|
|
314
|
+
|------------|-------------|
|
|
315
|
+
| [mloda-registry](https://github.com/mloda-ai/mloda-registry) | Official plugin packages and 40+ development guides |
|
|
316
|
+
| [mloda-plugin-template](https://github.com/mloda-ai/mloda-plugin-template) | Cookiecutter template for creating standalone plugins |
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
309
320
|
## Contributing
|
|
310
321
|
|
|
311
322
|
We welcome contributions! Build plugins, improve docs, or add features.
|
|
@@ -10,9 +10,9 @@ mloda/core/abstract_plugins/components/base_feature_group_version.py,sha256=JNnr
|
|
|
10
10
|
mloda/core/abstract_plugins/components/base_validator.py,sha256=-8sING9RE9vl5BuZZHtqaMbhF8w1WTS-fjXK5VwMuYY,2363
|
|
11
11
|
mloda/core/abstract_plugins/components/data_access_collection.py,sha256=PVO6w8UOV6qyyYtlkzXAs-qM7WXsyrHqQP5CYCYu3G8,1551
|
|
12
12
|
mloda/core/abstract_plugins/components/data_types.py,sha256=uiq26Z7pikUiZIfdi28VbWoxLQUQ1wCH2rp7uI5XrvA,5033
|
|
13
|
-
mloda/core/abstract_plugins/components/domain.py,sha256=
|
|
13
|
+
mloda/core/abstract_plugins/components/domain.py,sha256=Jr1bRpaJP3-tYF0ii0tIYv_bpJUqv8SDAk6LljyAAfo,2099
|
|
14
14
|
mloda/core/abstract_plugins/components/feature.py,sha256=WHK_FIe5EMq1v4ORod3ae8oaDHt4J1uktb9H-0v5m08,10478
|
|
15
|
-
mloda/core/abstract_plugins/components/feature_collection.py,sha256=
|
|
15
|
+
mloda/core/abstract_plugins/components/feature_collection.py,sha256=OfLCspXxAHBBeLri6zIwXs17KWciv1tvXrPq4n3ixqM,4995
|
|
16
16
|
mloda/core/abstract_plugins/components/feature_name.py,sha256=AgWceOqyHNYGVM5XE1NrGFeZKf9AKtLRoRRaxL7tHzk,673
|
|
17
17
|
mloda/core/abstract_plugins/components/feature_set.py,sha256=hVJ_t4p30BNOknkMKiyDkYRWbbEd_GtpGf2lW9n3PdM,4226
|
|
18
18
|
mloda/core/abstract_plugins/components/hashable_dict.py,sha256=xzUIn2wbujo3jwwGayHnSbrrADSiVYU_xUV1nt5Yk8M,426
|
|
@@ -21,8 +21,8 @@ mloda/core/abstract_plugins/components/options.py,sha256=z2hzPSl-B-trh1UELdBekAe
|
|
|
21
21
|
mloda/core/abstract_plugins/components/parallelization_modes.py,sha256=QeU83qUlg4smUW9Q_cs0XaaBcKDxI7vh8pILUHZd_YM,143
|
|
22
22
|
mloda/core/abstract_plugins/components/utils.py,sha256=_ofeiOBQLwYU3_p9JBe61Ihps4dpFUcsrqI6XrA92Yo,530
|
|
23
23
|
mloda/core/abstract_plugins/components/feature_chainer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
-
mloda/core/abstract_plugins/components/feature_chainer/feature_chain_parser.py,sha256=
|
|
25
|
-
mloda/core/abstract_plugins/components/feature_chainer/feature_chain_parser_mixin.py,sha256=
|
|
24
|
+
mloda/core/abstract_plugins/components/feature_chainer/feature_chain_parser.py,sha256=kjLO0VSGXh53L8HBXWO5bYmaqLmek917AA_qqPLrZBo,14071
|
|
25
|
+
mloda/core/abstract_plugins/components/feature_chainer/feature_chain_parser_mixin.py,sha256=NQfipxPQ6LPN2zXuJAbMj6JaGa6voTBnvb34vp0Y1og,7537
|
|
26
26
|
mloda/core/abstract_plugins/components/framework_transformer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
27
|
mloda/core/abstract_plugins/components/framework_transformer/base_transformer.py,sha256=3eRSOzYZZ4OHRezvUnw4RLTUjirMGtcZCKQYJ1MuuZU,5793
|
|
28
28
|
mloda/core/abstract_plugins/components/framework_transformer/cfw_transformer.py,sha256=xuK3DSuSdmos1w639ZRQEO6ZwihjQmBG3RSp5jU1gk4,4298
|
|
@@ -63,7 +63,7 @@ mloda/core/api/prepare/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
|
|
|
63
63
|
mloda/core/api/prepare/setup_compute_framework.py,sha256=In6o7YuBpJFKa6Brrrtsjf1bxhiv43toJr9NBQCAiH4,2658
|
|
64
64
|
mloda/core/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
65
|
mloda/core/core/cfw_manager.py,sha256=DNmbEOIhjKX_G0lva6XqCL0GJIIKy9PfOTXT4g8N9FM,8769
|
|
66
|
-
mloda/core/core/engine.py,sha256=
|
|
66
|
+
mloda/core/core/engine.py,sha256=jQRDyjmDyhGT-LmWyTX_qS87NBz7-xC0ZK0-Ti6OtEo,13962
|
|
67
67
|
mloda/core/core/step/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
68
|
mloda/core/core/step/abstract_step.py,sha256=hIsvJ21hvDXDH1HJSc76WL22FtEvSEN5g7pVpQBEoEU,1304
|
|
69
69
|
mloda/core/core/step/feature_group_step.py,sha256=3lGaaF0r4FhsSUhdAN7hh3QiNz_0dpW3cRBoKOtaTus,5293
|
|
@@ -106,8 +106,8 @@ mloda/steward/__init__.py,sha256=PPXY3o4OM_daV6wD3DJNuPPCEEQg5NeETlG6cAmkzRE,696
|
|
|
106
106
|
mloda/steward/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
107
107
|
mloda/user/__init__.py,sha256=TG00kApwQzj8FCRIsTy-PomisoULbSTh5CgqlUT6Wvc,1879
|
|
108
108
|
mloda/user/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
109
|
-
mloda-0.4.
|
|
110
|
-
mloda-0.4.
|
|
109
|
+
mloda-0.4.5.dist-info/licenses/LICENSE.TXT,sha256=gmhQwSkHxjiShsqQ1FpJ-20YFtaa4vRCE7aCx55-6nk,11366
|
|
110
|
+
mloda-0.4.5.dist-info/licenses/NOTICE.md,sha256=Hu10B2sPnGLIHxZ4QhACSLLxukJpeJzjvkzCu48q5fY,520
|
|
111
111
|
mloda_plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
112
112
|
mloda_plugins/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
113
113
|
mloda_plugins/compute_framework/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -154,7 +154,7 @@ mloda_plugins/feature_group/experimental/aggregated_feature_group/pandas.py,sha2
|
|
|
154
154
|
mloda_plugins/feature_group/experimental/aggregated_feature_group/polars_lazy.py,sha256=NM59vF9A1m-i3zSvz8DwaSJ4a284iMGsf17CCIdridY,6224
|
|
155
155
|
mloda_plugins/feature_group/experimental/aggregated_feature_group/pyarrow.py,sha256=9VcD7wLWt57z9z9uRwwl22qVgwMBYFoeZ3iGsBvBBns,5656
|
|
156
156
|
mloda_plugins/feature_group/experimental/clustering/__init__.py,sha256=769NSapfi48V7BBh8zoo-ale2We6K4OV6ocNlzAhfEw,59
|
|
157
|
-
mloda_plugins/feature_group/experimental/clustering/base.py,sha256=
|
|
157
|
+
mloda_plugins/feature_group/experimental/clustering/base.py,sha256=CCIi5ohOTkY4os3Ah0V09Ht4hPMXZc1NXMiN7ME42wc,16411
|
|
158
158
|
mloda_plugins/feature_group/experimental/clustering/pandas.py,sha256=qZhlnC5L96wPo4PfkwJJzG0_dZ8CCFEq38eyG5nIYJ0,19239
|
|
159
159
|
mloda_plugins/feature_group/experimental/data_quality/__init__.py,sha256=ga8jdKaLl4bxkxMqNtRbrkHFnRWZIp8f3bR7DVG5d-I,45
|
|
160
160
|
mloda_plugins/feature_group/experimental/data_quality/missing_value/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -162,12 +162,12 @@ mloda_plugins/feature_group/experimental/data_quality/missing_value/base.py,sha2
|
|
|
162
162
|
mloda_plugins/feature_group/experimental/data_quality/missing_value/pandas.py,sha256=QGdIHohILRmHrjk6WrNobn5jSz7H_aLK83_bxzCN9RE,8510
|
|
163
163
|
mloda_plugins/feature_group/experimental/data_quality/missing_value/pyarrow.py,sha256=H8yMtnCf3Z4BZde676YwIPSpsjUGfi1pU2HXNoSRArw,14204
|
|
164
164
|
mloda_plugins/feature_group/experimental/data_quality/missing_value/python_dict.py,sha256=Dnh0WcT1xjNETkDa7Wd5u-zCu_g20-fa_QEuh_-eK-Y,13856
|
|
165
|
-
mloda_plugins/feature_group/experimental/dimensionality_reduction/base.py,sha256=
|
|
165
|
+
mloda_plugins/feature_group/experimental/dimensionality_reduction/base.py,sha256=Dul6GdYLgRe_DAcoMWM6KYrjYE9iwBNCuX90VNFvHhQ,15899
|
|
166
166
|
mloda_plugins/feature_group/experimental/dimensionality_reduction/pandas.py,sha256=Bl3xVPyQTuDAtxBVuS09tAWE4RVbh5i15z0h3l6UYLI,13690
|
|
167
167
|
mloda_plugins/feature_group/experimental/dynamic_feature_group_factory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
168
168
|
mloda_plugins/feature_group/experimental/dynamic_feature_group_factory/dynamic_feature_group_factory.py,sha256=Gn6dvrWQ2ldNWRMsuEhlT3jp_tqC1FVlr0pGpJnkrVs,12982
|
|
169
169
|
mloda_plugins/feature_group/experimental/forecasting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
170
|
-
mloda_plugins/feature_group/experimental/forecasting/base.py,sha256=
|
|
170
|
+
mloda_plugins/feature_group/experimental/forecasting/base.py,sha256=or_y_sryVjN_D2v3W2Fx1EQRi-bQSUBcEye1X7xX2Ws,23085
|
|
171
171
|
mloda_plugins/feature_group/experimental/forecasting/forecasting_artifact.py,sha256=9i9Eg5PEFEl6Nq12RTPxCeVlZZ9u-Xmju-lJRARqOVI,4215
|
|
172
172
|
mloda_plugins/feature_group/experimental/forecasting/pandas.py,sha256=sJaZmBCISr68kB5yGuTXzN9gpa60VF4DPQDIkJBgugM,28719
|
|
173
173
|
mloda_plugins/feature_group/experimental/geo_distance/__init__.py,sha256=wqp7I3j87AmrVBi2rlqcz4Sj-R1QMe3EasmNFb_Zxg4,85
|
|
@@ -220,7 +220,7 @@ mloda_plugins/feature_group/experimental/text_cleaning/base.py,sha256=fJyMZfg_qe
|
|
|
220
220
|
mloda_plugins/feature_group/experimental/text_cleaning/pandas.py,sha256=VUlFcyeMENBUJu_Mm-dHn5Xwj0SlUhTiyIjhXri4-jE,7307
|
|
221
221
|
mloda_plugins/feature_group/experimental/text_cleaning/python_dict.py,sha256=doE7juFYH809_YV_p-yKj1ZTqJWFGLu55OXMJ0kk7B4,7797
|
|
222
222
|
mloda_plugins/feature_group/experimental/time_window/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
223
|
-
mloda_plugins/feature_group/experimental/time_window/base.py,sha256=
|
|
223
|
+
mloda_plugins/feature_group/experimental/time_window/base.py,sha256=Y2XaU3mmxmaBFwAAdMB0-KAxfwmvfoAVHQiqCtsIwm8,17719
|
|
224
224
|
mloda_plugins/feature_group/experimental/time_window/pandas.py,sha256=4Ydj5R-Cb4_W6RmxSUUYkmcPSbu2ePOtCLt53VTd_8g,7801
|
|
225
225
|
mloda_plugins/feature_group/experimental/time_window/pyarrow.py,sha256=DxryfWGjJl6InR_6Bisr9HAZQxreWL25TgnOmquJhss,10718
|
|
226
226
|
mloda_plugins/feature_group/input_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -244,8 +244,8 @@ mloda_plugins/function_extender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
|
|
|
244
244
|
mloda_plugins/function_extender/base_implementations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
245
245
|
mloda_plugins/function_extender/base_implementations/otel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
246
246
|
mloda_plugins/function_extender/base_implementations/otel/otel_extender.py,sha256=cKFWuVHOzk78Jm4zFfHxdTYcNVAzaM-ORSV0QCkScQM,660
|
|
247
|
-
mloda-0.4.
|
|
248
|
-
mloda-0.4.
|
|
249
|
-
mloda-0.4.
|
|
250
|
-
mloda-0.4.
|
|
251
|
-
mloda-0.4.
|
|
247
|
+
mloda-0.4.5.dist-info/METADATA,sha256=GLEbX7dVW2UqWlG57Mn-_umPJcXvD0v3mVqJTIWNTtw,12199
|
|
248
|
+
mloda-0.4.5.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
249
|
+
mloda-0.4.5.dist-info/entry_points.txt,sha256=f7hp7s4laABj9eN5YwEjQAyInF-fa687MXdz-hKYMIA,80
|
|
250
|
+
mloda-0.4.5.dist-info/top_level.txt,sha256=zImHD-7ilfeB7QZ6Bd9Htwwx5O-Z84D0T2pUgKrGDdc,20
|
|
251
|
+
mloda-0.4.5.dist-info/RECORD,,
|
|
@@ -121,8 +121,9 @@ class ClusteringFeatureGroup(FeatureChainParserMixin, FeatureGroup):
|
|
|
121
121
|
"explanation": "Number of clusters or 'auto' for automatic determination",
|
|
122
122
|
DefaultOptionKeys.context: True, # Mark as context parameter
|
|
123
123
|
DefaultOptionKeys.strict_validation: True, # Enable strict validation
|
|
124
|
-
DefaultOptionKeys.validation_function: lambda value:
|
|
125
|
-
|
|
124
|
+
DefaultOptionKeys.validation_function: lambda value: (
|
|
125
|
+
value == "auto" or (isinstance(value, (int, str)) and str(value).isdigit() and int(value) > 0)
|
|
126
|
+
),
|
|
126
127
|
},
|
|
127
128
|
DefaultOptionKeys.in_features: {
|
|
128
129
|
"explanation": "Source features to use for clustering",
|
|
@@ -130,9 +130,9 @@ class DimensionalityReductionFeatureGroup(FeatureChainParserMixin, FeatureGroup)
|
|
|
130
130
|
"explanation": "Target dimension for the reduction (positive integer)",
|
|
131
131
|
DefaultOptionKeys.context: True,
|
|
132
132
|
DefaultOptionKeys.strict_validation: True,
|
|
133
|
-
DefaultOptionKeys.validation_function: lambda value:
|
|
134
|
-
|
|
135
|
-
|
|
133
|
+
DefaultOptionKeys.validation_function: lambda value: (
|
|
134
|
+
isinstance(value, (int, str)) and str(value).isdigit() and int(value) > 0
|
|
135
|
+
),
|
|
136
136
|
},
|
|
137
137
|
DefaultOptionKeys.in_features: {
|
|
138
138
|
"explanation": "Source features to use for dimensionality reduction",
|
|
@@ -145,18 +145,18 @@ class DimensionalityReductionFeatureGroup(FeatureChainParserMixin, FeatureGroup)
|
|
|
145
145
|
DefaultOptionKeys.context: True,
|
|
146
146
|
DefaultOptionKeys.strict_validation: False,
|
|
147
147
|
"default": 250,
|
|
148
|
-
DefaultOptionKeys.validation_function: lambda value:
|
|
149
|
-
|
|
150
|
-
|
|
148
|
+
DefaultOptionKeys.validation_function: lambda value: (
|
|
149
|
+
isinstance(value, (int, str)) and str(value).isdigit() and int(value) > 0
|
|
150
|
+
),
|
|
151
151
|
},
|
|
152
152
|
TSNE_N_ITER_WITHOUT_PROGRESS: {
|
|
153
153
|
"explanation": "Maximum iterations without progress before early stopping (t-SNE)",
|
|
154
154
|
DefaultOptionKeys.context: True,
|
|
155
155
|
DefaultOptionKeys.strict_validation: False,
|
|
156
156
|
"default": 50,
|
|
157
|
-
DefaultOptionKeys.validation_function: lambda value:
|
|
158
|
-
|
|
159
|
-
|
|
157
|
+
DefaultOptionKeys.validation_function: lambda value: (
|
|
158
|
+
isinstance(value, (int, str)) and str(value).isdigit() and int(value) > 0
|
|
159
|
+
),
|
|
160
160
|
},
|
|
161
161
|
TSNE_METHOD: {
|
|
162
162
|
"barnes_hut": "Barnes-Hut approximation (faster, O(n log n))",
|
|
@@ -183,9 +183,9 @@ class DimensionalityReductionFeatureGroup(FeatureChainParserMixin, FeatureGroup)
|
|
|
183
183
|
DefaultOptionKeys.context: True,
|
|
184
184
|
DefaultOptionKeys.strict_validation: False,
|
|
185
185
|
"default": 200,
|
|
186
|
-
DefaultOptionKeys.validation_function: lambda value:
|
|
187
|
-
|
|
188
|
-
|
|
186
|
+
DefaultOptionKeys.validation_function: lambda value: (
|
|
187
|
+
isinstance(value, (int, str)) and str(value).isdigit() and int(value) > 0
|
|
188
|
+
),
|
|
189
189
|
},
|
|
190
190
|
# Isomap specific parameters
|
|
191
191
|
ISOMAP_N_NEIGHBORS: {
|
|
@@ -193,9 +193,9 @@ class DimensionalityReductionFeatureGroup(FeatureChainParserMixin, FeatureGroup)
|
|
|
193
193
|
DefaultOptionKeys.context: True,
|
|
194
194
|
DefaultOptionKeys.strict_validation: False,
|
|
195
195
|
"default": 5,
|
|
196
|
-
DefaultOptionKeys.validation_function: lambda value:
|
|
197
|
-
|
|
198
|
-
|
|
196
|
+
DefaultOptionKeys.validation_function: lambda value: (
|
|
197
|
+
isinstance(value, (int, str)) and str(value).isdigit() and int(value) > 0
|
|
198
|
+
),
|
|
199
199
|
},
|
|
200
200
|
}
|
|
201
201
|
|
|
@@ -145,9 +145,8 @@ class ForecastingFeatureGroup(FeatureChainParserMixin, FeatureGroup):
|
|
|
145
145
|
DefaultOptionKeys.context: True,
|
|
146
146
|
DefaultOptionKeys.strict_validation: True,
|
|
147
147
|
DefaultOptionKeys.validation_function: lambda x: (
|
|
148
|
-
isinstance(x, int) or (isinstance(x, str) and x.isdigit())
|
|
149
|
-
)
|
|
150
|
-
and int(x) > 0,
|
|
148
|
+
(isinstance(x, int) or (isinstance(x, str) and x.isdigit())) and int(x) > 0
|
|
149
|
+
),
|
|
151
150
|
},
|
|
152
151
|
TIME_UNIT: {
|
|
153
152
|
**TIME_UNITS,
|
|
@@ -134,8 +134,9 @@ class TimeWindowFeatureGroup(FeatureChainParserMixin, FeatureGroup):
|
|
|
134
134
|
"explanation": "Size of the time window (must be positive integer)",
|
|
135
135
|
DefaultOptionKeys.context: True, # Mark as context parameter
|
|
136
136
|
DefaultOptionKeys.strict_validation: True, # Enable strict validation
|
|
137
|
-
DefaultOptionKeys.validation_function: lambda x: (
|
|
138
|
-
|
|
137
|
+
DefaultOptionKeys.validation_function: lambda x: (
|
|
138
|
+
(isinstance(x, int) and x > 0) or (isinstance(x, str) and x.isdigit() and int(x) > 0)
|
|
139
|
+
),
|
|
139
140
|
},
|
|
140
141
|
# Time unit parameter (context parameter)
|
|
141
142
|
TIME_UNIT: {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|