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.
Files changed (153) hide show
  1. {sdmetrics-0.29.1.dev0/sdmetrics.egg-info → sdmetrics-0.30.1.dev0}/PKG-INFO +1 -1
  2. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/pyproject.toml +1 -1
  3. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/__init__.py +1 -1
  4. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/_utils_metadata.py +2 -2
  5. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/column_shapes.py +1 -1
  6. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/coverage.py +1 -1
  7. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/data_validity.py +1 -1
  8. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/column_pair_trends.py +1 -0
  9. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/column_shapes.py +2 -1
  10. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/coverage.py +2 -1
  11. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/data_validity.py +45 -10
  12. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/utils.py +3 -3
  13. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/regex_format_adherence.py +13 -5
  14. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/new_row_synthesis.py +1 -1
  15. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0/sdmetrics.egg-info}/PKG-INFO +1 -1
  16. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/LICENSE +0 -0
  17. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/README.md +0 -0
  18. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/base.py +0 -0
  19. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/__init__.py +0 -0
  20. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/base.py +0 -0
  21. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/__init__.py +0 -0
  22. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/cardinality_boundary_adherence.py +0 -0
  23. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/contingency_similarity.py +0 -0
  24. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/correlation_similarity.py +0 -0
  25. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/inter_row_msas.py +0 -0
  26. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/kl_divergence.py +0 -0
  27. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/referential_integrity.py +0 -0
  28. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/column_pairs/statistical/statistic_msas.py +0 -0
  29. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/metadata.json +0 -0
  30. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/sessions_real.csv +0 -0
  31. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/sessions_synthetic.csv +0 -0
  32. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/transactions_real.csv +0 -0
  33. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/transactions_synthetic.csv +0 -0
  34. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/users_real.csv +0 -0
  35. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/multi_table/users_synthetic.csv +0 -0
  36. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/single_table/metadata.json +0 -0
  37. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/single_table/student_placements_real.csv +0 -0
  38. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/single_table/student_placements_synthetic.csv +0 -0
  39. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/timeseries/metadata.json +0 -0
  40. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/timeseries/timeseries_real.csv +0 -0
  41. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos/timeseries/timeseries_synthetic.csv +0 -0
  42. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/demos.py +0 -0
  43. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/errors.py +0 -0
  44. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/goal.py +0 -0
  45. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/README.md +0 -0
  46. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/__init__.py +0 -0
  47. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/base.py +0 -0
  48. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/detection/__init__.py +0 -0
  49. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/detection/base.py +0 -0
  50. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/detection/parent_child.py +0 -0
  51. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/multi_single_table.py +0 -0
  52. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/statistical/__init__.py +0 -0
  53. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/statistical/cardinality_shape_similarity.py +0 -0
  54. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/multi_table/statistical/cardinality_statistic_similarity.py +0 -0
  55. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/__init__.py +0 -0
  56. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/base_report.py +0 -0
  57. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/base_unified_report.py +0 -0
  58. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/diagnostic_report.py +0 -0
  59. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/__init__.py +0 -0
  60. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/__init__.py +0 -0
  61. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/base.py +0 -0
  62. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/boundary.py +0 -0
  63. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/cardinality.py +0 -0
  64. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/column_pair_trends.py +0 -0
  65. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/inter_table_trends.py +0 -0
  66. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/relationship_validity.py +0 -0
  67. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/structure.py +0 -0
  68. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/_properties/synthesis.py +0 -0
  69. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/base_multi_table_report.py +0 -0
  70. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/diagnostic_report.py +0 -0
  71. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/multi_table/quality_report.py +0 -0
  72. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/quality_report.py +0 -0
  73. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/__init__.py +0 -0
  74. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/__init__.py +0 -0
  75. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/base.py +0 -0
  76. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/boundary.py +0 -0
  77. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/structure.py +0 -0
  78. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/_properties/synthesis.py +0 -0
  79. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/diagnostic_report.py +0 -0
  80. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/plot_utils.py +0 -0
  81. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/reports/single_table/quality_report.py +0 -0
  82. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/README.md +0 -0
  83. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/__init__.py +0 -0
  84. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/base.py +0 -0
  85. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/__init__.py +0 -0
  86. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/boundary_adherence.py +0 -0
  87. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/category_adherence.py +0 -0
  88. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/category_coverage.py +0 -0
  89. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/cstest.py +0 -0
  90. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/datetime_format_adherence.py +0 -0
  91. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/key_uniqueness.py +0 -0
  92. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/kscomplement.py +0 -0
  93. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/missing_value_similarity.py +0 -0
  94. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/range_coverage.py +0 -0
  95. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/sequence_length_similarity.py +0 -0
  96. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/statistic_similarity.py +0 -0
  97. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_column/statistical/tv_complement.py +0 -0
  98. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/README.md +0 -0
  99. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/__init__.py +0 -0
  100. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/base.py +0 -0
  101. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/bayesian_network.py +0 -0
  102. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/data_augmentation/__init__.py +0 -0
  103. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/data_augmentation/base.py +0 -0
  104. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/data_augmentation/binary_classifier_precision_efficacy.py +0 -0
  105. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/data_augmentation/binary_classifier_recall_efficacy.py +0 -0
  106. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/data_augmentation/utils.py +0 -0
  107. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/detection/__init__.py +0 -0
  108. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/detection/base.py +0 -0
  109. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/detection/sklearn.py +0 -0
  110. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/__init__.py +0 -0
  111. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/base.py +0 -0
  112. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/binary.py +0 -0
  113. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/mlefficacy.py +0 -0
  114. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/multiclass.py +0 -0
  115. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/efficacy/regression.py +0 -0
  116. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/equalized_odds.py +0 -0
  117. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/gaussian_mixture.py +0 -0
  118. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/multi_column_pairs.py +0 -0
  119. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/multi_single_column.py +0 -0
  120. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/__init__.py +0 -0
  121. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/base.py +0 -0
  122. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/cap.py +0 -0
  123. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/categorical_sklearn.py +0 -0
  124. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/dcr_baseline_protection.py +0 -0
  125. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/dcr_overfitting_protection.py +0 -0
  126. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/dcr_utils.py +0 -0
  127. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/disclosure_protection.py +0 -0
  128. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/ensemble.py +0 -0
  129. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/loss.py +0 -0
  130. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/numerical_sklearn.py +0 -0
  131. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/radius_nearest_neighbor.py +0 -0
  132. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/privacy/util.py +0 -0
  133. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/table_structure.py +0 -0
  134. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/single_table/utils.py +0 -0
  135. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/README.md +0 -0
  136. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/__init__.py +0 -0
  137. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/base.py +0 -0
  138. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/detection.py +0 -0
  139. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/efficacy/__init__.py +0 -0
  140. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/efficacy/base.py +0 -0
  141. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/efficacy/classification.py +0 -0
  142. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/timeseries/ml_scorers.py +0 -0
  143. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/utils.py +0 -0
  144. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/visualization.py +0 -0
  145. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics/warnings.py +0 -0
  146. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics.egg-info/SOURCES.txt +0 -0
  147. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics.egg-info/dependency_links.txt +0 -0
  148. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics.egg-info/entry_points.txt +0 -0
  149. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics.egg-info/requires.txt +0 -0
  150. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/sdmetrics.egg-info/top_level.txt +0 -0
  151. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/setup.cfg +0 -0
  152. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.1.dev0}/tests/test_scripts.py +0 -0
  153. {sdmetrics-0.29.1.dev0 → sdmetrics-0.30.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.29.1.dev0
3
+ Version: 0.30.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.29.1.dev0"
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 @@
4
4
 
5
5
  __author__ = 'MIT Data To AI Lab'
6
6
  __email__ = 'dailabmit@gmail.com'
7
- __version__ = '0.29.1.dev0'
7
+ __version__ = '0.30.1.dev0'
8
8
 
9
9
  import sys
10
10
  import warnings as python_warnings
@@ -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
 
@@ -25,6 +25,7 @@ class ColumnPairTrends(BaseSingleTableProperty):
25
25
  'numerical': 'continuous',
26
26
  'datetime': 'continuous',
27
27
  'categorical': 'discrete',
28
+ 'ordinal': 'discrete',
28
29
  'boolean': 'discrete',
29
30
  }
30
31
 
@@ -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
- if (sdtype == 'id' or sdtype not in self._sdtype_to_metric) and not is_unique:
114
- continue
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 == 'categorical':
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 re.compile(regex_format).groups:
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
- valid_groups = set(map(tuple, compare.dropna().to_numpy()))
68
- regex_column = groups.apply(tuple, axis=1).isin(valid_groups)
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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sdmetrics
3
- Version: 0.29.1.dev0
3
+ Version: 0.30.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
File without changes