rdt 1.12.1.dev1__tar.gz → 1.12.2.dev0__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 (41) hide show
  1. {rdt-1.12.1.dev1/rdt.egg-info → rdt-1.12.2.dev0}/PKG-INFO +1 -1
  2. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/pyproject.toml +27 -12
  3. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/__init__.py +1 -1
  4. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/boolean.py +18 -1
  5. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/categorical.py +18 -0
  6. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/datetime.py +36 -0
  7. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/null.py +14 -0
  8. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/numerical.py +44 -0
  9. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/pii/anonymizer.py +24 -0
  10. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0/rdt.egg-info}/PKG-INFO +1 -1
  11. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/LICENSE +0 -0
  12. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/README.md +0 -0
  13. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/errors.py +0 -0
  14. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/hyper_transformer.py +0 -0
  15. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/__init__.py +0 -0
  16. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/__init__.py +0 -0
  17. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/base.py +0 -0
  18. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/boolean.py +0 -0
  19. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/categorical.py +0 -0
  20. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/datetime.py +0 -0
  21. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/numerical.py +0 -0
  22. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/pii.py +0 -0
  23. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/text.py +0 -0
  24. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/utils.py +0 -0
  25. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/performance.py +0 -0
  26. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/profiling.py +0 -0
  27. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/__init__.py +0 -0
  28. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/_validators.py +0 -0
  29. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/base.py +0 -0
  30. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/pii/__init__.py +0 -0
  31. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/pii/anonymization.py +0 -0
  32. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/pii/utils.py +0 -0
  33. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/text.py +0 -0
  34. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/utils.py +0 -0
  35. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt.egg-info/SOURCES.txt +0 -0
  36. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt.egg-info/dependency_links.txt +0 -0
  37. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt.egg-info/entry_points.txt +0 -0
  38. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt.egg-info/requires.txt +0 -0
  39. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt.egg-info/top_level.txt +0 -0
  40. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/setup.cfg +0 -0
  41. {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/tests/test_tasks.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rdt
3
- Version: 1.12.1.dev1
3
+ Version: 1.12.2.dev0
4
4
  Summary: Reversible Data Transforms
5
5
  Author-email: "DataCebo, Inc." <info@sdv.dev>
6
6
  License: BSL-1.1
@@ -137,7 +137,7 @@ collect_ignore = ['pyproject.toml']
137
137
  exclude_lines = ['NotImplementedError()']
138
138
 
139
139
  [tool.bumpversion]
140
- current_version = "1.12.1.dev1"
140
+ current_version = "1.12.2.dev0"
141
141
  parse = '(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\.(?P<release>[a-z]+)(?P<candidate>\d+))?'
142
142
  serialize = [
143
143
  '{major}.{minor}.{patch}.{release}{candidate}',
@@ -178,13 +178,14 @@ preview = true
178
178
  line-length = 100
179
179
  indent-width = 4
180
180
  src = ["rdt"]
181
- target-version = "py312"
182
181
  exclude = [
183
- "docs",
184
- ".tox",
185
- ".git",
186
- "__pycache__",
187
- ".ipynb_checkpoints"
182
+ 'docs',
183
+ '.tox',
184
+ '.git',
185
+ '__pycache__',
186
+ '.ipynb_checkpoints',
187
+ 'tasks.py',
188
+ 'tests/contributing.py'
188
189
  ]
189
190
 
190
191
  [tool.ruff.lint]
@@ -194,13 +195,22 @@ select = [
194
195
  # Pycodestyle
195
196
  "E",
196
197
  "W",
198
+ # pydocstyle
199
+ "D",
197
200
  # isort
198
- "I001"
201
+ "I001",
202
+ # print statements
203
+ "T201",
204
+ # pandas-vet
205
+ "PD"
199
206
  ]
200
207
  ignore = [
201
208
  "E501",
209
+ # pydocstyle
202
210
  "D107", # Missing docstring in __init__
203
211
  "D417", # Missing argument descriptions in the docstring, this is a bug from pydocstyle: https://github.com/PyCQA/pydocstyle/issues/449
212
+ "PD901",
213
+ "PD101",
204
214
  ]
205
215
 
206
216
  [tool.ruff.format]
@@ -210,14 +220,19 @@ preview = true
210
220
  docstring-code-format = true
211
221
  docstring-code-line-length = "dynamic"
212
222
 
213
- [tool.ruff.lint.pep8-naming]
214
- extend-ignore-names = ["X", "C", "X_padded", "Y", "Y_padded"]
215
-
216
223
  [tool.ruff.lint.isort]
217
224
  known-first-party = ["rdt"]
225
+ lines-between-types = 0
218
226
 
219
227
  [tool.ruff.lint.per-file-ignores]
220
228
  "__init__.py" = ["F401", "E402", "F403", "F405", "E501", "I001"]
229
+ "errors.py" = ["D105"]
230
+ "tests/**.py" = ["D"]
231
+ "tests/contributing.py" = ["T201"]
221
232
 
222
233
  [tool.ruff.lint.pydocstyle]
223
- convention = "google"
234
+ convention = "google"
235
+
236
+ [tool.ruff.lint.pycodestyle]
237
+ max-doc-length = 100
238
+ max-line-length = 100
@@ -4,7 +4,7 @@
4
4
 
5
5
  __author__ = 'DataCebo, Inc.'
6
6
  __email__ = 'info@sdv.dev'
7
- __version__ = '1.12.1.dev1'
7
+ __version__ = '1.12.2.dev0'
8
8
 
9
9
 
10
10
  import sys
@@ -78,7 +78,7 @@ class BinaryEncoder(BaseTransformer):
78
78
  data (pandas.Series):
79
79
  Data to transform.
80
80
 
81
- Returns
81
+ Returns:
82
82
  np.ndarray
83
83
  """
84
84
  data = pd.to_numeric(data, errors='coerce')
@@ -110,3 +110,20 @@ class BinaryEncoder(BaseTransformer):
110
110
  data[isna] = np.nan
111
111
 
112
112
  return data
113
+
114
+ def _set_fitted_parameters(self, column_name, null_transformer):
115
+ """Manually set the parameters on the transformer to get it into a fitted state.
116
+
117
+ Args:
118
+ column_name (str):
119
+ The name of the column to use for the transformer.
120
+ null_transformer (NullTransformer):
121
+ A fitted null transformer instance that can be used to generate
122
+ null values for the column.
123
+ """
124
+ self.reset_randomization()
125
+ self.columns = [column_name]
126
+ self.output_columns = [column_name]
127
+ self.null_transformer = null_transformer
128
+ if self.null_transformer.models_missing_values():
129
+ self.output_columns.append(column_name + '.is_null')
@@ -135,6 +135,24 @@ class UniformEncoder(BaseTransformer):
135
135
 
136
136
  self.frequencies, self.intervals = self._compute_frequencies_intervals(labels, freq)
137
137
 
138
+ def _set_fitted_parameters(self, column_name, intervals, dtype='object'):
139
+ """Manually set the parameters on the transformer to get it into a fitted state.
140
+
141
+ Args:
142
+ column_name (str):
143
+ The name of the column for this transformer.
144
+ intervals (dict[str, tuple]):
145
+ A dictionary mapping categories to the interval in the range [0, 1]
146
+ it should map to.
147
+ dtype (str, optional):
148
+ The dtype to convert the reverse transformed data back to. Defaults to 'object'.
149
+ """
150
+ self.reset_randomization()
151
+ self.columns = [column_name]
152
+ self.output_columns = [column_name]
153
+ self.intervals = intervals
154
+ self.dtype = dtype
155
+
138
156
  def _transform(self, data):
139
157
  """Map the category to a continuous value.
140
158
 
@@ -5,6 +5,7 @@ import pandas as pd
5
5
  from pandas.api.types import is_datetime64_dtype, is_numeric_dtype
6
6
  from pandas.core.tools.datetimes import _guess_datetime_format_for_array
7
7
 
8
+ from rdt.errors import TransformerInputError
8
9
  from rdt.transformers.base import BaseTransformer
9
10
  from rdt.transformers.null import NullTransformer
10
11
 
@@ -151,6 +152,41 @@ class UnixTimestampEncoder(BaseTransformer):
151
152
  'next_transformer': None,
152
153
  }
153
154
 
155
+ def _set_fitted_parameters(
156
+ self, column_name, null_transformer, min_max_values=None, dtype='object'
157
+ ):
158
+ """Manually set the parameters on the transformer to get it into a fitted state.
159
+
160
+ Args:
161
+ column_name (str):
162
+ The name of the column for this transformer.
163
+ null_transformer (NullTransformer):
164
+ A fitted null transformer instance that can be used to generate
165
+ null values for the column.
166
+ min_max_values (tuple or None):
167
+ None or a tuple containing the (min, max) values for the transformer.
168
+ Should be used to set self._min_value and self._max_value and must be
169
+ provided if self.enforce_min_max_values is True.
170
+ Defaults to None.
171
+ dtype (str, optional):
172
+ The dtype to convert the reverse transformed data back to. Defaults to 'object'.
173
+ """
174
+ self.reset_randomization()
175
+ self.columns = [column_name]
176
+ self.output_columns = [column_name]
177
+ self._dtype = dtype
178
+
179
+ if self.enforce_min_max_values and not min_max_values:
180
+ raise TransformerInputError('Must provide min and max values for this transformer.')
181
+
182
+ if min_max_values:
183
+ self._min_value = min_max_values[0]
184
+ self._max_value = min_max_values[1]
185
+
186
+ self.null_transformer = null_transformer
187
+ if self.null_transformer.models_missing_values():
188
+ self.output_columns.append(column_name + '.is_null')
189
+
154
190
  def _transform(self, data):
155
191
  """Transform datetime values to float values.
156
192
 
@@ -121,6 +121,20 @@ class NullTransformer:
121
121
  if self._missing_value_generation == 'random':
122
122
  self._null_percentage = null_values.sum() / len(data)
123
123
 
124
+ def _set_fitted_parameters(self, null_ratio):
125
+ """Manually set the parameters on the transformer to get it into a fitted state.
126
+
127
+ Args:
128
+ null_ratio (float):
129
+ The fraction of values to replace with null values.
130
+ """
131
+ if null_ratio < 0 or null_ratio > 1.0:
132
+ raise ValueError('null_ratio should be a value between 0 and 1.')
133
+
134
+ if null_ratio != 0:
135
+ self.nulls = True
136
+ self._null_percentage = null_ratio
137
+
124
138
  def transform(self, data):
125
139
  """Replace null values with the indicated ``missing_value_replacement``.
126
140
 
@@ -8,6 +8,7 @@ import pandas as pd
8
8
  import scipy
9
9
  from sklearn.mixture import BayesianGaussianMixture
10
10
 
11
+ from rdt.errors import TransformerInputError
11
12
  from rdt.transformers.base import BaseTransformer
12
13
  from rdt.transformers.null import NullTransformer
13
14
  from rdt.transformers.utils import learn_rounding_digits
@@ -198,6 +199,49 @@ class FloatFormatter(BaseTransformer):
198
199
 
199
200
  return data.astype(self._dtype)
200
201
 
202
+ def _set_fitted_parameters(
203
+ self,
204
+ column_name,
205
+ null_transformer,
206
+ rounding_digits=None,
207
+ min_max_values=None,
208
+ dtype='object',
209
+ ):
210
+ """Manually set the parameters on the transformer to get it into a fitted state.
211
+
212
+ Args:
213
+ column_name (str):
214
+ The name of the column to use for the transformer.
215
+ null_transformer (NullTransformer):
216
+ A fitted null transformer instance that can be used to generate
217
+ null values for the column.
218
+ min_max_values (Tuple(float) or None):
219
+ None or a tuple containing the (min, max) values for the transformer.
220
+ rounding_digits (int or None):
221
+ The number of digits to round to.
222
+ dtype (str):
223
+ The pandas dtype the reversed data will be converted into.
224
+ """
225
+ self.reset_randomization()
226
+ self.null_transformer = null_transformer
227
+ self.columns = [column_name]
228
+ self.output_columns = [column_name]
229
+ if self.enforce_min_max_values:
230
+ if not min_max_values:
231
+ raise TransformerInputError('Must provide min and max values for this transformer.')
232
+
233
+ if min_max_values:
234
+ self._min_value = min(min_max_values)
235
+ self._max_value = max(min_max_values)
236
+
237
+ if rounding_digits:
238
+ self._rounding_digits = rounding_digits
239
+
240
+ if self.null_transformer.models_missing_values():
241
+ self.output_columns.append(column_name + '.is_null')
242
+
243
+ self._dtype = dtype
244
+
201
245
 
202
246
  class GaussianNormalizer(FloatFormatter):
203
247
  r"""Transformer for numerical data based on copulas transformation.
@@ -308,6 +308,30 @@ class AnonymizedFaker(BaseTransformer):
308
308
 
309
309
  return reverse_transformed
310
310
 
311
+ def _set_fitted_parameters(self, column_name, nan_frequency=0.0, cardinality=None):
312
+ """Manually set the parameters on the transformer to get it into a fitted state.
313
+
314
+ Args:
315
+ column_name (str):
316
+ The name of the column to use for the transformer.
317
+ nan_frequency (float):
318
+ The fraction of values that should be replaced with nan values
319
+ if self.missing_value_generation is 'random'.
320
+ cardinality (int or None):
321
+ The number of unique values to generate if cardinality rule is set to
322
+ 'match'.
323
+ """
324
+ self.reset_randomization()
325
+ self.columns = [column_name]
326
+ self.output_columns = [column_name]
327
+ if self.cardinality_rule == 'match':
328
+ if not cardinality:
329
+ raise TransformerInputError(
330
+ 'Cardinality "match" rule must specify a cardinality value.'
331
+ )
332
+ self._data_cardinality = cardinality
333
+ self._nan_frequency = nan_frequency
334
+
311
335
  def __repr__(self):
312
336
  """Represent initialization of transformer as text.
313
337
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rdt
3
- Version: 1.12.1.dev1
3
+ Version: 1.12.2.dev0
4
4
  Summary: Reversible Data Transforms
5
5
  Author-email: "DataCebo, Inc." <info@sdv.dev>
6
6
  License: BSL-1.1
File without changes
File without changes
File without changes
File without changes
File without changes