mloda 0.3.0__py3-none-any.whl → 0.3.2__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-0.3.0.dist-info → mloda-0.3.2.dist-info}/METADATA +10 -10
- {mloda-0.3.0.dist-info → mloda-0.3.2.dist-info}/RECORD +92 -91
- mloda_core/abstract_plugins/components/base_artifact.py +3 -1
- mloda_core/abstract_plugins/components/feature.py +4 -4
- mloda_core/abstract_plugins/components/feature_chainer/feature_chain_parser.py +44 -17
- mloda_core/abstract_plugins/components/feature_collection.py +2 -2
- mloda_core/abstract_plugins/components/feature_group_version.py +4 -4
- mloda_core/abstract_plugins/components/feature_name.py +0 -3
- mloda_core/abstract_plugins/components/input_data/base_input_data.py +3 -3
- mloda_core/abstract_plugins/components/link.py +113 -29
- mloda_core/abstract_plugins/components/options.py +10 -10
- mloda_core/api/prepare/setup_compute_framework.py +2 -2
- mloda_core/api/request.py +44 -13
- mloda_core/core/step/feature_group_step.py +2 -1
- mloda_core/filter/filter_engine.py +3 -12
- mloda_core/filter/filter_parameter.py +55 -0
- mloda_core/filter/single_filter.py +4 -4
- mloda_core/prepare/execution_plan.py +12 -6
- mloda_core/prepare/graph/graph.py +3 -3
- mloda_core/prepare/identify_feature_group.py +10 -3
- mloda_core/prepare/resolve_links.py +86 -18
- mloda_core/runtime/flight/flight_server.py +1 -1
- mloda_core/runtime/run.py +7 -5
- mloda_core/runtime/worker/multiprocessing_worker.py +11 -9
- mloda_plugins/compute_framework/base_implementations/duckdb/duckdb_filter_engine.py +7 -33
- mloda_plugins/compute_framework/base_implementations/duckdb/duckdb_pyarrow_transformer.py +1 -1
- mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_filter_engine.py +22 -12
- mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_framework.py +2 -2
- mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_pyarrow_transformer.py +2 -2
- mloda_plugins/compute_framework/base_implementations/pandas/dataframe.py +2 -2
- mloda_plugins/compute_framework/base_implementations/pandas/pandaspyarrowtransformer.py +1 -1
- mloda_plugins/compute_framework/base_implementations/polars/dataframe.py +3 -3
- mloda_plugins/compute_framework/base_implementations/polars/lazy_dataframe.py +5 -5
- mloda_plugins/compute_framework/base_implementations/polars/polars_filter_engine.py +8 -34
- mloda_plugins/compute_framework/base_implementations/polars/polars_lazy_merge_engine.py +1 -1
- mloda_plugins/compute_framework/base_implementations/polars/polars_lazy_pyarrow_transformer.py +3 -3
- mloda_plugins/compute_framework/base_implementations/polars/polars_merge_engine.py +1 -1
- mloda_plugins/compute_framework/base_implementations/polars/polars_pyarrow_transformer.py +2 -2
- mloda_plugins/compute_framework/base_implementations/pyarrow/pyarrow_filter_engine.py +7 -33
- mloda_plugins/compute_framework/base_implementations/pyarrow/table.py +1 -1
- mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_filter_engine.py +13 -32
- mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_framework.py +1 -1
- mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_pyarrow_transformer.py +1 -1
- mloda_plugins/compute_framework/base_implementations/spark/spark_filter_engine.py +13 -32
- mloda_plugins/compute_framework/base_implementations/spark/spark_framework.py +4 -4
- mloda_plugins/compute_framework/base_implementations/spark/spark_pyarrow_transformer.py +1 -1
- mloda_plugins/config/feature/loader.py +12 -18
- mloda_plugins/feature_group/experimental/aggregated_feature_group/base.py +20 -17
- mloda_plugins/feature_group/experimental/aggregated_feature_group/pandas.py +8 -8
- mloda_plugins/feature_group/experimental/aggregated_feature_group/polars_lazy.py +8 -8
- mloda_plugins/feature_group/experimental/aggregated_feature_group/pyarrow.py +7 -7
- mloda_plugins/feature_group/experimental/clustering/base.py +26 -26
- mloda_plugins/feature_group/experimental/clustering/pandas.py +31 -29
- mloda_plugins/feature_group/experimental/data_quality/missing_value/base.py +23 -22
- mloda_plugins/feature_group/experimental/data_quality/missing_value/pandas.py +16 -16
- mloda_plugins/feature_group/experimental/data_quality/missing_value/pyarrow.py +9 -11
- mloda_plugins/feature_group/experimental/data_quality/missing_value/python_dict.py +8 -8
- mloda_plugins/feature_group/experimental/default_options_key.py +1 -1
- mloda_plugins/feature_group/experimental/dimensionality_reduction/base.py +17 -15
- mloda_plugins/feature_group/experimental/dimensionality_reduction/pandas.py +30 -18
- mloda_plugins/feature_group/experimental/dynamic_feature_group_factory/dynamic_feature_group_factory.py +35 -35
- mloda_plugins/feature_group/experimental/forecasting/base.py +39 -29
- mloda_plugins/feature_group/experimental/forecasting/pandas.py +18 -18
- mloda_plugins/feature_group/experimental/geo_distance/base.py +18 -20
- mloda_plugins/feature_group/experimental/geo_distance/pandas.py +2 -2
- mloda_plugins/feature_group/experimental/llm/cli_features/refactor_git_cached.py +6 -6
- mloda_plugins/feature_group/experimental/llm/installed_packages_feature_group.py +2 -2
- mloda_plugins/feature_group/experimental/llm/list_directory_feature_group.py +2 -2
- mloda_plugins/feature_group/experimental/llm/llm_api/llm_base_request.py +2 -2
- mloda_plugins/feature_group/experimental/llm/llm_api/request_loop.py +3 -2
- mloda_plugins/feature_group/experimental/llm/llm_file_selector.py +1 -1
- mloda_plugins/feature_group/experimental/node_centrality/base.py +8 -12
- mloda_plugins/feature_group/experimental/node_centrality/pandas.py +2 -2
- mloda_plugins/feature_group/experimental/sklearn/encoding/base.py +11 -12
- mloda_plugins/feature_group/experimental/sklearn/encoding/pandas.py +2 -2
- mloda_plugins/feature_group/experimental/sklearn/pipeline/base.py +9 -14
- mloda_plugins/feature_group/experimental/sklearn/pipeline/pandas.py +2 -2
- mloda_plugins/feature_group/experimental/sklearn/scaling/base.py +8 -9
- mloda_plugins/feature_group/experimental/sklearn/scaling/pandas.py +2 -2
- mloda_plugins/feature_group/experimental/source_input_feature.py +10 -10
- mloda_plugins/feature_group/experimental/text_cleaning/base.py +8 -11
- mloda_plugins/feature_group/experimental/text_cleaning/pandas.py +2 -2
- mloda_plugins/feature_group/experimental/time_window/base.py +27 -25
- mloda_plugins/feature_group/experimental/time_window/pandas.py +8 -8
- mloda_plugins/feature_group/experimental/time_window/pyarrow.py +6 -6
- mloda_plugins/feature_group/input_data/read_context_files.py +1 -1
- mloda_plugins/function_extender/base_implementations/otel/otel_extender.py +1 -1
- {mloda-0.3.0.dist-info → mloda-0.3.2.dist-info}/WHEEL +0 -0
- {mloda-0.3.0.dist-info → mloda-0.3.2.dist-info}/entry_points.txt +0 -0
- {mloda-0.3.0.dist-info → mloda-0.3.2.dist-info}/licenses/LICENSE.TXT +0 -0
- {mloda-0.3.0.dist-info → mloda-0.3.2.dist-info}/licenses/NOTICE.md +0 -0
- {mloda-0.3.0.dist-info → mloda-0.3.2.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mloda
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: Rethinking Data and Feature Engineering
|
|
5
5
|
Author-email: Tom Kaltofen <info@mloda.ai>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -79,7 +79,7 @@ class SampleData(AbstractFeatureGroup):
|
|
|
79
79
|
# Step 2: Load mloda plugins and run pipeline
|
|
80
80
|
from mloda_core.api.request import mlodaAPI
|
|
81
81
|
from mloda_core.abstract_plugins.plugin_loader.plugin_loader import PluginLoader
|
|
82
|
-
from mloda_plugins.compute_framework.base_implementations.pandas.dataframe import
|
|
82
|
+
from mloda_plugins.compute_framework.base_implementations.pandas.dataframe import PandasDataFrame
|
|
83
83
|
|
|
84
84
|
PluginLoader.all()
|
|
85
85
|
|
|
@@ -89,7 +89,7 @@ result = mlodaAPI.run_all(
|
|
|
89
89
|
"age", # Original column
|
|
90
90
|
"income__standard_scaled" # Transform: scale income to mean=0, std=1
|
|
91
91
|
],
|
|
92
|
-
compute_frameworks={
|
|
92
|
+
compute_frameworks={PandasDataFrame}
|
|
93
93
|
)
|
|
94
94
|
|
|
95
95
|
# Step 3: Get your processed data
|
|
@@ -185,14 +185,14 @@ For truly custom configurations, you can use `Feature` objects:
|
|
|
185
185
|
# "custom_feature",
|
|
186
186
|
# options=Options({
|
|
187
187
|
# "custom_param": "value",
|
|
188
|
-
# "
|
|
188
|
+
# "in_features": "source_column",
|
|
189
189
|
# })
|
|
190
190
|
# ),
|
|
191
191
|
# ]
|
|
192
192
|
#
|
|
193
193
|
# result = mlodaAPI.run_all(
|
|
194
194
|
# features=features,
|
|
195
|
-
# compute_frameworks={
|
|
195
|
+
# compute_frameworks={PandasDataFrame}
|
|
196
196
|
# )
|
|
197
197
|
```
|
|
198
198
|
|
|
@@ -237,7 +237,7 @@ mloda supports multiple data access patterns depending on your use case:
|
|
|
237
237
|
#
|
|
238
238
|
# result = mlodaAPI.run_all(
|
|
239
239
|
# features=["customer_id", "income__standard_scaled"],
|
|
240
|
-
# compute_frameworks={
|
|
240
|
+
# compute_frameworks={PandasDataFrame},
|
|
241
241
|
# data_access_collection=data_access
|
|
242
242
|
# )
|
|
243
243
|
```
|
|
@@ -255,7 +255,7 @@ mloda supports multiple data access patterns depending on your use case:
|
|
|
255
255
|
#
|
|
256
256
|
# result = mlodaAPI.run_all(
|
|
257
257
|
# features=["customer_id", "age__standard_scaled"],
|
|
258
|
-
# compute_frameworks={
|
|
258
|
+
# compute_frameworks={PandasDataFrame},
|
|
259
259
|
# api_input_data_collection=api_input_data_collection,
|
|
260
260
|
# api_data=api_data
|
|
261
261
|
# )
|
|
@@ -274,7 +274,7 @@ mloda supports multiple compute frameworks (pandas, polars, pyarrow, etc.). Most
|
|
|
274
274
|
# Default: Everything processes with pandas
|
|
275
275
|
result = mlodaAPI.run_all(
|
|
276
276
|
features=["customer_id", "income__standard_scaled"],
|
|
277
|
-
compute_frameworks={
|
|
277
|
+
compute_frameworks={PandasDataFrame} # Use pandas for all features
|
|
278
278
|
)
|
|
279
279
|
|
|
280
280
|
data = result[0] # Returns pandas DataFrame
|
|
@@ -287,7 +287,7 @@ print(type(data)) # <class 'pandas.core.frame.DataFrame'>
|
|
|
287
287
|
- **PyArrow**: Memory-efficient, great for columnar data
|
|
288
288
|
- **Spark**: Distributed processing for big data
|
|
289
289
|
|
|
290
|
-
> **For most use cases**: Start with `compute_frameworks={
|
|
290
|
+
> **For most use cases**: Start with `compute_frameworks={PandasDataFrame}` and switch to others only if you need specific performance characteristics.
|
|
291
291
|
|
|
292
292
|
### 6. Putting It All Together - Complete ML Pipeline
|
|
293
293
|
|
|
@@ -342,7 +342,7 @@ result = mlodaAPI.run_all(
|
|
|
342
342
|
"customer_segment__label_encoded",
|
|
343
343
|
"churned"
|
|
344
344
|
],
|
|
345
|
-
compute_frameworks={
|
|
345
|
+
compute_frameworks={PandasDataFrame}
|
|
346
346
|
)
|
|
347
347
|
|
|
348
348
|
# Step 3: Prepare for ML
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
mloda-0.3.
|
|
2
|
-
mloda-0.3.
|
|
1
|
+
mloda-0.3.2.dist-info/licenses/LICENSE.TXT,sha256=gmhQwSkHxjiShsqQ1FpJ-20YFtaa4vRCE7aCx55-6nk,11366
|
|
2
|
+
mloda-0.3.2.dist-info/licenses/NOTICE.md,sha256=Hu10B2sPnGLIHxZ4QhACSLLxukJpeJzjvkzCu48q5fY,520
|
|
3
3
|
mloda_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
mloda_core/abstract_plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
mloda_core/abstract_plugins/abstract_feature_group.py,sha256=I3fVEULHUtrvPoc94iyxyBQVacD7GGI5piqJ6FoqgAY,18435
|
|
6
6
|
mloda_core/abstract_plugins/compute_frame_work.py,sha256=FviBBlsZDPybv8OfMY9EG4en-bGOjyQHRl2XLZr3pTw,19655
|
|
7
7
|
mloda_core/abstract_plugins/function_extender.py,sha256=kWcNTxwJloY1-6GwLrS8ZPwvyEkz3ZCDAaR9p23UU3I,871
|
|
8
8
|
mloda_core/abstract_plugins/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
-
mloda_core/abstract_plugins/components/base_artifact.py,sha256=
|
|
9
|
+
mloda_core/abstract_plugins/components/base_artifact.py,sha256=Jy3JrMwGFy90rPsAAisfqSjoUv9p9Qtfkx8D0UnNQhA,5307
|
|
10
10
|
mloda_core/abstract_plugins/components/base_validator.py,sha256=pZprl3iFF4oBjnQDk9XxvnOIuawrEQ1YIpM9B4Kl4LU,1951
|
|
11
11
|
mloda_core/abstract_plugins/components/data_access_collection.py,sha256=w7jD95a2Ib55gDk278F0qRfi-GBNHK4jXMNBPcJjd3c,1551
|
|
12
12
|
mloda_core/abstract_plugins/components/data_types.py,sha256=PFnH2A77k9DTIUJ6jYrjFd8KZxrzFVcXO5M40hWkUf0,3576
|
|
13
13
|
mloda_core/abstract_plugins/components/domain.py,sha256=AzVvWgG3oeHUCXJDtN2heyiUQ1zRK7u5O6az5kWxj_I,1226
|
|
14
|
-
mloda_core/abstract_plugins/components/feature.py,sha256=
|
|
15
|
-
mloda_core/abstract_plugins/components/feature_collection.py,sha256=
|
|
16
|
-
mloda_core/abstract_plugins/components/feature_group_version.py,sha256=
|
|
17
|
-
mloda_core/abstract_plugins/components/feature_name.py,sha256=
|
|
14
|
+
mloda_core/abstract_plugins/components/feature.py,sha256=YBIIWKLHhadITLprTq_XUuNC65WMp7HKhGma0mMdySE,10083
|
|
15
|
+
mloda_core/abstract_plugins/components/feature_collection.py,sha256=INsIdblZW9Pvx_AKintmYgGWz19pnqLY8naIblUoYwY,4660
|
|
16
|
+
mloda_core/abstract_plugins/components/feature_group_version.py,sha256=MSdEFs-r5BaR9JZ6q5iqFM-QkTAmf3yjVgSJKawdlA4,2130
|
|
17
|
+
mloda_core/abstract_plugins/components/feature_name.py,sha256=AgWceOqyHNYGVM5XE1NrGFeZKf9AKtLRoRRaxL7tHzk,673
|
|
18
18
|
mloda_core/abstract_plugins/components/feature_set.py,sha256=EeHep0iIvect21A6X-kNYBFUDgU8dkrfczTZwG_2FFY,4275
|
|
19
19
|
mloda_core/abstract_plugins/components/hashable_dict.py,sha256=xzUIn2wbujo3jwwGayHnSbrrADSiVYU_xUV1nt5Yk8M,426
|
|
20
|
-
mloda_core/abstract_plugins/components/link.py,sha256=
|
|
21
|
-
mloda_core/abstract_plugins/components/options.py,sha256=
|
|
20
|
+
mloda_core/abstract_plugins/components/link.py,sha256=0GuhhKsAJZ08CVEVCxh-IGndFz6FoZIrYcDNirPYXgA,10805
|
|
21
|
+
mloda_core/abstract_plugins/components/options.py,sha256=SqYneShxtjzUuxy9ItTFJBztOQjjRqLSeT4qTLYuaL0,11607
|
|
22
22
|
mloda_core/abstract_plugins/components/parallelization_modes.py,sha256=k7z5yvyQfhfNYcljfZ0dWBf0ZMpnCSqaW0vajCh202Q,144
|
|
23
23
|
mloda_core/abstract_plugins/components/utils.py,sha256=_ofeiOBQLwYU3_p9JBe61Ihps4dpFUcsrqI6XrA92Yo,530
|
|
24
24
|
mloda_core/abstract_plugins/components/feature_chainer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
-
mloda_core/abstract_plugins/components/feature_chainer/feature_chain_parser.py,sha256=
|
|
25
|
+
mloda_core/abstract_plugins/components/feature_chainer/feature_chain_parser.py,sha256=m8BWFHaTln22hUCEp1y9bFHmtet-JdfKzM27AK44zNg,14239
|
|
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=dODu95RTxAmLExId2XxPau-GZhBaGCO6k1sPntcwjfk,4298
|
|
@@ -30,7 +30,7 @@ mloda_core/abstract_plugins/components/index/__init__.py,sha256=47DEQpj8HBSa-_TI
|
|
|
30
30
|
mloda_core/abstract_plugins/components/index/add_index_feature.py,sha256=zVDCZA6tey-KO2JlEUf7joBSEmcy0pJ7cDOpxIB7xis,767
|
|
31
31
|
mloda_core/abstract_plugins/components/index/index.py,sha256=5Hc7eI1uunhK4Lnt-A4ZrJd5U8os77Md3pdOWxDPBwE,1269
|
|
32
32
|
mloda_core/abstract_plugins/components/input_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
-
mloda_core/abstract_plugins/components/input_data/base_input_data.py,sha256=
|
|
33
|
+
mloda_core/abstract_plugins/components/input_data/base_input_data.py,sha256=a-MSJlpkrmvFonI61P1yNmE3diNffBT9JxW3pCvGjro,6337
|
|
34
34
|
mloda_core/abstract_plugins/components/input_data/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
35
|
mloda_core/abstract_plugins/components/input_data/api/api_input_data.py,sha256=dZJXQtJQ6HdwjPKqAiW3V9F4LtYPFTcNe8TIZ8g7U-4,1290
|
|
36
36
|
mloda_core/abstract_plugins/components/input_data/api/api_input_data_collection.py,sha256=GXeK_TjqBUrRGsQh5oXigQxX7004gxIGl3Vbe68wa1g,3033
|
|
@@ -46,124 +46,125 @@ mloda_core/abstract_plugins/components/plugin_option/plugin_collector.py,sha256=
|
|
|
46
46
|
mloda_core/abstract_plugins/plugin_loader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
47
|
mloda_core/abstract_plugins/plugin_loader/plugin_loader.py,sha256=IKwUtrDJS-MJLVJKF_WUbsiGMRRhmmr2W51jAs-83fs,5883
|
|
48
48
|
mloda_core/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
|
-
mloda_core/api/request.py,sha256=
|
|
49
|
+
mloda_core/api/request.py,sha256=12LXCNb5Q2imDN4oizTFKqRKqMMS8xkfUdG_wgxw8_4,10791
|
|
50
50
|
mloda_core/api/prepare/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
-
mloda_core/api/prepare/setup_compute_framework.py,sha256=
|
|
51
|
+
mloda_core/api/prepare/setup_compute_framework.py,sha256=0J7Aksb2jYUJiH0Eg6S2mJzf2t1G98XEqMmpQ0Tzshw,2659
|
|
52
52
|
mloda_core/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
53
53
|
mloda_core/core/cfw_manager.py,sha256=PxXFJthx75FLRhC15gsNoX7wL_y5Vw16MZUeE6AGnoQ,8818
|
|
54
54
|
mloda_core/core/engine.py,sha256=PrwsQ6v-Qlh5znChcJ9ltrQ06EJr8ZoXyZtUiIdqgfo,13720
|
|
55
55
|
mloda_core/core/step/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
56
56
|
mloda_core/core/step/abstract_step.py,sha256=AA4EtJry3AeZ30zOKoHTSZlPkPxbaTs_sFvvTxtnrxU,1310
|
|
57
|
-
mloda_core/core/step/feature_group_step.py,sha256
|
|
57
|
+
mloda_core/core/step/feature_group_step.py,sha256=dSoqidkb4KgygqhKhmn8HeJrE9Sm0M0Rx4rwncJMrrU,5319
|
|
58
58
|
mloda_core/core/step/join_step.py,sha256=4kEHDwesNpKlG39YJcmpztv7znJVIZtfxzrP428e__w,4243
|
|
59
59
|
mloda_core/core/step/transform_frame_work_step.py,sha256=7VLiH62ODFzlhWMuDlptjXr3G4EFISprqyOlpUqh-a0,5968
|
|
60
60
|
mloda_core/filter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
|
-
mloda_core/filter/filter_engine.py,sha256=
|
|
61
|
+
mloda_core/filter/filter_engine.py,sha256=qut5VBn8RW5Z0cx3-KfDWabPS01Uk4gPM-D-FMVaidw,3302
|
|
62
|
+
mloda_core/filter/filter_parameter.py,sha256=2nMBoU3_L2bxUaGwMvHby-T2TDEZo1rVtJjAUxhn0i0,1373
|
|
62
63
|
mloda_core/filter/filter_type_enum.py,sha256=0FB8lj9L6AprMrUiobxpPwzO3ZsQN_O1ZB-HBo5XOXM,196
|
|
63
64
|
mloda_core/filter/global_filter.py,sha256=-f5-raXY0AZInSjlelxmlnBdE0yIsMfqvWx9V2Y06bk,12160
|
|
64
|
-
mloda_core/filter/single_filter.py,sha256=
|
|
65
|
+
mloda_core/filter/single_filter.py,sha256=Q6CrbuSmBUR118WMwmMZ_h6CiGVClMrXnmrT-LXZeoA,2955
|
|
65
66
|
mloda_core/prepare/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
66
67
|
mloda_core/prepare/accessible_plugins.py,sha256=yCecs6HI86L-ZpHVbCfOEqMx_qiE1rfU4r5KF-eMbgo,3107
|
|
67
|
-
mloda_core/prepare/execution_plan.py,sha256=
|
|
68
|
-
mloda_core/prepare/identify_feature_group.py,sha256=
|
|
68
|
+
mloda_core/prepare/execution_plan.py,sha256=18Gv8zHIgiEFxQ_iB-fXK8MBQ43T_4R1ZDiDxHMvaHs,43583
|
|
69
|
+
mloda_core/prepare/identify_feature_group.py,sha256=U0oFNVrR1pN7MAQVfXZ8rP-SKuCrb4gCpxJNa5daxpc,6975
|
|
69
70
|
mloda_core/prepare/joinstep_collection.py,sha256=_uy4NdWdFCR30K-p_pUgaF9Zn2l-7cdwM6_jM2zzE-M,1464
|
|
70
71
|
mloda_core/prepare/resolve_compute_frameworks.py,sha256=NA1VdilKsLOnfo0CXpgR2qUiogFEVBMdkupsXQwjyPs,6347
|
|
71
72
|
mloda_core/prepare/resolve_graph.py,sha256=i79p3OOSBqlRC-XzQYM2Bm-tNWy3CJU5d7SQbFxOLVU,3576
|
|
72
|
-
mloda_core/prepare/resolve_links.py,sha256=
|
|
73
|
+
mloda_core/prepare/resolve_links.py,sha256=JqoMzIzGhPmwmQk4tvOW083X333A0zoBWqDtSme3rz8,15405
|
|
73
74
|
mloda_core/prepare/graph/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
74
75
|
mloda_core/prepare/graph/build_graph.py,sha256=Ex2nFaCv1WRY2xO18_Zt0IsoRfj5xZMBXvS-sPcOTb8,2209
|
|
75
|
-
mloda_core/prepare/graph/graph.py,sha256=
|
|
76
|
+
mloda_core/prepare/graph/graph.py,sha256=nhtVkT1Hg9oZff_QSk9J17KQKn0Zh4AC69p_1aHAjA0,3818
|
|
76
77
|
mloda_core/prepare/graph/properties.py,sha256=Jnh5RMR2be6HzAlVKx0SzXL_m9u8NMa-SKc089hkVYg,920
|
|
77
78
|
mloda_core/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
78
|
-
mloda_core/runtime/run.py,sha256=
|
|
79
|
+
mloda_core/runtime/run.py,sha256=c3lK7Swpwls7GUudqQsTm6pYiIBaRggh1_075VSykk0,23969
|
|
79
80
|
mloda_core/runtime/flight/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
|
-
mloda_core/runtime/flight/flight_server.py,sha256=
|
|
81
|
+
mloda_core/runtime/flight/flight_server.py,sha256=AlwsJstZBHgOLXCKaq6rdJSTdbGoK8LLPmkOasQJQT8,4211
|
|
81
82
|
mloda_core/runtime/flight/runner_flight_server.py,sha256=rq4mherXpMXEPChaVS6aw_QJK90qmc4Fpjrh8NqWdFo,1267
|
|
82
83
|
mloda_core/runtime/worker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
|
-
mloda_core/runtime/worker/multiprocessing_worker.py,sha256=
|
|
84
|
+
mloda_core/runtime/worker/multiprocessing_worker.py,sha256=ck_YWnAt4sTiR5BXaJ7JsbF8lx-3IMzAivNSXhX44Ek,4821
|
|
84
85
|
mloda_core/runtime/worker/thread_worker.py,sha256=xNO6oXumHK7fzgR0O_opJMLCdkVqBP0FpLEf9xy7KqI,671
|
|
85
86
|
mloda_plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
86
87
|
mloda_plugins/compute_framework/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
87
88
|
mloda_plugins/compute_framework/base_implementations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
88
|
-
mloda_plugins/compute_framework/base_implementations/duckdb/duckdb_filter_engine.py,sha256=
|
|
89
|
+
mloda_plugins/compute_framework/base_implementations/duckdb/duckdb_filter_engine.py,sha256=P6-BVmCxJLLkRgL5fHU3nJFmdRO4rX3goJQPy4Q8mpo,5041
|
|
89
90
|
mloda_plugins/compute_framework/base_implementations/duckdb/duckdb_framework.py,sha256=T8iwTNmj4uaw5vFhMFAhYxY9S2ez0NC2TCI1rw8Jkfg,5194
|
|
90
91
|
mloda_plugins/compute_framework/base_implementations/duckdb/duckdb_merge_engine.py,sha256=HIEAMc-S0DoT-WHqH706oXJijVZLaUNjjpKTS5Bh5EY,7334
|
|
91
|
-
mloda_plugins/compute_framework/base_implementations/duckdb/duckdb_pyarrow_transformer.py,sha256=
|
|
92
|
-
mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_filter_engine.py,sha256=
|
|
93
|
-
mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_framework.py,sha256=
|
|
94
|
-
mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_pyarrow_transformer.py,sha256=
|
|
92
|
+
mloda_plugins/compute_framework/base_implementations/duckdb/duckdb_pyarrow_transformer.py,sha256=Cy4pkInjm2yI8zzqmMx5jjk_qxjpMsI59ImOET7eHoU,2312
|
|
93
|
+
mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_filter_engine.py,sha256=EktasVn0SPlCj-pIH2KWJyOtkKhwEoXBFrSzPI6YHoU,7283
|
|
94
|
+
mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_framework.py,sha256=MOEkDvoiFd25kn1lKieuUcjkFHEbfA67KEr3BYK8Zic,6971
|
|
95
|
+
mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_pyarrow_transformer.py,sha256=BjjXoa0e77m5-Iy8p4hxzZww2BowFLdebFJeK8KcmMo,3149
|
|
95
96
|
mloda_plugins/compute_framework/base_implementations/pandas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
96
|
-
mloda_plugins/compute_framework/base_implementations/pandas/dataframe.py,sha256=
|
|
97
|
+
mloda_plugins/compute_framework/base_implementations/pandas/dataframe.py,sha256=JKGJ0v7BsYwS_JDtRw-Kv-vIL_YFqOh-rbg2BRfhEPw,3218
|
|
97
98
|
mloda_plugins/compute_framework/base_implementations/pandas/pandas_filter_engine.py,sha256=Ky6W9ij3tqSHNH_-Z4SCWlFrgc_0l_S8qUvmniwl0Aw,2596
|
|
98
99
|
mloda_plugins/compute_framework/base_implementations/pandas/pandas_merge_engine.py,sha256=Mvi3XNtOUzuxFU2dOBakcEGEqTMthVRNhH74gRHmBsw,2863
|
|
99
|
-
mloda_plugins/compute_framework/base_implementations/pandas/pandaspyarrowtransformer.py,sha256=
|
|
100
|
+
mloda_plugins/compute_framework/base_implementations/pandas/pandaspyarrowtransformer.py,sha256=2qdlzfp-cvett_i6IdTABRGEMY-BNbOF44JSSCmMsBw,1909
|
|
100
101
|
mloda_plugins/compute_framework/base_implementations/polars/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
101
|
-
mloda_plugins/compute_framework/base_implementations/polars/dataframe.py,sha256=
|
|
102
|
-
mloda_plugins/compute_framework/base_implementations/polars/lazy_dataframe.py,sha256=
|
|
103
|
-
mloda_plugins/compute_framework/base_implementations/polars/polars_filter_engine.py,sha256=
|
|
104
|
-
mloda_plugins/compute_framework/base_implementations/polars/polars_lazy_merge_engine.py,sha256=
|
|
105
|
-
mloda_plugins/compute_framework/base_implementations/polars/polars_lazy_pyarrow_transformer.py,sha256=
|
|
106
|
-
mloda_plugins/compute_framework/base_implementations/polars/polars_merge_engine.py,sha256=
|
|
107
|
-
mloda_plugins/compute_framework/base_implementations/polars/polars_pyarrow_transformer.py,sha256=
|
|
102
|
+
mloda_plugins/compute_framework/base_implementations/polars/dataframe.py,sha256=9vwA2zfo3hZHe0ZXg6tTwYMkJZAUwr8kWlTd5oWs1tU,3088
|
|
103
|
+
mloda_plugins/compute_framework/base_implementations/polars/lazy_dataframe.py,sha256=31ffehgXDSRvt6WmB9zan_ELdqKghLnA-6I5l34c8SI,3848
|
|
104
|
+
mloda_plugins/compute_framework/base_implementations/polars/polars_filter_engine.py,sha256=32i0Ex7p8xisdIyjD5vZ5Pa6ge6DhUaHjd-THTLYFaM,4481
|
|
105
|
+
mloda_plugins/compute_framework/base_implementations/polars/polars_lazy_merge_engine.py,sha256=DR2005Go695hTjpWMQRfVMBXbU8jD4jVi7wf_P90dLw,1368
|
|
106
|
+
mloda_plugins/compute_framework/base_implementations/polars/polars_lazy_pyarrow_transformer.py,sha256=fDylT6bSpJrpniA0I4BUSOSTGmSznrD5td0imu4Ft60,2143
|
|
107
|
+
mloda_plugins/compute_framework/base_implementations/polars/polars_merge_engine.py,sha256=syVjxvGV4aaOktVeUTJJt6YrWvvSpIgAD2_J3fa5n-E,8253
|
|
108
|
+
mloda_plugins/compute_framework/base_implementations/polars/polars_pyarrow_transformer.py,sha256=po86VpTXnHYQBmlV79Z9hK7xJzGjL4hcp063Izk9TxU,1841
|
|
108
109
|
mloda_plugins/compute_framework/base_implementations/pyarrow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
109
|
-
mloda_plugins/compute_framework/base_implementations/pyarrow/pyarrow_filter_engine.py,sha256=
|
|
110
|
+
mloda_plugins/compute_framework/base_implementations/pyarrow/pyarrow_filter_engine.py,sha256=I_t_dsRDNsbumigrgtkioQxwXvDq5czaZMZY6eMV84Y,5403
|
|
110
111
|
mloda_plugins/compute_framework/base_implementations/pyarrow/pyarrow_merge_engine.py,sha256=BuTYK0eEk9OxjPe3LPVFCyHyrj2FVDeu0HMiIq1HevE,4947
|
|
111
|
-
mloda_plugins/compute_framework/base_implementations/pyarrow/table.py,sha256=
|
|
112
|
-
mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_filter_engine.py,sha256=
|
|
113
|
-
mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_framework.py,sha256=
|
|
112
|
+
mloda_plugins/compute_framework/base_implementations/pyarrow/table.py,sha256=n__iKD6rL3383QQKvJqTzXCFAWSFPhiCbL-xg8lA1r8,2513
|
|
113
|
+
mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_filter_engine.py,sha256=rAeAEONalTwJBLzvsbeINMQF6VWi_MKbVLp2i2VgSns,5346
|
|
114
|
+
mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_framework.py,sha256=t7P-Vc3swcc-1bJrSuDo2tHTgR4fTxwfAS9_8oHgyFY,4855
|
|
114
115
|
mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_merge_engine.py,sha256=ueuL1i4B9OmCKYFBGHwXvlTOu_qD-mDdptMcx1VjH1s,8347
|
|
115
|
-
mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_pyarrow_transformer.py,sha256=
|
|
116
|
-
mloda_plugins/compute_framework/base_implementations/spark/spark_filter_engine.py,sha256=
|
|
117
|
-
mloda_plugins/compute_framework/base_implementations/spark/spark_framework.py,sha256
|
|
116
|
+
mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_pyarrow_transformer.py,sha256=DQSbf25nBaRGV31Gs8hfKknN4JxqUZMlFjZmAbv_-8k,3438
|
|
117
|
+
mloda_plugins/compute_framework/base_implementations/spark/spark_filter_engine.py,sha256=GOOSWSw2ISDop21ZvTVlsouv-O1QY528meCzf4VqurI,4580
|
|
118
|
+
mloda_plugins/compute_framework/base_implementations/spark/spark_framework.py,sha256=-Nz82qt9zW2QQAM-QUqwlvBbzSeWYx1uWTxPExbWsqc,8327
|
|
118
119
|
mloda_plugins/compute_framework/base_implementations/spark/spark_merge_engine.py,sha256=syBOP6Ww9A_IfeJc49jpxByeP5PVvZTM9FFTUCZc3Xg,3452
|
|
119
|
-
mloda_plugins/compute_framework/base_implementations/spark/spark_pyarrow_transformer.py,sha256=
|
|
120
|
+
mloda_plugins/compute_framework/base_implementations/spark/spark_pyarrow_transformer.py,sha256=UDR6KZz4I2k0mMP9tVv8kAg_igQVCGzgpui6cQnObcc,3303
|
|
120
121
|
mloda_plugins/config/__init__.py,sha256=wm08JOS1kVronYOtmPJZCcEeMlA9wPOCFAIJG_Isi8c,34
|
|
121
122
|
mloda_plugins/config/feature/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
122
|
-
mloda_plugins/config/feature/loader.py,sha256=
|
|
123
|
+
mloda_plugins/config/feature/loader.py,sha256=urr2FQvQIXxeCM3KUHLNcRVEmD0iXXbqabRQJ79wfQc,7823
|
|
123
124
|
mloda_plugins/config/feature/models.py,sha256=RL8ok8Nn0bLHfgAq9K0HVKcTHzjG2x5gAKP394CSboA,1679
|
|
124
125
|
mloda_plugins/config/feature/parser.py,sha256=wl-Wsx1dnjiLjmnjh4du8veJVUv5JD0l57jzfDiZTOI,1001
|
|
125
126
|
mloda_plugins/feature_group/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
127
|
mloda_plugins/feature_group/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
127
|
-
mloda_plugins/feature_group/experimental/default_options_key.py,sha256=
|
|
128
|
-
mloda_plugins/feature_group/experimental/source_input_feature.py,sha256=
|
|
128
|
+
mloda_plugins/feature_group/experimental/default_options_key.py,sha256=h5i43xR4WclWs_b4N5jjsIWwmKhd4skFfn0C_0v3sAY,1020
|
|
129
|
+
mloda_plugins/feature_group/experimental/source_input_feature.py,sha256=yaK1gE6jJPypTof5V9yrjfJD4MSZY0mLp3ojKr4sP-Q,11036
|
|
129
130
|
mloda_plugins/feature_group/experimental/aggregated_feature_group/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
130
|
-
mloda_plugins/feature_group/experimental/aggregated_feature_group/base.py,sha256=
|
|
131
|
-
mloda_plugins/feature_group/experimental/aggregated_feature_group/pandas.py,sha256=
|
|
132
|
-
mloda_plugins/feature_group/experimental/aggregated_feature_group/polars_lazy.py,sha256=
|
|
133
|
-
mloda_plugins/feature_group/experimental/aggregated_feature_group/pyarrow.py,sha256=
|
|
131
|
+
mloda_plugins/feature_group/experimental/aggregated_feature_group/base.py,sha256=fjeWbZLJg37Ife7WQeF05GUiti7DBh-_Ft0crAl5eZU,11041
|
|
132
|
+
mloda_plugins/feature_group/experimental/aggregated_feature_group/pandas.py,sha256=j04RANR-LyV5yz7sNKr2ng7SjNQMVrCHedqpMgRqNek,4954
|
|
133
|
+
mloda_plugins/feature_group/experimental/aggregated_feature_group/polars_lazy.py,sha256=EhTzRl45VMq5CEJS3zmpQTSLWc2V0sKYuLGlMhcns28,6256
|
|
134
|
+
mloda_plugins/feature_group/experimental/aggregated_feature_group/pyarrow.py,sha256=xdFaexBzwI17YZzvHHME9qig36Z3fnT6wzVeg3qNPUA,5688
|
|
134
135
|
mloda_plugins/feature_group/experimental/clustering/__init__.py,sha256=769NSapfi48V7BBh8zoo-ale2We6K4OV6ocNlzAhfEw,59
|
|
135
|
-
mloda_plugins/feature_group/experimental/clustering/base.py,sha256=
|
|
136
|
-
mloda_plugins/feature_group/experimental/clustering/pandas.py,sha256=
|
|
136
|
+
mloda_plugins/feature_group/experimental/clustering/base.py,sha256=58lKB7Nkz7a5FerbENc4VItZOZNNZ3GCyi6pYN8k1ZM,18114
|
|
137
|
+
mloda_plugins/feature_group/experimental/clustering/pandas.py,sha256=5VOnDhWRbqc-oThY6R10__wsHkxHStZm7_SKmlqL1M0,19271
|
|
137
138
|
mloda_plugins/feature_group/experimental/data_quality/__init__.py,sha256=ga8jdKaLl4bxkxMqNtRbrkHFnRWZIp8f3bR7DVG5d-I,45
|
|
138
139
|
mloda_plugins/feature_group/experimental/data_quality/missing_value/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
139
|
-
mloda_plugins/feature_group/experimental/data_quality/missing_value/base.py,sha256=
|
|
140
|
-
mloda_plugins/feature_group/experimental/data_quality/missing_value/pandas.py,sha256=
|
|
141
|
-
mloda_plugins/feature_group/experimental/data_quality/missing_value/pyarrow.py,sha256=
|
|
142
|
-
mloda_plugins/feature_group/experimental/data_quality/missing_value/python_dict.py,sha256=
|
|
143
|
-
mloda_plugins/feature_group/experimental/dimensionality_reduction/base.py,sha256
|
|
144
|
-
mloda_plugins/feature_group/experimental/dimensionality_reduction/pandas.py,sha256=
|
|
140
|
+
mloda_plugins/feature_group/experimental/data_quality/missing_value/base.py,sha256=3-jFvKNpX7DYffWJL91BECdMxyXjALV1QQVQMt2mcjE,15384
|
|
141
|
+
mloda_plugins/feature_group/experimental/data_quality/missing_value/pandas.py,sha256=VblxJOQuOf0Osm0OnxSgi4O8_NJeve2MZiambMrvZV0,8542
|
|
142
|
+
mloda_plugins/feature_group/experimental/data_quality/missing_value/pyarrow.py,sha256=6LoHlPmWXTH1nbZjM2eLojfT3wMWRarcncVvavlJQLs,14236
|
|
143
|
+
mloda_plugins/feature_group/experimental/data_quality/missing_value/python_dict.py,sha256=CcX2Ib44PDReHQOGypHbnk1piTKUeYUW4vrlg3Y-9ME,13888
|
|
144
|
+
mloda_plugins/feature_group/experimental/dimensionality_reduction/base.py,sha256=-Bi1W1eLpMiNwA5K8OIXanketvvvkMcEI_du6rd4q3o,17233
|
|
145
|
+
mloda_plugins/feature_group/experimental/dimensionality_reduction/pandas.py,sha256=imyns6gIx7MBmAHCwW7vC5-r25GhOvAnLjr872Vch9s,13722
|
|
145
146
|
mloda_plugins/feature_group/experimental/dynamic_feature_group_factory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
146
|
-
mloda_plugins/feature_group/experimental/dynamic_feature_group_factory/dynamic_feature_group_factory.py,sha256=
|
|
147
|
+
mloda_plugins/feature_group/experimental/dynamic_feature_group_factory/dynamic_feature_group_factory.py,sha256=BZuD7LNugoU0az-FCuV1ude_zlldl6ZtNfNshu26voY,13533
|
|
147
148
|
mloda_plugins/feature_group/experimental/forecasting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
148
|
-
mloda_plugins/feature_group/experimental/forecasting/base.py,sha256=
|
|
149
|
+
mloda_plugins/feature_group/experimental/forecasting/base.py,sha256=w65k7Vv5kTgcgpqtLYHlyKfsuBwMmIuZwVX5Tx81buo,23534
|
|
149
150
|
mloda_plugins/feature_group/experimental/forecasting/forecasting_artifact.py,sha256=41HPYoJEXqTqcv6Zvce-vkL9RZ5YrdzSiJgmEFxGVR0,4289
|
|
150
|
-
mloda_plugins/feature_group/experimental/forecasting/pandas.py,sha256=
|
|
151
|
+
mloda_plugins/feature_group/experimental/forecasting/pandas.py,sha256=icXhBoUmd7wmJrM9vGlbi5hlzwtXaE2-MSTAvLHge7Y,28713
|
|
151
152
|
mloda_plugins/feature_group/experimental/geo_distance/__init__.py,sha256=wqp7I3j87AmrVBi2rlqcz4Sj-R1QMe3EasmNFb_Zxg4,85
|
|
152
|
-
mloda_plugins/feature_group/experimental/geo_distance/base.py,sha256=
|
|
153
|
-
mloda_plugins/feature_group/experimental/geo_distance/pandas.py,sha256=
|
|
153
|
+
mloda_plugins/feature_group/experimental/geo_distance/base.py,sha256=eilTuoTKeNH2l9ncKjAZqxb2OVLUSuhFFBa_NlElrBQ,12725
|
|
154
|
+
mloda_plugins/feature_group/experimental/geo_distance/pandas.py,sha256=EYqQGxx3FrRGY2UjyVaj_Mp39pQRY1YFUBsT6sT1TJA,6023
|
|
154
155
|
mloda_plugins/feature_group/experimental/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
155
156
|
mloda_plugins/feature_group/experimental/llm/cli.py,sha256=65VO3deuQyNo2gQWRh6HuJXvzMtnYS6WIdaV-fqCFhc,1409
|
|
156
|
-
mloda_plugins/feature_group/experimental/llm/installed_packages_feature_group.py,sha256=
|
|
157
|
-
mloda_plugins/feature_group/experimental/llm/list_directory_feature_group.py,sha256=
|
|
158
|
-
mloda_plugins/feature_group/experimental/llm/llm_file_selector.py,sha256=
|
|
157
|
+
mloda_plugins/feature_group/experimental/llm/installed_packages_feature_group.py,sha256=LpVevPcCoBYj-ELEekmw8vC9VXa8I3i-IKNako4jDsw,3829
|
|
158
|
+
mloda_plugins/feature_group/experimental/llm/list_directory_feature_group.py,sha256=iNVxcAQCGQgVhvBtEGWe75b6JqeF-Yd8wMWpBGptImo,6184
|
|
159
|
+
mloda_plugins/feature_group/experimental/llm/llm_file_selector.py,sha256=ZKYhkXfBSVZFfuIFqqNlCOtZbJ5uzrYsO14lM-ao2Yo,8498
|
|
159
160
|
mloda_plugins/feature_group/experimental/llm/cli_features/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
160
|
-
mloda_plugins/feature_group/experimental/llm/cli_features/refactor_git_cached.py,sha256=
|
|
161
|
+
mloda_plugins/feature_group/experimental/llm/cli_features/refactor_git_cached.py,sha256=IEWuORr8oeVWlUc11qXL5v38VueGUJ3wIEJrmYoAM8k,17926
|
|
161
162
|
mloda_plugins/feature_group/experimental/llm/llm_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
162
163
|
mloda_plugins/feature_group/experimental/llm/llm_api/claude.py,sha256=fhZsvMXpiRTq4g0_80ajEOp9thk_qA1HPHzYUjTVC5M,13966
|
|
163
164
|
mloda_plugins/feature_group/experimental/llm/llm_api/gemini.py,sha256=4g4WwJ-FuqIF06gKTpEuLXgmiUCvMytVWSD5pf4bSBE,12623
|
|
164
|
-
mloda_plugins/feature_group/experimental/llm/llm_api/llm_base_request.py,sha256=
|
|
165
|
+
mloda_plugins/feature_group/experimental/llm/llm_api/llm_base_request.py,sha256=Msf_hAcQloNrVbo_sjWsJZbbkNEBb9PljdVhzVTcQaA,4737
|
|
165
166
|
mloda_plugins/feature_group/experimental/llm/llm_api/openai.py,sha256=mIdSgExCNXpXBP1nbC-xuOJtNNTtH2YGfb1wUkPevfs,14902
|
|
166
|
-
mloda_plugins/feature_group/experimental/llm/llm_api/request_loop.py,sha256=
|
|
167
|
+
mloda_plugins/feature_group/experimental/llm/llm_api/request_loop.py,sha256=gcaQ1FjOhBfoeE5w8gXqqxm5WJiPW4Qq4Epxi2qGdgw,6648
|
|
167
168
|
mloda_plugins/feature_group/experimental/llm/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
168
169
|
mloda_plugins/feature_group/experimental/llm/tools/base_tool.py,sha256=rU46378PbmFxvnplTDYXrM3_GU3yVlSwtH6tyZ34Jww,2666
|
|
169
170
|
mloda_plugins/feature_group/experimental/llm/tools/tool_collection.py,sha256=kWa-SI6MLxSok3qVcWDF76O61eeGkJ84y2mpKlrYPT0,1166
|
|
@@ -181,28 +182,28 @@ mloda_plugins/feature_group/experimental/llm/tools/available/replace_file_tool.p
|
|
|
181
182
|
mloda_plugins/feature_group/experimental/llm/tools/available/replace_file_tool_which_runs_tox.py,sha256=jTBpsIxF7mzZjeesd9ZeHUDwA17SkbLsL9brvl-YfOo,2119
|
|
182
183
|
mloda_plugins/feature_group/experimental/llm/tools/available/run_single_pytest.py,sha256=dLMb1iunH0EVY7YZ0NmlHC4kVhTOjs2Hjs2412dFTao,4114
|
|
183
184
|
mloda_plugins/feature_group/experimental/llm/tools/available/run_tox.py,sha256=2APL0MD_ExaMzsJK9_WfgDD9dmMY8amsgfc6B4Xgj70,3814
|
|
184
|
-
mloda_plugins/feature_group/experimental/node_centrality/base.py,sha256=
|
|
185
|
-
mloda_plugins/feature_group/experimental/node_centrality/pandas.py,sha256=
|
|
185
|
+
mloda_plugins/feature_group/experimental/node_centrality/base.py,sha256=9GLQMQrxmYx-qL5TKL6tHn8bs-YaSs1FuFL-XMbba_E,14620
|
|
186
|
+
mloda_plugins/feature_group/experimental/node_centrality/pandas.py,sha256=rrCKAX1WZNXHQjRsJxpp-VEXv5_m-s0-2ow4CC0InV4,20261
|
|
186
187
|
mloda_plugins/feature_group/experimental/sklearn/__init__.py,sha256=UubmqLyavXbzW40FeGY06XyORo-x1Uo0WCLcpmPWnAs,208
|
|
187
188
|
mloda_plugins/feature_group/experimental/sklearn/sklearn_artifact.py,sha256=Sa5bIurlF-YZ0ybl1cPJWpLLOUTfaDa1DCffNcEvoVA,12777
|
|
188
189
|
mloda_plugins/feature_group/experimental/sklearn/encoding/__init__.py,sha256=WOe_iTVz2CXmVcL2IUNqhLJQqINFvY2rUktDXsNSOl8,153
|
|
189
|
-
mloda_plugins/feature_group/experimental/sklearn/encoding/base.py,sha256=
|
|
190
|
-
mloda_plugins/feature_group/experimental/sklearn/encoding/pandas.py,sha256=
|
|
190
|
+
mloda_plugins/feature_group/experimental/sklearn/encoding/base.py,sha256=gLX_VOXzIseuRFwKSINyYBohry0_HxWKUiEGYpvzww4,19780
|
|
191
|
+
mloda_plugins/feature_group/experimental/sklearn/encoding/pandas.py,sha256=BlV1L666N9cn-cnsjrX_t9ZzahMXcQsdaHmSyFdzhIE,6001
|
|
191
192
|
mloda_plugins/feature_group/experimental/sklearn/pipeline/__init__.py,sha256=Z_xSZFAFItwRlbBVxbBxwW_S61tQ8r1N8Ih59jTUXqk,199
|
|
192
|
-
mloda_plugins/feature_group/experimental/sklearn/pipeline/base.py,sha256=
|
|
193
|
-
mloda_plugins/feature_group/experimental/sklearn/pipeline/pandas.py,sha256=
|
|
193
|
+
mloda_plugins/feature_group/experimental/sklearn/pipeline/base.py,sha256=fwQP2qxze-ze0gMYFBpTg4GIHx7QkD9jjmbzayb1NwM,23308
|
|
194
|
+
mloda_plugins/feature_group/experimental/sklearn/pipeline/pandas.py,sha256=EWgJ9nemgdTJkfC8h8nqWQJ-aR4kDYtLKF6DV_Wzmrg,4045
|
|
194
195
|
mloda_plugins/feature_group/experimental/sklearn/scaling/__init__.py,sha256=CsQEzK6DJ-WakWqsWTScHYsrBuOwLeX78zYV-NqxuDg,79
|
|
195
|
-
mloda_plugins/feature_group/experimental/sklearn/scaling/base.py,sha256=
|
|
196
|
-
mloda_plugins/feature_group/experimental/sklearn/scaling/pandas.py,sha256=
|
|
197
|
-
mloda_plugins/feature_group/experimental/text_cleaning/base.py,sha256
|
|
198
|
-
mloda_plugins/feature_group/experimental/text_cleaning/pandas.py,sha256=
|
|
196
|
+
mloda_plugins/feature_group/experimental/sklearn/scaling/base.py,sha256=NmTVWkN_ORT9RE4HNjwhBk0SOmiBFuQapbf4bv0rYHI,15335
|
|
197
|
+
mloda_plugins/feature_group/experimental/sklearn/scaling/pandas.py,sha256=FfTYLfAmkkC70PLI3_hRz8WcfRowIGwAWlEdV85aFoc,3960
|
|
198
|
+
mloda_plugins/feature_group/experimental/text_cleaning/base.py,sha256=Fy08UF0jE36mcKj5ddhj0Ilf33tTUQM_CCPhYVc3v2k,11209
|
|
199
|
+
mloda_plugins/feature_group/experimental/text_cleaning/pandas.py,sha256=7IB7hA2EgH3ngvx-8sZObmU59GbddPqXKsrC_afAre0,7339
|
|
199
200
|
mloda_plugins/feature_group/experimental/text_cleaning/python_dict.py,sha256=9wRE1RioFRL-OtX467u4OEPvhDTzQAvdB-XAaJ1zDys,7829
|
|
200
201
|
mloda_plugins/feature_group/experimental/time_window/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
201
|
-
mloda_plugins/feature_group/experimental/time_window/base.py,sha256=
|
|
202
|
-
mloda_plugins/feature_group/experimental/time_window/pandas.py,sha256=
|
|
203
|
-
mloda_plugins/feature_group/experimental/time_window/pyarrow.py,sha256=
|
|
202
|
+
mloda_plugins/feature_group/experimental/time_window/base.py,sha256=3Uf8nXPzLWqblPMqVrO0WKs8LIKFxlHDfinY89lCOs4,17757
|
|
203
|
+
mloda_plugins/feature_group/experimental/time_window/pandas.py,sha256=ju_50nfRo3BWYa6xlH2gnqJBWBNv6QwUrFuCI2HGHrA,7803
|
|
204
|
+
mloda_plugins/feature_group/experimental/time_window/pyarrow.py,sha256=3hOOmmyaZB-7BCUwl1eHssxpmIKlZEPmugj4XQIBB6E,10722
|
|
204
205
|
mloda_plugins/feature_group/input_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
205
|
-
mloda_plugins/feature_group/input_data/read_context_files.py,sha256=
|
|
206
|
+
mloda_plugins/feature_group/input_data/read_context_files.py,sha256=yNt-ToAcNEYtWf4cyH_3Hqu3J06kQLKX-GcDCCtYEF0,6031
|
|
206
207
|
mloda_plugins/feature_group/input_data/read_db.py,sha256=Men-XQxHqPFbNZrLuVd6qIZbbVpNU46_g7kyGw09XO8,5173
|
|
207
208
|
mloda_plugins/feature_group/input_data/read_db_feature.py,sha256=aOd1admNJ4az8czi7xDFvB-Dk7Li9RD5mdo9Sy0szkI,783
|
|
208
209
|
mloda_plugins/feature_group/input_data/read_file.py,sha256=Fmk-C6HxHsSt72d3Ga2USlOLgsI2VMLfvByZsANyO8c,4154
|
|
@@ -221,9 +222,9 @@ mloda_plugins/feature_group/input_data/read_files/text_file_reader.py,sha256=FUc
|
|
|
221
222
|
mloda_plugins/function_extender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
222
223
|
mloda_plugins/function_extender/base_implementations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
223
224
|
mloda_plugins/function_extender/base_implementations/otel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
224
|
-
mloda_plugins/function_extender/base_implementations/otel/otel_extender.py,sha256=
|
|
225
|
-
mloda-0.3.
|
|
226
|
-
mloda-0.3.
|
|
227
|
-
mloda-0.3.
|
|
228
|
-
mloda-0.3.
|
|
229
|
-
mloda-0.3.
|
|
225
|
+
mloda_plugins/function_extender/base_implementations/otel/otel_extender.py,sha256=qY-oBOh6UUDtkUzGJjzC2dT3KKxyvt3sgwXJH2lWLYY,743
|
|
226
|
+
mloda-0.3.2.dist-info/METADATA,sha256=U_SIP63u-GoR9fAKLbmJmB4cGcu0CzGdgP_whLt--bE,16633
|
|
227
|
+
mloda-0.3.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
228
|
+
mloda-0.3.2.dist-info/entry_points.txt,sha256=f7hp7s4laABj9eN5YwEjQAyInF-fa687MXdz-hKYMIA,80
|
|
229
|
+
mloda-0.3.2.dist-info/top_level.txt,sha256=KScNbTs4_vV-mJ1pIlP6cyvMl611B3hNxVYj2hA0Ex4,25
|
|
230
|
+
mloda-0.3.2.dist-info/RECORD,,
|
|
@@ -52,7 +52,9 @@ class BaseArtifact(ABC):
|
|
|
52
52
|
"""
|
|
53
53
|
|
|
54
54
|
options = cls.get_singular_option_from_options(features)
|
|
55
|
-
|
|
55
|
+
if options is None or features.name_of_one_feature is None:
|
|
56
|
+
return None
|
|
57
|
+
return options.get(features.name_of_one_feature.name)
|
|
56
58
|
|
|
57
59
|
@classmethod
|
|
58
60
|
def get_singular_option_from_options(cls, features: FeatureSet) -> Options | None:
|
|
@@ -149,16 +149,16 @@ class Feature:
|
|
|
149
149
|
|
|
150
150
|
child_options = copy.deepcopy(self.child_options)
|
|
151
151
|
if child_options:
|
|
152
|
-
if child_options.get(DefaultOptionKeys.
|
|
153
|
-
val = child_options.get(DefaultOptionKeys.
|
|
152
|
+
if child_options.get(DefaultOptionKeys.in_features):
|
|
153
|
+
val = child_options.get(DefaultOptionKeys.in_features)
|
|
154
154
|
|
|
155
155
|
if isinstance(val, frozenset):
|
|
156
156
|
for v in val:
|
|
157
157
|
if isinstance(v, Feature):
|
|
158
|
-
child_options.group[DefaultOptionKeys.
|
|
158
|
+
child_options.group[DefaultOptionKeys.in_features] = v.name.name
|
|
159
159
|
|
|
160
160
|
if isinstance(val, Feature):
|
|
161
|
-
child_options.group[DefaultOptionKeys.
|
|
161
|
+
child_options.group[DefaultOptionKeys.in_features] = val.name.name
|
|
162
162
|
|
|
163
163
|
return hash((self.name, self.options, self.domain, compute_frameworks_hashable, self.data_type, child_options))
|
|
164
164
|
|
|
@@ -12,6 +12,11 @@ from mloda_core.abstract_plugins.components.feature_name import FeatureName
|
|
|
12
12
|
from mloda_core.abstract_plugins.components.options import Options
|
|
13
13
|
from mloda_plugins.feature_group.experimental.default_options_key import DefaultOptionKeys
|
|
14
14
|
|
|
15
|
+
# Separator constants for feature name parsing
|
|
16
|
+
CHAIN_SEPARATOR = "__" # Separates chained transformations (source→suffix)
|
|
17
|
+
COLUMN_SEPARATOR = "~" # Separates multi-column output index
|
|
18
|
+
INPUT_SEPARATOR = "&" # Separates multiple input features
|
|
19
|
+
|
|
15
20
|
|
|
16
21
|
class FeatureChainParser:
|
|
17
22
|
"""
|
|
@@ -19,18 +24,39 @@ class FeatureChainParser:
|
|
|
19
24
|
|
|
20
25
|
Feature chaining allows feature groups to be composed, where the output of one
|
|
21
26
|
feature group becomes the input to another. This is reflected in the feature name
|
|
22
|
-
using
|
|
27
|
+
using separators defined as module constants:
|
|
23
28
|
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
Separators:
|
|
30
|
+
- CHAIN_SEPARATOR ("__"): Separates chained transformations (source→suffix)
|
|
31
|
+
Example: price__mean_imputed__sum_7_day_window__max_aggr
|
|
32
|
+
(L→R: price is source, each suffix transforms the previous result)
|
|
33
|
+
- COLUMN_SEPARATOR ("~"): Separates multi-column output index
|
|
34
|
+
Example: feature__pca~0, feature__pca~1
|
|
35
|
+
- INPUT_SEPARATOR ("&"): Separates multiple input features
|
|
36
|
+
Example: point1&point2__haversine_distance
|
|
26
37
|
|
|
27
38
|
Each feature group in the chain extracts its relevant portion and passes the
|
|
28
39
|
rest to the next feature group in the chain.
|
|
29
40
|
"""
|
|
30
41
|
|
|
42
|
+
@classmethod
|
|
43
|
+
def is_chained_feature(cls, feature_name: str) -> bool:
|
|
44
|
+
"""Check if feature name contains the chain separator.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
feature_name: The feature name to check
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
True if the feature name contains CHAIN_SEPARATOR, False otherwise
|
|
51
|
+
"""
|
|
52
|
+
return CHAIN_SEPARATOR in feature_name
|
|
53
|
+
|
|
31
54
|
@classmethod
|
|
32
55
|
def parse_feature_name(
|
|
33
|
-
cls,
|
|
56
|
+
cls,
|
|
57
|
+
feature_name: FeatureName | str,
|
|
58
|
+
prefix_patterns: List[str],
|
|
59
|
+
pattern: str = CHAIN_SEPARATOR,
|
|
34
60
|
) -> Tuple[str | None, str | None]:
|
|
35
61
|
"""Internal method for parsing feature names - used by match_configuration_feature_chain_parser."""
|
|
36
62
|
_feature_name: str = feature_name.name if isinstance(feature_name, FeatureName) else feature_name
|
|
@@ -58,13 +84,16 @@ class FeatureChainParser:
|
|
|
58
84
|
|
|
59
85
|
@classmethod
|
|
60
86
|
def _match_pattern_based_feature(
|
|
61
|
-
cls,
|
|
87
|
+
cls,
|
|
88
|
+
feature_name: str | FeatureName,
|
|
89
|
+
prefix_patterns: List[str],
|
|
90
|
+
pattern: str = CHAIN_SEPARATOR,
|
|
62
91
|
) -> bool:
|
|
63
92
|
"""Internal method for matching pattern-based features - used by match_configuration_feature_chain_parser."""
|
|
64
93
|
_feature_name: FeatureName = FeatureName(feature_name) if isinstance(feature_name, str) else feature_name
|
|
65
94
|
|
|
66
95
|
try:
|
|
67
|
-
has_prefix_configuration, source_feature = cls.parse_feature_name(_feature_name,
|
|
96
|
+
has_prefix_configuration, source_feature = cls.parse_feature_name(_feature_name, prefix_patterns, pattern)
|
|
68
97
|
if has_prefix_configuration is None or source_feature is None:
|
|
69
98
|
return False
|
|
70
99
|
except ValueError:
|
|
@@ -240,10 +269,6 @@ class FeatureChainParser:
|
|
|
240
269
|
found_property_value, property_value, property_name, property_mapping[property_name]
|
|
241
270
|
)
|
|
242
271
|
|
|
243
|
-
# We deal with this case for now like this as it is easier and we can add tuples later.
|
|
244
|
-
if collected_property_value == "tuple_found": # type: ignore
|
|
245
|
-
return False
|
|
246
|
-
|
|
247
272
|
if property_tracker[property_name] is not None:
|
|
248
273
|
raise ValueError(f"Feature name has duplicate values for property '{property_name}'.")
|
|
249
274
|
|
|
@@ -256,8 +281,8 @@ class FeatureChainParser:
|
|
|
256
281
|
feature_name: str | FeatureName,
|
|
257
282
|
options: Options,
|
|
258
283
|
property_mapping: Optional[Dict[str, Any]] = None,
|
|
259
|
-
pattern: Optional[str] = None,
|
|
260
284
|
prefix_patterns: Optional[List[str]] = None,
|
|
285
|
+
pattern: str = CHAIN_SEPARATOR,
|
|
261
286
|
) -> bool:
|
|
262
287
|
"""
|
|
263
288
|
Unified method for matching features using either configuration-based or pattern-based parsing.
|
|
@@ -266,16 +291,16 @@ class FeatureChainParser:
|
|
|
266
291
|
feature_name: The feature name to match
|
|
267
292
|
options: Options object containing configuration
|
|
268
293
|
property_mapping: Optional property mapping for configuration-based parsing
|
|
269
|
-
pattern: Optional pattern string for pattern-based parsing
|
|
270
294
|
prefix_patterns: Optional prefix patterns for pattern-based parsing
|
|
295
|
+
pattern: Pattern string for pattern-based parsing (defaults to CHAIN_SEPARATOR)
|
|
271
296
|
|
|
272
297
|
Returns:
|
|
273
298
|
True if the feature matches either pattern-based or configuration-based parsing, False otherwise
|
|
274
299
|
"""
|
|
275
300
|
|
|
276
301
|
# string based matching
|
|
277
|
-
if
|
|
278
|
-
if cls._match_pattern_based_feature(feature_name,
|
|
302
|
+
if prefix_patterns is not None:
|
|
303
|
+
if cls._match_pattern_based_feature(feature_name, prefix_patterns, pattern):
|
|
279
304
|
return True
|
|
280
305
|
|
|
281
306
|
# configuration-based
|
|
@@ -305,10 +330,12 @@ class FeatureChainParser:
|
|
|
305
330
|
if not match:
|
|
306
331
|
raise ValueError(f"Invalid feature name format: {feature_name}")
|
|
307
332
|
|
|
308
|
-
# For L→R: source is everything BEFORE the last
|
|
309
|
-
suffix_start = feature_name.rfind(
|
|
333
|
+
# For L→R: source is everything BEFORE the last CHAIN_SEPARATOR
|
|
334
|
+
suffix_start = feature_name.rfind(CHAIN_SEPARATOR)
|
|
310
335
|
if suffix_start == -1:
|
|
311
|
-
raise ValueError(
|
|
336
|
+
raise ValueError(
|
|
337
|
+
f"Invalid feature name format: {feature_name}. Missing chain separator '{CHAIN_SEPARATOR}'."
|
|
338
|
+
)
|
|
312
339
|
|
|
313
340
|
# Return everything BEFORE the last double underscore (the source)
|
|
314
341
|
return feature_name[:suffix_start]
|
|
@@ -55,7 +55,7 @@ class Features:
|
|
|
55
55
|
needs its own configuration for certain parameters.
|
|
56
56
|
|
|
57
57
|
Protected keys are determined dynamically by reading:
|
|
58
|
-
-
|
|
58
|
+
- in_features (always protected)
|
|
59
59
|
- Keys listed in feature_options.get(mloda_feature_chainer_parser_key)
|
|
60
60
|
|
|
61
61
|
Args:
|
|
@@ -66,7 +66,7 @@ class Features:
|
|
|
66
66
|
ValueError: If non-protected keys have conflicting values
|
|
67
67
|
"""
|
|
68
68
|
# Get protected keys dynamically from the feature options
|
|
69
|
-
protected_keys = {DefaultOptionKeys.
|
|
69
|
+
protected_keys = {DefaultOptionKeys.in_features}
|
|
70
70
|
if feature_options.get(DefaultOptionKeys.mloda_feature_chainer_parser_key):
|
|
71
71
|
protected_keys.update(feature_options.get(DefaultOptionKeys.mloda_feature_chainer_parser_key))
|
|
72
72
|
|