tabalyst 0.7.5__tar.gz → 0.7.6__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 (548) hide show
  1. {tabalyst-0.7.5/src/tabalyst.egg-info → tabalyst-0.7.6}/PKG-INFO +6 -4
  2. {tabalyst-0.7.5 → tabalyst-0.7.6}/README.md +5 -3
  3. {tabalyst-0.7.5 → tabalyst-0.7.6}/pyproject.toml +1 -1
  4. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/report.py +4 -1
  5. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/config.py +7 -3
  6. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/models.py +3 -3
  7. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_chain.py +1 -1
  8. tabalyst-0.7.6/src/tabalyst/report_charts.py +227 -0
  9. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_deep.py +17 -0
  10. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_insights.py +259 -34
  11. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_labels.py +1 -0
  12. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_service.py +6 -1
  13. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_views.py +16 -0
  14. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/reporting.py +52 -4
  15. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzer.py +3 -0
  16. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/__init__.py +2 -1
  17. tabalyst-0.7.6/src/tabalyst/scanner/planner/analyzers/matrix.py +113 -0
  18. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/costmodel.py +10 -1
  19. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/facts.py +20 -0
  20. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/planner.py +3 -0
  21. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/reasons.py +2 -1
  22. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/secondpass.py +9 -2
  23. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/executor.py +29 -2
  24. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/matrix.py +149 -17
  25. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/models.py +45 -1
  26. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/schemas/tabalyst.report.schema.json +143 -4
  27. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/schemas/tabalyst.scan.deep.schema.json +142 -3
  28. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/service.py +84 -18
  29. tabalyst-0.7.6/src/tabalyst/static/charts.js +197 -0
  30. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/static/theme.css +15 -0
  31. tabalyst-0.7.6/src/tabalyst/templates/charts.html +89 -0
  32. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/templates/column.html +2 -0
  33. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/templates/insights.html +3 -2
  34. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/templates/report.html +4 -3
  35. {tabalyst-0.7.5 → tabalyst-0.7.6/src/tabalyst.egg-info}/PKG-INFO +6 -4
  36. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst.egg-info/SOURCES.txt +3 -0
  37. tabalyst-0.7.5/src/tabalyst/scanner/planner/analyzers/matrix.py +0 -59
  38. {tabalyst-0.7.5 → tabalyst-0.7.6}/LICENSE +0 -0
  39. {tabalyst-0.7.5 → tabalyst-0.7.6}/MANIFEST.in +0 -0
  40. {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/README.md +0 -0
  41. {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/config.json +0 -0
  42. {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/datasets/basic.csv +0 -0
  43. {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/datasets/insurance-customers.csv +0 -0
  44. {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/README.md +0 -0
  45. {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/cohorts-anomalies/catalog.yaml +0 -0
  46. {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/cohorts-anomalies/dataset.yaml +0 -0
  47. {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/cohorts-anomalies/schemas/accounts.yaml +0 -0
  48. {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/cohorts-anomalies/schemas/contacts.yaml +0 -0
  49. {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/common-references/catalog.yaml +0 -0
  50. {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/common-references/dataset.yaml +0 -0
  51. {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/common-references/schemas/contacts.yaml +0 -0
  52. {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/generate_examples.py +0 -0
  53. {tabalyst-0.7.5 → tabalyst-0.7.6}/setup.cfg +0 -0
  54. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/__init__.py +0 -0
  55. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/__main__.py +0 -0
  56. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/_version.py +0 -0
  57. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/batch.py +0 -0
  58. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cache_service.py +0 -0
  59. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/__init__.py +0 -0
  60. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/app.py +0 -0
  61. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/cache.py +0 -0
  62. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/confirm.py +0 -0
  63. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/dedup.py +0 -0
  64. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/generate.py +0 -0
  65. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/inspect.py +0 -0
  66. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/sample.py +0 -0
  67. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/scan.py +0 -0
  68. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/terminal.py +0 -0
  69. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/csv_records.py +0 -0
  70. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/__init__.py +0 -0
  71. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/analysis.py +0 -0
  72. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/batch_report.py +0 -0
  73. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/cache.py +0 -0
  74. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/calculation.py +0 -0
  75. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/count_only.py +0 -0
  76. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/discovery.py +0 -0
  77. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/diskstore.py +0 -0
  78. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/failures.py +0 -0
  79. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/groups.py +0 -0
  80. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/identity.py +0 -0
  81. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/pipeline.py +0 -0
  82. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/publish.py +0 -0
  83. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/report.py +0 -0
  84. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/settings.py +0 -0
  85. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/store.py +0 -0
  86. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/tiered.py +0 -0
  87. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/writer.py +0 -0
  88. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup_service.py +0 -0
  89. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/deep_service.py +0 -0
  90. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/deep_store.py +0 -0
  91. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/errors.py +0 -0
  92. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/execution_log.py +0 -0
  93. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_anomalies.py +0 -0
  94. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_columns_package.py +0 -0
  95. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_computer.py +0 -0
  96. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_computer_output.py +0 -0
  97. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_computer_parallel.py +0 -0
  98. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_csv.py +0 -0
  99. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_definition.py +0 -0
  100. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_draws.py +0 -0
  101. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/SOURCES.md +0 -0
  102. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/catalog.yaml +0 -0
  103. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/brand.csv +0 -0
  104. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/color.csv +0 -0
  105. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/computer_type.csv +0 -0
  106. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/computer_type_form_factor.csv +0 -0
  107. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/computer_type_product_segment.csv +0 -0
  108. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/cpu.csv +0 -0
  109. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/cpu_memory_weight.csv +0 -0
  110. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/cpu_operating_system.csv +0 -0
  111. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/display.csv +0 -0
  112. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/extended_specs.csv +0 -0
  113. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/form_factor.csv +0 -0
  114. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_color.csv +0 -0
  115. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_cpu.csv +0 -0
  116. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_display.csv +0 -0
  117. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_gpu.csv +0 -0
  118. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_memory.csv +0 -0
  119. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_operating_system.csv +0 -0
  120. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_profile.csv +0 -0
  121. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_profile_computer_type.csv +0 -0
  122. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_profile_segment.csv +0 -0
  123. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_storage.csv +0 -0
  124. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/gpu.csv +0 -0
  125. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/gpu_display.csv +0 -0
  126. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/gpu_memory_weight.csv +0 -0
  127. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/gpu_storage_weight.csv +0 -0
  128. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/memory.csv +0 -0
  129. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/model_form_factor.csv +0 -0
  130. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/model_generation.csv +0 -0
  131. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/operating_system.csv +0 -0
  132. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_category.csv +0 -0
  133. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_family.csv +0 -0
  134. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_family_computer_type.csv +0 -0
  135. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_family_product_segment.csv +0 -0
  136. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_model.csv +0 -0
  137. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_segment.csv +0 -0
  138. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_segment_brand.csv +0 -0
  139. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_segment_display_weight.csv +0 -0
  140. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_segment_memory_weight.csv +0 -0
  141. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_segment_storage_weight.csv +0 -0
  142. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_subcategory.csv +0 -0
  143. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/profile_exclusions.csv +0 -0
  144. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/promotion_status.csv +0 -0
  145. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/promotion_type.csv +0 -0
  146. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/seller.csv +0 -0
  147. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/seller_type.csv +0 -0
  148. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/shipping_availability.csv +0 -0
  149. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/standard_specs.csv +0 -0
  150. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/storage.csv +0 -0
  151. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/warehouse.csv +0 -0
  152. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/dataset.yaml +0 -0
  153. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/computer_type.yaml +0 -0
  154. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/computer_type_form_factor.yaml +0 -0
  155. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/computer_type_product_segment.yaml +0 -0
  156. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/computers.yaml +0 -0
  157. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/cpu.yaml +0 -0
  158. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/cpu_memory_weight.yaml +0 -0
  159. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/cpu_operating_system.yaml +0 -0
  160. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/display.yaml +0 -0
  161. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/extended_specs.yaml +0 -0
  162. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_color.yaml +0 -0
  163. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_cpu.yaml +0 -0
  164. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_display.yaml +0 -0
  165. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_gpu.yaml +0 -0
  166. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_memory.yaml +0 -0
  167. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_operating_system.yaml +0 -0
  168. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_profile.yaml +0 -0
  169. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_profile_computer_type.yaml +0 -0
  170. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_profile_segment.yaml +0 -0
  171. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_storage.yaml +0 -0
  172. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/gpu.yaml +0 -0
  173. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/gpu_display.yaml +0 -0
  174. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/gpu_memory_weight.yaml +0 -0
  175. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/gpu_storage_weight.yaml +0 -0
  176. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/localized.yaml +0 -0
  177. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/memory.yaml +0 -0
  178. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/model_form_factor.yaml +0 -0
  179. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/model_generation.yaml +0 -0
  180. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/operating_system.yaml +0 -0
  181. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_family.yaml +0 -0
  182. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_family_computer_type.yaml +0 -0
  183. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_family_product_segment.yaml +0 -0
  184. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_model.yaml +0 -0
  185. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_segment.yaml +0 -0
  186. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_segment_brand.yaml +0 -0
  187. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_segment_display_weight.yaml +0 -0
  188. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_segment_memory_weight.yaml +0 -0
  189. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_segment_storage_weight.yaml +0 -0
  190. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_subcategory.yaml +0 -0
  191. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/profile_exclusions.yaml +0 -0
  192. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/seller.yaml +0 -0
  193. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/standard_specs.yaml +0 -0
  194. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/storage.yaml +0 -0
  195. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/warehouse.yaml +0 -0
  196. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/crm/catalog.yaml +0 -0
  197. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/crm/dataset.yaml +0 -0
  198. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/crm/schemas/accounts.yaml +0 -0
  199. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/crm/schemas/contacts.yaml +0 -0
  200. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/SOURCES.md +0 -0
  201. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/catalog.yaml +0 -0
  202. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/agencies.csv +0 -0
  203. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/branch_contract_weights.csv +0 -0
  204. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/claim_statuses.csv +0 -0
  205. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/contract_statuses.csv +0 -0
  206. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/contract_types.csv +0 -0
  207. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/payment_frequencies.csv +0 -0
  208. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/payment_methods.csv +0 -0
  209. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/dataset.yaml +0 -0
  210. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/agencies.yaml +0 -0
  211. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/branch_contract_weights.yaml +0 -0
  212. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/claim_statuses.yaml +0 -0
  213. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/contract_statuses.yaml +0 -0
  214. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/contract_types.yaml +0 -0
  215. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/customers.yaml +0 -0
  216. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/payment_frequencies.yaml +0 -0
  217. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/payment_methods.yaml +0 -0
  218. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_insurance.py +0 -0
  219. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_package.py +0 -0
  220. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_references.py +0 -0
  221. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/SOURCES.md +0 -0
  222. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/addresses/street_directions_ca.csv +0 -0
  223. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/addresses/street_names_ca.csv +0 -0
  224. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/addresses/street_types_ca.csv +0 -0
  225. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/addresses/unit_types_ca.csv +0 -0
  226. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/contact/email_patterns.csv +0 -0
  227. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/contact/email_providers_ca.csv +0 -0
  228. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/contact/phone_area_codes_ca.csv +0 -0
  229. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/geography/cities_ca.csv +0 -0
  230. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/geography/postal_prefixes_ca.csv +0 -0
  231. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/geography/provinces_ca.csv +0 -0
  232. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/people/family_names_ca.csv +0 -0
  233. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/people/first_names_en_ca.csv +0 -0
  234. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/people/first_names_fr_qc.csv +0 -0
  235. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_selection.py +0 -0
  236. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_service.py +0 -0
  237. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_values.py +0 -0
  238. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/identifier_uniqueness/__init__.py +0 -0
  239. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/identifier_uniqueness/facts.py +0 -0
  240. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/identifier_uniqueness/models.py +0 -0
  241. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/identifier_uniqueness/near_unique.py +0 -0
  242. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/identifier_uniqueness/proof.py +0 -0
  243. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/identifier_uniqueness/rule.py +0 -0
  244. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspect_service.py +0 -0
  245. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/__init__.py +0 -0
  246. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/choices.py +0 -0
  247. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/excel_inspect/__init__.py +0 -0
  248. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/excel_inspect/build.py +0 -0
  249. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/excel_inspect/detect.py +0 -0
  250. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/excel_inspect/parameters.py +0 -0
  251. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/json_inspect/__init__.py +0 -0
  252. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/json_inspect/build.py +0 -0
  253. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/json_inspect/detect.py +0 -0
  254. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/json_inspect/parameters.py +0 -0
  255. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/models.py +0 -0
  256. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/persistence.py +0 -0
  257. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/resolution.py +0 -0
  258. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/json_text.py +0 -0
  259. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/option_notices.py +0 -0
  260. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/plan_service.py +0 -0
  261. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/progress.py +0 -0
  262. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/project_open_service.py +0 -0
  263. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/project_scan_service.py +0 -0
  264. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/__init__.py +0 -0
  265. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_bounded_values.py +0 -0
  266. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_cache.py +0 -0
  267. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_codec.py +0 -0
  268. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_generation.py +0 -0
  269. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_locks.py +0 -0
  270. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_publication.py +0 -0
  271. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_queries.py +0 -0
  272. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_query_budget.py +0 -0
  273. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_recovery.py +0 -0
  274. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_retention.py +0 -0
  275. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_schema.py +0 -0
  276. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_session.py +0 -0
  277. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_staging.py +0 -0
  278. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_sync.py +0 -0
  279. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_validation.py +0 -0
  280. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/catalog.py +0 -0
  281. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/freshness.py +0 -0
  282. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/identity.py +0 -0
  283. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/index.py +0 -0
  284. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/location.py +0 -0
  285. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/models.py +0 -0
  286. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/store.py +0 -0
  287. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_classification.py +0 -0
  288. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_column_page.py +0 -0
  289. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_config.py +0 -0
  290. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_details.py +0 -0
  291. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_finding_details.py +0 -0
  292. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_findings.py +0 -0
  293. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_measures.py +0 -0
  294. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_overview.py +0 -0
  295. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_plan.py +0 -0
  296. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_preview.py +0 -0
  297. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_profile.py +0 -0
  298. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_relations.py +0 -0
  299. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_schema.py +0 -0
  300. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_sections.py +0 -0
  301. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_signals.py +0 -0
  302. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_summary.py +0 -0
  303. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_table.py +0 -0
  304. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_uniqueness.py +0 -0
  305. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/result_model.py +0 -0
  306. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/sample_page.py +0 -0
  307. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/sampling.py +0 -0
  308. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/sampling_service.py +0 -0
  309. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scan_document.py +0 -0
  310. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scan_page.py +0 -0
  311. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scan_reuse.py +0 -0
  312. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scan_service.py +0 -0
  313. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/__init__.py +0 -0
  314. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/api.py +0 -0
  315. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/bottomk.py +0 -0
  316. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/cases.py +0 -0
  317. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/charactermap.py +0 -0
  318. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/characters.py +0 -0
  319. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/__init__.py +0 -0
  320. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/candidates.py +0 -0
  321. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/catalog.py +0 -0
  322. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/identifiers.py +0 -0
  323. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/models.py +0 -0
  324. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/names.py +0 -0
  325. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/rules.py +0 -0
  326. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/config.py +0 -0
  327. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/convention_rule.py +0 -0
  328. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/correlation_ratio.py +0 -0
  329. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/crosstab.py +0 -0
  330. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/__init__.py +0 -0
  331. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/amount.py +0 -0
  332. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/base.py +0 -0
  333. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/boolean.py +0 -0
  334. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/currency.py +0 -0
  335. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/email.py +0 -0
  336. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/enumeration.py +0 -0
  337. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/ip.py +0 -0
  338. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/keys.py +0 -0
  339. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/names.py +0 -0
  340. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/number.py +0 -0
  341. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/pattern.py +0 -0
  342. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/percentage.py +0 -0
  343. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/phone.py +0 -0
  344. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/postal.py +0 -0
  345. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/quantity.py +0 -0
  346. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/registry.py +0 -0
  347. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/shape.py +0 -0
  348. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/temporal.py +0 -0
  349. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/url.py +0 -0
  350. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/uuid.py +0 -0
  351. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/diagnostics.py +0 -0
  352. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/engine.py +0 -0
  353. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/exposure.py +0 -0
  354. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/features.py +0 -0
  355. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/field.py +0 -0
  356. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/identity.py +0 -0
  357. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/lengthsample.py +0 -0
  358. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/longtext.py +0 -0
  359. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/measures.py +0 -0
  360. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/memory.py +0 -0
  361. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/models.py +0 -0
  362. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/normalization.py +0 -0
  363. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/observations.py +0 -0
  364. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/paths.py +0 -0
  365. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/pattern_eligibility.py +0 -0
  366. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/patternfacets.py +0 -0
  367. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/patterninfer.py +0 -0
  368. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/patterntree.py +0 -0
  369. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/pearson.py +0 -0
  370. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/__init__.py +0 -0
  371. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/analytical.py +0 -0
  372. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/characters.py +0 -0
  373. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/common.py +0 -0
  374. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/copies.py +0 -0
  375. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/crosstab.py +0 -0
  376. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/date_order.py +0 -0
  377. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/distinct.py +0 -0
  378. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/drift.py +0 -0
  379. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/duplicates.py +0 -0
  380. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/forms.py +0 -0
  381. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/frequencies.py +0 -0
  382. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/histogram.py +0 -0
  383. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/lengths.py +0 -0
  384. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/measures.py +0 -0
  385. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/missing_copies.py +0 -0
  386. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/parts.py +0 -0
  387. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/patterns.py +0 -0
  388. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/pearson.py +0 -0
  389. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/residuals.py +0 -0
  390. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/shape.py +0 -0
  391. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/stats.py +0 -0
  392. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/structure.py +0 -0
  393. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/temporal.py +0 -0
  394. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/texts.py +0 -0
  395. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/categorystats.py +0 -0
  396. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/crosstabs.py +0 -0
  397. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/identifiers.py +0 -0
  398. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/models.py +0 -0
  399. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/orders.py +0 -0
  400. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/registry.py +0 -0
  401. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/relations.py +0 -0
  402. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/render.py +0 -0
  403. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/samplerows.py +0 -0
  404. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/stratification.py +0 -0
  405. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/stratmodels.py +0 -0
  406. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/process.py +0 -0
  407. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/quality.py +0 -0
  408. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/rankcorr.py +0 -0
  409. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/__init__.py +0 -0
  410. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/base.py +0 -0
  411. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/csv_reader.py +0 -0
  412. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/excel_common.py +0 -0
  413. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/excel_reader.py +0 -0
  414. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/excel_table.py +0 -0
  415. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/factory.py +0 -0
  416. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/json_common.py +0 -0
  417. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/json_reader.py +0 -0
  418. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/jsonl_reader.py +0 -0
  419. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/records.py +0 -0
  420. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/rowsample.py +0 -0
  421. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/schema.py +0 -0
  422. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/__init__.py +0 -0
  423. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/accumulators.py +0 -0
  424. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/analytical.py +0 -0
  425. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/bins.py +0 -0
  426. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/boundaries.py +0 -0
  427. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/characters.py +0 -0
  428. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/copies.py +0 -0
  429. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/crosstab.py +0 -0
  430. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/document.py +0 -0
  431. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/drift.py +0 -0
  432. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/duplicates.py +0 -0
  433. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/exactset.py +0 -0
  434. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/forms.py +0 -0
  435. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/frequencies.py +0 -0
  436. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/measures.py +0 -0
  437. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/missing_copies.py +0 -0
  438. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/orders.py +0 -0
  439. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/parallel.py +0 -0
  440. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/parts.py +0 -0
  441. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/patternreader.py +0 -0
  442. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/patterns.py +0 -0
  443. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/pearson.py +0 -0
  444. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/periods.py +0 -0
  445. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/ranks.py +0 -0
  446. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/replay.py +0 -0
  447. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/residuals.py +0 -0
  448. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/routing.py +0 -0
  449. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/schema.py +0 -0
  450. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/shape.py +0 -0
  451. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/stats.py +0 -0
  452. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/structure.py +0 -0
  453. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/texts.py +0 -0
  454. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/__init__.py +0 -0
  455. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/bins.py +0 -0
  456. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/estimate.py +0 -0
  457. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/evaluate.py +0 -0
  458. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/execute.py +0 -0
  459. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/models.py +0 -0
  460. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/near.py +0 -0
  461. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/plan.py +0 -0
  462. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/reasons.py +0 -0
  463. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/render.py +0 -0
  464. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/result.py +0 -0
  465. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/select.py +0 -0
  466. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/targets.py +0 -0
  467. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/weights.py +0 -0
  468. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/stratify.py +0 -0
  469. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/structure.py +0 -0
  470. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/technical.py +0 -0
  471. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/validation.py +0 -0
  472. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/values.py +0 -0
  473. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/valuesample.py +0 -0
  474. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/workers.py +0 -0
  475. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/schemas/tabalyst.dedup.batch.schema.json +0 -0
  476. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/schemas/tabalyst.dedup.schema.json +0 -0
  477. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/schemas/tabalyst.sample.schema.json +0 -0
  478. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/schemas/tabalyst.scan.schema.json +0 -0
  479. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/shared_scan_service.py +0 -0
  480. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/smart_service.py +0 -0
  481. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/source_guard.py +0 -0
  482. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/static/report.js +0 -0
  483. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/summary_models.py +0 -0
  484. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/templates/characters.html +0 -0
  485. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/templates/patterns.html +0 -0
  486. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/templates/sample.html +0 -0
  487. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst.egg-info/dependency_links.txt +0 -0
  488. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst.egg-info/entry_points.txt +0 -0
  489. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst.egg-info/requires.txt +0 -0
  490. {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst.egg-info/top_level.txt +0 -0
  491. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_all_collections.py +0 -0
  492. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_cli.py +0 -0
  493. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_csv_records.py +0 -0
  494. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_examples_index.py +0 -0
  495. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_examples_layout.py +0 -0
  496. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate.py +0 -0
  497. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_anomalies.py +0 -0
  498. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_anomalies_regression.py +0 -0
  499. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_catalog.py +0 -0
  500. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_components.py +0 -0
  501. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_derivations.py +0 -0
  502. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_hierarchy.py +0 -0
  503. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_output.py +0 -0
  504. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_parallel.py +0 -0
  505. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_service.py +0 -0
  506. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_crm.py +0 -0
  507. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_crm_package.py +0 -0
  508. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_insurance.py +0 -0
  509. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_insurance_stress.py +0 -0
  510. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_lot4.py +0 -0
  511. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_package.py +0 -0
  512. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_references.py +0 -0
  513. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_selection.py +0 -0
  514. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_json_text.py +0 -0
  515. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_license_headers.py +0 -0
  516. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_make_datasets.py +0 -0
  517. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_option_notices.py +0 -0
  518. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_cache.py +0 -0
  519. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_database.py +0 -0
  520. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_generations.py +0 -0
  521. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_identity.py +0 -0
  522. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_index.py +0 -0
  523. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_location.py +0 -0
  524. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_open_service.py +0 -0
  525. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_queries.py +0 -0
  526. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_rescan.py +0 -0
  527. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_scan.py +0 -0
  528. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_scan_model.py +0 -0
  529. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_sessions.py +0 -0
  530. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_store.py +0 -0
  531. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_public_api.py +0 -0
  532. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_report_contrast.py +0 -0
  533. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_reporting.py +0 -0
  534. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_sampling.py +0 -0
  535. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_sampling_stratified_balanced.py +0 -0
  536. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scan_command.py +0 -0
  537. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_amounts.py +0 -0
  538. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_batches.py +0 -0
  539. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_config.py +0 -0
  540. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_csv.py +0 -0
  541. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_email_url.py +0 -0
  542. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_exposure.py +0 -0
  543. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_paths.py +0 -0
  544. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_phone.py +0 -0
  545. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_postal.py +0 -0
  546. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_uuid_ip.py +0 -0
  547. {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_shared_scan_cli.py +0 -0
  548. {tabalyst-0.7.5 → tabalyst-0.7.6}/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.5
3
+ Version: 0.7.6
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
@@ -114,8 +114,9 @@ customers.json
114
114
  executions.json
115
115
  ```
116
116
 
117
- Add `--details` to generate one self-contained HTML page per column, and `-o`
118
- to choose another HTML filename for one source:
117
+ Add `--details` to write one HTML page per column and the chart pages, such as
118
+ the combinations of missing values (it also runs the second pass), and `-o` to
119
+ choose another HTML filename for one source:
119
120
 
120
121
  ```console
121
122
  tabalyst report customers.csv --details
@@ -164,7 +165,8 @@ Details: [Tabalyst Report](https://docs.tabalyst.com/report/),
164
165
  The report is built on Tabalyst Scan; values of sensitive columns can be masked
165
166
  or hidden. Ambiguous dates stay
166
167
  ambiguous; the report shows the evidence of the column without applying it. The
167
- HTML report is self-contained and works without a CDN or network connection.
168
+ HTML report is self-contained and works without a CDN or network connection;
169
+ only the chart pages of `--details` load Apache ECharts from a CDN to draw.
168
170
  The JSON profile contains the same canonical analysis result for scripts and
169
171
  future Tabalyst tools. See
170
172
  [how to read the report](https://docs.tabalyst.com/report/read-report/).
@@ -74,8 +74,9 @@ customers.json
74
74
  executions.json
75
75
  ```
76
76
 
77
- Add `--details` to generate one self-contained HTML page per column, and `-o`
78
- to choose another HTML filename for one source:
77
+ Add `--details` to write one HTML page per column and the chart pages, such as
78
+ the combinations of missing values (it also runs the second pass), and `-o` to
79
+ choose another HTML filename for one source:
79
80
 
80
81
  ```console
81
82
  tabalyst report customers.csv --details
@@ -124,7 +125,8 @@ Details: [Tabalyst Report](https://docs.tabalyst.com/report/),
124
125
  The report is built on Tabalyst Scan; values of sensitive columns can be masked
125
126
  or hidden. Ambiguous dates stay
126
127
  ambiguous; the report shows the evidence of the column without applying it. The
127
- HTML report is self-contained and works without a CDN or network connection.
128
+ HTML report is self-contained and works without a CDN or network connection;
129
+ only the chart pages of `--details` load Apache ECharts from a CDN to draw.
128
130
  The JSON profile contains the same canonical analysis result for scripts and
129
131
  future Tabalyst tools. See
130
132
  [how to read the report](https://docs.tabalyst.com/report/read-report/).
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tabalyst"
7
- version = "0.7.5"
7
+ version = "0.7.6"
8
8
  description = "Open-source toolkit for understanding and working with unfamiliar data."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -210,7 +210,10 @@ def report_command(
210
210
  bool,
211
211
  typer.Option(
212
212
  "--details/--no-details",
213
- help="Generate standalone HTML pages for every column (off by default).",
213
+ help=(
214
+ "Also write a page for every column and the chart pages, which "
215
+ "load Apache ECharts from a CDN. Forces the second pass, as --deep."
216
+ ),
214
217
  ),
215
218
  ] = False,
216
219
  quiet: Annotated[
@@ -431,18 +431,22 @@ class DriftSettings(BaseModel):
431
431
 
432
432
 
433
433
  class MissingSettings(BaseModel):
434
- """How the values missing together are counted (design 20.31).
434
+ """How the values missing together are counted (design 20.31 and 20.44).
435
435
 
436
436
  A dataset of more than ``max_columns`` columns is left out (the pairs grow with
437
437
  the square of the columns); ``max_listed`` partners at most are listed for a
438
- column, the ones missing most often with it. Both are part of the key of a
439
- result.
438
+ column, the ones missing most often with it. The combinations of a dataset
439
+ (``missing_patterns``) are tracked up to ``max_patterns``, each counted exactly
440
+ from its first record, and ``max_patterns_listed`` are listed, the most frequent
441
+ first. Each is part of the key of a result.
440
442
  """
441
443
 
442
444
  model_config = ConfigDict(extra="forbid", frozen=True)
443
445
 
444
446
  max_columns: int = Field(default=100, ge=2, le=1_000)
445
447
  max_listed: int = Field(default=10, ge=1, le=1_000)
448
+ max_patterns: int = Field(default=1_000, ge=1, le=100_000)
449
+ max_patterns_listed: int = Field(default=200, ge=1, le=10_000)
446
450
 
447
451
 
448
452
  class ArraySettings(BaseModel):
@@ -2,7 +2,7 @@
2
2
  # License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  # file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
 
5
- """Serializable report document (format ``tabalyst.report``, revision 4).
5
+ """Serializable report document (format ``tabalyst.report``, ``FORMAT_REVISION``).
6
6
 
7
7
  The document is the Scan base at the same paths, plus a ``report`` block with
8
8
  the generation data, the presentation settings and the projections by dataset
@@ -40,7 +40,7 @@ from tabalyst.summary_models import ColumnSummary, TableSummary
40
40
 
41
41
  FORMAT = "tabalyst.report"
42
42
  FORMAT_VERSION = "0.2.0"
43
- FORMAT_REVISION = 5
43
+ FORMAT_REVISION = 6
44
44
 
45
45
 
46
46
  MeasureStatus = Literal["complete", "limited", "not_applicable", "disabled", "failed"]
@@ -359,7 +359,7 @@ class ReportProfile(ResultModel):
359
359
 
360
360
  format: Literal["tabalyst.report"] = FORMAT
361
361
  format_version: Literal["0.2.0"] = FORMAT_VERSION
362
- format_revision: Literal[5] = FORMAT_REVISION
362
+ format_revision: Literal[6] = FORMAT_REVISION
363
363
  engine: EngineInfo
364
364
  status: Literal["complete", "partial"]
365
365
  run: RunInfo
@@ -134,7 +134,7 @@ def plan_chain(
134
134
  skip_reading = SOURCE_NOT_READ
135
135
  if skip_reading == SOURCE_UNAVAILABLE and mode == "forced":
136
136
  raise SourceNotReadable(
137
- "--deep needs to read the source of the scan document, which was not "
137
+ "--deep and --details need to read the source of the scan document, which was not "
138
138
  "found beside it. The report was not written. Restore the source "
139
139
  "next to the document or report the source itself."
140
140
  )
@@ -0,0 +1,227 @@
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 chart pages of a Report (``docs/dev/report/chart-pages.md``): what each page
6
+ draws, read from the report JSON alone, and the library the pages load.
7
+
8
+ Pure: no file, no source. ``reporting.render_chart_page`` prints what this module
9
+ builds and ``static/charts.js`` draws it.
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ from collections.abc import Mapping
15
+ from dataclasses import dataclass, field
16
+ from urllib.parse import quote
17
+
18
+ from tabalyst.models import ReportProfile
19
+ from tabalyst.report_insights import block_line, missing_blocks
20
+ from tabalyst.report_views import InsightLine
21
+ from tabalyst.scanner.secondpass.models import MissingPatternsResult
22
+
23
+
24
+ @dataclass(frozen=True, slots=True)
25
+ class Library:
26
+ """A script the detail pages load from a CDN, pinned to one published file:
27
+ ``integrity`` is the SRI hash of that file, so it cannot be swapped."""
28
+
29
+ name: str
30
+ version: str
31
+ url: str
32
+ integrity: str
33
+
34
+
35
+ # Moving to an embedded copy changes this constant and the templates, nothing else
36
+ # (chart-pages.md 5). The hash was computed from the published file.
37
+ ECHARTS = Library(
38
+ name="Apache ECharts",
39
+ version="6.1.0",
40
+ url="https://cdn.jsdelivr.net/npm/echarts@6.1.0/dist/echarts.min.js",
41
+ integrity="sha384-C2iskrW/uPW46KzOjrvJIQo4YkV8lkD+QS0CrDN18IIPIpT/g2USu8bTP3nvmIAD",
42
+ )
43
+
44
+ # The patterns the plot draws; the table lists every pattern the result lists.
45
+ DRAWN = 20
46
+ # The file of each topic, stable once released.
47
+ CHART_FILES = {"missing": "charts-missing.html"}
48
+ TOPIC_TITLES = {"missing": "Missing values"}
49
+ # Why a dataset has no section on a chart page, in words.
50
+ LEFT_OUT_REASONS = {
51
+ "no_missing_values": "fewer than two columns lack a value",
52
+ "too_many_columns": "more columns lack a value than deep.missing.max_columns allows",
53
+ "withheld_columns": "a column that lacks values is withheld by the exposure setting",
54
+ "analysis_failed": "the second pass did not count the combinations",
55
+ }
56
+ _HIDDEN = {"mask", "hide"}
57
+
58
+
59
+ @dataclass(frozen=True, slots=True)
60
+ class ColumnRow:
61
+ """A column that lacks values: the set size of the plot, with the link to its
62
+ column page."""
63
+
64
+ field: str
65
+ display: str
66
+ position: int
67
+ missing: int
68
+ share: str
69
+ href: str | None
70
+
71
+
72
+ @dataclass(frozen=True, slots=True)
73
+ class PatternRow:
74
+ """A listed pattern: the exact set of columns some records lack a value in."""
75
+
76
+ names: tuple[str, ...]
77
+ size: int
78
+ count: int
79
+ share: str
80
+
81
+
82
+ @dataclass(frozen=True, slots=True)
83
+ class MissingSection:
84
+ """The combinations of missing values of one dataset, as its section of
85
+ ``charts-missing.html`` prints and draws them. ``data`` is what ``charts.js``
86
+ reads: the columns in document order, their counts, and each listed pattern as
87
+ its count and the positions of its columns."""
88
+
89
+ dataset: str
90
+ result: MissingPatternsResult
91
+ lacking: int
92
+ columns: list[ColumnRow]
93
+ patterns: list[PatternRow]
94
+ lines: list[InsightLine]
95
+ data: dict[str, object] = field(default_factory=dict)
96
+
97
+ @property
98
+ def drawn(self) -> int:
99
+ """The patterns the plot draws at first."""
100
+ return min(DRAWN, len(self.patterns))
101
+
102
+
103
+ @dataclass(frozen=True, slots=True)
104
+ class LeftOut:
105
+ """A dataset without a section on a chart page, and why (a key of ``LEFT_OUT_REASONS``)."""
106
+
107
+ topic: str
108
+ dataset: str
109
+ reason: str
110
+
111
+ @property
112
+ def words(self) -> str:
113
+ """The reason in words."""
114
+ return LEFT_OUT_REASONS[self.reason]
115
+
116
+
117
+ def _share(part: int, whole: int) -> str:
118
+ return f"{part / whole:.1%}" if whole else "0%"
119
+
120
+
121
+ def _reason(profile: ReportProfile, dataset: str) -> str:
122
+ """Why a dataset has no combinations, from the plan of the second pass."""
123
+ deep = profile.analyses.deep if profile.analyses is not None else None
124
+ if deep is None:
125
+ return "analysis_failed"
126
+ for candidate in deep.plan.candidates:
127
+ if candidate.analyzer == "missing_patterns" and candidate.dataset == dataset:
128
+ if "too_many_columns" in candidate.applicability.reasons:
129
+ return "too_many_columns"
130
+ return "analysis_failed"
131
+ return "no_missing_values"
132
+
133
+
134
+ def missing_sections(
135
+ profile: ReportProfile,
136
+ column_links: Mapping[tuple[str, str], str] | None = None,
137
+ ) -> tuple[list[MissingSection], list[LeftOut]]:
138
+ """The sections of ``charts-missing.html``, one per dataset with combinations
139
+ counted, in the order of the report, and the datasets left out with their reason.
140
+
141
+ ``column_links`` maps a dataset and a field id to the href of its column page,
142
+ relative to the folder of the detail pages. A result that names a column the
143
+ report withholds is left out whole: its counts would describe that column.
144
+ """
145
+ links = column_links or {}
146
+ found: dict[str, MissingPatternsResult] = {}
147
+ deep = profile.analyses.deep if profile.analyses is not None else None
148
+ for item in deep.analyses if deep is not None else []:
149
+ if item.analyzer != "missing_patterns" or item.status not in ("complete", "limited"):
150
+ continue
151
+ if isinstance(item.result, MissingPatternsResult):
152
+ found[item.dataset] = item.result
153
+ sections: list[MissingSection] = []
154
+ left: list[LeftOut] = []
155
+ for dataset in profile.datasets:
156
+ exposure = {field.id: field.exposure for field in dataset.fields}
157
+ result = found.get(dataset.id)
158
+ if result is None:
159
+ left.append(LeftOut("missing", dataset.id, _reason(profile, dataset.id)))
160
+ continue
161
+ if any(exposure.get(column.field) in _HIDDEN for column in result.columns):
162
+ left.append(LeftOut("missing", dataset.id, "withheld_columns"))
163
+ continue
164
+ sections.append(_section(dataset.id, result, links))
165
+ return sections, left
166
+
167
+
168
+ def _section(
169
+ dataset: str, result: MissingPatternsResult, links: Mapping[tuple[str, str], str]
170
+ ) -> MissingSection:
171
+ position = {column.field: index for index, column in enumerate(result.columns)}
172
+ names = {column.field: column.display for column in result.columns}
173
+ columns = sorted(
174
+ (
175
+ ColumnRow(
176
+ field=column.field,
177
+ display=column.display,
178
+ position=position[column.field],
179
+ missing=column.missing,
180
+ share=_share(column.missing, result.records),
181
+ href=links.get((dataset, column.field)),
182
+ )
183
+ for column in result.columns
184
+ ),
185
+ key=lambda row: (-row.missing, position[row.field]),
186
+ )
187
+ patterns = [
188
+ PatternRow(
189
+ names=tuple(names[name] for name in pattern.columns),
190
+ size=len(pattern.columns),
191
+ count=pattern.count,
192
+ share=_share(pattern.count, result.records),
193
+ )
194
+ for pattern in result.listed
195
+ ]
196
+ data: dict[str, object] = {
197
+ "records": result.records,
198
+ "columns": [column.display for column in result.columns],
199
+ "missing": [column.missing for column in result.columns],
200
+ "patterns": [
201
+ [pattern.count, [position[name] for name in pattern.columns]]
202
+ for pattern in result.listed
203
+ ],
204
+ "drawn": DRAWN,
205
+ }
206
+ return MissingSection(
207
+ dataset=dataset,
208
+ result=result,
209
+ lacking=result.records - result.complete_records,
210
+ columns=columns,
211
+ patterns=patterns,
212
+ lines=[block_line(block) for block in missing_blocks(result)],
213
+ data=data,
214
+ )
215
+
216
+
217
+ def column_charts(
218
+ sections: list[MissingSection], dataset: str, field_id: str
219
+ ) -> list[tuple[str, str]]:
220
+ """The chart pages that name a column, as ``(title, href)`` from a page of the
221
+ same folder: ``charts-missing.html#<dataset>`` for a column that lacks values."""
222
+ return [
223
+ (TOPIC_TITLES["missing"], f"{CHART_FILES['missing']}#{quote(section.dataset, safe='')}")
224
+ for section in sections
225
+ if section.dataset == dataset
226
+ and any(column.field == field_id for column in section.result.columns)
227
+ ]
@@ -56,6 +56,7 @@ from tabalyst.scanner.secondpass.models import (
56
56
  MeasureResult,
57
57
  MissingIdCopiesResult,
58
58
  MissingMatrixResult,
59
+ MissingPatternsResult,
59
60
  NumberResolution,
60
61
  PartsResult,
61
62
  PatternCounts,
@@ -219,6 +220,8 @@ def result_summary(result: AnalysisOutput) -> tuple[str, str]:
219
220
  return _drift_summary(result), EXACT
220
221
  if isinstance(result, MissingMatrixResult):
221
222
  return _matrix_summary(result), EXACT
223
+ if isinstance(result, MissingPatternsResult):
224
+ return _patterns_summary(result), _exact_unless_partial(result.complete)
222
225
  if isinstance(result, DateOrderResult):
223
226
  return _order_summary(result), EXACT
224
227
  if isinstance(result, ArrayProfileResult):
@@ -405,6 +408,20 @@ def _matrix_summary(result: MissingMatrixResult) -> str:
405
408
  return text
406
409
 
407
410
 
411
+ def _patterns_summary(result: MissingPatternsResult) -> str:
412
+ lacking = result.records - result.complete_records
413
+ seen = f"{result.distinct:,}" if result.complete else f"at least {result.distinct:,}"
414
+ text = (
415
+ f"{lacking:,} records lack a value in at least one of {len(result.columns):,} columns, "
416
+ f"in {seen} combinations"
417
+ )
418
+ if result.listed:
419
+ top = result.listed[0]
420
+ names = {column.field: column.display for column in result.columns}
421
+ text += f"; the most frequent, {', '.join(names[field] for field in top.columns)} ({top.count:,})"
422
+ return text
423
+
424
+
408
425
  def _order_summary(result: DateOrderResult) -> str:
409
426
  text = f"{result.compared:,} records compared, {result.broken:,} with the first date after the second"
410
427
  skipped = sum(result.excluded.model_dump().values())