upgini 1.2.156.dev2__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.dev2 → 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.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/date.py +37 -9
  4. upgini-1.2.156.dev2/src/upgini/__about__.py +0 -1
  5. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/.gitignore +0 -0
  6. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/LICENSE +0 -0
  7. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/README.md +0 -0
  8. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/pyproject.toml +0 -0
  9. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/__init__.py +0 -0
  10. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/ads.py +0 -0
  11. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/ads_management/__init__.py +0 -0
  12. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/ads_management/ads_manager.py +0 -0
  13. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/__init__.py +0 -0
  14. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/all_operators.py +0 -0
  15. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/binary.py +0 -0
  16. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/feature.py +0 -0
  17. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/groupby.py +0 -0
  18. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/operator.py +0 -0
  19. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/__init__.py +0 -0
  20. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/base.py +0 -0
  21. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/cross.py +0 -0
  22. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/delta.py +0 -0
  23. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/lag.py +0 -0
  24. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/roll.py +0 -0
  25. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/trend.py +0 -0
  26. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/timeseries/volatility.py +0 -0
  27. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/unary.py +0 -0
  28. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/utils.py +0 -0
  29. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/autofe/vector.py +0 -0
  30. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/data_source/__init__.py +0 -0
  31. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/data_source/data_source_publisher.py +0 -0
  32. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/dataset.py +0 -0
  33. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/errors.py +0 -0
  34. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/features_enricher.py +0 -0
  35. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/http.py +0 -0
  36. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/mdc/__init__.py +0 -0
  37. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/mdc/context.py +0 -0
  38. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/metadata.py +0 -0
  39. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/metrics.py +0 -0
  40. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/normalizer/__init__.py +0 -0
  41. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/normalizer/normalize_utils.py +0 -0
  42. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/resource_bundle/__init__.py +0 -0
  43. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/resource_bundle/exceptions.py +0 -0
  44. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/resource_bundle/strings.properties +0 -0
  45. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/resource_bundle/strings_widget.properties +0 -0
  46. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/sampler/__init__.py +0 -0
  47. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/sampler/base.py +0 -0
  48. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/sampler/random_under_sampler.py +0 -0
  49. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/sampler/utils.py +0 -0
  50. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/search_task.py +0 -0
  51. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/spinner.py +0 -0
  52. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/Roboto-Regular.ttf +0 -0
  53. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/__init__.py +0 -0
  54. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/base_search_key_detector.py +0 -0
  55. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/blocked_time_series.py +0 -0
  56. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/config.py +0 -0
  57. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/country_utils.py +0 -0
  58. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/custom_loss_utils.py +0 -0
  59. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/cv_utils.py +0 -0
  60. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/datetime_utils.py +0 -0
  61. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/deduplicate_utils.py +0 -0
  62. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/display_utils.py +0 -0
  63. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/email_utils.py +0 -0
  64. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/fallback_progress_bar.py +0 -0
  65. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/feature_info.py +0 -0
  66. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/features_validator.py +0 -0
  67. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/format.py +0 -0
  68. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/hash_utils.py +0 -0
  69. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/ip_utils.py +0 -0
  70. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/mstats.py +0 -0
  71. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/one_hot_encoder.py +0 -0
  72. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/phone_utils.py +0 -0
  73. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/postal_code_utils.py +0 -0
  74. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/progress_bar.py +0 -0
  75. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/psi.py +0 -0
  76. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/sample_utils.py +0 -0
  77. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/sklearn_ext.py +0 -0
  78. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/sort.py +0 -0
  79. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/target_utils.py +0 -0
  80. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/track_info.py +0 -0
  81. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/ts_utils.py +0 -0
  82. {upgini-1.2.156.dev2 → upgini-1.2.156.dev3}/src/upgini/utils/warning_counter.py +0 -0
  83. {upgini-1.2.156.dev2 → 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.dev2
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
@@ -1 +0,0 @@
1
- __version__ = "1.2.156.dev2"
File without changes
File without changes
File without changes