upgini 1.2.16a1__py3-none-any.whl → 1.2.16a3654.dev1__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.
Potentially problematic release.
This version of upgini might be problematic. Click here for more details.
- upgini/__about__.py +1 -1
- upgini/features_enricher.py +22 -39
- upgini/metrics.py +4 -54
- upgini/normalizer/normalize_utils.py +1 -4
- upgini/utils/display_utils.py +2 -2
- upgini/utils/features_validator.py +0 -4
- {upgini-1.2.16a1.dist-info → upgini-1.2.16a3654.dev1.dist-info}/METADATA +1 -1
- {upgini-1.2.16a1.dist-info → upgini-1.2.16a3654.dev1.dist-info}/RECORD +10 -10
- {upgini-1.2.16a1.dist-info → upgini-1.2.16a3654.dev1.dist-info}/WHEEL +1 -1
- {upgini-1.2.16a1.dist-info → upgini-1.2.16a3654.dev1.dist-info}/licenses/LICENSE +0 -0
upgini/__about__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "1.2.
|
|
1
|
+
__version__ = "1.2.16a3654.dev1"
|
upgini/features_enricher.py
CHANGED
|
@@ -165,6 +165,7 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
165
165
|
RANDOM_STATE = 42
|
|
166
166
|
CALCULATE_METRICS_THRESHOLD = 50_000_000
|
|
167
167
|
CALCULATE_METRICS_MIN_THRESHOLD = 500
|
|
168
|
+
TEXT_FEATURES_THRESHOLD = 5_000
|
|
168
169
|
GENERATE_FEATURES_LIMIT = 10
|
|
169
170
|
EMPTY_FEATURES_INFO = pd.DataFrame(
|
|
170
171
|
columns=[
|
|
@@ -871,13 +872,6 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
871
872
|
else None
|
|
872
873
|
)
|
|
873
874
|
|
|
874
|
-
if self.X is None:
|
|
875
|
-
self.X = X
|
|
876
|
-
if self.y is None:
|
|
877
|
-
self.y = y
|
|
878
|
-
if self.eval_set is None:
|
|
879
|
-
self.eval_set = effective_eval_set
|
|
880
|
-
|
|
881
875
|
try:
|
|
882
876
|
self.__log_debug_information(
|
|
883
877
|
validated_X,
|
|
@@ -945,14 +939,16 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
945
939
|
|
|
946
940
|
gc.collect()
|
|
947
941
|
|
|
948
|
-
if fitting_X.shape[
|
|
949
|
-
print(self.bundle.get("metrics_no_important_free_features"))
|
|
950
|
-
self.logger.warning("No client or free relevant ADS features found to calculate metrics")
|
|
951
|
-
self.warning_counter.increment()
|
|
952
|
-
return None
|
|
942
|
+
text_features = self.generate_features if fitting_X.shape[0] >= self.TEXT_FEATURES_THRESHOLD else []
|
|
953
943
|
|
|
954
944
|
print(self.bundle.get("metrics_start"))
|
|
955
945
|
with Spinner():
|
|
946
|
+
if fitting_X.shape[1] == 0 and fitting_enriched_X.shape[1] == 0:
|
|
947
|
+
print(self.bundle.get("metrics_no_important_free_features"))
|
|
948
|
+
self.logger.warning("No client or free relevant ADS features found to calculate metrics")
|
|
949
|
+
self.warning_counter.increment()
|
|
950
|
+
return None
|
|
951
|
+
|
|
956
952
|
self._check_train_and_eval_target_distribution(y_sorted, fitting_eval_set_dict)
|
|
957
953
|
|
|
958
954
|
has_date = SearchKey.find_key(search_keys, [SearchKey.DATE, SearchKey.DATETIME]) is not None
|
|
@@ -966,7 +962,7 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
966
962
|
fitting_enriched_X,
|
|
967
963
|
scoring,
|
|
968
964
|
groups=groups,
|
|
969
|
-
text_features=
|
|
965
|
+
text_features=text_features,
|
|
970
966
|
has_date=has_date,
|
|
971
967
|
)
|
|
972
968
|
metric = wrapper.metric_name
|
|
@@ -993,10 +989,10 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
993
989
|
cat_features,
|
|
994
990
|
add_params=custom_loss_add_params,
|
|
995
991
|
groups=groups,
|
|
996
|
-
text_features=
|
|
992
|
+
text_features=text_features,
|
|
997
993
|
has_date=has_date,
|
|
998
994
|
)
|
|
999
|
-
etalon_metric
|
|
995
|
+
etalon_metric = baseline_estimator.cross_val_predict(
|
|
1000
996
|
fitting_X, y_sorted, self.baseline_score_column
|
|
1001
997
|
)
|
|
1002
998
|
if etalon_metric is None:
|
|
@@ -1027,14 +1023,10 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
1027
1023
|
cat_features,
|
|
1028
1024
|
add_params=custom_loss_add_params,
|
|
1029
1025
|
groups=groups,
|
|
1030
|
-
text_features=
|
|
1026
|
+
text_features=text_features,
|
|
1031
1027
|
has_date=has_date,
|
|
1032
1028
|
)
|
|
1033
|
-
enriched_metric
|
|
1034
|
-
fitting_enriched_X, enriched_y_sorted
|
|
1035
|
-
)
|
|
1036
|
-
|
|
1037
|
-
print(f"Calculated enriched shaps: {enriched_shaps}")
|
|
1029
|
+
enriched_metric = enriched_estimator.cross_val_predict(fitting_enriched_X, enriched_y_sorted)
|
|
1038
1030
|
if enriched_metric is None:
|
|
1039
1031
|
self.logger.warning(
|
|
1040
1032
|
f"Enriched {metric} on train combined features is None (maybe all features was removed)"
|
|
@@ -1167,6 +1159,13 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
1167
1159
|
elif uplift_col in metrics_df.columns and (metrics_df[uplift_col] < 0).any():
|
|
1168
1160
|
self.logger.warning("Uplift is negative")
|
|
1169
1161
|
|
|
1162
|
+
if self.X is None:
|
|
1163
|
+
self.X = X
|
|
1164
|
+
if self.y is None:
|
|
1165
|
+
self.y = y
|
|
1166
|
+
if self.eval_set is None:
|
|
1167
|
+
self.eval_set = effective_eval_set
|
|
1168
|
+
|
|
1170
1169
|
return metrics_df
|
|
1171
1170
|
except Exception as e:
|
|
1172
1171
|
error_message = "Failed to calculate metrics" + (
|
|
@@ -1191,18 +1190,6 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
1191
1190
|
finally:
|
|
1192
1191
|
self.logger.info(f"Calculating metrics elapsed time: {time.time() - start_time}")
|
|
1193
1192
|
|
|
1194
|
-
def _update_shap_values(self, new_shaps: Dict[str, float]):
|
|
1195
|
-
feature_name_header = self.bundle.get("features_info_name")
|
|
1196
|
-
shap_value_header = self.bundle.get("features_info_shap")
|
|
1197
|
-
|
|
1198
|
-
def update_shap(row):
|
|
1199
|
-
return new_shaps.get(row[feature_name_header], row[shap_value_header])
|
|
1200
|
-
|
|
1201
|
-
self.features_info[shap_value_header] = self.features_info.apply(update_shap, axis=1)
|
|
1202
|
-
self.features_info.sort_values(by=shap_value_header, ascending=False, inplace=True)
|
|
1203
|
-
|
|
1204
|
-
# TODO redraw
|
|
1205
|
-
|
|
1206
1193
|
def _check_train_and_eval_target_distribution(self, y, eval_set_dict):
|
|
1207
1194
|
uneven_distribution = False
|
|
1208
1195
|
for eval_set in eval_set_dict.values():
|
|
@@ -1594,9 +1581,7 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
1594
1581
|
generated_features.extend(generator.generated_features)
|
|
1595
1582
|
|
|
1596
1583
|
normalizer = Normalizer(self.bundle, self.logger, self.warning_counter)
|
|
1597
|
-
df, search_keys, generated_features = normalizer.normalize(
|
|
1598
|
-
df, search_keys, generated_features
|
|
1599
|
-
)
|
|
1584
|
+
df, search_keys, generated_features = normalizer.normalize(df, search_keys, generated_features)
|
|
1600
1585
|
columns_renaming = normalizer.columns_renaming
|
|
1601
1586
|
|
|
1602
1587
|
df = clean_full_duplicates(df, logger=self.logger, silent=True, bundle=self.bundle)
|
|
@@ -2036,9 +2021,7 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
2036
2021
|
generated_features.extend(generator.generated_features)
|
|
2037
2022
|
|
|
2038
2023
|
normalizer = Normalizer(self.bundle, self.logger, self.warning_counter, silent_mode)
|
|
2039
|
-
df, search_keys, generated_features = normalizer.normalize(
|
|
2040
|
-
df, search_keys, generated_features
|
|
2041
|
-
)
|
|
2024
|
+
df, search_keys, generated_features = normalizer.normalize(df, search_keys, generated_features)
|
|
2042
2025
|
columns_renaming = normalizer.columns_renaming
|
|
2043
2026
|
|
|
2044
2027
|
# Don't pass all features in backend on transform
|
upgini/metrics.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from collections import defaultdict
|
|
4
3
|
import inspect
|
|
5
4
|
import logging
|
|
6
5
|
import re
|
|
@@ -10,7 +9,7 @@ from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
|
10
9
|
import catboost
|
|
11
10
|
import numpy as np
|
|
12
11
|
import pandas as pd
|
|
13
|
-
from catboost import
|
|
12
|
+
from catboost import CatBoostClassifier, CatBoostRegressor
|
|
14
13
|
from numpy import log1p
|
|
15
14
|
from pandas.api.types import is_numeric_dtype
|
|
16
15
|
from sklearn.metrics import check_scoring, get_scorer, make_scorer, roc_auc_score
|
|
@@ -289,12 +288,9 @@ class EstimatorWrapper:
|
|
|
289
288
|
x, y, _ = self._prepare_data(x, y)
|
|
290
289
|
return x, y, {}
|
|
291
290
|
|
|
292
|
-
def calculate_shap(self, x: pd.DataFrame, y: pd.Series, estimator) -> Optional[Dict[str, float]]:
|
|
293
|
-
return None
|
|
294
|
-
|
|
295
291
|
def cross_val_predict(
|
|
296
292
|
self, x: pd.DataFrame, y: np.ndarray, baseline_score_column: Optional[Any] = None
|
|
297
|
-
) ->
|
|
293
|
+
) -> Optional[float]:
|
|
298
294
|
x, y, groups, fit_params = self._prepare_to_fit(x, y)
|
|
299
295
|
|
|
300
296
|
if x.shape[1] == 0:
|
|
@@ -302,7 +298,6 @@ class EstimatorWrapper:
|
|
|
302
298
|
|
|
303
299
|
scorer = check_scoring(self.estimator, scoring=self.scorer)
|
|
304
300
|
|
|
305
|
-
shap_values_all_folds = defaultdict(list)
|
|
306
301
|
if baseline_score_column is not None and self.metric_name == "GINI":
|
|
307
302
|
self.logger.info("Calculate baseline GINI on passed baseline_score_column and target")
|
|
308
303
|
metric = roc_auc_score(y, x[baseline_score_column])
|
|
@@ -324,29 +319,7 @@ class EstimatorWrapper:
|
|
|
324
319
|
self.check_fold_metrics(metrics_by_fold)
|
|
325
320
|
|
|
326
321
|
metric = np.mean(metrics_by_fold) * self.multiplier
|
|
327
|
-
|
|
328
|
-
splits = self.cv.split(x, y, groups)
|
|
329
|
-
|
|
330
|
-
for estimator, split in zip(self.cv_estimators, splits):
|
|
331
|
-
_, validation_idx = split
|
|
332
|
-
cv_x = x.iloc[validation_idx]
|
|
333
|
-
cv_y = y[validation_idx]
|
|
334
|
-
shaps = self.calculate_shap(cv_x, cv_y, estimator)
|
|
335
|
-
if shaps is not None:
|
|
336
|
-
for feature, shap_value in shaps.items():
|
|
337
|
-
# shap_values_all_folds[feature] = shap_values_all_folds.get(feature, []) + shap_value.tolist()
|
|
338
|
-
shap_values_all_folds[feature].extend(shap_value.tolist())
|
|
339
|
-
|
|
340
|
-
if shap_values_all_folds:
|
|
341
|
-
average_shap_values = {
|
|
342
|
-
feature: np.mean(shaps)
|
|
343
|
-
for feature, shaps
|
|
344
|
-
in shap_values_all_folds.items()
|
|
345
|
-
}
|
|
346
|
-
else:
|
|
347
|
-
average_shap_values = None
|
|
348
|
-
|
|
349
|
-
return self.post_process_metric(metric), average_shap_values
|
|
322
|
+
return self.post_process_metric(metric)
|
|
350
323
|
|
|
351
324
|
def check_fold_metrics(self, metrics_by_fold: List[float]):
|
|
352
325
|
first_metric_sign = 1 if metrics_by_fold[0] >= 0 else -1
|
|
@@ -575,7 +548,7 @@ class CatBoostWrapper(EstimatorWrapper):
|
|
|
575
548
|
|
|
576
549
|
def cross_val_predict(
|
|
577
550
|
self, x: pd.DataFrame, y: np.ndarray, baseline_score_column: Optional[Any] = None
|
|
578
|
-
) ->
|
|
551
|
+
) -> Optional[float]:
|
|
579
552
|
try:
|
|
580
553
|
return super().cross_val_predict(x, y, baseline_score_column)
|
|
581
554
|
except Exception as e:
|
|
@@ -600,29 +573,6 @@ class CatBoostWrapper(EstimatorWrapper):
|
|
|
600
573
|
else:
|
|
601
574
|
raise e
|
|
602
575
|
|
|
603
|
-
def calculate_shap(self, x: pd.DataFrame, y: pd.Series, estimator: CatBoost) -> Optional[Dict[str, float]]:
|
|
604
|
-
try:
|
|
605
|
-
# Create Pool for fold data, if need (for example, when categorical features are present)
|
|
606
|
-
fold_pool = Pool(x, y, cat_features=self.cat_features)
|
|
607
|
-
|
|
608
|
-
# Get SHAP values of current estimator
|
|
609
|
-
shap_values_fold = estimator.get_feature_importance(data=fold_pool, type="ShapValues")
|
|
610
|
-
|
|
611
|
-
# Remove last columns (base value) and flatten
|
|
612
|
-
if self.target_type == ModelTaskType.MULTICLASS:
|
|
613
|
-
all_shaps = shap_values_fold[:, :, :-1]
|
|
614
|
-
all_shaps = [all_shaps[:, :, k].flatten() for k in range(all_shaps.shape[2])]
|
|
615
|
-
else:
|
|
616
|
-
all_shaps = shap_values_fold[:, :-1]
|
|
617
|
-
all_shaps = [all_shaps[:, k].flatten() for k in range(all_shaps.shape[1])]
|
|
618
|
-
|
|
619
|
-
all_shaps = np.abs(all_shaps)
|
|
620
|
-
|
|
621
|
-
return dict(zip(estimator.feature_names_, all_shaps))
|
|
622
|
-
|
|
623
|
-
except Exception:
|
|
624
|
-
return None
|
|
625
|
-
|
|
626
576
|
|
|
627
577
|
class LightGBMWrapper(EstimatorWrapper):
|
|
628
578
|
def __init__(
|
|
@@ -49,10 +49,7 @@ class Normalizer:
|
|
|
49
49
|
self.generated_features = []
|
|
50
50
|
|
|
51
51
|
def normalize(
|
|
52
|
-
self,
|
|
53
|
-
df: pd.DataFrame,
|
|
54
|
-
search_keys: Dict[str, SearchKey],
|
|
55
|
-
generated_features: List[str],
|
|
52
|
+
self, df: pd.DataFrame, search_keys: Dict[str, SearchKey], generated_features: List[str]
|
|
56
53
|
) -> Tuple[pd.DataFrame, Dict[str, SearchKey], List[str]]:
|
|
57
54
|
self.search_keys = search_keys.copy()
|
|
58
55
|
self.generated_features = generated_features.copy()
|
upgini/utils/display_utils.py
CHANGED
|
@@ -72,7 +72,7 @@ def make_table(df: pd.DataFrame, wrap_long_string=None) -> str:
|
|
|
72
72
|
)
|
|
73
73
|
|
|
74
74
|
|
|
75
|
-
def display_html_dataframe(df: pd.DataFrame, internal_df: pd.DataFrame, header: str
|
|
75
|
+
def display_html_dataframe(df: pd.DataFrame, internal_df: pd.DataFrame, header: str):
|
|
76
76
|
if not ipython_available():
|
|
77
77
|
print(header)
|
|
78
78
|
print(internal_df)
|
|
@@ -133,7 +133,7 @@ def display_html_dataframe(df: pd.DataFrame, internal_df: pd.DataFrame, header:
|
|
|
133
133
|
{table_html}
|
|
134
134
|
</div>
|
|
135
135
|
"""
|
|
136
|
-
|
|
136
|
+
display(HTML(result_html))
|
|
137
137
|
|
|
138
138
|
|
|
139
139
|
def make_html_report(
|
|
@@ -58,10 +58,6 @@ class FeaturesValidator:
|
|
|
58
58
|
|
|
59
59
|
columns_renaming = columns_renaming or {}
|
|
60
60
|
|
|
61
|
-
if features_for_generate:
|
|
62
|
-
empty_or_constant_features = [
|
|
63
|
-
f for f in empty_or_constant_features if columns_renaming.get(f, f) not in features_for_generate
|
|
64
|
-
]
|
|
65
61
|
if empty_or_constant_features:
|
|
66
62
|
msg = bundle.get("empty_or_contant_features").format(
|
|
67
63
|
[columns_renaming.get(f, f) for f in empty_or_constant_features]
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
upgini/__about__.py,sha256=
|
|
1
|
+
upgini/__about__.py,sha256=upE7bNrEHNfQDR1MGPVPLLPvm1ag4pPCWAONnpxZPyE,33
|
|
2
2
|
upgini/__init__.py,sha256=M64LwQTBa-5Jz24Zm2h8rWwlKQQ1J8nP7gGgIciS0WU,589
|
|
3
3
|
upgini/ads.py,sha256=nvuRxRx5MHDMgPr9SiU-fsqRdFaBv8p4_v1oqiysKpc,2714
|
|
4
4
|
upgini/dataset.py,sha256=iPFiMJtk4HF1ytw9wCQr8H9RfoOKj_TIo8XYZKWgcMc,31331
|
|
5
5
|
upgini/errors.py,sha256=2b_Wbo0OYhLUbrZqdLIx5jBnAsiD1Mcenh-VjR4HCTw,950
|
|
6
|
-
upgini/features_enricher.py,sha256=
|
|
6
|
+
upgini/features_enricher.py,sha256=4lfofrRPndG_CFMownDHZuXTnfMgDF1a8hW-ShdU8ns,188446
|
|
7
7
|
upgini/http.py,sha256=21asexflvavydzCOONJDGQBtQanCElrbnqLXakJ9Cu8,42880
|
|
8
8
|
upgini/lazy_import.py,sha256=74gQ8JuA48BGRLxAo7lNHNKY2D2emMxrUxKGdxVGhuY,1012
|
|
9
9
|
upgini/metadata.py,sha256=osmzdNESeh7yP3BZday6N9Q3eaIHfzhhRM1d6NSgcf0,11223
|
|
10
|
-
upgini/metrics.py,sha256=
|
|
10
|
+
upgini/metrics.py,sha256=bgi1rc3vCCeCuwRX1doQSQCzaV5OEiYHv_6XIvapnaw,31254
|
|
11
11
|
upgini/search_task.py,sha256=qxUxAD-bed-FpZYmTB_4orW7YJsW_O6a1TcgnZIRFr4,17307
|
|
12
12
|
upgini/spinner.py,sha256=4iMd-eIe_BnkqFEMIliULTbj6rNI2HkN_VJ4qYe0cUc,1118
|
|
13
13
|
upgini/version_validator.py,sha256=ddSKUK_-eGJB3NgrqOMoWJU-OxQ253WsNLp8aqJkaIM,1389
|
|
@@ -27,7 +27,7 @@ upgini/data_source/data_source_publisher.py,sha256=X-8aGtVgzGmxyXkMVBoBLIGDMb4lY
|
|
|
27
27
|
upgini/mdc/__init__.py,sha256=aM08nIWFc2gWdWUa3_IuEnNND0cQPkBGnYpRMnfFN8k,1019
|
|
28
28
|
upgini/mdc/context.py,sha256=3u1B-jXt7tXEvNcV3qmR9SDCseudnY7KYsLclBdwVLk,1405
|
|
29
29
|
upgini/normalizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
-
upgini/normalizer/normalize_utils.py,sha256=
|
|
30
|
+
upgini/normalizer/normalize_utils.py,sha256=Lv75lq7M46z9cAIutwkdKZtPZkWblgoRzToAJ1BwY8A,7709
|
|
31
31
|
upgini/resource_bundle/__init__.py,sha256=S5F2G47pnJd2LDpmFsjDqEwiKkP8Hm-hcseDbMka6Ko,8345
|
|
32
32
|
upgini/resource_bundle/exceptions.py,sha256=5fRvx0_vWdE1-7HcSgF0tckB4A9AKyf5RiinZkInTsI,621
|
|
33
33
|
upgini/resource_bundle/strings.properties,sha256=eqJP6bGu12zFuQJqMY03QbMhppcdwIfL2bsJWaqmuZ4,27221
|
|
@@ -44,10 +44,10 @@ upgini/utils/custom_loss_utils.py,sha256=kieNZYBYZm5ZGBltF1F_jOSF4ea6C29rYuCyiDc
|
|
|
44
44
|
upgini/utils/cv_utils.py,sha256=w6FQb9nO8BWDx88EF83NpjPLarK4eR4ia0Wg0kLBJC4,3525
|
|
45
45
|
upgini/utils/datetime_utils.py,sha256=4tsGeehU0KS6wqNsc9gEEWZ9s6T9E0UReUIO3rSuXNU,12174
|
|
46
46
|
upgini/utils/deduplicate_utils.py,sha256=NpaPtBYXwUtfKTRHWrtz2uUq6tZN6C_Nd719ydPRF2Q,8484
|
|
47
|
-
upgini/utils/display_utils.py,sha256=
|
|
47
|
+
upgini/utils/display_utils.py,sha256=A2ouB5eiZ-Kyt9ykYxkLQwyoRPrdYeJymwNTiajtFXs,10990
|
|
48
48
|
upgini/utils/email_utils.py,sha256=j0Ug1R_0AnCg1Y92zIZ4XMwvKo3G5_pcOlBN1OH_gZs,5191
|
|
49
49
|
upgini/utils/fallback_progress_bar.py,sha256=PDaKb8dYpVZaWMroNcOHsTc3pSjgi9mOm0--cOFTwJ0,1074
|
|
50
|
-
upgini/utils/features_validator.py,sha256=
|
|
50
|
+
upgini/utils/features_validator.py,sha256=yiOdzVtpArELMufzAa9mtWq32lETB6sIF-w3Yvl3vV8,3614
|
|
51
51
|
upgini/utils/format.py,sha256=Yv5cvvSs2bOLUzzNu96Pu33VMDNbabio92QepUj41jU,243
|
|
52
52
|
upgini/utils/ip_utils.py,sha256=Q6vb7Sr5Khx3Sq3eENjW2qCXKej_S5jZbneH6zEOkzQ,5171
|
|
53
53
|
upgini/utils/phone_utils.py,sha256=IrbztLuOJBiePqqxllfABWfYlfAjYevPhXKipl95wUI,10432
|
|
@@ -57,7 +57,7 @@ upgini/utils/sklearn_ext.py,sha256=13jQS_k7v0aUtudXV6nGUEWjttPQzAW9AFYL5wgEz9k,4
|
|
|
57
57
|
upgini/utils/target_utils.py,sha256=qHzZRmICFbLNCrmVqGkaBcjm91L2ERRZMppci36acV4,10085
|
|
58
58
|
upgini/utils/track_info.py,sha256=G5Lu1xxakg2_TQjKZk4b5SvrHsATTXNVV3NbvWtT8k8,5663
|
|
59
59
|
upgini/utils/warning_counter.py,sha256=dIWBB4dI5XRRJZudvIlqlIYKEiwLLPcXarsZuYRt338,227
|
|
60
|
-
upgini-1.2.
|
|
61
|
-
upgini-1.2.
|
|
62
|
-
upgini-1.2.
|
|
63
|
-
upgini-1.2.
|
|
60
|
+
upgini-1.2.16a3654.dev1.dist-info/METADATA,sha256=Xg2vPhmfT0fLFYRqiv7k5FYiBLA-vpHa11oks6tRDhI,48587
|
|
61
|
+
upgini-1.2.16a3654.dev1.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
|
|
62
|
+
upgini-1.2.16a3654.dev1.dist-info/licenses/LICENSE,sha256=5RRzgvdJUu3BUDfv4bzVU6FqKgwHlIay63pPCSmSgzw,1514
|
|
63
|
+
upgini-1.2.16a3654.dev1.dist-info/RECORD,,
|
|
File without changes
|