upgini 1.2.167a4220.dev10__tar.gz → 1.2.167a4220.dev12__tar.gz
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.
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/PKG-INFO +1 -1
- upgini-1.2.167a4220.dev12/src/upgini/__about__.py +1 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/features_enricher.py +35 -2
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/report/assemble.py +11 -67
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/report/html.py +22 -16
- upgini-1.2.167a4220.dev10/src/upgini/__about__.py +0 -1
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/.gitignore +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/LICENSE +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/README.md +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/pyproject.toml +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/__init__.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/ads.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/ads_management/__init__.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/ads_management/ads_manager.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/__init__.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/all_operators.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/binary.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/date.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/feature.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/groupby.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/operand.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/operator.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/__init__.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/base.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/cross.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/delta.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/lag.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/numpy_kernels.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/roll.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/trend.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/volatility.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/unary.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/vector.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/data_source/__init__.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/data_source/data_source_publisher.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/dataset.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/errors.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/http.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/mdc/__init__.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/mdc/context.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/metadata.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/metrics.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/normalizer/__init__.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/normalizer/normalize_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/report/__init__.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/report/data.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/report/stats.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/report/template.html +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/resource_bundle/__init__.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/resource_bundle/exceptions.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/resource_bundle/strings.properties +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/resource_bundle/strings_widget.properties +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/sampler/__init__.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/sampler/base.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/sampler/random_under_sampler.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/sampler/utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/search_task.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/spinner.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/Roboto-Regular.ttf +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/__init__.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/base_search_key_detector.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/blocked_time_series.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/config.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/country_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/cpu_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/custom_loss_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/cv_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/datetime_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/deduplicate_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/display_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/email_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/fallback_progress_bar.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/feature_info.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/features_validator.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/format.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/hash_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/ip_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/mstats.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/one_hot_encoder.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/phone_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/postal_code_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/progress_bar.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/psi.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/pyarrow_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/sample_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/search_key_derivations.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/sklearn_ext.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/sort.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/target_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/track_info.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/ts_utils.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/warning_counter.py +0 -0
- {upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/version_validator.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: upgini
|
|
3
|
-
Version: 1.2.167a4220.
|
|
3
|
+
Version: 1.2.167a4220.dev12
|
|
4
4
|
Summary: Intelligent data search & enrichment for Machine Learning
|
|
5
5
|
Project-URL: Bug Reports, https://github.com/upgini/upgini/issues
|
|
6
6
|
Project-URL: Homepage, https://upgini.com/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.2.167.a4220.dev12"
|
|
@@ -2514,6 +2514,39 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
2514
2514
|
return False
|
|
2515
2515
|
return bool(aliases & self._column_name_aliases(list(ensemble_names), renaming))
|
|
2516
2516
|
|
|
2517
|
+
def _match_autofe_node_meta(
|
|
2518
|
+
self,
|
|
2519
|
+
autofe_feature: Feature,
|
|
2520
|
+
features_meta: list[FeaturesMetadataV2],
|
|
2521
|
+
used_names: set[str],
|
|
2522
|
+
) -> FeaturesMetadataV2 | None:
|
|
2523
|
+
name = autofe_feature.get_display_name(shorten=True, unhash=True, cache=False)
|
|
2524
|
+
matched = self._match_autofe_meta_by_names({name} if name else set(), features_meta, used_names)
|
|
2525
|
+
if matched is not None or not name:
|
|
2526
|
+
return matched
|
|
2527
|
+
# Fold formulas omit display_index; FeaturesMetadata still uses the ordinary
|
|
2528
|
+
# get_display_name() with that index. Recover only the remainder after the
|
|
2529
|
+
# Feature-computed base name, then verify with get_display_name().
|
|
2530
|
+
prefix = name + "_"
|
|
2531
|
+
previous = autofe_feature.display_index
|
|
2532
|
+
try:
|
|
2533
|
+
for meta in features_meta or []:
|
|
2534
|
+
if meta.name in used_names or not meta.name.startswith(prefix):
|
|
2535
|
+
continue
|
|
2536
|
+
index = meta.name[len(prefix) :]
|
|
2537
|
+
if not index:
|
|
2538
|
+
continue
|
|
2539
|
+
if (
|
|
2540
|
+
autofe_feature.set_display_index(index).get_display_name(
|
|
2541
|
+
shorten=True, unhash=True, cache=False
|
|
2542
|
+
)
|
|
2543
|
+
== meta.name
|
|
2544
|
+
):
|
|
2545
|
+
return meta
|
|
2546
|
+
finally:
|
|
2547
|
+
autofe_feature.set_display_index(previous)
|
|
2548
|
+
return None
|
|
2549
|
+
|
|
2517
2550
|
@staticmethod
|
|
2518
2551
|
def _match_autofe_meta_by_names(
|
|
2519
2552
|
names: set[str],
|
|
@@ -6042,6 +6075,7 @@ if response.status_code == 200:
|
|
|
6042
6075
|
for fold in _fold_model_nodes(autofe_feature)
|
|
6043
6076
|
for child in fold.children
|
|
6044
6077
|
if isinstance(child, Feature)
|
|
6078
|
+
and (not child.op.is_vector or isinstance(child.op, TimeSeriesBase))
|
|
6045
6079
|
]
|
|
6046
6080
|
if fold_autofe:
|
|
6047
6081
|
hashed_to_orig = {hashed: orig for orig, hashed in orig_to_hashed.items()}
|
|
@@ -6052,11 +6086,10 @@ if response.status_code == 200:
|
|
|
6052
6086
|
for hashed in node.get_columns()
|
|
6053
6087
|
if not is_ts or hashed_to_orig.get(hashed, hashed) not in self.fit_search_keys
|
|
6054
6088
|
]
|
|
6055
|
-
name = node.get_display_name(shorten=True, unhash=True, cache=False)
|
|
6056
6089
|
self._add_autofe_description(
|
|
6057
6090
|
descriptions,
|
|
6058
6091
|
used_names,
|
|
6059
|
-
self.
|
|
6092
|
+
self._match_autofe_node_meta(node, features_meta, used_names),
|
|
6060
6093
|
source_names,
|
|
6061
6094
|
node.get_all_operand_names(),
|
|
6062
6095
|
)
|
|
@@ -22,7 +22,7 @@ from upgini.report.data import (
|
|
|
22
22
|
)
|
|
23
23
|
from upgini.report.stats import PSI_CRITICAL, PSI_WARNING, compute_report_charts
|
|
24
24
|
from upgini.resource_bundle import ResourceBundle
|
|
25
|
-
from upgini.utils.feature_info import FeatureInfo
|
|
25
|
+
from upgini.utils.feature_info import CLIENT_SOURCE, GENERATED_SOURCE, FeatureInfo
|
|
26
26
|
|
|
27
27
|
UPGINI_REPORT_BRANDING_URL = "UPGINI_REPORT_BRANDING_URL"
|
|
28
28
|
_STABILITY_PSI = 0.2
|
|
@@ -129,7 +129,6 @@ def build_search_results(
|
|
|
129
129
|
]
|
|
130
130
|
sources = _source_rows(found_rows)
|
|
131
131
|
summary = _overview_summary(
|
|
132
|
-
features_meta=features_meta,
|
|
133
132
|
model_rows=model_rows,
|
|
134
133
|
found_rows=found_rows,
|
|
135
134
|
sources=sources,
|
|
@@ -304,7 +303,6 @@ def _has_nonzero_shap_value(shap: Optional[float]) -> bool:
|
|
|
304
303
|
|
|
305
304
|
def _overview_summary(
|
|
306
305
|
*,
|
|
307
|
-
features_meta: list[FeaturesMetadataV2],
|
|
308
306
|
model_rows: list[FeatureRow],
|
|
309
307
|
found_rows: list[FeatureRow],
|
|
310
308
|
sources: list[SourceRow],
|
|
@@ -314,21 +312,16 @@ def _overview_summary(
|
|
|
314
312
|
joined_ads_count: Optional[int],
|
|
315
313
|
) -> SearchResultsSummary:
|
|
316
314
|
top_level = _unique_fold_model_inputs(generated_features)
|
|
317
|
-
features_by_name = {meta.name: meta for meta in features_meta}
|
|
318
315
|
autofe_by_name = _autofe_generated_by_name(generated_features, is_ensemble)
|
|
319
|
-
columns_by_name = _base_columns_by_name(generated_features)
|
|
320
316
|
ads_ids = _contributed_ads_ids(generated_features, autofe_by_name)
|
|
321
317
|
if top_level:
|
|
322
318
|
counts = {"external": 0, "original": 0, "autofe": 0}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
counts[kind] += 1
|
|
327
|
-
meta = _feature_meta_for_node(node, features_by_name, columns_by_name)
|
|
328
|
-
psis.append(None if meta is None else meta.psi_value)
|
|
329
|
-
model_features = len(top_level)
|
|
319
|
+
for row in model_rows:
|
|
320
|
+
counts[_model_row_kind(row)] += 1
|
|
321
|
+
model_features = len(model_rows)
|
|
330
322
|
external, original, autofe = counts["external"], counts["original"], counts["autofe"]
|
|
331
323
|
contributed = len(ads_ids or set())
|
|
324
|
+
psis = [row.psi for row in model_rows]
|
|
332
325
|
else:
|
|
333
326
|
model_features = len(model_rows) or None
|
|
334
327
|
external = original = autofe = None
|
|
@@ -383,38 +376,6 @@ def _top_level_key(node: Column | Feature) -> str:
|
|
|
383
376
|
return f"fe:{node.to_formula()}"
|
|
384
377
|
|
|
385
378
|
|
|
386
|
-
def _base_columns_by_name(generated_features: list[GeneratedFeatureMetadata]) -> dict[str, BaseColumnMetadata]:
|
|
387
|
-
by_name: dict[str, BaseColumnMetadata] = {}
|
|
388
|
-
for meta in generated_features:
|
|
389
|
-
for column in meta.base_columns:
|
|
390
|
-
if column.hashed_name:
|
|
391
|
-
by_name.setdefault(column.hashed_name, column)
|
|
392
|
-
if column.original_name:
|
|
393
|
-
by_name.setdefault(column.original_name, column)
|
|
394
|
-
return by_name
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
def _column_names(node: Column, columns_by_name: dict[str, BaseColumnMetadata]) -> list[str]:
|
|
398
|
-
names = [node.name]
|
|
399
|
-
column = columns_by_name.get(node.name)
|
|
400
|
-
if column is not None:
|
|
401
|
-
names.extend([column.hashed_name, column.original_name])
|
|
402
|
-
return [name for name in names if name]
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
def _feature_meta_for_node(
|
|
406
|
-
node: Column | Feature,
|
|
407
|
-
features_by_name: dict[str, FeaturesMetadataV2],
|
|
408
|
-
columns_by_name: dict[str, BaseColumnMetadata],
|
|
409
|
-
) -> Optional[FeaturesMetadataV2]:
|
|
410
|
-
if not isinstance(node, Column):
|
|
411
|
-
return None
|
|
412
|
-
return next(
|
|
413
|
-
(features_by_name[name] for name in _column_names(node, columns_by_name) if name in features_by_name),
|
|
414
|
-
None,
|
|
415
|
-
)
|
|
416
|
-
|
|
417
|
-
|
|
418
379
|
def _autofe_generated_by_name(
|
|
419
380
|
generated_features: list[GeneratedFeatureMetadata], is_ensemble: Callable[[str], bool]
|
|
420
381
|
) -> dict[str, GeneratedFeatureMetadata]:
|
|
@@ -452,30 +413,13 @@ def _generated_feature_names(meta: GeneratedFeatureMetadata) -> set[str]:
|
|
|
452
413
|
return {feature.get_display_name(shorten=True, unhash=True, cache=False)}
|
|
453
414
|
|
|
454
415
|
|
|
455
|
-
def
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
columns_by_name: dict[str, BaseColumnMetadata],
|
|
459
|
-
autofe_by_name: dict[str, GeneratedFeatureMetadata],
|
|
460
|
-
is_ensemble: Callable[[str], bool],
|
|
461
|
-
) -> str:
|
|
462
|
-
if isinstance(node, Feature):
|
|
463
|
-
return "autofe"
|
|
464
|
-
names = _column_names(node, columns_by_name)
|
|
465
|
-
if any(name in autofe_by_name for name in names):
|
|
416
|
+
def _model_row_kind(row: FeatureRow) -> str:
|
|
417
|
+
source = (row.source or "").lower()
|
|
418
|
+
if source.startswith("autofe") or source == GENERATED_SOURCE.lower():
|
|
466
419
|
return "autofe"
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
return "autofe"
|
|
471
|
-
if meta.source == "ads":
|
|
472
|
-
return "external"
|
|
473
|
-
if meta.source == "etalon":
|
|
474
|
-
return "original"
|
|
475
|
-
column = next((columns_by_name[name] for name in names if name in columns_by_name), None)
|
|
476
|
-
if column is not None and column.ads_definition_id:
|
|
477
|
-
return "external"
|
|
478
|
-
return "original"
|
|
420
|
+
if source == CLIENT_SOURCE.lower():
|
|
421
|
+
return "original"
|
|
422
|
+
return "external"
|
|
479
423
|
|
|
480
424
|
|
|
481
425
|
def _contributed_ads_ids(
|
|
@@ -41,7 +41,7 @@ def _report_payload(data: ReportData) -> dict:
|
|
|
41
41
|
"features": _features_payload(data.features),
|
|
42
42
|
"shap": {"topN": 5},
|
|
43
43
|
"searchResults": {
|
|
44
|
-
"relevantFeaturesCount": _dash(data.summary.relevant_features),
|
|
44
|
+
"relevantFeaturesCount": _dash(len(data.features) if data.features else data.summary.relevant_features),
|
|
45
45
|
"dataSourcesCount": _dash(data.summary.data_sources),
|
|
46
46
|
"autofeCount": _dash(len(data.autofe)),
|
|
47
47
|
"sources": _sources_payload(data.sources),
|
|
@@ -170,21 +170,27 @@ def _used_in_model_caption(summary: SearchResultsSummary) -> str:
|
|
|
170
170
|
|
|
171
171
|
|
|
172
172
|
def _features_payload(features: list[FeatureRow]) -> list[dict]:
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
173
|
+
rows = []
|
|
174
|
+
for row in features:
|
|
175
|
+
shap_class = _shap_fill_class(row)
|
|
176
|
+
provider = row.provider
|
|
177
|
+
if not provider and shap_class == "user":
|
|
178
|
+
provider = CLIENT_SOURCE
|
|
179
|
+
rows.append(
|
|
180
|
+
{
|
|
181
|
+
"name": row.name,
|
|
182
|
+
"provider": provider,
|
|
183
|
+
"source": row.source,
|
|
184
|
+
"shapClass": shap_class,
|
|
185
|
+
"importance": abs(row.shap) if row.shap is not None else 0,
|
|
186
|
+
"shap": row.shap,
|
|
187
|
+
"coverage": row.coverage,
|
|
188
|
+
"status": row.stability_status,
|
|
189
|
+
"psi": row.psi,
|
|
190
|
+
"drift": row.drift,
|
|
191
|
+
}
|
|
192
|
+
)
|
|
193
|
+
return rows
|
|
188
194
|
|
|
189
195
|
|
|
190
196
|
def _shap_fill_class(row: FeatureRow) -> str:
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.2.167.a4220.dev10"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/ads_management/__init__.py
RENAMED
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/ads_management/ads_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/__init__.py
RENAMED
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/base.py
RENAMED
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/cross.py
RENAMED
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/delta.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/roll.py
RENAMED
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/trend.py
RENAMED
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/autofe/timeseries/volatility.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/normalizer/normalize_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/resource_bundle/__init__.py
RENAMED
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/resource_bundle/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/sampler/random_under_sampler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/base_search_key_detector.py
RENAMED
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/blocked_time_series.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/custom_loss_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/deduplicate_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/fallback_progress_bar.py
RENAMED
|
File without changes
|
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/features_validator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/postal_code_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{upgini-1.2.167a4220.dev10 → upgini-1.2.167a4220.dev12}/src/upgini/utils/search_key_derivations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|