tabalyst 0.7.1__tar.gz → 0.7.3__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 (543) hide show
  1. {tabalyst-0.7.1/src/tabalyst.egg-info → tabalyst-0.7.3}/PKG-INFO +13 -2
  2. {tabalyst-0.7.1 → tabalyst-0.7.3}/README.md +12 -1
  3. {tabalyst-0.7.1 → tabalyst-0.7.3}/pyproject.toml +3 -1
  4. tabalyst-0.7.3/src/tabalyst/cli/generate.py +190 -0
  5. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/cli/report.py +13 -0
  6. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/config.py +22 -0
  7. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/analysis.py +2 -2
  8. tabalyst-0.7.3/src/tabalyst/dedup/calculation.py +14 -0
  9. tabalyst-0.7.3/src/tabalyst/dedup/count_only.py +321 -0
  10. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_anomalies.py +8 -1
  11. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_computer.py +39 -17
  12. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_computer_output.py +71 -23
  13. tabalyst-0.7.3/src/tabalyst/generate_computer_parallel.py +184 -0
  14. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_selection.py +170 -53
  15. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_service.py +228 -70
  16. tabalyst-0.7.3/src/tabalyst/identifier_uniqueness/__init__.py +33 -0
  17. tabalyst-0.7.3/src/tabalyst/identifier_uniqueness/facts.py +462 -0
  18. tabalyst-0.7.3/src/tabalyst/identifier_uniqueness/models.py +278 -0
  19. tabalyst-0.7.3/src/tabalyst/identifier_uniqueness/near_unique.py +59 -0
  20. tabalyst-0.7.3/src/tabalyst/identifier_uniqueness/proof.py +130 -0
  21. tabalyst-0.7.3/src/tabalyst/identifier_uniqueness/rule.py +396 -0
  22. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/models.py +2 -2
  23. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_chain.py +5 -0
  24. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_classification.py +4 -4
  25. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_column_page.py +12 -0
  26. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_deep.py +32 -0
  27. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_labels.py +99 -5
  28. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_profile.py +15 -3
  29. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_service.py +17 -0
  30. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_summary.py +25 -5
  31. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_table.py +7 -0
  32. tabalyst-0.7.3/src/tabalyst/report_uniqueness.py +350 -0
  33. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/reporting.py +2 -0
  34. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/classify/identifiers.py +3 -2
  35. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzer.py +30 -0
  36. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/__init__.py +6 -0
  37. tabalyst-0.7.3/src/tabalyst/scanner/planner/analyzers/analytical.py +91 -0
  38. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/common.py +4 -0
  39. tabalyst-0.7.3/src/tabalyst/scanner/planner/analyzers/copies.py +108 -0
  40. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/distinct.py +12 -2
  41. tabalyst-0.7.3/src/tabalyst/scanner/planner/analyzers/missing_copies.py +114 -0
  42. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/costmodel.py +29 -1
  43. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/facts.py +161 -48
  44. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/planner.py +50 -5
  45. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/reasons.py +13 -0
  46. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/secondpass.py +6 -3
  47. tabalyst-0.7.3/src/tabalyst/scanner/secondpass/analytical.py +90 -0
  48. tabalyst-0.7.3/src/tabalyst/scanner/secondpass/copies.py +115 -0
  49. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/executor.py +110 -13
  50. tabalyst-0.7.3/src/tabalyst/scanner/secondpass/missing_copies.py +140 -0
  51. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/models.py +86 -1
  52. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/routing.py +14 -0
  53. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/schemas/tabalyst.report.schema.json +957 -4
  54. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/schemas/tabalyst.scan.deep.schema.json +277 -2
  55. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/service.py +48 -5
  56. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/static/theme.css +10 -0
  57. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/summary_models.py +4 -0
  58. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/templates/column.html +14 -2
  59. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/templates/report.html +2 -2
  60. {tabalyst-0.7.1 → tabalyst-0.7.3/src/tabalyst.egg-info}/PKG-INFO +13 -2
  61. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst.egg-info/SOURCES.txt +17 -0
  62. tabalyst-0.7.3/tests/test_generate_computer_parallel.py +115 -0
  63. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_computer_service.py +263 -0
  64. tabalyst-0.7.1/src/tabalyst/cli/generate.py +0 -106
  65. {tabalyst-0.7.1 → tabalyst-0.7.3}/LICENSE +0 -0
  66. {tabalyst-0.7.1 → tabalyst-0.7.3}/MANIFEST.in +0 -0
  67. {tabalyst-0.7.1 → tabalyst-0.7.3}/examples/README.md +0 -0
  68. {tabalyst-0.7.1 → tabalyst-0.7.3}/examples/config.json +0 -0
  69. {tabalyst-0.7.1 → tabalyst-0.7.3}/examples/datasets/basic.csv +0 -0
  70. {tabalyst-0.7.1 → tabalyst-0.7.3}/examples/datasets/insurance-customers.csv +0 -0
  71. {tabalyst-0.7.1 → tabalyst-0.7.3}/examples/generate/README.md +0 -0
  72. {tabalyst-0.7.1 → tabalyst-0.7.3}/examples/generate/cohorts-anomalies/catalog.yaml +0 -0
  73. {tabalyst-0.7.1 → tabalyst-0.7.3}/examples/generate/cohorts-anomalies/dataset.yaml +0 -0
  74. {tabalyst-0.7.1 → tabalyst-0.7.3}/examples/generate/cohorts-anomalies/schemas/accounts.yaml +0 -0
  75. {tabalyst-0.7.1 → tabalyst-0.7.3}/examples/generate/cohorts-anomalies/schemas/contacts.yaml +0 -0
  76. {tabalyst-0.7.1 → tabalyst-0.7.3}/examples/generate/common-references/catalog.yaml +0 -0
  77. {tabalyst-0.7.1 → tabalyst-0.7.3}/examples/generate/common-references/dataset.yaml +0 -0
  78. {tabalyst-0.7.1 → tabalyst-0.7.3}/examples/generate/common-references/schemas/contacts.yaml +0 -0
  79. {tabalyst-0.7.1 → tabalyst-0.7.3}/examples/generate/generate_examples.py +0 -0
  80. {tabalyst-0.7.1 → tabalyst-0.7.3}/setup.cfg +0 -0
  81. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/__init__.py +0 -0
  82. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/__main__.py +0 -0
  83. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/_version.py +0 -0
  84. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/batch.py +0 -0
  85. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/cache_service.py +0 -0
  86. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/cli/__init__.py +0 -0
  87. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/cli/app.py +0 -0
  88. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/cli/cache.py +0 -0
  89. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/cli/confirm.py +0 -0
  90. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/cli/dedup.py +0 -0
  91. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/cli/inspect.py +0 -0
  92. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/cli/sample.py +0 -0
  93. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/cli/scan.py +0 -0
  94. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/cli/terminal.py +0 -0
  95. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/csv_records.py +0 -0
  96. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/__init__.py +0 -0
  97. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/batch_report.py +0 -0
  98. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/cache.py +0 -0
  99. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/discovery.py +0 -0
  100. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/diskstore.py +0 -0
  101. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/failures.py +0 -0
  102. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/groups.py +0 -0
  103. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/identity.py +0 -0
  104. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/pipeline.py +0 -0
  105. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/publish.py +0 -0
  106. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/report.py +0 -0
  107. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/settings.py +0 -0
  108. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/store.py +0 -0
  109. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/tiered.py +0 -0
  110. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup/writer.py +0 -0
  111. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/dedup_service.py +0 -0
  112. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/deep_service.py +0 -0
  113. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/deep_store.py +0 -0
  114. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/errors.py +0 -0
  115. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/execution_log.py +0 -0
  116. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_columns_package.py +0 -0
  117. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_csv.py +0 -0
  118. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_definition.py +0 -0
  119. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/SOURCES.md +0 -0
  120. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/catalog.yaml +0 -0
  121. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/brand.csv +0 -0
  122. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/color.csv +0 -0
  123. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/computer_type.csv +0 -0
  124. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/computer_type_form_factor.csv +0 -0
  125. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/computer_type_product_segment.csv +0 -0
  126. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/cpu.csv +0 -0
  127. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/cpu_memory_weight.csv +0 -0
  128. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/cpu_operating_system.csv +0 -0
  129. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/display.csv +0 -0
  130. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/extended_specs.csv +0 -0
  131. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/form_factor.csv +0 -0
  132. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/generation_color.csv +0 -0
  133. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/generation_cpu.csv +0 -0
  134. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/generation_display.csv +0 -0
  135. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/generation_gpu.csv +0 -0
  136. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/generation_memory.csv +0 -0
  137. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/generation_operating_system.csv +0 -0
  138. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/generation_profile.csv +0 -0
  139. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/generation_profile_computer_type.csv +0 -0
  140. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/generation_profile_segment.csv +0 -0
  141. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/generation_storage.csv +0 -0
  142. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/gpu.csv +0 -0
  143. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/gpu_display.csv +0 -0
  144. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/gpu_memory_weight.csv +0 -0
  145. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/gpu_storage_weight.csv +0 -0
  146. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/memory.csv +0 -0
  147. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/model_form_factor.csv +0 -0
  148. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/model_generation.csv +0 -0
  149. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/operating_system.csv +0 -0
  150. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/product_category.csv +0 -0
  151. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/product_family.csv +0 -0
  152. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/product_family_computer_type.csv +0 -0
  153. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/product_family_product_segment.csv +0 -0
  154. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/product_model.csv +0 -0
  155. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/product_segment.csv +0 -0
  156. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/product_segment_brand.csv +0 -0
  157. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/product_segment_display_weight.csv +0 -0
  158. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/product_segment_memory_weight.csv +0 -0
  159. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/product_segment_storage_weight.csv +0 -0
  160. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/product_subcategory.csv +0 -0
  161. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/profile_exclusions.csv +0 -0
  162. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/promotion_status.csv +0 -0
  163. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/promotion_type.csv +0 -0
  164. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/seller.csv +0 -0
  165. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/seller_type.csv +0 -0
  166. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/shipping_availability.csv +0 -0
  167. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/standard_specs.csv +0 -0
  168. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/storage.csv +0 -0
  169. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/data/warehouse.csv +0 -0
  170. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/dataset.yaml +0 -0
  171. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/computer_type.yaml +0 -0
  172. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/computer_type_form_factor.yaml +0 -0
  173. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/computer_type_product_segment.yaml +0 -0
  174. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/computers.yaml +0 -0
  175. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/cpu.yaml +0 -0
  176. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/cpu_memory_weight.yaml +0 -0
  177. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/cpu_operating_system.yaml +0 -0
  178. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/display.yaml +0 -0
  179. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/extended_specs.yaml +0 -0
  180. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/generation_color.yaml +0 -0
  181. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/generation_cpu.yaml +0 -0
  182. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/generation_display.yaml +0 -0
  183. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/generation_gpu.yaml +0 -0
  184. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/generation_memory.yaml +0 -0
  185. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/generation_operating_system.yaml +0 -0
  186. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/generation_profile.yaml +0 -0
  187. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/generation_profile_computer_type.yaml +0 -0
  188. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/generation_profile_segment.yaml +0 -0
  189. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/generation_storage.yaml +0 -0
  190. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/gpu.yaml +0 -0
  191. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/gpu_display.yaml +0 -0
  192. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/gpu_memory_weight.yaml +0 -0
  193. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/gpu_storage_weight.yaml +0 -0
  194. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/localized.yaml +0 -0
  195. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/memory.yaml +0 -0
  196. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/model_form_factor.yaml +0 -0
  197. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/model_generation.yaml +0 -0
  198. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/operating_system.yaml +0 -0
  199. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/product_family.yaml +0 -0
  200. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/product_family_computer_type.yaml +0 -0
  201. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/product_family_product_segment.yaml +0 -0
  202. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/product_model.yaml +0 -0
  203. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/product_segment.yaml +0 -0
  204. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/product_segment_brand.yaml +0 -0
  205. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/product_segment_display_weight.yaml +0 -0
  206. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/product_segment_memory_weight.yaml +0 -0
  207. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/product_segment_storage_weight.yaml +0 -0
  208. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/product_subcategory.yaml +0 -0
  209. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/profile_exclusions.yaml +0 -0
  210. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/seller.yaml +0 -0
  211. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/standard_specs.yaml +0 -0
  212. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/storage.yaml +0 -0
  213. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/computer/schemas/warehouse.yaml +0 -0
  214. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/crm/catalog.yaml +0 -0
  215. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/crm/dataset.yaml +0 -0
  216. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/crm/schemas/accounts.yaml +0 -0
  217. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/crm/schemas/contacts.yaml +0 -0
  218. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/SOURCES.md +0 -0
  219. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/catalog.yaml +0 -0
  220. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/data/agencies.csv +0 -0
  221. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/data/branch_contract_weights.csv +0 -0
  222. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/data/claim_statuses.csv +0 -0
  223. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/data/contract_statuses.csv +0 -0
  224. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/data/contract_types.csv +0 -0
  225. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/data/payment_frequencies.csv +0 -0
  226. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/data/payment_methods.csv +0 -0
  227. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/dataset.yaml +0 -0
  228. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/schemas/agencies.yaml +0 -0
  229. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/schemas/branch_contract_weights.yaml +0 -0
  230. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/schemas/claim_statuses.yaml +0 -0
  231. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/schemas/contract_statuses.yaml +0 -0
  232. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/schemas/contract_types.yaml +0 -0
  233. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/schemas/customers.yaml +0 -0
  234. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/schemas/payment_frequencies.yaml +0 -0
  235. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_examples/insurance/schemas/payment_methods.yaml +0 -0
  236. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_insurance.py +0 -0
  237. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_package.py +0 -0
  238. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_references.py +0 -0
  239. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/SOURCES.md +0 -0
  240. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/addresses/street_directions_ca.csv +0 -0
  241. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/addresses/street_names_ca.csv +0 -0
  242. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/addresses/street_types_ca.csv +0 -0
  243. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/addresses/unit_types_ca.csv +0 -0
  244. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/contact/email_patterns.csv +0 -0
  245. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/contact/email_providers_ca.csv +0 -0
  246. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/contact/phone_area_codes_ca.csv +0 -0
  247. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/geography/cities_ca.csv +0 -0
  248. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/geography/postal_prefixes_ca.csv +0 -0
  249. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/geography/provinces_ca.csv +0 -0
  250. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/people/family_names_ca.csv +0 -0
  251. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/people/first_names_en_ca.csv +0 -0
  252. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_resources/people/first_names_fr_qc.csv +0 -0
  253. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/generate_values.py +0 -0
  254. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspect_service.py +0 -0
  255. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspector/__init__.py +0 -0
  256. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspector/choices.py +0 -0
  257. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspector/excel_inspect/__init__.py +0 -0
  258. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspector/excel_inspect/build.py +0 -0
  259. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspector/excel_inspect/detect.py +0 -0
  260. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspector/excel_inspect/parameters.py +0 -0
  261. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspector/json_inspect/__init__.py +0 -0
  262. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspector/json_inspect/build.py +0 -0
  263. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspector/json_inspect/detect.py +0 -0
  264. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspector/json_inspect/parameters.py +0 -0
  265. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspector/models.py +0 -0
  266. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspector/persistence.py +0 -0
  267. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/inspector/resolution.py +0 -0
  268. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/json_text.py +0 -0
  269. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/option_notices.py +0 -0
  270. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/plan_service.py +0 -0
  271. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/progress.py +0 -0
  272. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/project_open_service.py +0 -0
  273. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/project_scan_service.py +0 -0
  274. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/__init__.py +0 -0
  275. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_bounded_values.py +0 -0
  276. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_cache.py +0 -0
  277. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_codec.py +0 -0
  278. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_generation.py +0 -0
  279. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_locks.py +0 -0
  280. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_publication.py +0 -0
  281. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_queries.py +0 -0
  282. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_query_budget.py +0 -0
  283. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_recovery.py +0 -0
  284. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_retention.py +0 -0
  285. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_schema.py +0 -0
  286. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_session.py +0 -0
  287. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_staging.py +0 -0
  288. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_sync.py +0 -0
  289. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/_validation.py +0 -0
  290. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/catalog.py +0 -0
  291. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/freshness.py +0 -0
  292. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/identity.py +0 -0
  293. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/index.py +0 -0
  294. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/location.py +0 -0
  295. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/models.py +0 -0
  296. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/projects/store.py +0 -0
  297. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_config.py +0 -0
  298. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_details.py +0 -0
  299. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_finding_details.py +0 -0
  300. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_findings.py +0 -0
  301. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_insights.py +0 -0
  302. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_measures.py +0 -0
  303. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_overview.py +0 -0
  304. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_plan.py +0 -0
  305. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_preview.py +0 -0
  306. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_relations.py +0 -0
  307. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_schema.py +0 -0
  308. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_sections.py +0 -0
  309. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_signals.py +0 -0
  310. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/report_views.py +0 -0
  311. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/result_model.py +0 -0
  312. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/sample_page.py +0 -0
  313. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/sampling.py +0 -0
  314. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/sampling_service.py +0 -0
  315. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scan_document.py +0 -0
  316. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scan_page.py +0 -0
  317. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scan_reuse.py +0 -0
  318. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scan_service.py +0 -0
  319. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/__init__.py +0 -0
  320. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/api.py +0 -0
  321. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/bottomk.py +0 -0
  322. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/cases.py +0 -0
  323. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/charactermap.py +0 -0
  324. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/characters.py +0 -0
  325. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/classify/__init__.py +0 -0
  326. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/classify/candidates.py +0 -0
  327. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/classify/catalog.py +0 -0
  328. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/classify/models.py +0 -0
  329. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/classify/names.py +0 -0
  330. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/classify/rules.py +0 -0
  331. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/config.py +0 -0
  332. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/convention_rule.py +0 -0
  333. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/correlation_ratio.py +0 -0
  334. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/crosstab.py +0 -0
  335. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/__init__.py +0 -0
  336. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/amount.py +0 -0
  337. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/base.py +0 -0
  338. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/boolean.py +0 -0
  339. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/currency.py +0 -0
  340. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/email.py +0 -0
  341. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/enumeration.py +0 -0
  342. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/ip.py +0 -0
  343. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/keys.py +0 -0
  344. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/names.py +0 -0
  345. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/number.py +0 -0
  346. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/pattern.py +0 -0
  347. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/percentage.py +0 -0
  348. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/phone.py +0 -0
  349. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/postal.py +0 -0
  350. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/quantity.py +0 -0
  351. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/registry.py +0 -0
  352. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/shape.py +0 -0
  353. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/temporal.py +0 -0
  354. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/url.py +0 -0
  355. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/detectors/uuid.py +0 -0
  356. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/diagnostics.py +0 -0
  357. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/engine.py +0 -0
  358. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/exposure.py +0 -0
  359. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/features.py +0 -0
  360. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/field.py +0 -0
  361. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/identity.py +0 -0
  362. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/lengthsample.py +0 -0
  363. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/longtext.py +0 -0
  364. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/measures.py +0 -0
  365. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/memory.py +0 -0
  366. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/models.py +0 -0
  367. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/normalization.py +0 -0
  368. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/observations.py +0 -0
  369. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/paths.py +0 -0
  370. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/pattern_eligibility.py +0 -0
  371. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/patternfacets.py +0 -0
  372. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/patterninfer.py +0 -0
  373. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/patterntree.py +0 -0
  374. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/pearson.py +0 -0
  375. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/__init__.py +0 -0
  376. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/characters.py +0 -0
  377. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/crosstab.py +0 -0
  378. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/date_order.py +0 -0
  379. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/drift.py +0 -0
  380. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/duplicates.py +0 -0
  381. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/forms.py +0 -0
  382. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/frequencies.py +0 -0
  383. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/histogram.py +0 -0
  384. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/lengths.py +0 -0
  385. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/matrix.py +0 -0
  386. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/measures.py +0 -0
  387. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/parts.py +0 -0
  388. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/patterns.py +0 -0
  389. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/pearson.py +0 -0
  390. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/residuals.py +0 -0
  391. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/shape.py +0 -0
  392. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/stats.py +0 -0
  393. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/structure.py +0 -0
  394. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/temporal.py +0 -0
  395. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/analyzers/texts.py +0 -0
  396. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/categorystats.py +0 -0
  397. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/crosstabs.py +0 -0
  398. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/identifiers.py +0 -0
  399. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/models.py +0 -0
  400. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/orders.py +0 -0
  401. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/registry.py +0 -0
  402. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/relations.py +0 -0
  403. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/render.py +0 -0
  404. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/samplerows.py +0 -0
  405. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/stratification.py +0 -0
  406. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/planner/stratmodels.py +0 -0
  407. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/process.py +0 -0
  408. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/quality.py +0 -0
  409. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/rankcorr.py +0 -0
  410. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/readers/__init__.py +0 -0
  411. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/readers/base.py +0 -0
  412. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/readers/csv_reader.py +0 -0
  413. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/readers/excel_common.py +0 -0
  414. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/readers/excel_reader.py +0 -0
  415. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/readers/excel_table.py +0 -0
  416. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/readers/factory.py +0 -0
  417. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/readers/json_common.py +0 -0
  418. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/readers/json_reader.py +0 -0
  419. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/readers/jsonl_reader.py +0 -0
  420. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/records.py +0 -0
  421. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/rowsample.py +0 -0
  422. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/schema.py +0 -0
  423. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/__init__.py +0 -0
  424. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/accumulators.py +0 -0
  425. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/bins.py +0 -0
  426. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/boundaries.py +0 -0
  427. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/characters.py +0 -0
  428. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/crosstab.py +0 -0
  429. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/document.py +0 -0
  430. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/drift.py +0 -0
  431. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/duplicates.py +0 -0
  432. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/exactset.py +0 -0
  433. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/forms.py +0 -0
  434. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/frequencies.py +0 -0
  435. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/matrix.py +0 -0
  436. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/measures.py +0 -0
  437. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/orders.py +0 -0
  438. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/parallel.py +0 -0
  439. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/parts.py +0 -0
  440. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/patternreader.py +0 -0
  441. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/patterns.py +0 -0
  442. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/pearson.py +0 -0
  443. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/periods.py +0 -0
  444. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/ranks.py +0 -0
  445. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/replay.py +0 -0
  446. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/residuals.py +0 -0
  447. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/schema.py +0 -0
  448. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/shape.py +0 -0
  449. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/stats.py +0 -0
  450. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/structure.py +0 -0
  451. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/secondpass/texts.py +0 -0
  452. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/__init__.py +0 -0
  453. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/bins.py +0 -0
  454. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/estimate.py +0 -0
  455. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/evaluate.py +0 -0
  456. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/execute.py +0 -0
  457. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/models.py +0 -0
  458. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/near.py +0 -0
  459. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/plan.py +0 -0
  460. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/reasons.py +0 -0
  461. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/render.py +0 -0
  462. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/result.py +0 -0
  463. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/select.py +0 -0
  464. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/targets.py +0 -0
  465. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/smart/weights.py +0 -0
  466. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/stratify.py +0 -0
  467. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/structure.py +0 -0
  468. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/technical.py +0 -0
  469. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/validation.py +0 -0
  470. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/values.py +0 -0
  471. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/valuesample.py +0 -0
  472. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/scanner/workers.py +0 -0
  473. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/schemas/tabalyst.dedup.batch.schema.json +0 -0
  474. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/schemas/tabalyst.dedup.schema.json +0 -0
  475. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/schemas/tabalyst.sample.schema.json +0 -0
  476. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/schemas/tabalyst.scan.schema.json +0 -0
  477. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/shared_scan_service.py +0 -0
  478. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/smart_service.py +0 -0
  479. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/source_guard.py +0 -0
  480. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/static/report.js +0 -0
  481. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/templates/characters.html +0 -0
  482. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/templates/insights.html +0 -0
  483. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/templates/patterns.html +0 -0
  484. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst/templates/sample.html +0 -0
  485. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst.egg-info/dependency_links.txt +0 -0
  486. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst.egg-info/entry_points.txt +0 -0
  487. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst.egg-info/requires.txt +0 -0
  488. {tabalyst-0.7.1 → tabalyst-0.7.3}/src/tabalyst.egg-info/top_level.txt +0 -0
  489. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_all_collections.py +0 -0
  490. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_cli.py +0 -0
  491. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_csv_records.py +0 -0
  492. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_examples_index.py +0 -0
  493. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_examples_layout.py +0 -0
  494. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate.py +0 -0
  495. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_anomalies.py +0 -0
  496. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_anomalies_regression.py +0 -0
  497. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_computer_catalog.py +0 -0
  498. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_computer_components.py +0 -0
  499. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_computer_derivations.py +0 -0
  500. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_computer_hierarchy.py +0 -0
  501. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_computer_output.py +0 -0
  502. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_crm.py +0 -0
  503. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_crm_package.py +0 -0
  504. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_insurance.py +0 -0
  505. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_insurance_stress.py +0 -0
  506. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_lot4.py +0 -0
  507. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_package.py +0 -0
  508. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_references.py +0 -0
  509. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_generate_selection.py +0 -0
  510. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_json_text.py +0 -0
  511. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_license_headers.py +0 -0
  512. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_make_datasets.py +0 -0
  513. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_option_notices.py +0 -0
  514. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_project_cache.py +0 -0
  515. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_project_database.py +0 -0
  516. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_project_generations.py +0 -0
  517. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_project_identity.py +0 -0
  518. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_project_index.py +0 -0
  519. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_project_location.py +0 -0
  520. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_project_open_service.py +0 -0
  521. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_project_queries.py +0 -0
  522. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_project_rescan.py +0 -0
  523. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_project_scan.py +0 -0
  524. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_project_scan_model.py +0 -0
  525. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_project_sessions.py +0 -0
  526. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_project_store.py +0 -0
  527. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_public_api.py +0 -0
  528. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_report_contrast.py +0 -0
  529. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_reporting.py +0 -0
  530. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_sampling.py +0 -0
  531. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_scan_command.py +0 -0
  532. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_scanner_amounts.py +0 -0
  533. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_scanner_batches.py +0 -0
  534. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_scanner_config.py +0 -0
  535. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_scanner_csv.py +0 -0
  536. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_scanner_email_url.py +0 -0
  537. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_scanner_exposure.py +0 -0
  538. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_scanner_paths.py +0 -0
  539. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_scanner_phone.py +0 -0
  540. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_scanner_postal.py +0 -0
  541. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_scanner_uuid_ip.py +0 -0
  542. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_shared_scan_cli.py +0 -0
  543. {tabalyst-0.7.1 → tabalyst-0.7.3}/tests/test_source_freshness.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tabalyst
3
- Version: 0.7.1
3
+ Version: 0.7.3
4
4
  Summary: Open-source toolkit for understanding and working with unfamiliar data.
5
5
  Author: Gregory Borelli
6
6
  License-Expression: MPL-2.0
@@ -146,6 +146,12 @@ Details: [Tabalyst Report](https://docs.tabalyst.com/report/),
146
146
  - Dataset dimensions, missing cells, duplicates, and quality observations.
147
147
  - A family and a type for each column (identifier, text, date, boolean...),
148
148
  with the evidence behind them, and the technical type with its error rates.
149
+ - For an identifier column, whether the ID is unique across all rows and after
150
+ row deduplication: the repetitions that exact copies of whole rows explain
151
+ are told apart from those between distinct records, with the evidence (the
152
+ Scan, the second pass or a [Dedup](https://docs.tabalyst.com/dedup/) report),
153
+ the case of missing IDs, and a non-binding near-unique reading of the few
154
+ repetitions that remain.
149
155
  - A summary table with one row per column: its type, a sentence about its
150
156
  values, the missing share, its Errors and Issues with a preview of each, and
151
157
  its details; above it, the Column quality and Signals cards.
@@ -274,10 +280,15 @@ tabalyst generate --example crm -o crm-contacts.csv
274
280
  tabalyst generate --example insurance --rows 3000 -d insurance-output/
275
281
  tabalyst generate --example computer --rows 10000 -d computer-output/
276
282
  tabalyst generate --example insurance --rows 3000 --anomaly-profile dirty_realistic -d insurance-dirty/
283
+ tabalyst generate --example computer --rows 30000 -o pcs.csv --anomaly-profile dirty_realistic
277
284
  ```
278
285
 
279
286
  An anomaly profile writes an altered CSV, a cell change log and a summary
280
- beside the untouched clean CSV.
287
+ beside the untouched clean CSV. For Computer, `-o` writes one CSV with the
288
+ errors and its `.changes.csv` log, and `--anomaly-profile` accepts several
289
+ profiles with `-d` to get one variant of each. Computer rows are generated by
290
+ several processes from 5,000 rows (`--workers` sets the number), and the command
291
+ shows its progress and ends with a timing report.
281
292
 
282
293
  Details: [Tabalyst Generate](https://docs.tabalyst.com/generate/),
283
294
  [`examples/generate/README.md`](examples/generate/README.md) and the
@@ -106,6 +106,12 @@ Details: [Tabalyst Report](https://docs.tabalyst.com/report/),
106
106
  - Dataset dimensions, missing cells, duplicates, and quality observations.
107
107
  - A family and a type for each column (identifier, text, date, boolean...),
108
108
  with the evidence behind them, and the technical type with its error rates.
109
+ - For an identifier column, whether the ID is unique across all rows and after
110
+ row deduplication: the repetitions that exact copies of whole rows explain
111
+ are told apart from those between distinct records, with the evidence (the
112
+ Scan, the second pass or a [Dedup](https://docs.tabalyst.com/dedup/) report),
113
+ the case of missing IDs, and a non-binding near-unique reading of the few
114
+ repetitions that remain.
109
115
  - A summary table with one row per column: its type, a sentence about its
110
116
  values, the missing share, its Errors and Issues with a preview of each, and
111
117
  its details; above it, the Column quality and Signals cards.
@@ -234,10 +240,15 @@ tabalyst generate --example crm -o crm-contacts.csv
234
240
  tabalyst generate --example insurance --rows 3000 -d insurance-output/
235
241
  tabalyst generate --example computer --rows 10000 -d computer-output/
236
242
  tabalyst generate --example insurance --rows 3000 --anomaly-profile dirty_realistic -d insurance-dirty/
243
+ tabalyst generate --example computer --rows 30000 -o pcs.csv --anomaly-profile dirty_realistic
237
244
  ```
238
245
 
239
246
  An anomaly profile writes an altered CSV, a cell change log and a summary
240
- beside the untouched clean CSV.
247
+ beside the untouched clean CSV. For Computer, `-o` writes one CSV with the
248
+ errors and its `.changes.csv` log, and `--anomaly-profile` accepts several
249
+ profiles with `-d` to get one variant of each. Computer rows are generated by
250
+ several processes from 5,000 rows (`--workers` sets the number), and the command
251
+ shows its progress and ends with a timing report.
241
252
 
242
253
  Details: [Tabalyst Generate](https://docs.tabalyst.com/generate/),
243
254
  [`examples/generate/README.md`](examples/generate/README.md) and the
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tabalyst"
7
- version = "0.7.1"
7
+ version = "0.7.3"
8
8
  description = "Open-source toolkit for understanding and working with unfamiliar data."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -80,6 +80,8 @@ markers = [
80
80
  "dedup_lot(name): Tabalyst Dedup implementation lot (plan 2026-10-22) that provides the tested behavior; skipped until the lot is enabled in tests/dedup/conftest.py",
81
81
  "dedup_t(*ids): requirement tests (T01 to T30 of the Dedup specification) that the test covers",
82
82
  "dedup_heavy: Dedup large-scale test, never run by default; select it with -m dedup_heavy",
83
+ "uid_lot(name): Unique ID plan (2026-10-23) lot that provides the tested behavior; skipped until the lot is enabled in tests/report/conftest.py",
84
+ "uid_t(*ids): requirement tests (T01 to T34 of the Unique ID specification) that the test covers",
83
85
  "shipped_exposure_default: the test reads the shipped default of scan.exposure.sensitive_values (show), not the masking default the suite runs with",
84
86
  ]
85
87
 
@@ -0,0 +1,190 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
+
5
+ """CLI adapter for Tabalyst Generate."""
6
+
7
+ import sys
8
+ from pathlib import Path
9
+ from typing import Annotated
10
+
11
+ import typer
12
+
13
+ from tabalyst.cli.terminal import error_exit_code
14
+ from tabalyst.errors import TabalystError
15
+ from tabalyst.generate_service import (
16
+ GenerateProgress,
17
+ GenerateResult,
18
+ build_generate_plan,
19
+ generate_datasets,
20
+ )
21
+
22
+ PHASE_NAMES = {"rows": "generating rows", "errors": "injecting errors", "publish": "writing files"}
23
+ # Below this, a phase is noise in the report.
24
+ MIN_REPORTED_SECONDS = 0.05
25
+
26
+
27
+ def format_duration(seconds: float) -> str:
28
+ """A duration for people: tenths of a second under a minute, then minutes and seconds."""
29
+ if seconds < 60:
30
+ return f"{seconds:.1f}s"
31
+ minutes, rest = divmod(round(seconds), 60)
32
+ if minutes < 60:
33
+ return f"{minutes}m {rest:02d}s"
34
+ hours, minutes = divmod(minutes, 60)
35
+ return f"{hours}h {minutes:02d}m"
36
+
37
+
38
+ class GenerateProgressPrinter:
39
+ """One rewritten standard error line per stage, with the time left once it is known."""
40
+
41
+ def __init__(self, enabled: bool) -> None:
42
+ self.enabled = enabled
43
+ self._stage: str | None = None
44
+ self._stage_start = 0.0
45
+ self._width = 0
46
+
47
+ def __call__(self, event: GenerateProgress) -> None:
48
+ if not self.enabled or not event.total:
49
+ return
50
+ if event.stage != self._stage:
51
+ self._stage = event.stage
52
+ self._stage_start = event.elapsed_seconds
53
+ spent = event.elapsed_seconds - self._stage_start
54
+ message = f"{event.stage} {event.done:,}/{event.total:,} ({100 * event.done // event.total}%)"
55
+ if event.done >= event.total:
56
+ message += f" - {format_duration(spent)}"
57
+ elif event.done and spent >= 1:
58
+ message += (f" - {format_duration(spent)}, "
59
+ f"about {format_duration(spent * (event.total - event.done) / event.done)} left")
60
+ finished = event.done >= event.total
61
+ typer.echo(f"\r{message.ljust(self._width)}", nl=finished, err=True)
62
+ self._width = 0 if finished else max(self._width, len(message))
63
+
64
+
65
+ def timing_report(result: GenerateResult) -> str:
66
+ """The closing line: rows, total time, rate and where the time went."""
67
+ rows = sum(result.row_counts.values()) if len(result.row_counts) == 1 else None
68
+ text = f"Done in {format_duration(result.seconds)}"
69
+ if rows is not None:
70
+ text = f"{rows:,} rows in {format_duration(result.seconds)}"
71
+ if result.seconds > 0:
72
+ processes = f", {result.workers} processes" if result.workers > 1 else ""
73
+ text += f" ({rows / result.seconds:,.0f} rows/s{processes})"
74
+ changed = sum(result.anomaly_counts.values())
75
+ if changed:
76
+ profiles = {key.split("/", 1)[1] for key in result.anomaly_counts if "/" in key}
77
+ text += f", {changed:,} cells changed"
78
+ if len(profiles) > 1:
79
+ text += f" in {len(profiles)} profiles"
80
+ parts = [f"{PHASE_NAMES[name]} {format_duration(value)}"
81
+ for name, value in result.timings.items()
82
+ if name in PHASE_NAMES and value >= MIN_REPORTED_SECONDS]
83
+ return f"{text}: {', '.join(parts)}" if len(parts) > 1 else text
84
+
85
+
86
+ def generate_command(
87
+ definition: Annotated[
88
+ Path | None,
89
+ typer.Argument(help="Generate definition or package directory."),
90
+ ] = None,
91
+ example: Annotated[
92
+ str | None,
93
+ typer.Option("--example", help="Packaged example: crm, insurance, or computer."),
94
+ ] = None,
95
+ output: Annotated[
96
+ Path | None,
97
+ typer.Option("--output", "-o", help="One CSV file (with --anomaly-profile: the CSV with errors, plus FILE.changes.csv)."),
98
+ ] = None,
99
+ output_dir: Annotated[
100
+ Path | None,
101
+ typer.Option("--output-dir", "-d", help="Directory for all artifacts."),
102
+ ] = None,
103
+ rows: Annotated[
104
+ int | None,
105
+ typer.Option("--rows", help="Number of generated rows."),
106
+ ] = None,
107
+ seed: Annotated[
108
+ int | None,
109
+ typer.Option("--seed", help="Root random seed."),
110
+ ] = None,
111
+ as_of_date: Annotated[
112
+ str | None,
113
+ typer.Option("--as-of-date", help="Reference date (YYYY-MM-DD)."),
114
+ ] = None,
115
+ anomaly_profile: Annotated[
116
+ str | None,
117
+ typer.Option("--anomaly-profile", help="Inject errors. Computer: dirty_realistic, dirty_stress, unit_variants, unit_variants_extended; several, comma separated, with -d."),
118
+ ] = None,
119
+ request: Annotated[
120
+ Path | None,
121
+ typer.Option("--request", help="JSON generation request."),
122
+ ] = None,
123
+ generation_profile: Annotated[
124
+ str | None,
125
+ typer.Option("--generation-profile", help="Catalog selection profile."),
126
+ ] = None,
127
+ output_profile: Annotated[
128
+ str | None,
129
+ typer.Option("--output-profile", help="Output column profile."),
130
+ ] = None,
131
+ market: Annotated[
132
+ str | None,
133
+ typer.Option("--market", help="Offer market: ca or us."),
134
+ ] = None,
135
+ locales: Annotated[
136
+ str | None,
137
+ typer.Option("--locales", help="Computer locales: en, fr or en,fr (default en with -o, en,fr with -d)."),
138
+ ] = None,
139
+ unit_style: Annotated[
140
+ str | None,
141
+ typer.Option("--unit-style", help="Computer values: numeric or localized units."),
142
+ ] = None,
143
+ unit_columns: Annotated[
144
+ str | None,
145
+ typer.Option("--unit-columns", help="Comma-separated Computer measurement columns to format with units."),
146
+ ] = None,
147
+ validate_only: Annotated[
148
+ bool,
149
+ typer.Option("--validate-only", help="Validate a package without writing."),
150
+ ] = False,
151
+ force: Annotated[
152
+ bool,
153
+ typer.Option("--force", "-f", help="Replace existing artifacts."),
154
+ ] = False,
155
+ no_progress: Annotated[
156
+ bool,
157
+ typer.Option("--no-progress", help="Hide the progress line. It is also hidden outside a terminal."),
158
+ ] = False,
159
+ workers: Annotated[
160
+ int | None,
161
+ typer.Option(
162
+ "--workers", min=1,
163
+ help=("Computer: processes that generate the rows, 1 for one process. By default, "
164
+ "5,000 rows or more use one per spare processor, at most 6."),
165
+ ),
166
+ ] = None,
167
+ ) -> None:
168
+ """Validate and generate datasets from a definition or package."""
169
+ try:
170
+ plan = build_generate_plan(
171
+ definition, example=example, output=output, output_dir=output_dir,
172
+ rows=rows, seed=seed, as_of_date=as_of_date,
173
+ anomaly_profile=anomaly_profile, force=force, request=request,
174
+ generation_profile=generation_profile, output_profile=output_profile,
175
+ market=market, locales=locales, unit_style=unit_style,
176
+ unit_columns=unit_columns,
177
+ validate_only=validate_only, workers=workers,
178
+ )
179
+ if validate_only:
180
+ typer.echo("Valid Generate package.", err=True)
181
+ return
182
+ result = generate_datasets(
183
+ plan, on_progress=GenerateProgressPrinter(not no_progress and sys.stderr.isatty()),
184
+ )
185
+ except TabalystError as exc:
186
+ typer.echo(f"Error: {exc}", err=True)
187
+ raise typer.Exit(error_exit_code(exc)) from exc
188
+ for path in result.paths:
189
+ typer.echo(f"Created: {path}", err=True)
190
+ typer.echo(timing_report(result), err=True)
@@ -250,6 +250,18 @@ def report_command(
250
250
  ),
251
251
  ),
252
252
  ] = False,
253
+ dedup_report: Annotated[
254
+ Path | None,
255
+ typer.Option(
256
+ "--dedup-report",
257
+ help=(
258
+ "A Dedup report (.dedup.json), or the folder holding the one of each "
259
+ "source, that proves the copies of rows behind the uniqueness of "
260
+ "identifier columns. CSV sources only. Without it, the report beside "
261
+ "each source is tried."
262
+ ),
263
+ ),
264
+ ] = None,
253
265
  yes: Annotated[
254
266
  bool,
255
267
  typer.Option(
@@ -292,6 +304,7 @@ def report_command(
292
304
  all_collections=all_collections,
293
305
  deep=deep,
294
306
  confirm=confirm,
307
+ dedup_report=dedup_report,
295
308
  )
296
309
  except ConfirmationRequired as exc:
297
310
  if decisions and decisions[-1] is Decision.DECLINED:
@@ -118,6 +118,10 @@ class PresentationSettings(BaseModel):
118
118
  default_factory=ValueExamplesSettings
119
119
  )
120
120
  row_sample: RowSampleSettings = Field(default_factory=RowSampleSettings)
121
+ # A Dedup report (file) or the folder holding ``<source stem>.dedup.json``: the proof of
122
+ # the copies of rows behind ``identifier_uniqueness``. A CSV source only; the path is not
123
+ # stored in the Report, which names the file only.
124
+ dedup_report: str | None = None
121
125
 
122
126
 
123
127
  class OutputSettings(BaseModel):
@@ -349,6 +353,23 @@ class DuplicateSettings(BaseModel):
349
353
  records: bool = False
350
354
 
351
355
 
356
+ class CopySettings(BaseModel):
357
+ """The ceilings of the count of the extra copies of rows (design 20.40).
358
+
359
+ ``memory_mb`` is the accounted size of the table of distinct rows, ``disk_mb``
360
+ the estimated size of the temporary database that takes over when the table
361
+ passes it (``0`` forbids the disk), ``max_rows`` the records read. A count that
362
+ meets a ceiling stops and is ``limited``: its copies are a lower bound. All are
363
+ part of the key of a result, and none depends on a clock or a machine.
364
+ """
365
+
366
+ model_config = ConfigDict(extra="forbid", frozen=True)
367
+
368
+ memory_mb: int = Field(default=256, ge=1, le=1_048_576)
369
+ disk_mb: int = Field(default=2_048, ge=0, le=16_777_216)
370
+ max_rows: int = Field(default=10_000_000, ge=1)
371
+
372
+
352
373
  class PatternCountSettings(BaseModel):
353
374
  """How the validation of the patterns is bounded in memory (design 20.9).
354
375
 
@@ -520,6 +541,7 @@ class DeepSettings(BaseModel):
520
541
  patterns: PatternCountSettings = Field(default_factory=PatternCountSettings)
521
542
  residuals: ResidualSettings = Field(default_factory=ResidualSettings)
522
543
  duplicates: DuplicateSettings = Field(default_factory=DuplicateSettings)
544
+ copies: CopySettings = Field(default_factory=CopySettings)
523
545
  drift: DriftSettings = Field(default_factory=DriftSettings)
524
546
  date_order: DateOrderSettings = Field(default_factory=DateOrderSettings)
525
547
  missing: MissingSettings = Field(default_factory=MissingSettings)
@@ -123,7 +123,7 @@ def analyze_dedup(
123
123
  path = Path(source)
124
124
  started = time.perf_counter()
125
125
  before = stat_source(path)
126
- forward = _staged(on_progress)
126
+ forward = staged(on_progress)
127
127
  spilled_at: int | None = None
128
128
 
129
129
  def spilled(event: SpillEvent) -> None:
@@ -204,7 +204,7 @@ def source_changed_error(records_read: int) -> DedupInputError:
204
204
  )
205
205
 
206
206
 
207
- def _staged(callback: ProgressCallback | None) -> ProgressCallback | None:
207
+ def staged(callback: ProgressCallback | None) -> ProgressCallback | None:
208
208
  """Name the stage on every event that the pass emits."""
209
209
  if callback is None:
210
210
  return None
@@ -0,0 +1,14 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
+
5
+ """The versions of the counts of the copies of rows, apart from the engine so the planner can read them."""
6
+
7
+ # Changes with any change of what the count means (identity, ceilings, order of the checks). The
8
+ # analyzer ``duplicate_rows_count`` takes it as its version, so stored results of an older count
9
+ # are stale (Unique ID lot 8, cahier 12.5).
10
+ CALCULATION_VERSION = 1
11
+
12
+ # The same for the light count of the copies of the rows that have no ID (``missing_id_copies``,
13
+ # Unique ID lot 10): what it counts, the identity of the rows, the order of the checks.
14
+ MISSING_CALCULATION_VERSION = 1