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.
Files changed (92) hide show
  1. {mloda-0.3.0.dist-info → mloda-0.3.2.dist-info}/METADATA +10 -10
  2. {mloda-0.3.0.dist-info → mloda-0.3.2.dist-info}/RECORD +92 -91
  3. mloda_core/abstract_plugins/components/base_artifact.py +3 -1
  4. mloda_core/abstract_plugins/components/feature.py +4 -4
  5. mloda_core/abstract_plugins/components/feature_chainer/feature_chain_parser.py +44 -17
  6. mloda_core/abstract_plugins/components/feature_collection.py +2 -2
  7. mloda_core/abstract_plugins/components/feature_group_version.py +4 -4
  8. mloda_core/abstract_plugins/components/feature_name.py +0 -3
  9. mloda_core/abstract_plugins/components/input_data/base_input_data.py +3 -3
  10. mloda_core/abstract_plugins/components/link.py +113 -29
  11. mloda_core/abstract_plugins/components/options.py +10 -10
  12. mloda_core/api/prepare/setup_compute_framework.py +2 -2
  13. mloda_core/api/request.py +44 -13
  14. mloda_core/core/step/feature_group_step.py +2 -1
  15. mloda_core/filter/filter_engine.py +3 -12
  16. mloda_core/filter/filter_parameter.py +55 -0
  17. mloda_core/filter/single_filter.py +4 -4
  18. mloda_core/prepare/execution_plan.py +12 -6
  19. mloda_core/prepare/graph/graph.py +3 -3
  20. mloda_core/prepare/identify_feature_group.py +10 -3
  21. mloda_core/prepare/resolve_links.py +86 -18
  22. mloda_core/runtime/flight/flight_server.py +1 -1
  23. mloda_core/runtime/run.py +7 -5
  24. mloda_core/runtime/worker/multiprocessing_worker.py +11 -9
  25. mloda_plugins/compute_framework/base_implementations/duckdb/duckdb_filter_engine.py +7 -33
  26. mloda_plugins/compute_framework/base_implementations/duckdb/duckdb_pyarrow_transformer.py +1 -1
  27. mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_filter_engine.py +22 -12
  28. mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_framework.py +2 -2
  29. mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_pyarrow_transformer.py +2 -2
  30. mloda_plugins/compute_framework/base_implementations/pandas/dataframe.py +2 -2
  31. mloda_plugins/compute_framework/base_implementations/pandas/pandaspyarrowtransformer.py +1 -1
  32. mloda_plugins/compute_framework/base_implementations/polars/dataframe.py +3 -3
  33. mloda_plugins/compute_framework/base_implementations/polars/lazy_dataframe.py +5 -5
  34. mloda_plugins/compute_framework/base_implementations/polars/polars_filter_engine.py +8 -34
  35. mloda_plugins/compute_framework/base_implementations/polars/polars_lazy_merge_engine.py +1 -1
  36. mloda_plugins/compute_framework/base_implementations/polars/polars_lazy_pyarrow_transformer.py +3 -3
  37. mloda_plugins/compute_framework/base_implementations/polars/polars_merge_engine.py +1 -1
  38. mloda_plugins/compute_framework/base_implementations/polars/polars_pyarrow_transformer.py +2 -2
  39. mloda_plugins/compute_framework/base_implementations/pyarrow/pyarrow_filter_engine.py +7 -33
  40. mloda_plugins/compute_framework/base_implementations/pyarrow/table.py +1 -1
  41. mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_filter_engine.py +13 -32
  42. mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_framework.py +1 -1
  43. mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_pyarrow_transformer.py +1 -1
  44. mloda_plugins/compute_framework/base_implementations/spark/spark_filter_engine.py +13 -32
  45. mloda_plugins/compute_framework/base_implementations/spark/spark_framework.py +4 -4
  46. mloda_plugins/compute_framework/base_implementations/spark/spark_pyarrow_transformer.py +1 -1
  47. mloda_plugins/config/feature/loader.py +12 -18
  48. mloda_plugins/feature_group/experimental/aggregated_feature_group/base.py +20 -17
  49. mloda_plugins/feature_group/experimental/aggregated_feature_group/pandas.py +8 -8
  50. mloda_plugins/feature_group/experimental/aggregated_feature_group/polars_lazy.py +8 -8
  51. mloda_plugins/feature_group/experimental/aggregated_feature_group/pyarrow.py +7 -7
  52. mloda_plugins/feature_group/experimental/clustering/base.py +26 -26
  53. mloda_plugins/feature_group/experimental/clustering/pandas.py +31 -29
  54. mloda_plugins/feature_group/experimental/data_quality/missing_value/base.py +23 -22
  55. mloda_plugins/feature_group/experimental/data_quality/missing_value/pandas.py +16 -16
  56. mloda_plugins/feature_group/experimental/data_quality/missing_value/pyarrow.py +9 -11
  57. mloda_plugins/feature_group/experimental/data_quality/missing_value/python_dict.py +8 -8
  58. mloda_plugins/feature_group/experimental/default_options_key.py +1 -1
  59. mloda_plugins/feature_group/experimental/dimensionality_reduction/base.py +17 -15
  60. mloda_plugins/feature_group/experimental/dimensionality_reduction/pandas.py +30 -18
  61. mloda_plugins/feature_group/experimental/dynamic_feature_group_factory/dynamic_feature_group_factory.py +35 -35
  62. mloda_plugins/feature_group/experimental/forecasting/base.py +39 -29
  63. mloda_plugins/feature_group/experimental/forecasting/pandas.py +18 -18
  64. mloda_plugins/feature_group/experimental/geo_distance/base.py +18 -20
  65. mloda_plugins/feature_group/experimental/geo_distance/pandas.py +2 -2
  66. mloda_plugins/feature_group/experimental/llm/cli_features/refactor_git_cached.py +6 -6
  67. mloda_plugins/feature_group/experimental/llm/installed_packages_feature_group.py +2 -2
  68. mloda_plugins/feature_group/experimental/llm/list_directory_feature_group.py +2 -2
  69. mloda_plugins/feature_group/experimental/llm/llm_api/llm_base_request.py +2 -2
  70. mloda_plugins/feature_group/experimental/llm/llm_api/request_loop.py +3 -2
  71. mloda_plugins/feature_group/experimental/llm/llm_file_selector.py +1 -1
  72. mloda_plugins/feature_group/experimental/node_centrality/base.py +8 -12
  73. mloda_plugins/feature_group/experimental/node_centrality/pandas.py +2 -2
  74. mloda_plugins/feature_group/experimental/sklearn/encoding/base.py +11 -12
  75. mloda_plugins/feature_group/experimental/sklearn/encoding/pandas.py +2 -2
  76. mloda_plugins/feature_group/experimental/sklearn/pipeline/base.py +9 -14
  77. mloda_plugins/feature_group/experimental/sklearn/pipeline/pandas.py +2 -2
  78. mloda_plugins/feature_group/experimental/sklearn/scaling/base.py +8 -9
  79. mloda_plugins/feature_group/experimental/sklearn/scaling/pandas.py +2 -2
  80. mloda_plugins/feature_group/experimental/source_input_feature.py +10 -10
  81. mloda_plugins/feature_group/experimental/text_cleaning/base.py +8 -11
  82. mloda_plugins/feature_group/experimental/text_cleaning/pandas.py +2 -2
  83. mloda_plugins/feature_group/experimental/time_window/base.py +27 -25
  84. mloda_plugins/feature_group/experimental/time_window/pandas.py +8 -8
  85. mloda_plugins/feature_group/experimental/time_window/pyarrow.py +6 -6
  86. mloda_plugins/feature_group/input_data/read_context_files.py +1 -1
  87. mloda_plugins/function_extender/base_implementations/otel/otel_extender.py +1 -1
  88. {mloda-0.3.0.dist-info → mloda-0.3.2.dist-info}/WHEEL +0 -0
  89. {mloda-0.3.0.dist-info → mloda-0.3.2.dist-info}/entry_points.txt +0 -0
  90. {mloda-0.3.0.dist-info → mloda-0.3.2.dist-info}/licenses/LICENSE.TXT +0 -0
  91. {mloda-0.3.0.dist-info → mloda-0.3.2.dist-info}/licenses/NOTICE.md +0 -0
  92. {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.0
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 PandasDataframe
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={PandasDataframe}
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
- # "mloda_source_features": "source_column",
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={PandasDataframe}
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={PandasDataframe},
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={PandasDataframe},
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={PandasDataframe} # Use pandas for all features
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={PandasDataframe}` and switch to others only if you need specific performance characteristics.
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={PandasDataframe}
345
+ compute_frameworks={PandasDataFrame}
346
346
  )
347
347
 
348
348
  # Step 3: Prepare for ML
@@ -1,28 +1,28 @@
1
- mloda-0.3.0.dist-info/licenses/LICENSE.TXT,sha256=gmhQwSkHxjiShsqQ1FpJ-20YFtaa4vRCE7aCx55-6nk,11366
2
- mloda-0.3.0.dist-info/licenses/NOTICE.md,sha256=Hu10B2sPnGLIHxZ4QhACSLLxukJpeJzjvkzCu48q5fY,520
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=GOIJBEmrQhgdMORBb-maCDHDusnf9oTydl4oGa7K_uI,5231
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=yvwn2A24KRyUtwelJPDkUXZ4wvGjY9Jq7EGnfHotCF0,10123
15
- mloda_core/abstract_plugins/components/feature_collection.py,sha256=q5J91iILfp-J6AFYm_022Nu6G1p47jIQuwndaa5v1VE,4680
16
- mloda_core/abstract_plugins/components/feature_group_version.py,sha256=Syc1uXH502n-R29u0y-SW3S110Sl_nafCicCCKy_sKk,2158
17
- mloda_core/abstract_plugins/components/feature_name.py,sha256=2NtKb_eespiOH9_j4y_pz5kBkmRbPUXq6U2giXlhkGg,778
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=rmDutfOk-tLdUmWTLBmeXkEkCk4DhU-Lj0ov5GDnSxI,7445
21
- mloda_core/abstract_plugins/components/options.py,sha256=k3fLwT4DpHN1Dmeht8mtXqjGhAsZnQI4sriKccC1mnE,11674
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=dqwQOLJTOrEFmG-lIwGrKZnJ9rilEDDNAfC373dLJHQ,13289
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=rC6VTv98CXo-LyHBnLbkQgFxgDyrPFDasADXgVL7VK8,6299
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=uS3l8ByzcIxgOeWyOPN4U7qwn-YyN8p1VUy1i4jj1Mg,9368
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=IMR5CqQTuPMgxCLadAXQ2kelSLzAhR5x8rAPeBd8gEc,2628
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=-1VJhyFCEX0CclvUZmEgFsRFVLFyI2ZL70st0xcM89Q,5232
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=7IUMvAd4XTLWLbxnhz8oW9d-UoKBny5kHNbY2K_tzcw,3649
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=xS221MlEKbOSxZeGXcOhHEru5Ny1upn409DiYjrW0zg,2977
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=YBjm94tyiI4kTJCKyM9iBscsQxPjwLkvv8IiBkixAtU,43271
68
- mloda_core/prepare/identify_feature_group.py,sha256=nCybkd_YvRgtlkrR3U1qexD3SJBp9GWWwthIUwmpgQU,6743
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=aiDrtm5BIbso5zikTRFl0YkVGKvMq40TreF6hQ3gD7I,12260
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=ZMmxPBnGweeVdvD_3Kc2ann_jqX0622yDm9GQm8XksM,3771
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=1Mp4A5Aeh0wPAmoGmFyGNcAU6QUph6_yitwiKdYXPYg,23939
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=0Lnqt5x7zK6YFsjIKNoJfo22Zr2AOTSOK3nDIKRhNTI,4205
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=oXWillveYku0bA6tIyqugTcQTKdqkpjA0LKqdS9SFbs,4845
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=UcK5pTo2FfVd1TcJID2lZ4yaST36olybinp296R4eXM,5724
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=RDqBQGInTaMEEWrWVJVz6nxahipEqV9xWZwJkAgljY4,2312
92
- mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_filter_engine.py,sha256=4pHiGt2xZPjGNzBFjKeolj0t918aAxzaADA6FyUtbgw,6745
93
- mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_framework.py,sha256=oEX4eCRNsJgmEpx-0uaqClCVzeYPqBAM9urHeYLazSI,6937
94
- mloda_plugins/compute_framework/base_implementations/iceberg/iceberg_pyarrow_transformer.py,sha256=yVK0xrXFgyzHW9tTY4m6i-ZymuN5-bFMcngeU7ncKq0,3132
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=y-tfGbRrCbF6VlAwGQUyIasijgoE3fgZ4ahfRGOIXII,3218
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=xmrra9N5hgY7Pl0R582eiDWc4LQreIfMI4l1papOLiw,1909
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=7rpYUsLE7zO8Qoo0yluhvP-tMPl02ZkbukTVeBD5eLs,3076
102
- mloda_plugins/compute_framework/base_implementations/polars/lazy_dataframe.py,sha256=F01aWuntvkhBU3s28VOUPII-sYQ5LCtYHLIIf20FqgY,3836
103
- mloda_plugins/compute_framework/base_implementations/polars/polars_filter_engine.py,sha256=npTardZGZ453uyXT4OXrBDyI_SFHWHMospu9vDCmbdw,5152
104
- mloda_plugins/compute_framework/base_implementations/polars/polars_lazy_merge_engine.py,sha256=5TeCj0DFP6Zqy0pXss0JKRSS4N5hvlK6rI3GBfh6wjY,1356
105
- mloda_plugins/compute_framework/base_implementations/polars/polars_lazy_pyarrow_transformer.py,sha256=hW-XvhKQNzgO688Ly638l-5C-6LY5vauZDqfcWCVkB8,2119
106
- mloda_plugins/compute_framework/base_implementations/polars/polars_merge_engine.py,sha256=IxqMArQAgAfzkUELa5MzrvptvG7-LvQAiGxUry1tfes,8241
107
- mloda_plugins/compute_framework/base_implementations/polars/polars_pyarrow_transformer.py,sha256=p02_iIz5p4LK1yR9G3URKRzEe51YqKPuNuldUwZveD0,1829
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=1LfHYIzEX_HOekewWBkuZ4wbBlor1qnyacWk6FFNY4U,6086
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=C55FC467fpKxZHAUVSsPJ9nWTwnL1-YkHV0g_U_gM3I,2513
112
- mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_filter_engine.py,sha256=UMhniwfYAWoPbgmZD2ddBmF45Fi0Q5h0ruI09_FtVRs,6022
113
- mloda_plugins/compute_framework/base_implementations/python_dict/python_dict_framework.py,sha256=QKUrl8P9X7DrMbbnO8dloRYmzhAGSUyq72lS2E5ness,4840
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=S0yn42V95bN6Zxv2_JRRmX6NR_o7maEdzPluJrqpqD0,3438
116
- mloda_plugins/compute_framework/base_implementations/spark/spark_filter_engine.py,sha256=w6Z6cFQhmy1sl4bH5R9KFVdJGq-B5_s0bfHuzmpifKM,5256
117
- mloda_plugins/compute_framework/base_implementations/spark/spark_framework.py,sha256=yiUa66tV8ckTpaWZ-B3YS1_B63j_YIjM_xG-WAcuKIs,8279
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=CtIOllhGdYQisIiG0Ml0haG4sBC2UmrxKl8bhp4gzjY,3303
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=re1pK9PfOXsACdTmV1F9AJQAaa0uS3Eu7OClp2IP-B0,8111
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=GpSwOvR806wWZJ93DxC-Y3hnt4g7E4dELm8B5k6mZ0I,1040
128
- mloda_plugins/feature_group/experimental/source_input_feature.py,sha256=SXnC8iB6WxSbj-w5qtnRHtxV4K9H4qsg3uMJd3zg3GA,11080
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=t16yx9bnU8FSQwg4mGoBZWDQ30eWc0TzRE6D5Bg1tc8,11423
131
- mloda_plugins/feature_group/experimental/aggregated_feature_group/pandas.py,sha256=7ntyidBNFVo-SmGTf1M5M0q-4dKonjQgmeqJ6XmwfYY,5014
132
- mloda_plugins/feature_group/experimental/aggregated_feature_group/polars_lazy.py,sha256=ulsr6HDHHeaNSA63Fo4FIm5TwrBzFIfQgNrRWfWAX3I,6294
133
- mloda_plugins/feature_group/experimental/aggregated_feature_group/pyarrow.py,sha256=A7mgNeAwa5-afpnkNDIf3xbDxspqh198wjxkvcMBsF8,5738
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=ijJeAq2nqkc5TNzuz30kSgs4MsFcGvvUf0XbynC1-Bo,18569
136
- mloda_plugins/feature_group/experimental/clustering/pandas.py,sha256=0k3gBw3ITzt9DMnOG2PCt4o0NzdOQy9-XM15M51Xqas,19327
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=FIJnlIAq6U5PW1pa52W1mXHjPV0_YZB_vR4ml5xrLeM,15780
140
- mloda_plugins/feature_group/experimental/data_quality/missing_value/pandas.py,sha256=8l-uXJmxjlra8ADQisTQwla2abjT1UUplwuoyKIxp3k,8682
141
- mloda_plugins/feature_group/experimental/data_quality/missing_value/pyarrow.py,sha256=d13kWrXxdRddQ_6GbX5hKMNKpY9iRwhmVcx0CG5wafQ,14346
142
- mloda_plugins/feature_group/experimental/data_quality/missing_value/python_dict.py,sha256=OrOd5MZdbnL4DCJFSZYuda5t2b5MvOBqdedgIPisV9g,13968
143
- mloda_plugins/feature_group/experimental/dimensionality_reduction/base.py,sha256=aIi6Cx09LxbmQH5geXlR78Cz5cTlMVWWpTbL85NJx34,17466
144
- mloda_plugins/feature_group/experimental/dimensionality_reduction/pandas.py,sha256=v47-g2gHQnLEjxo0txM9OGlG7nX6kkKrzRTGK0dRkqM,13279
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=6EHBHpDKeg9lapzzMeRnvP392JKskhrxWQ_QZYIkH7Q,12850
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=8XSTivQwb-UbF62NjikOT_kMFm_ixHnUGVO1hjHe_uQ,24068
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=Qus5jwAPs8bp546Y8e_piw6EoHkuru0Sl1UgdG0k_Yg,28913
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=Zz7DC4NbEc-oNqRir50bMNx7y8Bhq33WsKRUQmTDQP4,12801
153
- mloda_plugins/feature_group/experimental/geo_distance/pandas.py,sha256=KwN_-sdpZobBiFev68ar0JWNXmupmAvh6f5L3CtbBAE,6023
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=A89uyysHIT-OwGegAl7j4OC2dlZQy9Bk_6CHZOhwHig,3829
157
- mloda_plugins/feature_group/experimental/llm/list_directory_feature_group.py,sha256=2rBMErXv6sEBaoAtNNyRs7QTOHp342X14NRGDHJkw14,6184
158
- mloda_plugins/feature_group/experimental/llm/llm_file_selector.py,sha256=e5hhx-Pg5ZQ3mA-X0wROatpEfJn6BQU2drs0BtGcK_Y,8508
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=cpkQc0bn2A7OfNhqa3W0dNDYqvTWbWG5Xfa77XwIEYc,17946
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=Hnv_iDhWPYfUsXa-40QTHHKxtPtxwWYmIm9RiCLn38E,4737
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=_K0hMeLXMG5iNgA2g9y3a8laSoid6v1s7ixZ_E-0hmk,6605
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=bmWEA6qcdmwIz6Va3QYmwjban1YD16sKUiZn8n4Y49Y,14769
185
- mloda_plugins/feature_group/experimental/node_centrality/pandas.py,sha256=pBvoe-rhAInIPeAKfxLZOrJzAkkauUuxKguhF6XXXws,20261
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=ikl4PBWU3eUXc9Dxn8llmaEoAtKQ3MaIzRIITbo8IBw,19884
190
- mloda_plugins/feature_group/experimental/sklearn/encoding/pandas.py,sha256=_U9gD-39wAFVl8tL1QexcJ2WZc7fu6qShuI1L0O1XBI,6001
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=VsWEp8dNdu3k4NSd6ckPtGBt3hDAnly7a2fzxiylvXM,23447
193
- mloda_plugins/feature_group/experimental/sklearn/pipeline/pandas.py,sha256=nKLRbqy2q5vFNhgEsHoBnwbaiJheV9bkgizDSYd_epE,4045
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=6CqOVyzKgTRdQCRjPT5RFfJTQ453MCO0GOoewpC7cuc,15409
196
- mloda_plugins/feature_group/experimental/sklearn/scaling/pandas.py,sha256=8-DPSmUsEJVK4dlNh-041FI2YzmQ1Q7p6gWs0Zb7nKI,3960
197
- mloda_plugins/feature_group/experimental/text_cleaning/base.py,sha256=-7nN7R7-wEkHoGYiry0UHtiL7W5_CKa-T1ktF0q7gUI,11313
198
- mloda_plugins/feature_group/experimental/text_cleaning/pandas.py,sha256=7RbV8lMUzx5b8ph4IsXnab4v06IByrNOGte9oK7Zz0g,7339
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=TAqEFrnHQVzBtVQ4Y2L5yJ8f35SBo0j9_AFZJJ6bakk,18367
202
- mloda_plugins/feature_group/experimental/time_window/pandas.py,sha256=YFjkO2Xu_vnB1XfQx2bElKRpUty0Ldic04hiYJKYfEo,7863
203
- mloda_plugins/feature_group/experimental/time_window/pyarrow.py,sha256=SVwlfIt2qZVFp3InfLoszdSIBZh_EYFGzvIvRW9RVfA,10762
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=Mlkc-q2z3RdOfHdfebf6sjBESmyPMVYDcmJ4OEDjNFE,6041
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=M8GKb55ZGaoRaNCQOp69qr3w8jSMSD6D3VuGBpfw2t4,731
225
- mloda-0.3.0.dist-info/METADATA,sha256=gR1iP4xYXJNucYNPRsxqS8XRs9lv3Dl21indx8rESeQ,16643
226
- mloda-0.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
227
- mloda-0.3.0.dist-info/entry_points.txt,sha256=f7hp7s4laABj9eN5YwEjQAyInF-fa687MXdz-hKYMIA,80
228
- mloda-0.3.0.dist-info/top_level.txt,sha256=KScNbTs4_vV-mJ1pIlP6cyvMl611B3hNxVYj2hA0Ex4,25
229
- mloda-0.3.0.dist-info/RECORD,,
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
- return options.get(features.name_of_one_feature.name) # type: ignore
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.mloda_source_features):
153
- val = child_options.get(DefaultOptionKeys.mloda_source_features)
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.mloda_source_features] = v.name.name
158
+ child_options.group[DefaultOptionKeys.in_features] = v.name.name
159
159
 
160
160
  if isinstance(val, Feature):
161
- child_options.group[DefaultOptionKeys.mloda_source_features] = val.name.name
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 a double underscore pattern: prefix__mloda_source_features.
27
+ using separators defined as module constants:
23
28
 
24
- For example:
25
- - max_aggr__sum_7_day_window__mean_imputed__price
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, feature_name: FeatureName | str, pattern: str, prefix_patterns: List[str]
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, feature_name: str | FeatureName, pattern: str, prefix_patterns: List[str]
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, pattern, prefix_patterns)
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 pattern is not None and prefix_patterns is not None:
278
- if cls._match_pattern_based_feature(feature_name, pattern, prefix_patterns):
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(f"Invalid feature name format: {feature_name}. Missing double underscore separator.")
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
- - mloda_source_features (always protected)
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.mloda_source_features}
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