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.
Files changed (178) hide show
  1. {sdmetrics-0.30.1.dev0/sdmetrics.egg-info → sdmetrics-0.31.1.dev0}/PKG-INFO +1 -1
  2. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/pyproject.toml +1 -1
  3. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/__init__.py +1 -1
  4. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/timeseries/metadata.json +2 -1
  5. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos.py +2 -11
  6. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/__init__.py +2 -0
  7. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/statistical/__init__.py +2 -1
  8. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraint_adherence.py +79 -0
  9. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/__init__.py +55 -0
  10. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/_utils.py +610 -0
  11. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/base.py +228 -0
  12. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/carry_over_columns.py +151 -0
  13. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/chained_inequality.py +113 -0
  14. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/column_formula.py +152 -0
  15. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/denormalized_table.py +101 -0
  16. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/error.py +5 -0
  17. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/fixed_combinations.py +91 -0
  18. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/fixed_increments.py +103 -0
  19. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/fixed_null_combinations.py +209 -0
  20. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/foreign_to_foreign_key.py +123 -0
  21. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/foreign_to_primary_key_subset.py +114 -0
  22. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/inequality.py +123 -0
  23. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/mixed_scales.py +149 -0
  24. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/one_hot_encoding.py +77 -0
  25. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/polymorphic_relationship.py +301 -0
  26. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/primary_to_primary_key_subset.py +160 -0
  27. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/range.py +140 -0
  28. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/reference_table.py +150 -0
  29. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/referential_hierarchy.py +268 -0
  30. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/utils/__init__.py +1 -0
  31. sdmetrics-0.31.1.dev0/sdmetrics/multi_table/statistical/constraints/utils/numerical_formatter.py +139 -0
  32. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/base_report.py +17 -1
  33. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/__init__.py +2 -0
  34. sdmetrics-0.31.1.dev0/sdmetrics/reports/multi_table/_properties/constraint_validity.py +135 -0
  35. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/data_validity.py +9 -0
  36. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/base_multi_table_report.py +10 -1
  37. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/data_validity.py +17 -1
  38. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0/sdmetrics.egg-info}/PKG-INFO +1 -1
  39. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics.egg-info/SOURCES.txt +25 -0
  40. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/LICENSE +0 -0
  41. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/README.md +0 -0
  42. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/_utils_metadata.py +0 -0
  43. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/base.py +0 -0
  44. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/__init__.py +0 -0
  45. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/base.py +0 -0
  46. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/__init__.py +0 -0
  47. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/cardinality_boundary_adherence.py +0 -0
  48. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/contingency_similarity.py +0 -0
  49. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/correlation_similarity.py +0 -0
  50. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/inter_row_msas.py +0 -0
  51. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/kl_divergence.py +0 -0
  52. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/referential_integrity.py +0 -0
  53. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/column_pairs/statistical/statistic_msas.py +0 -0
  54. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/metadata.json +0 -0
  55. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/sessions_real.csv +0 -0
  56. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/sessions_synthetic.csv +0 -0
  57. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/transactions_real.csv +0 -0
  58. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/transactions_synthetic.csv +0 -0
  59. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/users_real.csv +0 -0
  60. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/multi_table/users_synthetic.csv +0 -0
  61. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/single_table/metadata.json +0 -0
  62. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/single_table/student_placements_real.csv +0 -0
  63. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/single_table/student_placements_synthetic.csv +0 -0
  64. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/timeseries/timeseries_real.csv +0 -0
  65. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/demos/timeseries/timeseries_synthetic.csv +0 -0
  66. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/errors.py +0 -0
  67. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/goal.py +0 -0
  68. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/README.md +0 -0
  69. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/base.py +0 -0
  70. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/detection/__init__.py +0 -0
  71. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/detection/base.py +0 -0
  72. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/detection/parent_child.py +0 -0
  73. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/multi_single_table.py +0 -0
  74. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/statistical/cardinality_shape_similarity.py +0 -0
  75. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/multi_table/statistical/cardinality_statistic_similarity.py +0 -0
  76. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/__init__.py +0 -0
  77. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/base_unified_report.py +0 -0
  78. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/diagnostic_report.py +0 -0
  79. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/__init__.py +0 -0
  80. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/base.py +0 -0
  81. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/boundary.py +0 -0
  82. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/cardinality.py +0 -0
  83. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/column_pair_trends.py +0 -0
  84. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/column_shapes.py +0 -0
  85. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/coverage.py +0 -0
  86. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/inter_table_trends.py +0 -0
  87. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/relationship_validity.py +0 -0
  88. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/structure.py +0 -0
  89. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/_properties/synthesis.py +0 -0
  90. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/diagnostic_report.py +0 -0
  91. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/multi_table/quality_report.py +0 -0
  92. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/quality_report.py +0 -0
  93. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/__init__.py +0 -0
  94. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/__init__.py +0 -0
  95. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/base.py +0 -0
  96. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/boundary.py +0 -0
  97. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/column_pair_trends.py +0 -0
  98. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/column_shapes.py +0 -0
  99. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/coverage.py +0 -0
  100. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/structure.py +0 -0
  101. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/_properties/synthesis.py +0 -0
  102. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/diagnostic_report.py +0 -0
  103. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/plot_utils.py +0 -0
  104. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/single_table/quality_report.py +0 -0
  105. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/reports/utils.py +0 -0
  106. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/README.md +0 -0
  107. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/__init__.py +0 -0
  108. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/base.py +0 -0
  109. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/__init__.py +0 -0
  110. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/boundary_adherence.py +0 -0
  111. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/category_adherence.py +0 -0
  112. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/category_coverage.py +0 -0
  113. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/cstest.py +0 -0
  114. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/datetime_format_adherence.py +0 -0
  115. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/key_uniqueness.py +0 -0
  116. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/kscomplement.py +0 -0
  117. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/missing_value_similarity.py +0 -0
  118. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/range_coverage.py +0 -0
  119. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/regex_format_adherence.py +0 -0
  120. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/sequence_length_similarity.py +0 -0
  121. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/statistic_similarity.py +0 -0
  122. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_column/statistical/tv_complement.py +0 -0
  123. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/README.md +0 -0
  124. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/__init__.py +0 -0
  125. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/base.py +0 -0
  126. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/bayesian_network.py +0 -0
  127. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/data_augmentation/__init__.py +0 -0
  128. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/data_augmentation/base.py +0 -0
  129. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/data_augmentation/binary_classifier_precision_efficacy.py +0 -0
  130. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/data_augmentation/binary_classifier_recall_efficacy.py +0 -0
  131. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/data_augmentation/utils.py +0 -0
  132. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/detection/__init__.py +0 -0
  133. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/detection/base.py +0 -0
  134. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/detection/sklearn.py +0 -0
  135. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/efficacy/__init__.py +0 -0
  136. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/efficacy/base.py +0 -0
  137. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/efficacy/binary.py +0 -0
  138. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/efficacy/mlefficacy.py +0 -0
  139. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/efficacy/multiclass.py +0 -0
  140. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/efficacy/regression.py +0 -0
  141. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/equalized_odds.py +0 -0
  142. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/gaussian_mixture.py +0 -0
  143. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/multi_column_pairs.py +0 -0
  144. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/multi_single_column.py +0 -0
  145. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/new_row_synthesis.py +0 -0
  146. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/__init__.py +0 -0
  147. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/base.py +0 -0
  148. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/cap.py +0 -0
  149. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/categorical_sklearn.py +0 -0
  150. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/dcr_baseline_protection.py +0 -0
  151. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/dcr_overfitting_protection.py +0 -0
  152. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/dcr_utils.py +0 -0
  153. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/disclosure_protection.py +0 -0
  154. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/ensemble.py +0 -0
  155. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/loss.py +0 -0
  156. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/numerical_sklearn.py +0 -0
  157. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/radius_nearest_neighbor.py +0 -0
  158. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/privacy/util.py +0 -0
  159. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/table_structure.py +0 -0
  160. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/single_table/utils.py +0 -0
  161. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/README.md +0 -0
  162. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/__init__.py +0 -0
  163. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/base.py +0 -0
  164. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/detection.py +0 -0
  165. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/efficacy/__init__.py +0 -0
  166. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/efficacy/base.py +0 -0
  167. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/efficacy/classification.py +0 -0
  168. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/timeseries/ml_scorers.py +0 -0
  169. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/utils.py +0 -0
  170. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/visualization.py +0 -0
  171. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics/warnings.py +0 -0
  172. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics.egg-info/dependency_links.txt +0 -0
  173. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics.egg-info/entry_points.txt +0 -0
  174. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics.egg-info/requires.txt +0 -0
  175. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/sdmetrics.egg-info/top_level.txt +0 -0
  176. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/setup.cfg +0 -0
  177. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/tests/test_scripts.py +0 -0
  178. {sdmetrics-0.30.1.dev0 → sdmetrics-0.31.1.dev0}/tests/test_tasks.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sdmetrics
3
- Version: 0.30.1.dev0
3
+ Version: 0.31.1.dev0
4
4
  Summary: Metrics for Synthetic Data Generation Projects
5
5
  Author-email: MIT Data To AI Lab <dailabmit@gmail.com>
6
6
  License-Expression: MIT
@@ -148,7 +148,7 @@ convention = 'google'
148
148
  add-ignore = ['D107', 'D407', 'D417']
149
149
 
150
150
  [tool.bumpversion]
151
- current_version = "0.30.1.dev0"
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}',
@@ -4,7 +4,7 @@
4
4
 
5
5
  __author__ = 'MIT Data To AI Lab'
6
6
  __email__ = 'dailabmit@gmail.com'
7
- __version__ = '0.30.1.dev0'
7
+ __version__ = '0.31.1.dev0'
8
8
 
9
9
  import sys
10
10
  import warnings as python_warnings
@@ -18,7 +18,8 @@
18
18
  "computer_representation": "Float"
19
19
  },
20
20
  "date": {
21
- "sdtype": "datetime"
21
+ "sdtype": "datetime",
22
+ "datetime_format": "%Y-%m-%d"
22
23
  },
23
24
  "day_of_week": {
24
25
  "sdtype": "numerical",
@@ -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] = _load_table(table_meta, demo_path / f'{table}_real.csv')
42
- synthetic_data[table] = _load_table(table_meta, demo_path / f'{table}_synthetic.csv')
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
  ]
@@ -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
+ )