sdmetrics 0.31.1.dev0__tar.gz → 0.31.2.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.31.1.dev0/sdmetrics.egg-info → sdmetrics-0.31.2.dev0}/PKG-INFO +1 -1
  2. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/pyproject.toml +1 -1
  3. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/__init__.py +1 -1
  4. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/base_report.py +36 -9
  5. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/base_unified_report.py +12 -4
  6. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/diagnostic_report.py +7 -1
  7. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/_properties/constraint_validity.py +1 -0
  8. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/base_multi_table_report.py +7 -2
  9. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0/sdmetrics.egg-info}/PKG-INFO +1 -1
  10. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/LICENSE +0 -0
  11. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/README.md +0 -0
  12. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/_utils_metadata.py +0 -0
  13. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/base.py +0 -0
  14. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/column_pairs/__init__.py +0 -0
  15. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/column_pairs/base.py +0 -0
  16. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/column_pairs/statistical/__init__.py +0 -0
  17. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/column_pairs/statistical/cardinality_boundary_adherence.py +0 -0
  18. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/column_pairs/statistical/contingency_similarity.py +0 -0
  19. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/column_pairs/statistical/correlation_similarity.py +0 -0
  20. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/column_pairs/statistical/inter_row_msas.py +0 -0
  21. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/column_pairs/statistical/kl_divergence.py +0 -0
  22. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/column_pairs/statistical/referential_integrity.py +0 -0
  23. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/column_pairs/statistical/statistic_msas.py +0 -0
  24. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos/multi_table/metadata.json +0 -0
  25. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos/multi_table/sessions_real.csv +0 -0
  26. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos/multi_table/sessions_synthetic.csv +0 -0
  27. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos/multi_table/transactions_real.csv +0 -0
  28. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos/multi_table/transactions_synthetic.csv +0 -0
  29. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos/multi_table/users_real.csv +0 -0
  30. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos/multi_table/users_synthetic.csv +0 -0
  31. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos/single_table/metadata.json +0 -0
  32. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos/single_table/student_placements_real.csv +0 -0
  33. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos/single_table/student_placements_synthetic.csv +0 -0
  34. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos/timeseries/metadata.json +0 -0
  35. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos/timeseries/timeseries_real.csv +0 -0
  36. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos/timeseries/timeseries_synthetic.csv +0 -0
  37. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/demos.py +0 -0
  38. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/errors.py +0 -0
  39. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/goal.py +0 -0
  40. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/README.md +0 -0
  41. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/__init__.py +0 -0
  42. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/base.py +0 -0
  43. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/detection/__init__.py +0 -0
  44. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/detection/base.py +0 -0
  45. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/detection/parent_child.py +0 -0
  46. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/multi_single_table.py +0 -0
  47. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/__init__.py +0 -0
  48. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/cardinality_shape_similarity.py +0 -0
  49. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/cardinality_statistic_similarity.py +0 -0
  50. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraint_adherence.py +0 -0
  51. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/__init__.py +0 -0
  52. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/_utils.py +0 -0
  53. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/base.py +0 -0
  54. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/carry_over_columns.py +0 -0
  55. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/chained_inequality.py +0 -0
  56. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/column_formula.py +0 -0
  57. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/denormalized_table.py +0 -0
  58. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/error.py +0 -0
  59. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/fixed_combinations.py +0 -0
  60. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/fixed_increments.py +0 -0
  61. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/fixed_null_combinations.py +0 -0
  62. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/foreign_to_foreign_key.py +0 -0
  63. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/foreign_to_primary_key_subset.py +0 -0
  64. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/inequality.py +0 -0
  65. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/mixed_scales.py +0 -0
  66. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/one_hot_encoding.py +0 -0
  67. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/polymorphic_relationship.py +0 -0
  68. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/primary_to_primary_key_subset.py +0 -0
  69. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/range.py +0 -0
  70. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/reference_table.py +0 -0
  71. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/referential_hierarchy.py +0 -0
  72. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/utils/__init__.py +0 -0
  73. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/multi_table/statistical/constraints/utils/numerical_formatter.py +0 -0
  74. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/__init__.py +0 -0
  75. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/__init__.py +0 -0
  76. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/_properties/__init__.py +0 -0
  77. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/_properties/base.py +0 -0
  78. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/_properties/boundary.py +0 -0
  79. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/_properties/cardinality.py +0 -0
  80. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/_properties/column_pair_trends.py +0 -0
  81. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/_properties/column_shapes.py +0 -0
  82. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/_properties/coverage.py +0 -0
  83. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/_properties/data_validity.py +0 -0
  84. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/_properties/inter_table_trends.py +0 -0
  85. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/_properties/relationship_validity.py +0 -0
  86. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/_properties/structure.py +0 -0
  87. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/_properties/synthesis.py +0 -0
  88. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/diagnostic_report.py +0 -0
  89. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/multi_table/quality_report.py +0 -0
  90. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/quality_report.py +0 -0
  91. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/single_table/__init__.py +0 -0
  92. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/single_table/_properties/__init__.py +0 -0
  93. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/single_table/_properties/base.py +0 -0
  94. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/single_table/_properties/boundary.py +0 -0
  95. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/single_table/_properties/column_pair_trends.py +0 -0
  96. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/single_table/_properties/column_shapes.py +0 -0
  97. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/single_table/_properties/coverage.py +0 -0
  98. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/single_table/_properties/data_validity.py +0 -0
  99. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/single_table/_properties/structure.py +0 -0
  100. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/single_table/_properties/synthesis.py +0 -0
  101. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/single_table/diagnostic_report.py +0 -0
  102. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/single_table/plot_utils.py +0 -0
  103. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/single_table/quality_report.py +0 -0
  104. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/reports/utils.py +0 -0
  105. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/README.md +0 -0
  106. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/__init__.py +0 -0
  107. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/base.py +0 -0
  108. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/__init__.py +0 -0
  109. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/boundary_adherence.py +0 -0
  110. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/category_adherence.py +0 -0
  111. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/category_coverage.py +0 -0
  112. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/cstest.py +0 -0
  113. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/datetime_format_adherence.py +0 -0
  114. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/key_uniqueness.py +0 -0
  115. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/kscomplement.py +0 -0
  116. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/missing_value_similarity.py +0 -0
  117. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/range_coverage.py +0 -0
  118. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/regex_format_adherence.py +0 -0
  119. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/sequence_length_similarity.py +0 -0
  120. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/statistic_similarity.py +0 -0
  121. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_column/statistical/tv_complement.py +0 -0
  122. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/README.md +0 -0
  123. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/__init__.py +0 -0
  124. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/base.py +0 -0
  125. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/bayesian_network.py +0 -0
  126. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/data_augmentation/__init__.py +0 -0
  127. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/data_augmentation/base.py +0 -0
  128. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/data_augmentation/binary_classifier_precision_efficacy.py +0 -0
  129. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/data_augmentation/binary_classifier_recall_efficacy.py +0 -0
  130. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/data_augmentation/utils.py +0 -0
  131. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/detection/__init__.py +0 -0
  132. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/detection/base.py +0 -0
  133. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/detection/sklearn.py +0 -0
  134. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/efficacy/__init__.py +0 -0
  135. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/efficacy/base.py +0 -0
  136. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/efficacy/binary.py +0 -0
  137. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/efficacy/mlefficacy.py +0 -0
  138. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/efficacy/multiclass.py +0 -0
  139. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/efficacy/regression.py +0 -0
  140. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/equalized_odds.py +0 -0
  141. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/gaussian_mixture.py +0 -0
  142. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/multi_column_pairs.py +0 -0
  143. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/multi_single_column.py +0 -0
  144. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/new_row_synthesis.py +0 -0
  145. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/privacy/__init__.py +0 -0
  146. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/privacy/base.py +0 -0
  147. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/privacy/cap.py +0 -0
  148. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/privacy/categorical_sklearn.py +0 -0
  149. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/privacy/dcr_baseline_protection.py +0 -0
  150. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/privacy/dcr_overfitting_protection.py +0 -0
  151. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/privacy/dcr_utils.py +0 -0
  152. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/privacy/disclosure_protection.py +0 -0
  153. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/privacy/ensemble.py +0 -0
  154. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/privacy/loss.py +0 -0
  155. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/privacy/numerical_sklearn.py +0 -0
  156. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/privacy/radius_nearest_neighbor.py +0 -0
  157. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/privacy/util.py +0 -0
  158. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/table_structure.py +0 -0
  159. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/single_table/utils.py +0 -0
  160. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/timeseries/README.md +0 -0
  161. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/timeseries/__init__.py +0 -0
  162. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/timeseries/base.py +0 -0
  163. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/timeseries/detection.py +0 -0
  164. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/timeseries/efficacy/__init__.py +0 -0
  165. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/timeseries/efficacy/base.py +0 -0
  166. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/timeseries/efficacy/classification.py +0 -0
  167. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/timeseries/ml_scorers.py +0 -0
  168. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/utils.py +0 -0
  169. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/visualization.py +0 -0
  170. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics/warnings.py +0 -0
  171. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics.egg-info/SOURCES.txt +0 -0
  172. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics.egg-info/dependency_links.txt +0 -0
  173. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics.egg-info/entry_points.txt +0 -0
  174. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics.egg-info/requires.txt +0 -0
  175. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/sdmetrics.egg-info/top_level.txt +0 -0
  176. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/setup.cfg +0 -0
  177. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/tests/test_scripts.py +0 -0
  178. {sdmetrics-0.31.1.dev0 → sdmetrics-0.31.2.dev0}/tests/test_tasks.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sdmetrics
3
- Version: 0.31.1.dev0
3
+ Version: 0.31.2.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.31.1.dev0"
151
+ current_version = "0.31.2.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.31.1.dev0'
7
+ __version__ = '0.31.2.dev0'
8
8
 
9
9
  import sys
10
10
  import warnings as python_warnings
@@ -75,7 +75,19 @@ class BaseReport:
75
75
  )
76
76
  raise ValueError(error_message)
77
77
 
78
- def _validate(self, real_data, synthetic_data, metadata):
78
+ def _validate_constraints_input(self, constraints):
79
+ """Validate that the constraints are ``None`` or a list of dictionaries."""
80
+ if constraints is None:
81
+ return
82
+
83
+ is_list = isinstance(constraints, list)
84
+ if not is_list or not all(isinstance(constraint, dict) for constraint in constraints):
85
+ raise ValueError(
86
+ f"{self.__class__.__name__} expects 'constraints' parameter to be "
87
+ "a list of dictionaries, each one with the keys 'class_name' and 'parameters'."
88
+ )
89
+
90
+ def _validate(self, real_data, synthetic_data, metadata, constraints=None):
79
91
  """Validate the inputs.
80
92
 
81
93
  Args:
@@ -85,10 +97,13 @@ class BaseReport:
85
97
  The synthetic data.
86
98
  metadata (dict):
87
99
  The metadata of the table.
100
+ constraints (list[dict] or None):
101
+ The constraints to evaluate. Defaults to None.
88
102
  """
89
103
  self._validate_data_format(real_data, synthetic_data)
90
104
  _validate_metadata(metadata)
91
105
  self._validate_metadata_matches_data(real_data, synthetic_data, metadata)
106
+ self._validate_constraints_input(constraints)
92
107
 
93
108
  @staticmethod
94
109
  def convert_datetimes(real_data, synthetic_data, metadata):
@@ -130,12 +145,14 @@ class BaseReport:
130
145
  if verbose:
131
146
  sys.stdout.write(f'Overall Score (Average): {round(self._overall_score * 100, 2)}%\n\n')
132
147
 
133
- def _get_skipped_properties(self, metadata):
148
+ def _get_skipped_properties(self, metadata, constraints=None):
134
149
  """Return properties that should not be computed for the metadata.
135
150
 
136
151
  Args:
137
152
  metadata (dict):
138
153
  The metadata dict.
154
+ constraints (list[dict] or None):
155
+ The constraints given to the report. Defaults to None.
139
156
 
140
157
  Returns:
141
158
  set[str]:
@@ -143,7 +160,7 @@ class BaseReport:
143
160
  """
144
161
  return set()
145
162
 
146
- def generate(self, real_data, synthetic_data, metadata, verbose=True):
163
+ def generate(self, real_data, synthetic_data, metadata, constraints=None, verbose=True):
147
164
  """Generate report.
148
165
 
149
166
  This method generates the report by iterating through each property and calculating
@@ -156,13 +173,16 @@ class BaseReport:
156
173
  The synthetic data.
157
174
  metadata (dict):
158
175
  The metadata, which contains each column's data type as well as relationships.
176
+ constraints (list[dict] or None):
177
+ A list of constraints to evaluate their adherence, each represented as a
178
+ dictionary with a ``class_name`` and a ``parameters`` key. Defaults to None.
159
179
  verbose (bool):
160
180
  Whether or not to print report summary and progress.
161
181
  """
162
182
  real_data = deepcopy(real_data)
163
183
  synthetic_data = deepcopy(synthetic_data)
164
- self._validate(real_data, synthetic_data, metadata)
165
- self._skipped_properties = self._get_skipped_properties(metadata)
184
+ self._validate(real_data, synthetic_data, metadata, constraints)
185
+ self._skipped_properties = self._get_skipped_properties(metadata, constraints)
166
186
  self._original_datetime_columns = self.convert_datetimes(
167
187
  real_data, synthetic_data, metadata
168
188
  )
@@ -192,15 +212,22 @@ class BaseReport:
192
212
  property_instance.is_computed = False
193
213
  property_instance.details = pd.DataFrame()
194
214
  if verbose:
195
- sys.stdout.write(
196
- f'{property_description}: N/A\n{self._skipped_property_message}\n\n'
215
+ skipped_message = getattr(
216
+ property_instance, '_skipped_message', self._skipped_property_message
197
217
  )
218
+ sys.stdout.write(f'{property_description}: N/A\n{skipped_message}\n\n')
198
219
  sys.stdout.flush()
199
220
 
200
221
  continue
201
222
 
223
+ property_arguments = {}
224
+ if property_name == 'Constraint Validity':
225
+ property_arguments['constraints'] = constraints
226
+
202
227
  if verbose:
203
- num_iterations = int(property_instance._get_num_iterations(metadata))
228
+ num_iterations = int(
229
+ property_instance._get_num_iterations(metadata, **property_arguments)
230
+ )
204
231
  progress_bar = tqdm.tqdm(
205
232
  total=num_iterations, file=sys.stdout, bar_format='{desc}|{bar}{r_bar}|'
206
233
  )
@@ -220,7 +247,7 @@ class BaseReport:
220
247
 
221
248
  self._properties[property_name].num_rows_subsample = self.num_rows_subsample
222
249
  score = self._properties[property_name].get_score(
223
- real_data, synthetic_data, metadata, progress_bar=progress_bar
250
+ real_data, synthetic_data, metadata, progress_bar=progress_bar, **property_arguments
224
251
  )
225
252
  scores.append(score)
226
253
  if verbose:
@@ -16,21 +16,26 @@ class BaseUnifiedReport(BaseMultiTableReport):
16
16
  })
17
17
  _skipped_property_message = 'This property does not apply to single-table data.'
18
18
 
19
- def _get_skipped_properties(self, metadata):
19
+ def _get_skipped_properties(self, metadata, constraints=None):
20
20
  """Return properties unavailable to single-table data.
21
21
 
22
22
  Args:
23
23
  metadata (dict):
24
24
  The metadata dict.
25
+ constraints (list[dict] or None):
26
+ The constraints given to the report. Defaults to None.
25
27
 
26
28
  Returns:
27
29
  set[str]:
28
30
  Names of properties to skip.
29
31
  """
32
+ skipped_properties = super()._get_skipped_properties(metadata, constraints)
30
33
  if len(metadata.get('tables', {})) == 1:
31
- return self._SINGLE_TABLE_SKIPPED_PROPERTIES
34
+ skipped_properties.update(self._SINGLE_TABLE_SKIPPED_PROPERTIES)
35
+ if not constraints:
36
+ skipped_properties.add('Constraint Validity')
32
37
 
33
- return super()._get_skipped_properties(metadata)
38
+ return skipped_properties
34
39
 
35
40
  def _validate_data_format(self, real_data, synthetic_data):
36
41
  """Validate that the real and synthetic data have compatible formats.
@@ -75,7 +80,7 @@ class BaseUnifiedReport(BaseMultiTableReport):
75
80
  super()._validate_property_generated(property_name)
76
81
  self._check_property_single_table(property_name)
77
82
 
78
- def _validate(self, real_data, synthetic_data, metadata):
83
+ def _validate(self, real_data, synthetic_data, metadata, constraints=None):
79
84
  """Validate the inputs.
80
85
 
81
86
  Args:
@@ -85,6 +90,8 @@ class BaseUnifiedReport(BaseMultiTableReport):
85
90
  The synthetic data.
86
91
  metadata (dict):
87
92
  The metadata.
93
+ constraints (list[dict] or None):
94
+ The constraints to evaluate. Defaults to None.
88
95
  """
89
96
  _validate_unified_metadata(metadata)
90
97
  self.table_names = list(metadata.get('tables', []))
@@ -94,6 +101,7 @@ class BaseUnifiedReport(BaseMultiTableReport):
94
101
  synthetic_data,
95
102
  metadata,
96
103
  )
104
+ self._validate_constraints_input(constraints)
97
105
 
98
106
  def get_properties(self):
99
107
  """Return the property score.
@@ -1,7 +1,12 @@
1
1
  """Unified diagnostic report."""
2
2
 
3
3
  from sdmetrics.reports.base_unified_report import BaseUnifiedReport
4
- from sdmetrics.reports.multi_table._properties import DataValidity, RelationshipValidity, Structure
4
+ from sdmetrics.reports.multi_table._properties import (
5
+ ConstraintValidity,
6
+ DataValidity,
7
+ RelationshipValidity,
8
+ Structure,
9
+ )
5
10
 
6
11
 
7
12
  class DiagnosticReport(BaseUnifiedReport):
@@ -17,6 +22,7 @@ class DiagnosticReport(BaseUnifiedReport):
17
22
  'Data Validity': DataValidity(),
18
23
  'Data Structure': Structure(),
19
24
  'Relationship Validity': RelationshipValidity(),
25
+ 'Constraint Validity': ConstraintValidity(),
20
26
  }
21
27
 
22
28
  def _validate_metadata_matches_data(self, real_data, synthetic_data, metadata):
@@ -17,6 +17,7 @@ class ConstraintValidity(BaseMultiTableProperty):
17
17
  """
18
18
 
19
19
  _num_iteration_case = 'constraint'
20
+ _skipped_message = 'No constraints were provided.'
20
21
 
21
22
  def _get_num_iterations(self, metadata, constraints=None):
22
23
  """Get the number of iterations for the property, which is one per constraint."""
@@ -84,7 +84,7 @@ class BaseMultiTableReport(BaseReport):
84
84
 
85
85
  self._validate_relationships(real_data, synthetic_data, metadata)
86
86
 
87
- def generate(self, real_data, synthetic_data, metadata, verbose=True):
87
+ def generate(self, real_data, synthetic_data, metadata, constraints=None, verbose=True):
88
88
  """Generate report.
89
89
 
90
90
  This method generates the report by iterating through each property and calculating
@@ -97,10 +97,12 @@ class BaseMultiTableReport(BaseReport):
97
97
  The synthetic data.
98
98
  metadata (dict):
99
99
  The metadata, which contains each column's data type as well as relationships.
100
+ constraints (list[dict] or None):
101
+ A list of constraints to evaluate their adherence. Defaults to None.
100
102
  verbose (bool):
101
103
  Whether or not to print report summary and progress.
102
104
  """
103
- results = super().generate(real_data, synthetic_data, metadata, verbose)
105
+ results = super().generate(real_data, synthetic_data, metadata, constraints, verbose)
104
106
  self.table_names = list(metadata.get('tables', {}).keys())
105
107
 
106
108
  return results
@@ -173,6 +175,9 @@ class BaseMultiTableReport(BaseReport):
173
175
  if property_name == 'Data Structure':
174
176
  return self._properties[property_name].get_visualization(table_name)
175
177
 
178
+ if property_name == 'Constraint Validity':
179
+ return self._properties[property_name].get_visualization()
180
+
176
181
  if table_name is None:
177
182
  raise ValueError('Please provide a table name to get a visualization for the property.')
178
183
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sdmetrics
3
- Version: 0.31.1.dev0
3
+ Version: 0.31.2.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
File without changes