rdt 1.22.0__tar.gz → 2.0.0.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 (47) hide show
  1. {rdt-1.22.0/rdt.egg-info → rdt-2.0.0.dev0}/PKG-INFO +2 -2
  2. {rdt-1.22.0 → rdt-2.0.0.dev0}/README.md +1 -1
  3. {rdt-1.22.0 → rdt-2.0.0.dev0}/pyproject.toml +1 -1
  4. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/__init__.py +1 -1
  5. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/hyper_transformer.py +27 -69
  6. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/__init__.py +0 -2
  7. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/__init__.py +13 -18
  8. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/base.py +1 -41
  9. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/boolean.py +0 -8
  10. rdt-2.0.0.dev0/rdt/transformers/categorical.py +508 -0
  11. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/datetime.py +0 -13
  12. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/id.py +8 -39
  13. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/numerical.py +0 -37
  14. rdt-2.0.0.dev0/rdt/transformers/ordinal.py +279 -0
  15. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/pii/anonymizer.py +5 -20
  16. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/utils.py +1 -19
  17. {rdt-1.22.0 → rdt-2.0.0.dev0/rdt.egg-info}/PKG-INFO +2 -2
  18. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt.egg-info/SOURCES.txt +1 -2
  19. rdt-1.22.0/rdt/performance/datasets/text.py +0 -57
  20. rdt-1.22.0/rdt/transformers/categorical.py +0 -1057
  21. rdt-1.22.0/rdt/transformers/text.py +0 -12
  22. {rdt-1.22.0 → rdt-2.0.0.dev0}/LICENSE +0 -0
  23. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/_utils.py +0 -0
  24. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/errors.py +0 -0
  25. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/__init__.py +0 -0
  26. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/base.py +0 -0
  27. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/boolean.py +0 -0
  28. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/categorical.py +0 -0
  29. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/datetime.py +0 -0
  30. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/id.py +0 -0
  31. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/numerical.py +0 -0
  32. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/pii.py +0 -0
  33. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/utils.py +0 -0
  34. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/performance.py +0 -0
  35. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/profiling.py +0 -0
  36. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/_validators.py +0 -0
  37. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/null.py +0 -0
  38. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/pii/__init__.py +0 -0
  39. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/pii/anonymization.py +0 -0
  40. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/pii/utils.py +0 -0
  41. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt.egg-info/dependency_links.txt +0 -0
  42. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt.egg-info/entry_points.txt +0 -0
  43. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt.egg-info/requires.txt +0 -0
  44. {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt.egg-info/top_level.txt +0 -0
  45. {rdt-1.22.0 → rdt-2.0.0.dev0}/setup.cfg +0 -0
  46. {rdt-1.22.0 → rdt-2.0.0.dev0}/tests/test_scripts.py +0 -0
  47. {rdt-1.22.0 → rdt-2.0.0.dev0}/tests/test_tasks.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rdt
3
- Version: 1.22.0
3
+ Version: 2.0.0.dev0
4
4
  Summary: Reversible Data Transforms
5
5
  Author-email: "DataCebo, Inc." <info@sdv.dev>
6
6
  License-Expression: BUSL-1.1
@@ -189,7 +189,7 @@ Config:
189
189
  "transformers": {
190
190
  "last_login": "UnixTimestampEncoder()",
191
191
  "email_optin": "BinaryEncoder()",
192
- "credit_card": "FrequencyEncoder()",
192
+ "credit_card": "UniformEncoder()",
193
193
  "age": "FloatFormatter()",
194
194
  "dollars_spent": "FloatFormatter()"
195
195
  }
@@ -110,7 +110,7 @@ Config:
110
110
  "transformers": {
111
111
  "last_login": "UnixTimestampEncoder()",
112
112
  "email_optin": "BinaryEncoder()",
113
- "credit_card": "FrequencyEncoder()",
113
+ "credit_card": "UniformEncoder()",
114
114
  "age": "FloatFormatter()",
115
115
  "dollars_spent": "FloatFormatter()"
116
116
  }
@@ -150,7 +150,7 @@ collect_ignore = ['pyproject.toml']
150
150
  exclude_lines = ['NotImplementedError()']
151
151
 
152
152
  [tool.bumpversion]
153
- current_version = "1.22.0"
153
+ current_version = "2.0.0.dev0"
154
154
  parse = '(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\.(?P<release>[a-z]+)(?P<candidate>\d+))?'
155
155
  serialize = [
156
156
  '{major}.{minor}.{patch}.{release}{candidate}',
@@ -4,7 +4,7 @@
4
4
 
5
5
  __author__ = 'DataCebo, Inc.'
6
6
  __email__ = 'info@sdv.dev'
7
- __version__ = '1.22.0'
7
+ __version__ = '2.0.0.dev0'
8
8
 
9
9
 
10
10
  import sys
@@ -288,7 +288,7 @@ class HyperTransformer:
288
288
  warnings.warn(self._REFIT_MESSAGE)
289
289
 
290
290
  def _validate_update_transformers_by_sdtype(
291
- self, sdtype, transformer, transformer_name, transformer_parameters
291
+ self, sdtype, transformer_name, transformer_parameters
292
292
  ):
293
293
  if not self.field_sdtypes:
294
294
  raise ConfigNotSetError(
@@ -296,60 +296,25 @@ class HyperTransformer:
296
296
  'pre-populate all the sdtypes and transformers from your dataset.'
297
297
  )
298
298
 
299
- if transformer_name is None:
300
- if transformer is None:
301
- raise InvalidConfigError("Missing required parameter 'transformer_name'.")
302
-
303
- if not isinstance(transformer, BaseTransformer):
304
- raise InvalidConfigError(
305
- 'Invalid transformer. Please input an rdt transformer object.'
306
- )
307
-
308
- if sdtype not in transformer.get_supported_sdtypes():
309
- raise InvalidConfigError(
310
- "The transformer you've assigned is incompatible with the sdtype."
311
- )
312
-
313
- else:
314
- if (
315
- transformer_name not in get_class_by_transformer_name()
316
- or sdtype
317
- not in get_class_by_transformer_name()[transformer_name].get_supported_sdtypes()
318
- ):
319
- raise InvalidConfigError(
320
- f"Invalid transformer name '{transformer_name}' for the '{sdtype}' sdtype."
321
- )
322
-
323
- if transformer_parameters is not None:
324
- transformer = get_class_by_transformer_name()[transformer_name]
325
- valid = inspect.signature(transformer).parameters
326
- invalid_parameters = {arg for arg in transformer_parameters if arg not in valid}
327
- if invalid_parameters:
328
- raise TransformerInputError(
329
- f'Invalid parameters {tuple(sorted(invalid_parameters))} '
330
- f"for the '{transformer_name}'."
331
- )
332
-
333
- def _warn_update_transformers_by_sdtype(self, transformer, transformer_name):
334
- if self._fitted:
335
- warnings.warn(self._REFIT_MESSAGE)
299
+ if (
300
+ transformer_name not in get_class_by_transformer_name()
301
+ or sdtype
302
+ not in get_class_by_transformer_name()[transformer_name].get_supported_sdtypes()
303
+ ):
304
+ raise InvalidConfigError(
305
+ f"Invalid transformer name '{transformer_name}' for the '{sdtype}' sdtype."
306
+ )
336
307
 
337
- if transformer_name is not None:
338
- if transformer is not None:
339
- warnings.warn(
340
- "The 'transformer' parameter will no longer be supported in future versions "
341
- "of the RDT. Using the 'transformer_name' parameter instead.",
342
- FutureWarning,
308
+ if transformer_parameters is not None:
309
+ transformer = get_class_by_transformer_name()[transformer_name]
310
+ valid = inspect.signature(transformer).parameters
311
+ invalid_parameters = {arg for arg in transformer_parameters if arg not in valid}
312
+ if invalid_parameters:
313
+ raise TransformerInputError(
314
+ f'Invalid parameters {tuple(sorted(invalid_parameters))} '
315
+ f"for the '{transformer_name}'."
343
316
  )
344
317
 
345
- else:
346
- warnings.warn(
347
- "The 'transformer' parameter will no longer be supported in future versions "
348
- "of the RDT. Please use the 'transformer_name' and 'transformer_parameters' "
349
- 'parameters instead.',
350
- FutureWarning,
351
- )
352
-
353
318
  def _remove_column_in_multi_column_fields(self, column):
354
319
  """Remove a column that is part of a multi-column field.
355
320
 
@@ -401,42 +366,35 @@ class HyperTransformer:
401
366
  def update_transformers_by_sdtype(
402
367
  self,
403
368
  sdtype,
404
- transformer=None,
405
369
  transformer_name=None,
406
370
  transformer_parameters=None,
407
371
  ):
408
372
  """Update the transformers for the specified ``sdtype``.
409
373
 
410
- Given an ``sdtype`` and a ``transformer``, change all the fields of the ``sdtype``
374
+ Given an ``sdtype`` and a ``transformer_name``, change all the fields of the ``sdtype``
411
375
  to use the given transformer.
412
376
 
413
377
  Args:
414
378
  sdtype (str):
415
379
  Semantic data type for the transformer.
416
- transformer (rdt.transformers.BaseTransformer):
417
- Transformer class or instance to be used for the given ``sdtype``.
418
- Note: this parameter is deprecated, use ``transformer_name`` and
419
- ``transformer_parameters`` instead.
420
380
  transformer_name (str):
421
381
  A string with the class name of the transformer.
422
382
  transformer_parameters (dict):
423
383
  A dict of the kwargs of the transformer.
424
384
  """
425
385
  self._validate_update_transformers_by_sdtype(
426
- sdtype, transformer, transformer_name, transformer_parameters
386
+ sdtype, transformer_name, transformer_parameters
427
387
  )
428
- self._warn_update_transformers_by_sdtype(transformer, transformer_name)
429
-
430
- transformer_instance = transformer
388
+ if self._fitted:
389
+ warnings.warn(self._REFIT_MESSAGE)
431
390
 
432
- if transformer_name is not None:
433
- if transformer_parameters is not None:
434
- transformer_instance = get_class_by_transformer_name()[transformer_name](
435
- **transformer_parameters
436
- )
391
+ if transformer_parameters is not None:
392
+ transformer_instance = get_class_by_transformer_name()[transformer_name](
393
+ **transformer_parameters
394
+ )
437
395
 
438
- else:
439
- transformer_instance = get_class_by_transformer_name()[transformer_name]()
396
+ else:
397
+ transformer_instance = get_class_by_transformer_name()[transformer_name]()
440
398
 
441
399
  for field, field_sdtype in self.field_sdtypes.items():
442
400
  if field_sdtype == sdtype:
@@ -9,7 +9,6 @@ from rdt.performance.datasets import (
9
9
  id,
10
10
  numerical,
11
11
  pii,
12
- text,
13
12
  )
14
13
  from rdt.performance.datasets.base import BaseDatasetGenerator
15
14
 
@@ -20,7 +19,6 @@ __all__ = [
20
19
  'id',
21
20
  'numerical',
22
21
  'pii',
23
- 'text',
24
22
  'BaseDatasetGenerator',
25
23
  ]
26
24
 
@@ -10,19 +10,15 @@ from functools import lru_cache
10
10
  from rdt.transformers.base import BaseMultiColumnTransformer, BaseTransformer
11
11
  from rdt.transformers.boolean import BinaryEncoder
12
12
  from rdt.transformers.categorical import (
13
- CustomLabelEncoder,
14
- FrequencyEncoder,
15
13
  LabelEncoder,
16
14
  OneHotEncoder,
17
- OrderedLabelEncoder,
18
- OrderedUniformEncoder,
19
15
  UniformEncoder,
20
16
  )
21
17
  from rdt.transformers.datetime import (
22
18
  OptimizedTimestampEncoder,
23
19
  UnixTimestampEncoder,
24
20
  )
25
- from rdt.transformers.id import IDGenerator, IndexGenerator, RegexGenerator
21
+ from rdt.transformers.id import IndexGenerator, RegexGenerator
26
22
  from rdt.transformers.null import NullTransformer
27
23
  from rdt.transformers.numerical import (
28
24
  ClusterBasedNormalizer,
@@ -31,21 +27,22 @@ from rdt.transformers.numerical import (
31
27
  LogScaler,
32
28
  LogitScaler,
33
29
  )
30
+ from rdt.transformers.ordinal import (
31
+ OrderedLabelEncoder,
32
+ OrderedUniformEncoder,
33
+ )
34
34
  from rdt.transformers.pii.anonymizer import (
35
35
  AnonymizedFaker,
36
36
  PseudoAnonymizedFaker,
37
37
  )
38
- from rdt.transformers.utils import WarnDict
39
38
 
40
39
  __all__ = [
41
40
  'BaseTransformer',
42
41
  'BaseMultiColumnTransformer',
43
42
  'BinaryEncoder',
44
43
  'ClusterBasedNormalizer',
45
- 'CustomLabelEncoder',
46
44
  'OrderedLabelEncoder',
47
45
  'FloatFormatter',
48
- 'FrequencyEncoder',
49
46
  'GaussianNormalizer',
50
47
  'LabelEncoder',
51
48
  'LogScaler',
@@ -56,7 +53,6 @@ __all__ = [
56
53
  'RegexGenerator',
57
54
  'AnonymizedFaker',
58
55
  'PseudoAnonymizedFaker',
59
- 'IDGenerator',
60
56
  'IndexGenerator',
61
57
  'get_transformer_name',
62
58
  'get_transformer_class',
@@ -94,15 +90,14 @@ TRANSFORMERS = {
94
90
  for transformer in BaseTransformer.get_subclasses()
95
91
  }
96
92
 
97
- DEFAULT_TRANSFORMERS = WarnDict(
98
- boolean=UniformEncoder(),
99
- categorical=UniformEncoder(),
100
- datetime=UnixTimestampEncoder(),
101
- id=RegexGenerator(),
102
- numerical=FloatFormatter(),
103
- pii=AnonymizedFaker(),
104
- text=RegexGenerator(),
105
- )
93
+ DEFAULT_TRANSFORMERS = {
94
+ 'boolean': UniformEncoder(),
95
+ 'categorical': UniformEncoder(),
96
+ 'datetime': UnixTimestampEncoder(),
97
+ 'id': RegexGenerator(),
98
+ 'numerical': FloatFormatter(),
99
+ 'pii': AnonymizedFaker(),
100
+ }
106
101
 
107
102
 
108
103
  @lru_cache()
@@ -111,16 +111,6 @@ class BaseTransformer:
111
111
  'reverse_transform': np.random.RandomState(self.random_seed + 1),
112
112
  }
113
113
 
114
- @property
115
- def model_missing_values(self):
116
- """Whether or not a new column is being used to model missing values."""
117
- warnings.warn(
118
- "Future versions of RDT will not support the 'model_missing_values' parameter. "
119
- "Please switch to using the 'missing_value_generation' parameter instead.",
120
- FutureWarning,
121
- )
122
- return self.missing_value_generation == 'from_column'
123
-
124
114
  def _set_missing_value_generation(self, missing_value_generation):
125
115
  if missing_value_generation not in (None, 'from_column', 'random'):
126
116
  raise TransformerInputError(
@@ -130,18 +120,6 @@ class BaseTransformer:
130
120
 
131
121
  self.missing_value_generation = missing_value_generation
132
122
 
133
- def _set_model_missing_values(self, model_missing_values):
134
- warnings.warn(
135
- "Future versions of RDT will not support the 'model_missing_values' parameter. "
136
- "Please switch to using the 'missing_value_generation' parameter to select your "
137
- 'strategy.',
138
- FutureWarning,
139
- )
140
- if model_missing_values is True:
141
- self._set_missing_value_generation('from_column')
142
- elif model_missing_values is False:
143
- self._set_missing_value_generation('random')
144
-
145
123
  @classmethod
146
124
  def get_name(cls):
147
125
  """Return transformer name.
@@ -169,20 +147,6 @@ class BaseTransformer:
169
147
 
170
148
  return subclasses
171
149
 
172
- @classmethod
173
- def get_input_sdtype(cls):
174
- """Return the input sdtype supported by the transformer.
175
-
176
- Returns:
177
- string:
178
- Accepted input sdtype of the transformer.
179
- """
180
- warnings.warn(
181
- '`get_input_sdtype` is deprecated. Please use `get_supported_sdtypes` instead.',
182
- FutureWarning,
183
- )
184
- return cls.get_supported_sdtypes()[0]
185
-
186
150
  @classmethod
187
151
  def get_supported_sdtypes(cls):
188
152
  """Return the supported sdtypes by the transformer.
@@ -327,11 +291,7 @@ class BaseTransformer:
327
291
  custom_args = []
328
292
  args = inspect.getfullargspec(self.__init__)
329
293
  keys = args.args[1:]
330
- instanced = {
331
- key: getattr(self, key)
332
- for key in keys
333
- if key != 'model_missing_values' and hasattr(self, key) # Remove after deprecation
334
- }
294
+ instanced = {key: getattr(self, key) for key in keys if hasattr(self, key)}
335
295
 
336
296
  default_values_list = args.defaults or []
337
297
  default_arg_to_default_value = {}
@@ -20,11 +20,6 @@ class BinaryEncoder(BaseTransformer):
20
20
  Indicate what to replace the null values with. If the string ``'mode'`` is given,
21
21
  replace them with the most common value.
22
22
  Defaults to ``mode``.
23
- model_missing_values (bool):
24
- **DEPRECATED** Whether to create a new column to indicate which values were null or
25
- not. The column will be created only if there are null values. If ``True``, create
26
- the new column if there are null values. If ``False``, do not create the new column
27
- even if there are null values. Defaults to ``False``.
28
23
  missing_value_generation (str or None):
29
24
  The way missing values are being handled. There are three strategies:
30
25
 
@@ -42,14 +37,11 @@ class BinaryEncoder(BaseTransformer):
42
37
  def __init__(
43
38
  self,
44
39
  missing_value_replacement='mode',
45
- model_missing_values=None,
46
40
  missing_value_generation='random',
47
41
  ):
48
42
  super().__init__()
49
43
  self.missing_value_replacement = missing_value_replacement
50
44
  self._set_missing_value_generation(missing_value_generation)
51
- if model_missing_values is not None:
52
- self._set_model_missing_values(model_missing_values)
53
45
 
54
46
  def _fit(self, data):
55
47
  """Fit the transformer to the data.