rdt 1.10.1.dev0__tar.gz → 1.11.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.
- {rdt-1.10.1.dev0/rdt.egg-info → rdt-1.11.0.dev0}/PKG-INFO +15 -11
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/pyproject.toml +16 -12
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/__init__.py +9 -3
- rdt-1.11.0.dev0/rdt/transformers/_validators.py +171 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/transformers/pii/anonymizer.py +1 -1
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0/rdt.egg-info}/PKG-INFO +15 -11
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt.egg-info/SOURCES.txt +1 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt.egg-info/requires.txt +18 -11
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/tests/test_tasks.py +4 -3
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/LICENSE +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/README.md +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/errors.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/hyper_transformer.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/performance/__init__.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/performance/datasets/__init__.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/performance/datasets/base.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/performance/datasets/boolean.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/performance/datasets/categorical.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/performance/datasets/datetime.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/performance/datasets/numerical.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/performance/datasets/pii.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/performance/datasets/text.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/performance/datasets/utils.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/performance/performance.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/performance/profiling.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/transformers/__init__.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/transformers/base.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/transformers/boolean.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/transformers/categorical.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/transformers/datetime.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/transformers/null.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/transformers/numerical.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/transformers/pii/__init__.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/transformers/pii/anonymization.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/transformers/pii/utils.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/transformers/text.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt/transformers/utils.py +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt.egg-info/dependency_links.txt +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt.egg-info/entry_points.txt +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/rdt.egg-info/top_level.txt +0 -0
- {rdt-1.10.1.dev0 → rdt-1.11.0.dev0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: rdt
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.11.0.dev0
|
|
4
4
|
Summary: Reversible Data Transforms
|
|
5
5
|
Author-email: "DataCebo, Inc." <info@sdv.dev>
|
|
6
6
|
License: BSL-1.1
|
|
@@ -19,23 +19,27 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.9
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
23
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
23
|
-
Requires-Python: <3.
|
|
24
|
+
Requires-Python: <3.13,>=3.8
|
|
24
25
|
Description-Content-Type: text/markdown
|
|
25
26
|
License-File: LICENSE
|
|
26
|
-
Requires-Dist: numpy
|
|
27
|
-
Requires-Dist: numpy
|
|
27
|
+
Requires-Dist: numpy>=1.20.0; python_version < "3.10"
|
|
28
|
+
Requires-Dist: numpy>=1.23.3; python_version >= "3.10" and python_version < "3.12"
|
|
29
|
+
Requires-Dist: numpy>=1.26.0; python_version >= "3.12"
|
|
28
30
|
Requires-Dist: pandas>=1.1.3; python_version < "3.10"
|
|
29
31
|
Requires-Dist: pandas>=1.3.4; python_version >= "3.10" and python_version < "3.11"
|
|
30
32
|
Requires-Dist: pandas>=1.5.0; python_version >= "3.11"
|
|
31
|
-
Requires-Dist: scipy
|
|
32
|
-
Requires-Dist: scipy
|
|
33
|
-
Requires-Dist:
|
|
33
|
+
Requires-Dist: scipy>=1.5.4; python_version < "3.10"
|
|
34
|
+
Requires-Dist: scipy>=1.9.2; python_version >= "3.10" and python_version < "3.12"
|
|
35
|
+
Requires-Dist: scipy>=1.12.0; python_version >= "3.12"
|
|
36
|
+
Requires-Dist: scikit-learn>=0.24; python_version < "3.10"
|
|
34
37
|
Requires-Dist: scikit-learn>=1.1.0; python_version >= "3.10" and python_version < "3.11"
|
|
35
|
-
Requires-Dist: scikit-learn
|
|
36
|
-
Requires-Dist:
|
|
38
|
+
Requires-Dist: scikit-learn>=1.1.3; python_version >= "3.11" and python_version < "3.12"
|
|
39
|
+
Requires-Dist: scikit-learn>=1.3.0; python_version >= "3.12"
|
|
40
|
+
Requires-Dist: Faker>=17
|
|
37
41
|
Provides-Extra: copulas
|
|
38
|
-
Requires-Dist: copulas
|
|
42
|
+
Requires-Dist: copulas>=0.11.0.dev0; extra == "copulas"
|
|
39
43
|
Provides-Extra: test
|
|
40
44
|
Requires-Dist: rdt[copulas]; extra == "test"
|
|
41
45
|
Requires-Dist: pytest>=3.4.2; extra == "test"
|
|
@@ -50,7 +54,7 @@ Requires-Dist: rdt[test]; extra == "dev"
|
|
|
50
54
|
Requires-Dist: build<2,>=1.0.0; extra == "dev"
|
|
51
55
|
Requires-Dist: bump-my-version<1,>=0.18.3; extra == "dev"
|
|
52
56
|
Requires-Dist: pip>=9.0.1; extra == "dev"
|
|
53
|
-
Requires-Dist: watchdog<
|
|
57
|
+
Requires-Dist: watchdog<5,>=1.0.1; extra == "dev"
|
|
54
58
|
Requires-Dist: pycodestyle<2.8.0,>=2.7.0; extra == "dev"
|
|
55
59
|
Requires-Dist: pyflakes<2.4.0,>=2.3.0; extra == "dev"
|
|
56
60
|
Requires-Dist: flake8<4,>=3.7.7; extra == "dev"
|
|
@@ -12,25 +12,29 @@ classifiers = [
|
|
|
12
12
|
'Programming Language :: Python :: 3.9',
|
|
13
13
|
'Programming Language :: Python :: 3.10',
|
|
14
14
|
'Programming Language :: Python :: 3.11',
|
|
15
|
+
'Programming Language :: Python :: 3.12',
|
|
15
16
|
'Topic :: Scientific/Engineering :: Artificial Intelligence',
|
|
16
17
|
]
|
|
17
18
|
keywords = ['machine learning', 'synthetic data generation', 'benchmark', 'generative models']
|
|
18
19
|
dynamic = ['version']
|
|
19
20
|
license = { text = 'BSL-1.1' }
|
|
20
|
-
requires-python = '>=3.8,<3.
|
|
21
|
+
requires-python = '>=3.8,<3.13'
|
|
21
22
|
readme = 'README.md'
|
|
22
23
|
dependencies = [
|
|
23
|
-
"numpy>=1.20.0
|
|
24
|
-
"numpy>=1.23.3
|
|
24
|
+
"numpy>=1.20.0;python_version<'3.10'",
|
|
25
|
+
"numpy>=1.23.3;python_version>='3.10' and python_version<'3.12'",
|
|
26
|
+
"numpy>=1.26.0;python_version>='3.12'",
|
|
25
27
|
"pandas>=1.1.3;python_version<'3.10'",
|
|
26
28
|
"pandas>=1.3.4;python_version>='3.10' and python_version<'3.11'",
|
|
27
29
|
"pandas>=1.5.0;python_version>='3.11'",
|
|
28
|
-
"scipy>=1.5.4
|
|
29
|
-
"scipy>=1.9.2
|
|
30
|
-
"
|
|
30
|
+
"scipy>=1.5.4;python_version<'3.10'",
|
|
31
|
+
"scipy>=1.9.2;python_version>='3.10' and python_version<'3.12'",
|
|
32
|
+
"scipy>=1.12.0;python_version>='3.12'",
|
|
33
|
+
"scikit-learn>=0.24;python_version<'3.10'",
|
|
31
34
|
"scikit-learn>=1.1.0;python_version>='3.10' and python_version<'3.11'",
|
|
32
|
-
"scikit-learn>=1.1.3
|
|
33
|
-
|
|
35
|
+
"scikit-learn>=1.1.3;python_version>='3.11' and python_version<'3.12'",
|
|
36
|
+
"scikit-learn>=1.3.0;python_version>='3.12'",
|
|
37
|
+
'Faker>=17',
|
|
34
38
|
]
|
|
35
39
|
|
|
36
40
|
[project.urls]
|
|
@@ -44,7 +48,7 @@ dependencies = [
|
|
|
44
48
|
rdt = { main = 'rdt.cli.__main__:main' }
|
|
45
49
|
|
|
46
50
|
[project.optional-dependencies]
|
|
47
|
-
copulas = ['copulas>=0.
|
|
51
|
+
copulas = ['copulas>=0.11.0.dev0',]
|
|
48
52
|
test = [
|
|
49
53
|
'rdt[copulas]',
|
|
50
54
|
|
|
@@ -63,7 +67,7 @@ dev = [
|
|
|
63
67
|
'build>=1.0.0,<2',
|
|
64
68
|
'bump-my-version>=0.18.3,<1',
|
|
65
69
|
'pip>=9.0.1',
|
|
66
|
-
'watchdog>=0.
|
|
70
|
+
'watchdog>=1.0.1,<5',
|
|
67
71
|
|
|
68
72
|
# style check
|
|
69
73
|
'pycodestyle<2.8.0,>=2.7.0',
|
|
@@ -133,12 +137,12 @@ namespaces = false
|
|
|
133
137
|
'*.png',
|
|
134
138
|
'*.gif'
|
|
135
139
|
]
|
|
136
|
-
'tests' = ['*']
|
|
137
140
|
|
|
138
141
|
[tool.setuptools.exclude-package-data]
|
|
139
142
|
'*' = [
|
|
140
143
|
'* __pycache__',
|
|
141
144
|
'*.py[co]',
|
|
145
|
+
'static_code_analysis.txt',
|
|
142
146
|
]
|
|
143
147
|
|
|
144
148
|
[tool.setuptools.dynamic]
|
|
@@ -162,7 +166,7 @@ collect_ignore = ['pyproject.toml']
|
|
|
162
166
|
exclude_lines = ['NotImplementedError()']
|
|
163
167
|
|
|
164
168
|
[tool.bumpversion]
|
|
165
|
-
current_version = "1.
|
|
169
|
+
current_version = "1.11.0.dev0"
|
|
166
170
|
parse = '(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\.(?P<release>[a-z]+)(?P<candidate>\d+))?'
|
|
167
171
|
serialize = [
|
|
168
172
|
'{major}.{minor}.{patch}.{release}{candidate}',
|
|
@@ -5,17 +5,17 @@
|
|
|
5
5
|
|
|
6
6
|
__author__ = 'DataCebo, Inc.'
|
|
7
7
|
__email__ = 'info@sdv.dev'
|
|
8
|
-
__version__ = '1.
|
|
8
|
+
__version__ = '1.11.0.dev0'
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
import sys
|
|
12
12
|
import warnings
|
|
13
|
+
from importlib.metadata import entry_points
|
|
13
14
|
from operator import attrgetter
|
|
14
15
|
from types import ModuleType
|
|
15
16
|
|
|
16
17
|
import numpy as np
|
|
17
18
|
import pandas as pd
|
|
18
|
-
from pkg_resources import iter_entry_points
|
|
19
19
|
|
|
20
20
|
from rdt import transformers
|
|
21
21
|
from rdt.hyper_transformer import HyperTransformer
|
|
@@ -149,7 +149,13 @@ def _find_addons():
|
|
|
149
149
|
from top_module.addon_module import x
|
|
150
150
|
"""
|
|
151
151
|
group = 'rdt_modules'
|
|
152
|
-
|
|
152
|
+
try:
|
|
153
|
+
eps = entry_points(group=group) # pylint: disable=E1123
|
|
154
|
+
except TypeError:
|
|
155
|
+
# Load-time selection requires Python >= 3.10 or importlib_metadata >= 3.6
|
|
156
|
+
eps = entry_points().get(group, [])
|
|
157
|
+
|
|
158
|
+
for entry_point in eps:
|
|
153
159
|
try:
|
|
154
160
|
addon = entry_point.load()
|
|
155
161
|
except Exception: # pylint: disable=broad-exception-caught
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"""Validations for multi-column transformers."""
|
|
2
|
+
import importlib
|
|
3
|
+
|
|
4
|
+
from rdt.errors import TransformerInputError
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class BaseValidator:
|
|
8
|
+
"""Base validation class.
|
|
9
|
+
|
|
10
|
+
The validation classes ensure that the input data is compatible with the transformers
|
|
11
|
+
and that they can be imported.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
SUPPORTED_SDTYPES = []
|
|
15
|
+
VALIDATION_TYPE = None
|
|
16
|
+
|
|
17
|
+
@classmethod
|
|
18
|
+
def _validate_supported_sdtypes(cls, columns_to_sdtypes):
|
|
19
|
+
message = ''
|
|
20
|
+
for column, sdtype in columns_to_sdtypes.items():
|
|
21
|
+
if sdtype not in cls.SUPPORTED_SDTYPES:
|
|
22
|
+
message += f"Column '{column}' has an unsupported sdtype '{sdtype}'.\n"
|
|
23
|
+
|
|
24
|
+
if message:
|
|
25
|
+
message += (
|
|
26
|
+
f'Please provide a column that is compatible with {cls.VALIDATION_TYPE} data.'
|
|
27
|
+
)
|
|
28
|
+
raise TransformerInputError(message)
|
|
29
|
+
|
|
30
|
+
@classmethod
|
|
31
|
+
def validate_sdtypes(cls, columns_to_sdtypes):
|
|
32
|
+
"""Validate the columns to sdtypes mapping.
|
|
33
|
+
|
|
34
|
+
This method aims to call all other sdtype validation method in the class.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
columns_to_sdtypes (dict):
|
|
38
|
+
Mapping of column names to sdtypes.
|
|
39
|
+
"""
|
|
40
|
+
raise NotImplementedError
|
|
41
|
+
|
|
42
|
+
@classmethod
|
|
43
|
+
def validate_imports(cls):
|
|
44
|
+
"""Check that the transformers can be imported."""
|
|
45
|
+
raise NotImplementedError
|
|
46
|
+
|
|
47
|
+
@classmethod
|
|
48
|
+
def validate(cls, columns_to_sdtypes):
|
|
49
|
+
"""Validate the input data.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
columns_to_sdtypes (dict):
|
|
53
|
+
Mapping of column names to sdtypes.
|
|
54
|
+
"""
|
|
55
|
+
cls.validate_sdtypes(columns_to_sdtypes)
|
|
56
|
+
cls.validate_imports()
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class AddressValidator(BaseValidator):
|
|
60
|
+
"""Validation class for Address data."""
|
|
61
|
+
|
|
62
|
+
SUPPORTED_SDTYPES = [
|
|
63
|
+
'country_code', 'administrative_unit', 'city', 'postcode',
|
|
64
|
+
'street_address', 'secondary_address', 'state', 'state_abbr'
|
|
65
|
+
]
|
|
66
|
+
VALIDATION_TYPE = 'Address'
|
|
67
|
+
|
|
68
|
+
@classmethod
|
|
69
|
+
def _validate_number_columns(cls, columns_to_sdtypes):
|
|
70
|
+
if len(columns_to_sdtypes) > 7:
|
|
71
|
+
raise TransformerInputError(
|
|
72
|
+
f'{cls.VALIDATION_TYPE} transformers takes up to 7 columns to transform. '
|
|
73
|
+
'Please provide address data with valid fields.'
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
@staticmethod
|
|
77
|
+
def _validate_uniqueness_sdtype(columns_to_sdtypes):
|
|
78
|
+
sdtypes_to_columns = {}
|
|
79
|
+
for column, sdtype in columns_to_sdtypes.items():
|
|
80
|
+
if sdtype not in sdtypes_to_columns:
|
|
81
|
+
sdtypes_to_columns[sdtype] = []
|
|
82
|
+
|
|
83
|
+
sdtypes_to_columns[sdtype].append(column)
|
|
84
|
+
|
|
85
|
+
duplicate_fields = {
|
|
86
|
+
value: keys for value, keys in sdtypes_to_columns.items() if len(keys) > 1
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if duplicate_fields:
|
|
90
|
+
message = ''
|
|
91
|
+
for sdtype, columns in duplicate_fields.items():
|
|
92
|
+
to_print = "', '".join(columns)
|
|
93
|
+
message += f"Columns '{to_print}' have the same sdtype '{sdtype}'.\n"
|
|
94
|
+
|
|
95
|
+
message += 'Your address data cannot have duplicate fields.'
|
|
96
|
+
raise TransformerInputError(message)
|
|
97
|
+
|
|
98
|
+
@classmethod
|
|
99
|
+
def _validate_administrative_unit(cls, columns_to_sdtypes):
|
|
100
|
+
num_column_administrative_unit = sum(
|
|
101
|
+
1 for itm in columns_to_sdtypes.values() if itm in ['administrative_unit', 'state']
|
|
102
|
+
)
|
|
103
|
+
if num_column_administrative_unit > 1:
|
|
104
|
+
raise TransformerInputError(
|
|
105
|
+
f"The {cls.__name__} can have up to 1 column with sdtype 'state'"
|
|
106
|
+
f" or 'administrative_unit'. Please provide address data with valid fields."
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
@classmethod
|
|
110
|
+
def validate_sdtypes(cls, columns_to_sdtypes):
|
|
111
|
+
"""Validate the columns to sdtypes mapping."""
|
|
112
|
+
cls._validate_supported_sdtypes(columns_to_sdtypes)
|
|
113
|
+
cls._validate_number_columns(columns_to_sdtypes)
|
|
114
|
+
cls._validate_uniqueness_sdtype(columns_to_sdtypes)
|
|
115
|
+
cls._validate_administrative_unit(columns_to_sdtypes)
|
|
116
|
+
|
|
117
|
+
@classmethod
|
|
118
|
+
def validate_imports(cls):
|
|
119
|
+
"""Check that the address transformers can be imported."""
|
|
120
|
+
error_message = (
|
|
121
|
+
'You must have SDV Enterprise with the address add-on to use the address features.'
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
try:
|
|
125
|
+
address_module = importlib.import_module('rdt.transformers.address')
|
|
126
|
+
except ModuleNotFoundError:
|
|
127
|
+
raise ImportError(error_message) from None
|
|
128
|
+
|
|
129
|
+
required_classes = ['RandomLocationGenerator', 'RegionalAnonymizer']
|
|
130
|
+
for class_name in required_classes:
|
|
131
|
+
if not hasattr(address_module, class_name):
|
|
132
|
+
raise ImportError(error_message)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class GPSValidator(BaseValidator):
|
|
136
|
+
"""Validation class for GPS data."""
|
|
137
|
+
|
|
138
|
+
SUPPORTED_SDTYPES = ['latitude', 'longitude']
|
|
139
|
+
VALIDATION_TYPE = 'GPS'
|
|
140
|
+
|
|
141
|
+
@staticmethod
|
|
142
|
+
def _validate_uniqueness_sdtype(columns_to_sdtypes):
|
|
143
|
+
sdtypes_to_columns = {sdtype: column for column, sdtype in columns_to_sdtypes.items()}
|
|
144
|
+
if len(sdtypes_to_columns) != 2:
|
|
145
|
+
raise TransformerInputError(
|
|
146
|
+
'The GPS columns must have one latitude and on longitude columns sdtypes. '
|
|
147
|
+
'Please provide GPS data with valid fields.'
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
@classmethod
|
|
151
|
+
def validate_sdtypes(cls, columns_to_sdtypes):
|
|
152
|
+
"""Validate the columns to sdtypes mapping."""
|
|
153
|
+
cls._validate_supported_sdtypes(columns_to_sdtypes)
|
|
154
|
+
cls._validate_uniqueness_sdtype(columns_to_sdtypes)
|
|
155
|
+
|
|
156
|
+
@classmethod
|
|
157
|
+
def validate_imports(cls):
|
|
158
|
+
"""Check that the GPS transformers can be imported."""
|
|
159
|
+
error_message = (
|
|
160
|
+
'You must have SDV Enterprise with the gps add-on to use the GPS features.'
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
try:
|
|
164
|
+
gps_module = importlib.import_module('rdt.transformers.gps')
|
|
165
|
+
except ModuleNotFoundError:
|
|
166
|
+
raise ImportError(error_message) from None
|
|
167
|
+
|
|
168
|
+
required_classes = ['RandomLocationGenerator', 'MetroAreaAnonymizer', 'GPSNoiser']
|
|
169
|
+
for class_name in required_classes:
|
|
170
|
+
if not hasattr(gps_module, class_name):
|
|
171
|
+
raise ImportError(error_message)
|
|
@@ -138,7 +138,7 @@ class AnonymizedFaker(BaseTransformer):
|
|
|
138
138
|
self._faker_random_seed = None
|
|
139
139
|
self.locales = locales
|
|
140
140
|
self.faker = faker.Faker(self.locales)
|
|
141
|
-
if self.locales:
|
|
141
|
+
if self.provider_name != 'BaseProvider' and self.locales:
|
|
142
142
|
self._check_locales()
|
|
143
143
|
|
|
144
144
|
if missing_value_generation not in ['random', None]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: rdt
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.11.0.dev0
|
|
4
4
|
Summary: Reversible Data Transforms
|
|
5
5
|
Author-email: "DataCebo, Inc." <info@sdv.dev>
|
|
6
6
|
License: BSL-1.1
|
|
@@ -19,23 +19,27 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.9
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
23
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
23
|
-
Requires-Python: <3.
|
|
24
|
+
Requires-Python: <3.13,>=3.8
|
|
24
25
|
Description-Content-Type: text/markdown
|
|
25
26
|
License-File: LICENSE
|
|
26
|
-
Requires-Dist: numpy
|
|
27
|
-
Requires-Dist: numpy
|
|
27
|
+
Requires-Dist: numpy>=1.20.0; python_version < "3.10"
|
|
28
|
+
Requires-Dist: numpy>=1.23.3; python_version >= "3.10" and python_version < "3.12"
|
|
29
|
+
Requires-Dist: numpy>=1.26.0; python_version >= "3.12"
|
|
28
30
|
Requires-Dist: pandas>=1.1.3; python_version < "3.10"
|
|
29
31
|
Requires-Dist: pandas>=1.3.4; python_version >= "3.10" and python_version < "3.11"
|
|
30
32
|
Requires-Dist: pandas>=1.5.0; python_version >= "3.11"
|
|
31
|
-
Requires-Dist: scipy
|
|
32
|
-
Requires-Dist: scipy
|
|
33
|
-
Requires-Dist:
|
|
33
|
+
Requires-Dist: scipy>=1.5.4; python_version < "3.10"
|
|
34
|
+
Requires-Dist: scipy>=1.9.2; python_version >= "3.10" and python_version < "3.12"
|
|
35
|
+
Requires-Dist: scipy>=1.12.0; python_version >= "3.12"
|
|
36
|
+
Requires-Dist: scikit-learn>=0.24; python_version < "3.10"
|
|
34
37
|
Requires-Dist: scikit-learn>=1.1.0; python_version >= "3.10" and python_version < "3.11"
|
|
35
|
-
Requires-Dist: scikit-learn
|
|
36
|
-
Requires-Dist:
|
|
38
|
+
Requires-Dist: scikit-learn>=1.1.3; python_version >= "3.11" and python_version < "3.12"
|
|
39
|
+
Requires-Dist: scikit-learn>=1.3.0; python_version >= "3.12"
|
|
40
|
+
Requires-Dist: Faker>=17
|
|
37
41
|
Provides-Extra: copulas
|
|
38
|
-
Requires-Dist: copulas
|
|
42
|
+
Requires-Dist: copulas>=0.11.0.dev0; extra == "copulas"
|
|
39
43
|
Provides-Extra: test
|
|
40
44
|
Requires-Dist: rdt[copulas]; extra == "test"
|
|
41
45
|
Requires-Dist: pytest>=3.4.2; extra == "test"
|
|
@@ -50,7 +54,7 @@ Requires-Dist: rdt[test]; extra == "dev"
|
|
|
50
54
|
Requires-Dist: build<2,>=1.0.0; extra == "dev"
|
|
51
55
|
Requires-Dist: bump-my-version<1,>=0.18.3; extra == "dev"
|
|
52
56
|
Requires-Dist: pip>=9.0.1; extra == "dev"
|
|
53
|
-
Requires-Dist: watchdog<
|
|
57
|
+
Requires-Dist: watchdog<5,>=1.0.1; extra == "dev"
|
|
54
58
|
Requires-Dist: pycodestyle<2.8.0,>=2.7.0; extra == "dev"
|
|
55
59
|
Requires-Dist: pyflakes<2.4.0,>=2.3.0; extra == "dev"
|
|
56
60
|
Requires-Dist: flake8<4,>=3.7.7; extra == "dev"
|
|
@@ -24,6 +24,7 @@ rdt/performance/datasets/pii.py
|
|
|
24
24
|
rdt/performance/datasets/text.py
|
|
25
25
|
rdt/performance/datasets/utils.py
|
|
26
26
|
rdt/transformers/__init__.py
|
|
27
|
+
rdt/transformers/_validators.py
|
|
27
28
|
rdt/transformers/base.py
|
|
28
29
|
rdt/transformers/boolean.py
|
|
29
30
|
rdt/transformers/categorical.py
|
|
@@ -1,32 +1,39 @@
|
|
|
1
|
-
Faker
|
|
1
|
+
Faker>=17
|
|
2
2
|
|
|
3
3
|
[:python_version < "3.10"]
|
|
4
|
-
numpy
|
|
4
|
+
numpy>=1.20.0
|
|
5
5
|
pandas>=1.1.3
|
|
6
|
-
scipy
|
|
7
|
-
scikit-learn
|
|
8
|
-
|
|
9
|
-
[:python_version >= "3.10"]
|
|
10
|
-
numpy<2,>=1.23.3
|
|
11
|
-
scipy<2,>=1.9.2
|
|
6
|
+
scipy>=1.5.4
|
|
7
|
+
scikit-learn>=0.24
|
|
12
8
|
|
|
13
9
|
[:python_version >= "3.10" and python_version < "3.11"]
|
|
14
10
|
pandas>=1.3.4
|
|
15
11
|
scikit-learn>=1.1.0
|
|
16
12
|
|
|
13
|
+
[:python_version >= "3.10" and python_version < "3.12"]
|
|
14
|
+
numpy>=1.23.3
|
|
15
|
+
scipy>=1.9.2
|
|
16
|
+
|
|
17
17
|
[:python_version >= "3.11"]
|
|
18
18
|
pandas>=1.5.0
|
|
19
|
-
|
|
19
|
+
|
|
20
|
+
[:python_version >= "3.11" and python_version < "3.12"]
|
|
21
|
+
scikit-learn>=1.1.3
|
|
22
|
+
|
|
23
|
+
[:python_version >= "3.12"]
|
|
24
|
+
numpy>=1.26.0
|
|
25
|
+
scipy>=1.12.0
|
|
26
|
+
scikit-learn>=1.3.0
|
|
20
27
|
|
|
21
28
|
[copulas]
|
|
22
|
-
copulas
|
|
29
|
+
copulas>=0.11.0.dev0
|
|
23
30
|
|
|
24
31
|
[dev]
|
|
25
32
|
rdt[test]
|
|
26
33
|
build<2,>=1.0.0
|
|
27
34
|
bump-my-version<1,>=0.18.3
|
|
28
35
|
pip>=9.0.1
|
|
29
|
-
watchdog<
|
|
36
|
+
watchdog<5,>=1.0.1
|
|
30
37
|
pycodestyle<2.8.0,>=2.7.0
|
|
31
38
|
pyflakes<2.4.0,>=2.3.0
|
|
32
39
|
flake8<4,>=3.7.7
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"""Tests for the ``tasks.py`` file."""
|
|
2
|
+
|
|
2
3
|
from tasks import _get_minimum_versions
|
|
3
4
|
|
|
4
5
|
|
|
@@ -15,7 +16,7 @@ def test_get_minimum_versions():
|
|
|
15
16
|
"pandas>=1.2.0,<2;python_version<'3.10'",
|
|
16
17
|
"pandas>=1.3.0,<2;python_version>='3.10'",
|
|
17
18
|
'humanfriendly>=8.2,<11',
|
|
18
|
-
'pandas @ git+https://github.com/pandas-dev/pandas.git@master
|
|
19
|
+
'pandas @ git+https://github.com/pandas-dev/pandas.git@master',
|
|
19
20
|
]
|
|
20
21
|
|
|
21
22
|
# Run
|
|
@@ -25,12 +26,12 @@ def test_get_minimum_versions():
|
|
|
25
26
|
# Assert
|
|
26
27
|
expected_versions_39 = [
|
|
27
28
|
'numpy==1.20.0',
|
|
28
|
-
'
|
|
29
|
+
'git+https://github.com/pandas-dev/pandas.git@master#egg=pandas',
|
|
29
30
|
'humanfriendly==8.2',
|
|
30
31
|
]
|
|
31
32
|
expected_versions_310 = [
|
|
32
33
|
'numpy==1.23.3',
|
|
33
|
-
'
|
|
34
|
+
'git+https://github.com/pandas-dev/pandas.git@master#egg=pandas',
|
|
34
35
|
'humanfriendly==8.2',
|
|
35
36
|
]
|
|
36
37
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|