sdmetrics 0.29.1.dev0__tar.gz → 0.30.1.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.
- {sdmetrics-0.29.1.dev0/sdmetrics.egg-info → sdmetrics-0.30.1.dev0}/PKG-INFO +1 -1
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/pyproject.toml +1 -1
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/__init__.py +1 -1
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/_utils_metadata.py +2 -2
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/column_shapes.py +1 -1
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/coverage.py +1 -1
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/data_validity.py +1 -1
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/column_pair_trends.py +1 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/column_shapes.py +2 -1
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/coverage.py +2 -1
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/data_validity.py +45 -10
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/utils.py +3 -3
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/regex_format_adherence.py +13 -5
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/new_row_synthesis.py +1 -1
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0/sdmetrics.egg-info}/PKG-INFO +1 -1
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/LICENSE +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/README.md +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/cardinality_boundary_adherence.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/contingency_similarity.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/correlation_similarity.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/inter_row_msas.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/kl_divergence.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/referential_integrity.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/statistic_msas.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/metadata.json +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/sessions_real.csv +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/sessions_synthetic.csv +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/transactions_real.csv +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/transactions_synthetic.csv +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/users_real.csv +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/users_synthetic.csv +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/single_table/metadata.json +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/single_table/student_placements_real.csv +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/single_table/student_placements_synthetic.csv +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/timeseries/metadata.json +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/timeseries/timeseries_real.csv +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/timeseries/timeseries_synthetic.csv +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/errors.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/goal.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/README.md +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/detection/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/detection/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/detection/parent_child.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/multi_single_table.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/statistical/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/statistical/cardinality_shape_similarity.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/statistical/cardinality_statistic_similarity.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/base_report.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/base_unified_report.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/diagnostic_report.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/boundary.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/cardinality.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/column_pair_trends.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/inter_table_trends.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/relationship_validity.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/structure.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/synthesis.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/base_multi_table_report.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/diagnostic_report.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/quality_report.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/quality_report.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/boundary.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/structure.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/synthesis.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/diagnostic_report.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/plot_utils.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/quality_report.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/README.md +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/boundary_adherence.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/category_adherence.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/category_coverage.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/cstest.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/datetime_format_adherence.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/key_uniqueness.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/kscomplement.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/missing_value_similarity.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/range_coverage.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/sequence_length_similarity.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/statistic_similarity.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/tv_complement.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/README.md +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/bayesian_network.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/data_augmentation/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/data_augmentation/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/data_augmentation/binary_classifier_precision_efficacy.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/data_augmentation/binary_classifier_recall_efficacy.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/data_augmentation/utils.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/detection/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/detection/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/detection/sklearn.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/binary.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/mlefficacy.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/multiclass.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/regression.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/equalized_odds.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/gaussian_mixture.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/multi_column_pairs.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/multi_single_column.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/cap.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/categorical_sklearn.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/dcr_baseline_protection.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/dcr_overfitting_protection.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/dcr_utils.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/disclosure_protection.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/ensemble.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/loss.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/numerical_sklearn.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/radius_nearest_neighbor.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/util.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/table_structure.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/utils.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/README.md +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/detection.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/efficacy/__init__.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/efficacy/base.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/efficacy/classification.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/ml_scorers.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/utils.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/visualization.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/warnings.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics.egg-info/SOURCES.txt +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics.egg-info/dependency_links.txt +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics.egg-info/entry_points.txt +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics.egg-info/requires.txt +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics.egg-info/top_level.txt +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/setup.cfg +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/tests/test_scripts.py +0 -0
- {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/tests/test_tasks.py +0 -0
|
@@ -148,7 +148,7 @@ convention = 'google'
|
|
|
148
148
|
add-ignore = ['D107', 'D407', 'D417']
|
|
149
149
|
|
|
150
150
|
[tool.bumpversion]
|
|
151
|
-
current_version = "0.
|
|
151
|
+
current_version = "0.30.1.dev0"
|
|
152
152
|
parse = '(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\.(?P<release>[a-z]+)(?P<candidate>\d+))?'
|
|
153
153
|
serialize = [
|
|
154
154
|
'{major}.{minor}.{patch}.{release}{candidate}',
|
|
@@ -4,7 +4,7 @@ import pandas as pd
|
|
|
4
4
|
|
|
5
5
|
from sdmetrics.utils import get_columns_from_metadata, is_datetime
|
|
6
6
|
|
|
7
|
-
MODELABLE_SDTYPES = ('numerical', 'datetime', 'categorical', 'boolean')
|
|
7
|
+
MODELABLE_SDTYPES = ('numerical', 'datetime', 'categorical', 'boolean', 'ordinal')
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def _validate_metadata_dict(metadata):
|
|
@@ -173,7 +173,7 @@ def _remove_missing_columns_metadata(data, metadata):
|
|
|
173
173
|
def _remove_non_modelable_columns(data, metadata):
|
|
174
174
|
"""Remove columns that are not modelable.
|
|
175
175
|
|
|
176
|
-
All modelable columns are numerical, datetime, categorical, or boolean sdtypes.
|
|
176
|
+
All modelable columns are numerical, datetime, categorical, ordinal, or boolean sdtypes.
|
|
177
177
|
"""
|
|
178
178
|
columns_modelable = []
|
|
179
179
|
for column, column_metadata in get_columns_from_metadata(metadata).items():
|
|
@@ -10,7 +10,7 @@ class ColumnShapes(BaseMultiTableProperty):
|
|
|
10
10
|
This property assesses the shape similarity between the real and synthetic data.
|
|
11
11
|
A metric score is computed column-wise and the final score is the average over all columns.
|
|
12
12
|
The KSComplement metric is used for numerical and datetime columns while the TVComplement
|
|
13
|
-
is used for categorical and boolean columns.
|
|
13
|
+
is used for categorical, ordinal and boolean columns.
|
|
14
14
|
The other column types are ignored by this property.
|
|
15
15
|
"""
|
|
16
16
|
|
|
@@ -10,7 +10,7 @@ class Coverage(BaseMultiTableProperty):
|
|
|
10
10
|
This property assesses data coverage between the real and synthetic data.
|
|
11
11
|
A metric score is computed column-wise and the final score is the average over all columns.
|
|
12
12
|
The ``RangeCoverage`` metric is used for numerical and datetime columns while the
|
|
13
|
-
``CategoryCoverage`` is used for categorical and boolean columns.
|
|
13
|
+
``CategoryCoverage`` is used for categorical, ordinal and boolean columns.
|
|
14
14
|
The other column types are ignored by this property.
|
|
15
15
|
"""
|
|
16
16
|
|
|
@@ -11,7 +11,7 @@ class DataValidity(BaseMultiTableProperty):
|
|
|
11
11
|
The metric is based on the type data in each column.
|
|
12
12
|
A metric score is computed column-wise and the final score is the average over all columns.
|
|
13
13
|
The BoundaryAdherence metric is used for numerical and datetime columns, the CategoryAdherence
|
|
14
|
-
is used for categorical and boolean columns and the KeyUniqueness for primary and
|
|
14
|
+
is used for categorical, ordinal and boolean columns and the KeyUniqueness for primary and
|
|
15
15
|
alternate keys. The other column types are ignored by this property.
|
|
16
16
|
"""
|
|
17
17
|
|
|
@@ -14,7 +14,7 @@ class ColumnShapes(BaseSingleTableProperty):
|
|
|
14
14
|
This property assesses the shape similarity between the real and synthetic data.
|
|
15
15
|
A metric score is computed column-wise and the final score is the average over all columns.
|
|
16
16
|
The KSComplement metric is used for numerical and datetime columns while the TVComplement
|
|
17
|
-
is used for categorical and boolean columns.
|
|
17
|
+
is used for categorical, ordinal and boolean columns.
|
|
18
18
|
The other column types are ignored by this property.
|
|
19
19
|
"""
|
|
20
20
|
|
|
@@ -23,6 +23,7 @@ class ColumnShapes(BaseSingleTableProperty):
|
|
|
23
23
|
'numerical': KSComplement,
|
|
24
24
|
'datetime': KSComplement,
|
|
25
25
|
'categorical': TVComplement,
|
|
26
|
+
'ordinal': TVComplement,
|
|
26
27
|
'boolean': TVComplement,
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -13,7 +13,7 @@ class Coverage(BaseSingleTableProperty):
|
|
|
13
13
|
This property assesses data coverage between the real and synthetic data.
|
|
14
14
|
A metric score is computed column-wise and the final score is the average over all columns.
|
|
15
15
|
The ``RangeCoverage`` metric is used for numerical and datetime columns while the
|
|
16
|
-
``CategoryCoverage`` is used for categorical and boolean columns.
|
|
16
|
+
``CategoryCoverage`` is used for categorical, ordinal and boolean columns.
|
|
17
17
|
The other column types are ignored by this property.
|
|
18
18
|
"""
|
|
19
19
|
|
|
@@ -22,6 +22,7 @@ class Coverage(BaseSingleTableProperty):
|
|
|
22
22
|
'numerical': RangeCoverage,
|
|
23
23
|
'datetime': RangeCoverage,
|
|
24
24
|
'categorical': CategoryCoverage,
|
|
25
|
+
'ordinal': CategoryCoverage,
|
|
25
26
|
'boolean': CategoryCoverage,
|
|
26
27
|
}
|
|
27
28
|
|
|
@@ -26,7 +26,7 @@ class DataValidity(BaseSingleTableProperty):
|
|
|
26
26
|
This property computes, at base, whether each column contains valid data.
|
|
27
27
|
The metric is based on the type data in each column.
|
|
28
28
|
The BoundaryAdherence metric is used for numerical and datetime columns, the CategoryAdherence
|
|
29
|
-
is used for categorical and boolean columns and the KeyUniqueness for primary
|
|
29
|
+
is used for categorical, ordinal and boolean columns and the KeyUniqueness for primary
|
|
30
30
|
and alternate keys. The other column types are ignored by this property.
|
|
31
31
|
|
|
32
32
|
If the metadata defines the valid range of a column, it is passed down to the metric,
|
|
@@ -40,10 +40,15 @@ class DataValidity(BaseSingleTableProperty):
|
|
|
40
40
|
BoundaryAdherence: ('range_min', 'range_max', 'range_is_nullable'),
|
|
41
41
|
CategoryAdherence: ('range_values', 'range_is_nullable'),
|
|
42
42
|
}
|
|
43
|
+
_metric_to_required_argument = {
|
|
44
|
+
DatetimeFormatAdherence: 'datetime_format',
|
|
45
|
+
RegexFormatAdherence: 'regex_format',
|
|
46
|
+
}
|
|
43
47
|
_sdtype_to_metric = {
|
|
44
48
|
'numerical': [BoundaryAdherence],
|
|
45
49
|
'datetime': [BoundaryAdherence, DatetimeFormatAdherence],
|
|
46
50
|
'categorical': [CategoryAdherence],
|
|
51
|
+
'ordinal': [CategoryAdherence],
|
|
47
52
|
'boolean': [CategoryAdherence],
|
|
48
53
|
'id': [KeyUniqueness, RegexFormatAdherence],
|
|
49
54
|
}
|
|
@@ -75,6 +80,39 @@ class DataValidity(BaseSingleTableProperty):
|
|
|
75
80
|
}
|
|
76
81
|
return column_arguments
|
|
77
82
|
|
|
83
|
+
@classmethod
|
|
84
|
+
def _has_required_argument(cls, metric, column_name, columns_meta):
|
|
85
|
+
required_argument = cls._metric_to_required_argument.get(metric)
|
|
86
|
+
return required_argument is None or required_argument in columns_meta[column_name]
|
|
87
|
+
|
|
88
|
+
@classmethod
|
|
89
|
+
def _get_column_metrics(cls, sdtype, column_name, columns_meta, is_unique):
|
|
90
|
+
"""Get the metrics that apply to a column.
|
|
91
|
+
|
|
92
|
+
``KeyUniqueness`` only applies to primary and alternate keys, and the format metrics
|
|
93
|
+
only apply to the columns that define their format in the metadata.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
sdtype (str or None):
|
|
97
|
+
The sdtype of the column, or ``None``.
|
|
98
|
+
column_name (str or list):
|
|
99
|
+
The name of the column.
|
|
100
|
+
columns_meta (dict):
|
|
101
|
+
The metadata of every column of the table.
|
|
102
|
+
is_unique (bool):
|
|
103
|
+
Whether the column is a primary or an alternate key.
|
|
104
|
+
|
|
105
|
+
Returns:
|
|
106
|
+
list:
|
|
107
|
+
The metrics to compute the column scores with.
|
|
108
|
+
"""
|
|
109
|
+
return [
|
|
110
|
+
metric
|
|
111
|
+
for metric in cls._sdtype_to_metric.get(sdtype, [KeyUniqueness])
|
|
112
|
+
if (is_unique or metric is not KeyUniqueness)
|
|
113
|
+
and cls._has_required_argument(metric, column_name, columns_meta)
|
|
114
|
+
]
|
|
115
|
+
|
|
78
116
|
def _generate_details(self, real_data, synthetic_data, metadata, progress_bar=None):
|
|
79
117
|
"""Generate the _details dataframe for the data validity property.
|
|
80
118
|
|
|
@@ -110,13 +148,10 @@ class DataValidity(BaseSingleTableProperty):
|
|
|
110
148
|
is_unique = primary_key_match or alternate_key_match
|
|
111
149
|
is_sequence_index = column_name == sequence_index
|
|
112
150
|
|
|
113
|
-
|
|
114
|
-
|
|
151
|
+
metrics = self._get_column_metrics(sdtype, column_name, columns_meta, is_unique)
|
|
152
|
+
if is_sequence_index and BoundaryAdherence in metrics:
|
|
153
|
+
metrics = []
|
|
115
154
|
|
|
116
|
-
if is_sequence_index and BoundaryAdherence in self._sdtype_to_metric.get(sdtype):
|
|
117
|
-
continue
|
|
118
|
-
|
|
119
|
-
metrics = self._sdtype_to_metric.get(sdtype, [KeyUniqueness])
|
|
120
155
|
for metric in metrics:
|
|
121
156
|
try:
|
|
122
157
|
metric_arguments = self._get_metric_arguments(metric, column_name, columns_meta)
|
|
@@ -141,15 +176,15 @@ class DataValidity(BaseSingleTableProperty):
|
|
|
141
176
|
except Exception as e:
|
|
142
177
|
column_score = np.nan
|
|
143
178
|
error_message = f'{type(e).__name__}: {e}'
|
|
144
|
-
finally:
|
|
145
|
-
if progress_bar:
|
|
146
|
-
progress_bar.update()
|
|
147
179
|
|
|
148
180
|
column_names.append(column_name)
|
|
149
181
|
metric_names.append(metric.__name__)
|
|
150
182
|
scores.append(column_score)
|
|
151
183
|
error_messages.append(error_message)
|
|
152
184
|
|
|
185
|
+
if progress_bar:
|
|
186
|
+
progress_bar.update()
|
|
187
|
+
|
|
153
188
|
result = pd.DataFrame({
|
|
154
189
|
'Column': column_names,
|
|
155
190
|
'Metric': metric_names,
|
|
@@ -16,7 +16,7 @@ from sdmetrics.utils import (
|
|
|
16
16
|
)
|
|
17
17
|
|
|
18
18
|
CONTINUOUS_SDTYPES = ['numerical', 'datetime']
|
|
19
|
-
DISCRETE_SDTYPES = ['categorical', 'boolean']
|
|
19
|
+
DISCRETE_SDTYPES = ['categorical', 'ordinal', 'boolean']
|
|
20
20
|
DEFAULT_NUM_ROWS_SUBSAMPLE = 50000
|
|
21
21
|
DEFAULT_REAL_CORRELATION_THRESHOLD = 0.5
|
|
22
22
|
DEFAULT_REAL_ASSOCIATION_THRESHOLD = 0.3
|
|
@@ -99,7 +99,7 @@ def discretize_table_data(real_data, synthetic_data, metadata):
|
|
|
99
99
|
|
|
100
100
|
|
|
101
101
|
def _get_non_id_columns(metadata, binned_metadata):
|
|
102
|
-
valid_sdtypes = ['numerical', 'categorical', 'boolean', 'datetime']
|
|
102
|
+
valid_sdtypes = ['numerical', 'categorical', 'boolean', 'ordinal', 'datetime']
|
|
103
103
|
alternate_keys = get_alternate_keys(metadata)
|
|
104
104
|
non_id_columns = []
|
|
105
105
|
for column, column_meta in get_columns_from_metadata(binned_metadata).items():
|
|
@@ -202,7 +202,7 @@ def _validate_categorical_values(real_data, synthetic_data, metadata, table=None
|
|
|
202
202
|
columns = get_columns_from_metadata(metadata)
|
|
203
203
|
for column, column_meta in columns.items():
|
|
204
204
|
column_type = get_type_from_column_meta(column_meta)
|
|
205
|
-
if column_type
|
|
205
|
+
if column_type in ('categorical', 'ordinal'):
|
|
206
206
|
extra_categories = [
|
|
207
207
|
value
|
|
208
208
|
for value in synthetic_data[column].unique()
|
|
@@ -51,7 +51,10 @@ class RegexFormatAdherence(SingleColumnMetric):
|
|
|
51
51
|
regex_format (str):
|
|
52
52
|
The regex format.
|
|
53
53
|
compare (pd.Series | pd.DataFrame, optional):
|
|
54
|
-
Dataframe containing groups to compare against.
|
|
54
|
+
Dataframe containing groups to compare against. Only the named groups are
|
|
55
|
+
compared, and each one of them separately, so a value is valid when every
|
|
56
|
+
one of its named groups is present in the matching group of ``compare``,
|
|
57
|
+
even if the combination is not.
|
|
55
58
|
|
|
56
59
|
Returns:
|
|
57
60
|
tuple (pd.Series, pd.DataFrame):
|
|
@@ -59,13 +62,18 @@ class RegexFormatAdherence(SingleColumnMetric):
|
|
|
59
62
|
* A dataframe containing seperated regex groups.
|
|
60
63
|
"""
|
|
61
64
|
regex_column = column.str.fullmatch(regex_format, na=False)
|
|
65
|
+
pattern = re.compile(regex_format)
|
|
62
66
|
|
|
63
67
|
groups = None
|
|
64
|
-
if
|
|
68
|
+
if pattern.groups:
|
|
65
69
|
groups = column[regex_column].str.extract(regex_format)
|
|
66
|
-
if compare is not None and not compare.empty:
|
|
67
|
-
|
|
68
|
-
|
|
70
|
+
if pattern.groupindex and compare is not None and not compare.empty:
|
|
71
|
+
valid_values = {
|
|
72
|
+
group: set(compare.iloc[:, group_number - 1])
|
|
73
|
+
for group, group_number in pattern.groupindex.items()
|
|
74
|
+
}
|
|
75
|
+
valid_groups = groups[list(valid_values)].isin(valid_values).all(axis=1)
|
|
76
|
+
regex_column &= valid_groups.reindex(column.index, fill_value=False)
|
|
69
77
|
|
|
70
78
|
valid = pd.isna(column) | regex_column
|
|
71
79
|
|
|
@@ -101,7 +101,7 @@ class NewRowSynthesis(SingleTableMetric):
|
|
|
101
101
|
numerical_fields = []
|
|
102
102
|
|
|
103
103
|
try:
|
|
104
|
-
categorical_fields = cls._select_fields(metadata, ('categorical', 'boolean'))
|
|
104
|
+
categorical_fields = cls._select_fields(metadata, ('categorical', 'boolean', 'ordinal'))
|
|
105
105
|
except IncomputableMetricError:
|
|
106
106
|
categorical_fields = []
|
|
107
107
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/inter_row_msas.py
RENAMED
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/kl_divergence.py
RENAMED
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/statistic_msas.py
RENAMED
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/sessions_real.csv
RENAMED
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/sessions_synthetic.csv
RENAMED
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/transactions_real.csv
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/users_synthetic.csv
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/timeseries/timeseries_real.csv
RENAMED
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/timeseries/timeseries_synthetic.csv
RENAMED
|
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
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/detection/parent_child.py
RENAMED
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/statistical/__init__.py
RENAMED
|
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
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/base.py
RENAMED
|
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
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/diagnostic_report.py
RENAMED
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/quality_report.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/diagnostic_report.py
RENAMED
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/plot_utils.py
RENAMED
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/quality_report.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/cstest.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/kscomplement.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/tv_complement.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/data_augmentation/__init__.py
RENAMED
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/data_augmentation/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/data_augmentation/utils.py
RENAMED
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/detection/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/mlefficacy.py
RENAMED
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/multiclass.py
RENAMED
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/regression.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/multi_column_pairs.py
RENAMED
|
File without changes
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/multi_single_column.py
RENAMED
|
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
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/numerical_sklearn.py
RENAMED
|
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
|
{sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/efficacy/classification.py
RENAMED
|
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
|