upgini 1.2.156.dev1__tar.gz → 1.2.156.dev3__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.
Files changed (83) hide show
  1. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/PKG-INFO +1 -1
  2. upgini-1.2.156.dev3/src/upgini/__about__.py +1 -0
  3. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/date.py +37 -9
  4. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/feature_info.py +3 -1
  5. upgini-1.2.156.dev1/src/upgini/__about__.py +0 -1
  6. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/.gitignore +0 -0
  7. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/LICENSE +0 -0
  8. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/README.md +0 -0
  9. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/pyproject.toml +0 -0
  10. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/__init__.py +0 -0
  11. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/ads.py +0 -0
  12. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/ads_management/__init__.py +0 -0
  13. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/ads_management/ads_manager.py +0 -0
  14. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/__init__.py +0 -0
  15. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/all_operators.py +0 -0
  16. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/binary.py +0 -0
  17. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/feature.py +0 -0
  18. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/groupby.py +0 -0
  19. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/operator.py +0 -0
  20. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/__init__.py +0 -0
  21. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/base.py +0 -0
  22. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/cross.py +0 -0
  23. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/delta.py +0 -0
  24. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/lag.py +0 -0
  25. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/roll.py +0 -0
  26. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/trend.py +0 -0
  27. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/volatility.py +0 -0
  28. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/unary.py +0 -0
  29. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/utils.py +0 -0
  30. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/autofe/vector.py +0 -0
  31. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/data_source/__init__.py +0 -0
  32. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/data_source/data_source_publisher.py +0 -0
  33. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/dataset.py +0 -0
  34. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/errors.py +0 -0
  35. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/features_enricher.py +0 -0
  36. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/http.py +0 -0
  37. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/mdc/__init__.py +0 -0
  38. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/mdc/context.py +0 -0
  39. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/metadata.py +0 -0
  40. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/metrics.py +0 -0
  41. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/normalizer/__init__.py +0 -0
  42. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/normalizer/normalize_utils.py +0 -0
  43. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/resource_bundle/__init__.py +0 -0
  44. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/resource_bundle/exceptions.py +0 -0
  45. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/resource_bundle/strings.properties +0 -0
  46. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/resource_bundle/strings_widget.properties +0 -0
  47. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/sampler/__init__.py +0 -0
  48. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/sampler/base.py +0 -0
  49. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/sampler/random_under_sampler.py +0 -0
  50. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/sampler/utils.py +0 -0
  51. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/search_task.py +0 -0
  52. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/spinner.py +0 -0
  53. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/Roboto-Regular.ttf +0 -0
  54. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/__init__.py +0 -0
  55. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/base_search_key_detector.py +0 -0
  56. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/blocked_time_series.py +0 -0
  57. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/config.py +0 -0
  58. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/country_utils.py +0 -0
  59. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/custom_loss_utils.py +0 -0
  60. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/cv_utils.py +0 -0
  61. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/datetime_utils.py +0 -0
  62. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/deduplicate_utils.py +0 -0
  63. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/display_utils.py +0 -0
  64. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/email_utils.py +0 -0
  65. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/fallback_progress_bar.py +0 -0
  66. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/features_validator.py +0 -0
  67. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/format.py +0 -0
  68. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/hash_utils.py +0 -0
  69. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/ip_utils.py +0 -0
  70. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/mstats.py +0 -0
  71. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/one_hot_encoder.py +0 -0
  72. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/phone_utils.py +0 -0
  73. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/postal_code_utils.py +0 -0
  74. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/progress_bar.py +0 -0
  75. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/psi.py +0 -0
  76. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/sample_utils.py +0 -0
  77. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/sklearn_ext.py +0 -0
  78. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/sort.py +0 -0
  79. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/target_utils.py +0 -0
  80. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/track_info.py +0 -0
  81. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/ts_utils.py +0 -0
  82. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/utils/warning_counter.py +0 -0
  83. {upgini-1.2.156.dev1 → upgini-1.2.156.dev3}/src/upgini/version_validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: upgini
3
- Version: 1.2.156.dev1
3
+ Version: 1.2.156.dev3
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.156.dev3"
@@ -145,23 +145,51 @@ class DateListDiff(PandasOperator, DateDiffMixin, ParametrizedOperator):
145
145
  return None
146
146
  return cls(aggregation=aggregation)
147
147
 
148
+ @staticmethod
149
+ def _non_empty_list_mask(right: pd.Series) -> pd.Series:
150
+ values = right.to_numpy()
151
+ mask = np.empty(len(values), dtype=bool)
152
+ for i, value in enumerate(values):
153
+ if value is None or (isinstance(value, float) and np.isnan(value)):
154
+ mask[i] = False
155
+ elif isinstance(value, (list, tuple, np.ndarray)):
156
+ mask[i] = len(value) > 0
157
+ else:
158
+ mask[i] = False
159
+ return pd.Series(mask, index=right.index)
160
+
161
+ def _convert_date_lists(self, lists: pd.Series) -> pd.Series:
162
+ exploded = lists.explode()
163
+ converted = pd.to_datetime(exploded, unit=self.right_unit, errors="coerce")
164
+ return pd.Series(
165
+ {
166
+ idx: pd.arrays.DatetimeArray(values.to_numpy())
167
+ for idx, values in converted.groupby(converted.index, sort=False)
168
+ }
169
+ )
170
+
148
171
  def calculate_binary(self, left: pd.Series, right: pd.Series) -> pd.Series:
149
172
  if left.isna().all() or right.isna().all():
150
173
  return pd.Series([None] * len(left), index=left.index, dtype=np.float64)
151
174
 
152
175
  left = self._convert_to_date(left, self.left_unit)
153
- right_mask = right.apply(lambda x: len(x) > 0)
176
+ right_mask = self._non_empty_list_mask(right)
154
177
  mask = left.notna() & right.notna() & right_mask
155
- right_masked = right[mask].apply(lambda x: pd.arrays.DatetimeArray(self._convert_to_date(x, self.right_unit)))
156
178
 
157
- if len(right_masked) == 0:
158
- diff = []
159
- elif len(right_masked) < 2:
160
- diff = [left[mask].iloc[0] - right_masked.iloc[0]]
161
- else:
162
- diff = left[mask] - right_masked.values
179
+ if not mask.any():
180
+ res = pd.Series(np.nan, index=left.index, dtype=np.float64)
181
+ if self.aggregation in _count_aggregations:
182
+ res[~right_mask] = 0.0
183
+ return res
184
+
185
+ masked_left = left[mask]
186
+ converted_lists = self._convert_date_lists(right[mask])
187
+ results = np.empty(len(masked_left), dtype=np.float64)
188
+ results[:] = np.nan
189
+ for i, (idx, left_date) in enumerate(masked_left.items()):
190
+ results[i] = self._agg(self._diff(left_date - converted_lists[idx]))
163
191
 
164
- res_masked = pd.Series(diff, index=left[mask].index).apply(lambda x: self._agg(self._diff(x)))
192
+ res_masked = pd.Series(results, index=masked_left.index)
165
193
  res = res_masked.reindex(left.index.union(right.index))
166
194
  if self.aggregation in _count_aggregations:
167
195
  res[~right_mask] = 0.0
@@ -105,7 +105,9 @@ def _get_feature_sample(feature_meta: FeaturesMetadataV2, data: Optional[pd.Data
105
105
  if len(data) > 3:
106
106
  rand = np.random.RandomState(42)
107
107
  unique_values = sorted(data[feature_meta.name].dropna().unique(), key=str)
108
- feature_sample = rand.choice(unique_values, 3, replace=False).tolist()
108
+ feature_sample = (
109
+ rand.choice(unique_values, 3, replace=False).tolist() if len(unique_values) > 3 else unique_values
110
+ )
109
111
  else:
110
112
  feature_sample = data[feature_meta.name].dropna().unique().tolist()
111
113
  if len(feature_sample) > 0 and isinstance(feature_sample[0], float):
@@ -1 +0,0 @@
1
- __version__ = "1.2.156.dev1"
File without changes
File without changes
File without changes