sdmetrics 0.30.1.dev0__tar.gz → 0.31.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.30.1.dev0/sdmetrics.egg-info → sdmetrics-0.31.1.dev0}/PKG-INFO +1 -1
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/pyproject.toml +1 -1
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/__init__.py +1 -1
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/timeseries/metadata.json +2 -1
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos.py +2 -11
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/__init__.py +2 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/statistical/__init__.py +2 -1
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraint_adherence.py +79 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/__init__.py +55 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/_utils.py +610 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/base.py +228 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/carry_over_columns.py +151 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/chained_inequality.py +113 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/column_formula.py +152 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/denormalized_table.py +101 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/error.py +5 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/fixed_combinations.py +91 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/fixed_increments.py +103 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/fixed_null_combinations.py +209 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/foreign_to_foreign_key.py +123 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/foreign_to_primary_key_subset.py +114 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/inequality.py +123 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/mixed_scales.py +149 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/one_hot_encoding.py +77 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/polymorphic_relationship.py +301 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/primary_to_primary_key_subset.py +160 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/range.py +140 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/reference_table.py +150 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/referential_hierarchy.py +268 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/utils/__init__.py +1 -0
- sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/utils/numerical_formatter.py +139 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/base_report.py +17 -1
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/__init__.py +2 -0
- sdmetrics-0.31.1.dev0/sdmetrics/reports/multi_table/_properties/constraint_validity.py +135 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/data_validity.py +9 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/base_multi_table_report.py +10 -1
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/data_validity.py +17 -1
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0/sdmetrics.egg-info}/PKG-INFO +1 -1
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics.egg-info/SOURCES.txt +25 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/LICENSE +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/README.md +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/_utils_metadata.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/cardinality_boundary_adherence.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/contingency_similarity.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/correlation_similarity.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/inter_row_msas.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/kl_divergence.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/referential_integrity.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/statistic_msas.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/metadata.json +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/sessions_real.csv +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/sessions_synthetic.csv +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/transactions_real.csv +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/transactions_synthetic.csv +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/users_real.csv +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/users_synthetic.csv +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/single_table/metadata.json +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/single_table/student_placements_real.csv +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/single_table/student_placements_synthetic.csv +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/timeseries/timeseries_real.csv +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/timeseries/timeseries_synthetic.csv +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/errors.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/goal.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/README.md +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/detection/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/detection/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/detection/parent_child.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/multi_single_table.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/statistical/cardinality_shape_similarity.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/statistical/cardinality_statistic_similarity.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/base_unified_report.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/diagnostic_report.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/boundary.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/cardinality.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/column_pair_trends.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/column_shapes.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/coverage.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/inter_table_trends.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/relationship_validity.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/structure.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/synthesis.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/diagnostic_report.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/quality_report.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/quality_report.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/boundary.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/column_pair_trends.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/column_shapes.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/coverage.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/structure.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/synthesis.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/diagnostic_report.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/plot_utils.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/quality_report.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/utils.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/README.md +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/boundary_adherence.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/category_adherence.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/category_coverage.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/cstest.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/datetime_format_adherence.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/key_uniqueness.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/kscomplement.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/missing_value_similarity.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/range_coverage.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/regex_format_adherence.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/sequence_length_similarity.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/statistic_similarity.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/tv_complement.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/README.md +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/bayesian_network.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/data_augmentation/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/data_augmentation/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/data_augmentation/binary_classifier_precision_efficacy.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/data_augmentation/binary_classifier_recall_efficacy.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/data_augmentation/utils.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/detection/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/detection/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/detection/sklearn.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/efficacy/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/efficacy/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/efficacy/binary.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/efficacy/mlefficacy.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/efficacy/multiclass.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/efficacy/regression.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/equalized_odds.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/gaussian_mixture.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/multi_column_pairs.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/multi_single_column.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/new_row_synthesis.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/cap.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/categorical_sklearn.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/dcr_baseline_protection.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/dcr_overfitting_protection.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/dcr_utils.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/disclosure_protection.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/ensemble.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/loss.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/numerical_sklearn.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/radius_nearest_neighbor.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/util.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/table_structure.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/utils.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/README.md +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/detection.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/efficacy/__init__.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/efficacy/base.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/efficacy/classification.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/ml_scorers.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/utils.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/visualization.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/warnings.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics.egg-info/dependency_links.txt +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics.egg-info/entry_points.txt +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics.egg-info/requires.txt +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics.egg-info/top_level.txt +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/setup.cfg +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/tests/test_scripts.py +0 -0
- {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.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.31.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}',
|
|
@@ -6,15 +6,6 @@ import pathlib
|
|
|
6
6
|
import pandas as pd
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
def _load_table(metadata, path):
|
|
10
|
-
datetime_columns = []
|
|
11
|
-
for column, column_meta in metadata['columns'].items():
|
|
12
|
-
if column_meta['sdtype'] == 'datetime':
|
|
13
|
-
datetime_columns.append(column)
|
|
14
|
-
|
|
15
|
-
return pd.read_csv(path, parse_dates=datetime_columns)
|
|
16
|
-
|
|
17
|
-
|
|
18
9
|
def load_demo(modality='multi_table'):
|
|
19
10
|
"""Load demo data of the indicated data modality.
|
|
20
11
|
|
|
@@ -38,8 +29,8 @@ def load_demo(modality='multi_table'):
|
|
|
38
29
|
real_data = {}
|
|
39
30
|
synthetic_data = {}
|
|
40
31
|
for table, table_meta in metadata['tables'].items():
|
|
41
|
-
real_data[table] =
|
|
42
|
-
synthetic_data[table] =
|
|
32
|
+
real_data[table] = pd.read_csv(demo_path / f'{table}_real.csv')
|
|
33
|
+
synthetic_data[table] = pd.read_csv(demo_path / f'{table}_synthetic.csv')
|
|
43
34
|
|
|
44
35
|
return real_data, synthetic_data, metadata
|
|
45
36
|
|
|
@@ -32,6 +32,7 @@ from sdmetrics.multi_table.statistical.cardinality_shape_similarity import (
|
|
|
32
32
|
from sdmetrics.multi_table.statistical.cardinality_statistic_similarity import (
|
|
33
33
|
CardinalityStatisticSimilarity,
|
|
34
34
|
)
|
|
35
|
+
from sdmetrics.multi_table.statistical.constraint_adherence import ConstraintAdherence
|
|
35
36
|
|
|
36
37
|
__all__ = [
|
|
37
38
|
'detection',
|
|
@@ -59,4 +60,5 @@ __all__ = [
|
|
|
59
60
|
'TVComplement',
|
|
60
61
|
'RangeCoverage',
|
|
61
62
|
'NewRowSynthesis',
|
|
63
|
+
'ConstraintAdherence',
|
|
62
64
|
]
|
{sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/statistical/__init__.py
RENAMED
|
@@ -6,5 +6,6 @@ from sdmetrics.multi_table.statistical.cardinality_shape_similarity import (
|
|
|
6
6
|
from sdmetrics.multi_table.statistical.cardinality_statistic_similarity import (
|
|
7
7
|
CardinalityStatisticSimilarity,
|
|
8
8
|
)
|
|
9
|
+
from sdmetrics.multi_table.statistical.constraint_adherence import ConstraintAdherence
|
|
9
10
|
|
|
10
|
-
__all__ = ['CardinalityShapeSimilarity', 'CardinalityStatisticSimilarity']
|
|
11
|
+
__all__ = ['CardinalityShapeSimilarity', 'CardinalityStatisticSimilarity', 'ConstraintAdherence']
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""Constraint Adherence metric."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import warnings
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
import pandas as pd
|
|
8
|
+
|
|
9
|
+
from sdmetrics.goal import Goal
|
|
10
|
+
from sdmetrics.multi_table.base import MultiTableMetric
|
|
11
|
+
from sdmetrics.multi_table.statistical.constraints.base import BaseConstraint
|
|
12
|
+
from sdmetrics.multi_table.statistical.constraints.error import ConstraintNotApplicableError
|
|
13
|
+
|
|
14
|
+
LOGGER = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ConstraintAdherence(MultiTableMetric):
|
|
18
|
+
"""Constraint Adherence metric.
|
|
19
|
+
|
|
20
|
+
Compute the fraction of data points in the synthetic data that
|
|
21
|
+
follow the specified constraint.
|
|
22
|
+
|
|
23
|
+
Attributes:
|
|
24
|
+
name (str):
|
|
25
|
+
Name to use when reports about this metric are printed.
|
|
26
|
+
goal (sdmetrics.goal.Goal):
|
|
27
|
+
The goal of this metric.
|
|
28
|
+
min_value (float):
|
|
29
|
+
Minimum value that this metric can take.
|
|
30
|
+
max_value (float):
|
|
31
|
+
Maximum value that this metric can take.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
name = 'ConstraintAdherence'
|
|
35
|
+
goal = Goal.MAXIMIZE
|
|
36
|
+
min_value = 0.0
|
|
37
|
+
max_value = 1.0
|
|
38
|
+
|
|
39
|
+
@classmethod
|
|
40
|
+
def compute(cls, real_data, synthetic_data, metadata, constraint):
|
|
41
|
+
"""Compute the percentage of rows that adhere to the constraint.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
real_data (dict[str, pandas.DataFrame]):
|
|
45
|
+
The tables from the real dataset, passed as a dictionary of
|
|
46
|
+
table names and pandas.DataFrames.
|
|
47
|
+
synthetic_data (dict[str, pandas.DataFrame]):
|
|
48
|
+
The tables from the synthetic dataset, passed as a dictionary of
|
|
49
|
+
table names and pandas.DataFrames.
|
|
50
|
+
metadata (dict):
|
|
51
|
+
Multi-table metadata dict.
|
|
52
|
+
constraint (dict):
|
|
53
|
+
A dictionary that defines the type of constraint and its parameters.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
float:
|
|
57
|
+
The proportion of data points in the synthetic data that match
|
|
58
|
+
the specified constraint format.
|
|
59
|
+
"""
|
|
60
|
+
constraint = BaseConstraint.load_constraint_from_dict(constraint)
|
|
61
|
+
|
|
62
|
+
try:
|
|
63
|
+
constraint.fit(real_data, metadata)
|
|
64
|
+
real_score = constraint.get_score(real_data, metadata)
|
|
65
|
+
except ConstraintNotApplicableError as error:
|
|
66
|
+
LOGGER.warning(f'Unable to check the constraint against the real data: {error}')
|
|
67
|
+
real_score = np.nan
|
|
68
|
+
|
|
69
|
+
if not pd.isna(real_score) and real_score < 1.0:
|
|
70
|
+
warnings.warn(
|
|
71
|
+
f"The real data does not adhere to the '{constraint.__class__.__name__}' "
|
|
72
|
+
f'constraint ({round(real_score * 100, 2)}% of the rows are valid). '
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
try:
|
|
76
|
+
return constraint.get_score(synthetic_data, metadata)
|
|
77
|
+
except ConstraintNotApplicableError as error:
|
|
78
|
+
LOGGER.warning(f'Unable to check the constraint against the synthetic data: {error}')
|
|
79
|
+
return np.nan
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""Constraints."""
|
|
2
|
+
|
|
3
|
+
from sdmetrics.multi_table.statistical.constraints.base import BaseConstraint
|
|
4
|
+
from sdmetrics.multi_table.statistical.constraints.carry_over_columns import CarryOverColumns
|
|
5
|
+
from sdmetrics.multi_table.statistical.constraints.column_formula import ColumnFormula
|
|
6
|
+
from sdmetrics.multi_table.statistical.constraints.denormalized_table import (
|
|
7
|
+
DenormalizedTable,
|
|
8
|
+
)
|
|
9
|
+
from sdmetrics.multi_table.statistical.constraints.chained_inequality import ChainedInequality
|
|
10
|
+
from sdmetrics.multi_table.statistical.constraints.inequality import Inequality
|
|
11
|
+
from sdmetrics.multi_table.statistical.constraints.fixed_combinations import FixedCombinations
|
|
12
|
+
from sdmetrics.multi_table.statistical.constraints.fixed_increments import FixedIncrements
|
|
13
|
+
from sdmetrics.multi_table.statistical.constraints.fixed_null_combinations import (
|
|
14
|
+
FixedNullCombinations,
|
|
15
|
+
)
|
|
16
|
+
from sdmetrics.multi_table.statistical.constraints.foreign_to_foreign_key import (
|
|
17
|
+
ForeignToForeignKey,
|
|
18
|
+
)
|
|
19
|
+
from sdmetrics.multi_table.statistical.constraints.foreign_to_primary_key_subset import (
|
|
20
|
+
ForeignToPrimaryKeySubset,
|
|
21
|
+
)
|
|
22
|
+
from sdmetrics.multi_table.statistical.constraints.mixed_scales import MixedScales
|
|
23
|
+
from sdmetrics.multi_table.statistical.constraints.polymorphic_relationship import (
|
|
24
|
+
PolymorphicRelationship,
|
|
25
|
+
)
|
|
26
|
+
from sdmetrics.multi_table.statistical.constraints.primary_to_primary_key_subset import (
|
|
27
|
+
PrimaryToPrimaryKeySubset,
|
|
28
|
+
)
|
|
29
|
+
from sdmetrics.multi_table.statistical.constraints.reference_table import ReferenceTable
|
|
30
|
+
from sdmetrics.multi_table.statistical.constraints.one_hot_encoding import OneHotEncoding
|
|
31
|
+
from sdmetrics.multi_table.statistical.constraints.range import Range
|
|
32
|
+
from sdmetrics.multi_table.statistical.constraints.referential_hierarchy import (
|
|
33
|
+
SelfReferentialHierarchy,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
__all__ = (
|
|
37
|
+
BaseConstraint,
|
|
38
|
+
CarryOverColumns,
|
|
39
|
+
ColumnFormula,
|
|
40
|
+
DenormalizedTable,
|
|
41
|
+
ChainedInequality,
|
|
42
|
+
Inequality,
|
|
43
|
+
FixedIncrements,
|
|
44
|
+
FixedCombinations,
|
|
45
|
+
FixedNullCombinations,
|
|
46
|
+
ForeignToForeignKey,
|
|
47
|
+
ForeignToPrimaryKeySubset,
|
|
48
|
+
MixedScales,
|
|
49
|
+
PolymorphicRelationship,
|
|
50
|
+
PrimaryToPrimaryKeySubset,
|
|
51
|
+
ReferenceTable,
|
|
52
|
+
OneHotEncoding,
|
|
53
|
+
Range,
|
|
54
|
+
SelfReferentialHierarchy,
|
|
55
|
+
)
|