pointblank 0.14.0__tar.gz → 0.15.0__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 (431) hide show
  1. {pointblank-0.14.0 → pointblank-0.15.0}/CITATION.cff +1 -1
  2. {pointblank-0.14.0 → pointblank-0.15.0}/PKG-INFO +2 -1
  3. {pointblank-0.14.0 → pointblank-0.15.0}/docs/_quarto.yml +5 -0
  4. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/draft-validation.qmd +6 -6
  5. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/index.qmd +1 -0
  6. pointblank-0.15.0/docs/user-guide/validation-reports.qmd +559 -0
  7. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_constants.py +63 -0
  8. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_interrogation.py +883 -1
  9. pointblank-0.15.0/pointblank/_spec_utils.py +1015 -0
  10. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_utils.py +14 -4
  11. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_utils_ai.py +28 -3
  12. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/assistant.py +1 -1
  13. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/api-docs.txt +1599 -76
  14. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/draft.py +52 -3
  15. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/validate.py +1686 -275
  16. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank.egg-info/PKG-INFO +2 -1
  17. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank.egg-info/SOURCES.txt +5 -0
  18. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank.egg-info/requires.txt +1 -0
  19. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank_mcp_server/pointblank_server.py +2 -2
  20. {pointblank-0.14.0 → pointblank-0.15.0}/pyproject.toml +1 -0
  21. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_briefs_global_local_html/validation_report_briefs_global_local.html +4 -4
  22. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_briefs_html/validation_report_with_briefs.html +3 -3
  23. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test__utils_ai.py +11 -5
  24. pointblank-0.15.0/tests/test_col_vals_increasing_decreasing.py +260 -0
  25. pointblank-0.15.0/tests/test_col_vals_within_spec.py +925 -0
  26. pointblank-0.15.0/tests/test_tbl_match.py +1716 -0
  27. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_validate.py +598 -0
  28. {pointblank-0.14.0 → pointblank-0.15.0}/.github/CODE_OF_CONDUCT.md +0 -0
  29. {pointblank-0.14.0 → pointblank-0.15.0}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  30. {pointblank-0.14.0 → pointblank-0.15.0}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  31. {pointblank-0.14.0 → pointblank-0.15.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
  32. {pointblank-0.14.0 → pointblank-0.15.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  33. {pointblank-0.14.0 → pointblank-0.15.0}/.github/SECURITY.md +0 -0
  34. {pointblank-0.14.0 → pointblank-0.15.0}/.github/workflows/ci-docs.yaml +0 -0
  35. {pointblank-0.14.0 → pointblank-0.15.0}/.github/workflows/ci-tests.yaml +0 -0
  36. {pointblank-0.14.0 → pointblank-0.15.0}/.github/workflows/code-checks.yaml +0 -0
  37. {pointblank-0.14.0 → pointblank-0.15.0}/.gitignore +0 -0
  38. {pointblank-0.14.0 → pointblank-0.15.0}/.pre-commit-config.yaml +0 -0
  39. {pointblank-0.14.0 → pointblank-0.15.0}/.vscode/settings.json +0 -0
  40. {pointblank-0.14.0 → pointblank-0.15.0}/CONTRIBUTING.md +0 -0
  41. {pointblank-0.14.0 → pointblank-0.15.0}/LICENSE +0 -0
  42. {pointblank-0.14.0 → pointblank-0.15.0}/Makefile +0 -0
  43. {pointblank-0.14.0 → pointblank-0.15.0}/README.md +0 -0
  44. {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/game_revenue.csv +0 -0
  45. {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/global_sales.csv +0 -0
  46. {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/global_sales_dataset.qmd +0 -0
  47. {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/nycflights.csv +0 -0
  48. {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/small_table.csv +0 -0
  49. {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/worldcities.csv +0 -0
  50. {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/x-01-parquet.qmd +0 -0
  51. {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/x-02-duckdb.qmd +0 -0
  52. {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/x-03-sqlite.qmd +0 -0
  53. {pointblank-0.14.0 → pointblank-0.15.0}/docs/.gitignore +0 -0
  54. {pointblank-0.14.0 → pointblank-0.15.0}/docs/_extensions/machow/interlinks/.gitignore +0 -0
  55. {pointblank-0.14.0 → pointblank-0.15.0}/docs/_extensions/machow/interlinks/_extension.yml +0 -0
  56. {pointblank-0.14.0 → pointblank-0.15.0}/docs/_extensions/machow/interlinks/interlinks.lua +0 -0
  57. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/fav-logo.png +0 -0
  58. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-info-worldcities-csv.png +0 -0
  59. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-info-worldcities-github-csv.png +0 -0
  60. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-make-template.png +0 -0
  61. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-missing-worldcities-csv.png +0 -0
  62. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-preview-game_revenue-all-columns.png +0 -0
  63. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-preview-game_revenue-column-names.png +0 -0
  64. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-preview-game_revenue-column-range.png +0 -0
  65. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-preview-worldcities-csv-no-row-numbers.png +0 -0
  66. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-preview-worldcities-csv.png +0 -0
  67. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-run-worldcities_validation-extracts.png +0 -0
  68. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-run-worldcities_validation-fail-on-warning.png +0 -0
  69. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-run-worldcities_validation-output.png +0 -0
  70. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-run-worldcities_validation.png +0 -0
  71. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-scan-worldcities-csv.png +0 -0
  72. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-exit-code.png +0 -0
  73. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-multi-check.png +0 -0
  74. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-rows-complete-worldcities-csv.png +0 -0
  75. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-rows-distinct-worldcities-csv.png +0 -0
  76. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-show-extract.png +0 -0
  77. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-worldcities-gt-0-population.png +0 -0
  78. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-worldcities-not-null-city_name.png +0 -0
  79. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-write-extract.png +0 -0
  80. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-draft-validation-report.png +0 -0
  81. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.de.png +0 -0
  82. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.es.png +0 -0
  83. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.fr.png +0 -0
  84. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.it.png +0 -0
  85. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.ja.png +0 -0
  86. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.ko.png +0 -0
  87. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.nl.png +0 -0
  88. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.png +0 -0
  89. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.pt-BR.png +0 -0
  90. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.zh-CN.png +0 -0
  91. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-step-report.png +0 -0
  92. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-tabular-report.png +0 -0
  93. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank_logo.svg +0 -0
  94. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/posit-logo-black.svg +0 -0
  95. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/validation-table-diagram.png +0 -0
  96. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/validation-test-units.png +0 -0
  97. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/.gitignore +0 -0
  98. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-cicd-workflows.gif +0 -0
  99. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-cicd-workflows.tape +0 -0
  100. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-complete-workflow.gif +0 -0
  101. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-complete-workflow.tape +0 -0
  102. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-data-exploration.gif +0 -0
  103. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-data-exploration.tape +0 -0
  104. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-essential-validations.gif +0 -0
  105. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-essential-validations.tape +0 -0
  106. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-getting-started.gif +0 -0
  107. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-getting-started.tape +0 -0
  108. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-using-polars.gif +0 -0
  109. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-using-polars.tape +0 -0
  110. {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/validation.py +0 -0
  111. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/all-about-actions/index.qmd +0 -0
  112. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/index.qmd +0 -0
  113. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/intro-pointblank/index.qmd +0 -0
  114. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/intro-pointblank/pointblank-localized.png +0 -0
  115. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/intro-pointblank/step_report.png +0 -0
  116. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/intro-pointblank/validation-table-diagram.png +0 -0
  117. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/intro-pointblank/validation-test-units.png +0 -0
  118. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/lets-workshop-together/index.qmd +0 -0
  119. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/advanced-in-sidebar.png +0 -0
  120. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/breadth-and-depth.png +0 -0
  121. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/explanation-of-visual.png +0 -0
  122. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/index.qmd +0 -0
  123. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/links-in-guide.png +0 -0
  124. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/segments.png +0 -0
  125. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/step-report.png +0 -0
  126. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/validation-three-things.png +0 -0
  127. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/pointblank_blog_logo.png +0 -0
  128. {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/validation-libs-2025/index.qmd +0 -0
  129. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/01-starter/index.qmd +0 -0
  130. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/02-advanced/index.qmd +0 -0
  131. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/03-data-extracts/index.qmd +0 -0
  132. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/04-sundered-data/index.qmd +0 -0
  133. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/05-step-report-column-check/index.qmd +0 -0
  134. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/06-step-report-schema-check/index.qmd +0 -0
  135. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/07-validation-with-actions/index.qmd +0 -0
  136. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/08-validation-with-final-actions/index.qmd +0 -0
  137. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/apply-checks-to-several-columns/index.qmd +0 -0
  138. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/check-for-freshness/index.qmd +0 -0
  139. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/check-row-column-counts/index.qmd +0 -0
  140. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/checks-for-missing/index.qmd +0 -0
  141. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/cli-interactive/index.qmd +0 -0
  142. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/col-vals-custom-expr/index.qmd +0 -0
  143. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/column-selector-functions/index.qmd +0 -0
  144. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/comparisons-across-columns/index.qmd +0 -0
  145. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/custom-validation-specially/index.qmd +0 -0
  146. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/data/game_revenue.parquet +0 -0
  147. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/datetime-validations/index.qmd +0 -0
  148. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/expect-no-duplicate-rows/index.qmd +0 -0
  149. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/expect-no-duplicate-values/index.qmd +0 -0
  150. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/expect-text-pattern/index.qmd +0 -0
  151. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/failure-thresholds/index.qmd +0 -0
  152. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/advanced_validation.png +0 -0
  153. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/data_extracts.png +0 -0
  154. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/starter_validation.png +0 -0
  155. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/step_report_column_schema.png +0 -0
  156. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/step_report_column_values.png +0 -0
  157. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/sundered_data.png +0 -0
  158. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/validation_with_actions.png +0 -0
  159. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/validation_with_final_actions.png +0 -0
  160. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/index.qmd +0 -0
  161. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/mutate-table-in-step/index.qmd +0 -0
  162. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/numeric-comparisons/index.qmd +0 -0
  163. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/schema-check/index.qmd +0 -0
  164. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/set-membership/index.qmd +0 -0
  165. {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/using-parquet-data/index.qmd +0 -0
  166. {pointblank-0.14.0 → pointblank-0.15.0}/docs/index.qmd +0 -0
  167. {pointblank-0.14.0 → pointblank-0.15.0}/docs/scripts/post-render.py +0 -0
  168. {pointblank-0.14.0 → pointblank-0.15.0}/docs/styles.css +0 -0
  169. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/actions.qmd +0 -0
  170. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/assertions.qmd +0 -0
  171. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/briefs.qmd +0 -0
  172. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/cli-data-inspection.qmd +0 -0
  173. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/cli-data-validation.qmd +0 -0
  174. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/cli-reference.qmd +0 -0
  175. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/col-summary-tbl.qmd +0 -0
  176. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/column-selection-patterns.qmd +0 -0
  177. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/expressions.qmd +0 -0
  178. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/extracts.qmd +0 -0
  179. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/installation.qmd +0 -0
  180. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/langs.qmd +0 -0
  181. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/mcp-quick-start.qmd +0 -0
  182. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/missing-vals-tbl.qmd +0 -0
  183. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/preprocessing.qmd +0 -0
  184. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/preview.qmd +0 -0
  185. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/schema-validation.qmd +0 -0
  186. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/segmentation.qmd +0 -0
  187. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/step-reports.qmd +0 -0
  188. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/sundering.qmd +0 -0
  189. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/thresholds.qmd +0 -0
  190. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/validation-methods.qmd +0 -0
  191. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/validation-overview.qmd +0 -0
  192. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/yaml-reference.qmd +0 -0
  193. {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/yaml-validation-workflows.qmd +0 -0
  194. {pointblank-0.14.0 → pointblank-0.15.0}/images/pointblank-tabular-report.png +0 -0
  195. {pointblank-0.14.0 → pointblank-0.15.0}/images/pointblank_logo.svg +0 -0
  196. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/__init__.py +0 -0
  197. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_constants_translations.py +0 -0
  198. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_datascan_utils.py +0 -0
  199. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_typing.py +0 -0
  200. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_utils_check_args.py +0 -0
  201. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_utils_html.py +0 -0
  202. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/actions.py +0 -0
  203. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/cli.py +0 -0
  204. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/column.py +0 -0
  205. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/compare.py +0 -0
  206. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/game_revenue-duckdb.zip +0 -0
  207. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/game_revenue.zip +0 -0
  208. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/global_sales-duckdb.zip +0 -0
  209. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/global_sales.zip +0 -0
  210. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/nycflights-duckdb.zip +0 -0
  211. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/nycflights.zip +0 -0
  212. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/polars-api-docs.txt +0 -0
  213. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/small_table-duckdb.zip +0 -0
  214. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/small_table.zip +0 -0
  215. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/README.md +0 -0
  216. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/complex_preprocessing.json +0 -0
  217. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/complex_preprocessing.pkl +0 -0
  218. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/generate_test_files.py +0 -0
  219. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/multiple_steps.json +0 -0
  220. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/multiple_steps.pkl +0 -0
  221. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/narwhals_function.json +0 -0
  222. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/narwhals_function.pkl +0 -0
  223. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/no_preprocessing.json +0 -0
  224. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/no_preprocessing.pkl +0 -0
  225. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/pandas_compatible.json +0 -0
  226. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/pandas_compatible.pkl +0 -0
  227. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/preprocessing_functions.py +0 -0
  228. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/simple_preprocessing.json +0 -0
  229. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/simple_preprocessing.pkl +0 -0
  230. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/datascan.py +0 -0
  231. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/scan_profile.py +0 -0
  232. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/scan_profile_stats.py +0 -0
  233. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/schema.py +0 -0
  234. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/segments.py +0 -0
  235. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/thresholds.py +0 -0
  236. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/yaml.py +0 -0
  237. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank.egg-info/dependency_links.txt +0 -0
  238. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank.egg-info/entry_points.txt +0 -0
  239. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank.egg-info/top_level.txt +0 -0
  240. {pointblank-0.14.0 → pointblank-0.15.0}/pointblank_mcp_server/readme.md +0 -0
  241. {pointblank-0.14.0 → pointblank-0.15.0}/setup.cfg +0 -0
  242. {pointblank-0.14.0 → pointblank-0.15.0}/tests/__init__.py +0 -0
  243. {pointblank-0.14.0 → pointblank-0.15.0}/tests/manual_tests/schema_step_reports.qmd +0 -0
  244. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_datascan/test_col_summary_tbl_duckdb_snap/col_summary_html_duckdb.html +0 -0
  245. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_datascan/test_col_summary_tbl_pandas_snap/col_summary_html_pandas.html +0 -0
  246. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_datascan/test_col_summary_tbl_polars_snap/col_summary_html_polars.html +0 -0
  247. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_comprehensive_validation_report_html_snap/comprehensive_validation_report.html +0 -0
  248. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_01/schema_step_report_01-0.txt +0 -0
  249. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_01_1/schema_step_report_01-1.txt +0 -0
  250. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_01_2/schema_step_report_01-2.txt +0 -0
  251. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_01_3/schema_step_report_01-3.txt +0 -0
  252. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_02/schema_step_report_02-0.txt +0 -0
  253. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_02_1/schema_step_report_02-1.txt +0 -0
  254. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_02_2/schema_step_report_02-2.txt +0 -0
  255. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_02_3/schema_step_report_02-3.txt +0 -0
  256. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_03/schema_step_report_03-0.txt +0 -0
  257. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_03_1/schema_step_report_03-1.txt +0 -0
  258. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_03_2/schema_step_report_03-2.txt +0 -0
  259. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_03_3/schema_step_report_03-3.txt +0 -0
  260. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_04/schema_step_report_04-0.txt +0 -0
  261. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_05/schema_step_report_05-0.txt +0 -0
  262. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_06/schema_step_report_06-0.txt +0 -0
  263. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_07/schema_step_report_07-0.txt +0 -0
  264. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_08/schema_step_report_08-0.txt +0 -0
  265. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_09/schema_step_report_09-0.txt +0 -0
  266. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_10/schema_step_report_10-0.txt +0 -0
  267. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_11/schema_step_report_11-0.txt +0 -0
  268. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_12/schema_step_report_12-0.txt +0 -0
  269. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_13/schema_step_report_13-0.txt +0 -0
  270. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_14/schema_step_report_14-0.txt +0 -0
  271. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_14_1/schema_step_report_14-1.txt +0 -0
  272. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_15/schema_step_report_15-0.txt +0 -0
  273. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_15_1/schema_step_report_15-1.txt +0 -0
  274. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_16/schema_step_report_16-0.txt +0 -0
  275. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_16_1/schema_step_report_16-1.txt +0 -0
  276. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_17/schema_step_report_17-0.txt +0 -0
  277. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_17_1/schema_step_report_17-1.txt +0 -0
  278. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_18/schema_step_report_18-0.txt +0 -0
  279. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_18_1/schema_step_report_18-1.txt +0 -0
  280. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_19/schema_step_report_19-0.txt +0 -0
  281. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_19_1/schema_step_report_19-1.txt +0 -0
  282. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_20/schema_step_report_20-0.txt +0 -0
  283. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_20_1/schema_step_report_20-1.txt +0 -0
  284. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_21/schema_step_report_21-0.txt +0 -0
  285. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_21_1/schema_step_report_21-1.txt +0 -0
  286. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_21_2/schema_step_report_21-2.txt +0 -0
  287. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_21_3/schema_step_report_21-3.txt +0 -0
  288. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_22/schema_step_report_22-0.txt +0 -0
  289. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_22_1/schema_step_report_22-1.txt +0 -0
  290. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_23/schema_step_report_23-0.txt +0 -0
  291. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_23_1/schema_step_report_23-1.txt +0 -0
  292. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_24/schema_step_report_24-0.txt +0 -0
  293. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_24_1/schema_step_report_24-1.txt +0 -0
  294. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_24_2/schema_step_report_24-2.txt +0 -0
  295. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_24_3/schema_step_report_24-3.txt +0 -0
  296. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_25/schema_step_report_25-0.txt +0 -0
  297. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_1/schema_step_report_25-1.txt +0 -0
  298. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_2/schema_step_report_25-2.txt +0 -0
  299. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_3/schema_step_report_25-3.txt +0 -0
  300. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_4/schema_step_report_25-4.txt +0 -0
  301. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_5/schema_step_report_25-5.txt +0 -0
  302. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_01-0.txt +0 -0
  303. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_02-0.txt +0 -0
  304. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_03-0.txt +0 -0
  305. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_04-0.txt +0 -0
  306. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_05-0.txt +0 -0
  307. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_06-0.txt +0 -0
  308. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_07-0.txt +0 -0
  309. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_08-0.txt +0 -0
  310. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_09-0.txt +0 -0
  311. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_10-0.txt +0 -0
  312. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_11-0.txt +0 -0
  313. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_12-0.txt +0 -0
  314. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_13-0.txt +0 -0
  315. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-0.txt +0 -0
  316. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-1.txt +0 -0
  317. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-0.txt +0 -0
  318. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-1.txt +0 -0
  319. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-0.txt +0 -0
  320. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-1.txt +0 -0
  321. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-0.txt +0 -0
  322. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-1.txt +0 -0
  323. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-0.txt +0 -0
  324. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-1.txt +0 -0
  325. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-0.txt +0 -0
  326. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-1.txt +0 -0
  327. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-0.txt +0 -0
  328. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-1.txt +0 -0
  329. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-0.txt +0 -0
  330. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-1.txt +0 -0
  331. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-2.txt +0 -0
  332. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-3.txt +0 -0
  333. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-0.txt +0 -0
  334. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-1.txt +0 -0
  335. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-0.txt +0 -0
  336. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-1.txt +0 -0
  337. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-0.txt +0 -0
  338. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-1.txt +0 -0
  339. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-2.txt +0 -0
  340. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-3.txt +0 -0
  341. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-0.txt +0 -0
  342. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-1.txt +0 -0
  343. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-2.txt +0 -0
  344. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-3.txt +0 -0
  345. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-4.txt +0 -0
  346. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-5.txt +0 -0
  347. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_no_interrogation_validation_report_html_snap/no_interrogation_validation_report.html +0 -0
  348. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_no_steps_validation_report_html_snap/no_steps_validation_report.html +0 -0
  349. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
  350. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet/validation_report.json +0 -0
  351. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd/validation_report.json +0 -0
  352. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl/validation_report.json +0 -0
  353. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pyspark/validation_report.json +0 -0
  354. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
  355. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
  356. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_parquet/validation_report.json +0 -0
  357. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pd/validation_report.json +0 -0
  358. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pl/validation_report.json +0 -0
  359. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pyspark/validation_report.json +0 -0
  360. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
  361. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_segments_html/duckdb/validation_report_segments.html +0 -0
  362. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_segments_html/pandas/validation_report_segments.html +0 -0
  363. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_segments_html/polars/validation_report_segments.html +0 -0
  364. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/polars/validation_report_segments_with_pre.html +0 -0
  365. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/validation_report_segments_with_pre.html +0 -0
  366. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_duckdb/validation_report.json +0 -0
  367. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_parquet/validation_report.json +0 -0
  368. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pd/validation_report.json +0 -0
  369. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pl/validation_report.json +0 -0
  370. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pyspark/validation_report.json +0 -0
  371. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_sqlite/validation_report.json +0 -0
  372. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_memtable_variable_names/selector_helper_functions_no_match.html +0 -0
  373. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_pd_variable_names/selector_helper_functions_no_match.html +0 -0
  374. {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_pl_variable_names/selector_helper_functions_no_match.html +0 -0
  375. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/parquet_data/data_a.parquet +0 -0
  376. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/parquet_data/data_b.parquet +0 -0
  377. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/parquet_data/subdir/nested_data.parquet +0 -0
  378. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_sales/status=cancelled/0.parquet +0 -0
  379. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_sales/status=delivered/0.parquet +0 -0
  380. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_sales/status=pending/0.parquet +0 -0
  381. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_sales/status=returned/0.parquet +0 -0
  382. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_sales/status=shipped/0.parquet +0 -0
  383. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_small_table/f=high/0.parquet +0 -0
  384. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_small_table/f=low/0.parquet +0 -0
  385. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_small_table/f=mid/0.parquet +0 -0
  386. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/taxi_part_01.parquet +0 -0
  387. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/taxi_part_02.parquet +0 -0
  388. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/taxi_part_03.parquet +0 -0
  389. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/taxi_sample.parquet +0 -0
  390. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_dates_times_text.ddb +0 -0
  391. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_dates_times_text.parquet +0 -0
  392. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_dates_times_text.sqlite +0 -0
  393. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_true_dates_times.ddb +0 -0
  394. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_xyz.ddb +0 -0
  395. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_xyz.parquet +0 -0
  396. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_xyz.sqlite +0 -0
  397. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_xyz_missing.ddb +0 -0
  398. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_xyz_missing.parquet +0 -0
  399. {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_xyz_missing.sqlite +0 -0
  400. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test__interrogation.py +0 -0
  401. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test__utils.py +0 -0
  402. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test__utils_check_args.py +0 -0
  403. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_actions.py +0 -0
  404. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_assistant.py +0 -0
  405. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_cli.py +0 -0
  406. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_column.py +0 -0
  407. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_compare.py +0 -0
  408. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_datascan.py +0 -0
  409. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_draft.py +0 -0
  410. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_mcp_integration.py +0 -0
  411. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_mcp_server.py +0 -0
  412. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_meta.py +0 -0
  413. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_prompt_method.py +0 -0
  414. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_scan_profile_stats.py +0 -0
  415. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_schema.py +0 -0
  416. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_segments.py +0 -0
  417. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_serialization_compat.py +0 -0
  418. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_serialization_edge_cases.py +0 -0
  419. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_thresholds.py +0 -0
  420. {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_yaml.py +0 -0
  421. {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.ar.md +0 -0
  422. {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.de.md +0 -0
  423. {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.es.md +0 -0
  424. {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.fr.md +0 -0
  425. {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.hi.md +0 -0
  426. {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.it.md +0 -0
  427. {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.ja.md +0 -0
  428. {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.ko.md +0 -0
  429. {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.nl.md +0 -0
  430. {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.pt-BR.md +0 -0
  431. {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.zh-CN.md +0 -0
@@ -3,7 +3,7 @@ message: 'If you wish to cite the "Pointblank" package use:'
3
3
  type: software
4
4
  license: MIT
5
5
  title: "Pointblank: Find out if your data is what you think it is"
6
- version: 0.13.4
6
+ version: 0.14.0
7
7
  abstract: Validate data in Polars and Pandas DataFrames and database tables.
8
8
  Validation pipelines can be made using easily-readable, consecutive validation
9
9
  steps. Upon execution of the validation plan, several reporting options are available.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pointblank
3
- Version: 0.14.0
3
+ Version: 0.15.0
4
4
  Summary: Find out if your data is what you think it is.
5
5
  Author-email: Richard Iannone <riannone@me.com>
6
6
  License: MIT License
@@ -59,6 +59,7 @@ Provides-Extra: generate
59
59
  Requires-Dist: chatlas>=0.3.0; extra == "generate"
60
60
  Requires-Dist: anthropic[bedrock]>=0.45.2; extra == "generate"
61
61
  Requires-Dist: openai>=1.63.0; extra == "generate"
62
+ Requires-Dist: httpx>=0.28.0; extra == "generate"
62
63
  Requires-Dist: shiny>=1.3.0; extra == "generate"
63
64
  Provides-Extra: mcp
64
65
  Requires-Dist: mcp[cli]>=1.10.1; extra == "mcp"
@@ -88,6 +88,7 @@ website:
88
88
  - user-guide/yaml-reference.qmd
89
89
  - section: "Post Interrogation"
90
90
  contents:
91
+ - user-guide/validation-reports.qmd
91
92
  - user-guide/step-reports.qmd
92
93
  - user-guide/extracts.qmd
93
94
  - user-guide/sundering.qmd
@@ -156,9 +157,12 @@ quartodoc:
156
157
  - name: Validate.col_vals_outside
157
158
  - name: Validate.col_vals_in_set
158
159
  - name: Validate.col_vals_not_in_set
160
+ - name: Validate.col_vals_increasing
161
+ - name: Validate.col_vals_decreasing
159
162
  - name: Validate.col_vals_null
160
163
  - name: Validate.col_vals_not_null
161
164
  - name: Validate.col_vals_regex
165
+ - name: Validate.col_vals_within_spec
162
166
  - name: Validate.col_vals_expr
163
167
  - name: Validate.rows_distinct
164
168
  - name: Validate.rows_complete
@@ -166,6 +170,7 @@ quartodoc:
166
170
  - name: Validate.col_schema_match
167
171
  - name: Validate.row_count_match
168
172
  - name: Validate.col_count_match
173
+ - name: Validate.tbl_match
169
174
  - name: Validate.conjointly
170
175
  - name: Validate.specially
171
176
  - name: Validate.prompt
@@ -66,7 +66,7 @@ data = pb.load_dataset(dataset="global_sales", tbl_type="polars")
66
66
  # Generate a validation plan
67
67
  pb.DraftValidation(
68
68
  data=data,
69
- model="anthropic:claude-3-7-sonnet-latest",
69
+ model="anthropic:claude-sonnet-4-5",
70
70
  api_key="your_api_key_here" # Replace with your actual API key
71
71
  )
72
72
  ```
@@ -159,7 +159,7 @@ api_key = os.getenv("ANTHROPIC_API_KEY")
159
159
 
160
160
  draft_validation = pb.DraftValidation(
161
161
  data=data,
162
- model="anthropic:claude-3-7-sonnet-latest",
162
+ model="anthropic:claude-sonnet-4-5",
163
163
  api_key=api_key
164
164
  )
165
165
  ```
@@ -179,7 +179,7 @@ If your API keys have standard names (like `ANTHROPIC_API_KEY` or `OPENAI_API_KE
179
179
  # No API key needed if stored in .env with standard names
180
180
  draft_validation = pb.DraftValidation(
181
181
  data=data,
182
- model="anthropic:claude-3-7-sonnet-latest"
182
+ model="anthropic:claude-sonnet-4-5"
183
183
  )
184
184
  ```
185
185
 
@@ -191,7 +191,7 @@ Here's an example of a validation plan that might be generated by `DraftValidati
191
191
  ```python
192
192
  pb.DraftValidation(
193
193
  pb.load_dataset(dataset="nycflights", tbl_type="duckdb",
194
- model="anthropic:claude-3-7-sonnet-latest"
194
+ model="anthropic:claude-sonnet-4-5"
195
195
  )
196
196
  ```
197
197
 
@@ -269,7 +269,7 @@ When using `DraftValidation`, you specify the model in the format `"provider:mod
269
269
 
270
270
  ```python
271
271
  # Using Anthropic's Claude model
272
- pb.DraftValidation(data=data, model="anthropic:claude-3-7-sonnet-latest")
272
+ pb.DraftValidation(data=data, model="anthropic:claude-sonnet-4-5")
273
273
 
274
274
  # Using OpenAI's GPT model
275
275
  pb.DraftValidation(data=data, model="openai:gpt-4-turbo")
@@ -285,7 +285,7 @@ pb.DraftValidation(data=data, model="bedrock:anthropic.claude-3-sonnet-20240229-
285
285
 
286
286
  Different models have different capabilities when it comes to generating validation plans:
287
287
 
288
- - Anthropic Claude 3.7 Sonnet generally provides the most comprehensive and accurate validation
288
+ - Anthropic Claude Sonnet 4.5 generally provides the most comprehensive and accurate validation
289
289
  plans
290
290
  - OpenAI GPT-4 models also perform well
291
291
  - Local models through Ollama can be useful for private data but they currently have reduced
@@ -206,6 +206,7 @@ The *Advanced Validation* section explores more specialized validation technique
206
206
  After validating your data, the *Post Interrogation* section helps you analyze and respond to
207
207
  results:
208
208
 
209
+ - [Validation Reports](validation-reports.qmd): Understand and customize the validation report table
209
210
  - [Step Reports](step-reports.qmd): View detailed results for individual validation steps
210
211
  - [Data Extracts](extracts.qmd): Extract and analyze failing data
211
212
  - [Sundering Validated Data](sundering.qmd): Split data based on validation results
@@ -0,0 +1,559 @@
1
+ ---
2
+ title: "Validation Reports"
3
+ jupyter: python3
4
+ toc-expand: 2
5
+ html-table-processing: none
6
+ ---
7
+
8
+ ```{python}
9
+ #| echo: false
10
+ #| output: false
11
+ import pointblank as pb
12
+ ```
13
+
14
+ After interrogating your data with a validation plan, Pointblank automatically generates a
15
+ *validation report*. That tabular report comprehensively summarizes the results of all validation
16
+ steps. It'll be your primary tool for understanding data quality at a glance, identifying issues,
17
+ and communicating results to stakeholders.
18
+
19
+ Validation reports are [Great Tables](https://github.com/posit-dev/great-tables) objects that
20
+ provide rich information about each validation step. It includes: identifying information for the
21
+ step, pass/fail statistics, threshold exceedances, and visual status indicators. The report makes it
22
+ easy to quickly assess overall data quality and pinpoint specific areas that need attention.
23
+
24
+ ## Viewing the Validation Report
25
+
26
+ The most straightforward way to view a validation report is to simply print the `Validate` object
27
+ after calling `interrogate()`:
28
+
29
+ ```{python}
30
+ import pointblank as pb
31
+ import polars as pl
32
+
33
+ # Sample data
34
+ data = pl.DataFrame({
35
+ "id": range(1, 11),
36
+ "value": [120, 85, 47, 210, 30, 155, 175, 95, 205, 140],
37
+ "category": ["A", "B", "C", "A", "D", "B", "A", "E", "A", "C"],
38
+ "ratio": [0.5, 0.7, 0.3, 1.2, 0.8, 0.9, 0.4, 1.5, 0.6, 0.2],
39
+ })
40
+
41
+ # Create and interrogate a validation
42
+ validation = (
43
+ pb.Validate(data=data, tbl_name="sales_data")
44
+ .col_vals_gt(columns="value", value=50, brief=True)
45
+ .col_vals_in_set(columns="category", set=["A", "B", "C"], brief=True)
46
+ .col_exists(columns=["id", "value"], brief=True)
47
+ .interrogate()
48
+ )
49
+
50
+ # Display the validation report
51
+ validation
52
+ ```
53
+
54
+ In a notebook or interactive environment, simply typing the validation object name displays the
55
+ report automatically. In a script or REPL, you might need to explicitly call
56
+ `validation.get_tabular_report().show()` to display the table.
57
+
58
+ ::: {.callout-note}
59
+ You can display a validation report even before calling `interrogate()`. The report will show your
60
+ validation plan with all the steps you've defined, but it won't contain any interrogation results.
61
+ Additionally, validation steps that use column selection patterns (like validating multiple columns
62
+ at once) won't be expanded into individual rows yet, as that expansion happens during interrogation.
63
+ :::
64
+
65
+ ## Understanding Report Components
66
+
67
+ The validation report table consists of several key components that work together to provide a
68
+ complete picture of your data quality:
69
+
70
+ #### Report Header
71
+
72
+ The report header (title and subtitle area) contains important metadata about the validation:
73
+
74
+ - **Title**: by default, shows "Pointblank Validation" but can be customized
75
+ - **Label**: your custom label for the validation (if provided via the `label=` parameter)
76
+ - **Table Information**: the table name and type (Polars, Pandas, DuckDB, etc.)
77
+ - **Thresholds**: the warning, error, and critical threshold values used
78
+
79
+ This header information provides essential context for interpreting the validation results,
80
+ especially when sharing reports with stakeholders or reviewing historical validations.
81
+
82
+ #### Report Footer
83
+
84
+ The report footer contains a timestamp showing when the interrogation was performed. This timestamp
85
+ helps track when data quality checks were executed, which is especially useful when archiving
86
+ reports or monitoring data quality over time.
87
+
88
+ ::: {.callout-note}
89
+ Throughout this documentation, the footer is hidden in example reports for brevity. This is
90
+ controlled through a global option (see the section on controlling header and footer display later
91
+ in this guide). In practice, including the footer provides valuable timestamp information for
92
+ tracking when validations were executed.
93
+ :::
94
+
95
+ ### Report Columns
96
+
97
+ The validation report table includes the following columns, each providing specific information
98
+ about the validation steps:
99
+
100
+ #### Status Indicator (first column, unlabeled)
101
+
102
+ The first column is an unlabeled vertical colored bar that provides instant visual feedback about
103
+ each step's status:
104
+
105
+ - **Green**: all test units passed the validation
106
+ - **Light green (semi-transparent)**: some test units failed but no thresholds were exceeded
107
+ - **Gray**: the 'warning' threshold was exceeded
108
+ - **Yellow**: the 'error' threshold was exceeded
109
+ - **Red**: the 'critical' threshold was exceeded
110
+
111
+ This visual indicator allows you to quickly scan the report and identify problem areas.
112
+
113
+ #### Step Number (second column, unlabeled)
114
+
115
+ The second column is unlabeled and contains the sequential step number, starting from 1. This number
116
+ is used when referencing specific steps in other methods like `get_step_report(i=2)` or when
117
+ extracting data from specific validation steps.
118
+
119
+ #### TYPE
120
+
121
+ The TYPE column displays the validation method name along with an icon that visually represents the
122
+ type of validation being performed. The validation method indicates what aspect of data quality is
123
+ being checked, such as:
124
+
125
+ - `col_vals_gt()`: column values greater than
126
+ - `col_vals_in_set()`: column values in a set
127
+ - `col_exists()`: column existence check
128
+ - `rows_distinct()`: row uniqueness check
129
+ - and many others...
130
+
131
+ When you provide a brief message (via `brief=True` for auto-generated briefs or `brief="custom
132
+ text"` for custom messages), it appears within the TYPE column below the validation method name.
133
+ These briefs provide human-readable explanations of what each validation step is checking, making
134
+ the report more accessible to non-technical stakeholders.
135
+
136
+ ```{python}
137
+ # Example showing brief messages in the TYPE column
138
+ validation_with_briefs = (
139
+ pb.Validate(data=data, tbl_name="sales_data")
140
+ .col_vals_gt(
141
+ columns="value",
142
+ value=50,
143
+ brief="Sales values should always exceed the $50 threshold"
144
+ )
145
+ .col_vals_in_set(
146
+ columns="category",
147
+ set=["A", "B", "C"],
148
+ brief=True # Auto-generated brief
149
+ )
150
+ .interrogate()
151
+ )
152
+
153
+ validation_with_briefs
154
+ ```
155
+
156
+ In the above report, you'll see the custom brief message appear below the `col_vals_gt` method name
157
+ in the first step, and an automatically generated brief below `col_vals_in_set` in the second step.
158
+
159
+ #### COLUMNS
160
+
161
+ The column(s) being validated in this step. For validation methods that don't target specific
162
+ columns (like `row_count_match`), this will show an em dash (—).
163
+
164
+ #### VALUES
165
+
166
+ The comparison value(s) or criteria used in the validation. For example:
167
+
168
+ - for `col_vals_gt(value=100)`, this shows `100`
169
+ - for `col_vals_in_set(set=["A", "B", "C"])`, this shows `A | B | C`
170
+ - for existence checks, this shows an em dash (—)
171
+
172
+ #### TBL
173
+
174
+ Icons indicating whether any preprocessing or segmentation was applied:
175
+
176
+ - **Table icon**: standard validation on the original data
177
+ - **Transformation icon**: preprocessing function was applied via `pre=`
178
+ - **Segmentation icon**: data was segmented via `segments=`
179
+
180
+ These icons help you understand if you're validating transformed or segmented data.
181
+
182
+ #### EVAL
183
+
184
+ Indicates whether the validation step was evaluated:
185
+
186
+ - **Checkmark**: step was successfully evaluated
187
+ - **Error icon**: an evaluation error occurred (e.g., column not found)
188
+ - **Inactive icon**: step was marked as inactive
189
+
190
+ This column is crucial for identifying validation steps that couldn't be executed properly.
191
+
192
+ #### UNITS
193
+
194
+ The number of units tested in this validation step. A 'test unit' is the atomic unit being
195
+ validated, which varies by validation type:
196
+
197
+ - for column value checks: each cell in the target column(s)
198
+ - for row checks: each row
199
+ - for table checks: typically 1 (the table itself)
200
+
201
+ This number is formatted with locale-appropriate thousand separators for readability. Also, since
202
+ space is limited, values are often abbreviated so a figure like 43,534 will appear as `43.5K`.
203
+
204
+ #### PASS
205
+
206
+ The number and fraction of test units that passed the validation, displayed as:
207
+
208
+ ```
209
+ n_passed
210
+ f_passed
211
+ ```
212
+
213
+ For example, the cell with
214
+
215
+ ```
216
+ 8
217
+ 0.80
218
+ ```
219
+
220
+ means 8 test units passed out of the total, representing an 80% success rate (though `f_passed` is
221
+ always expressed as a fractional value from `0` to `1`).
222
+
223
+ #### FAIL
224
+
225
+ The number and fraction of test units that failed the validation, displayed similarly to PASS:
226
+
227
+ ```
228
+ n_failed
229
+ f_failed
230
+ ```
231
+
232
+ For example, the cell with
233
+
234
+ ```
235
+ 2
236
+ 0.20
237
+ ```
238
+
239
+ means 2 test units failed, representing a 20% failure rate from a fractional value of `0.20`. Note
240
+ that this fractional `f_failed` value is what's used to set failure thresholds for 'warning',
241
+ 'error', and 'critical' states.
242
+
243
+ #### W, E, C (Warning, Error, Critical)
244
+
245
+ Three columns showing whether each threshold level was exceeded for the three different states.
246
+
247
+ - **Long dash**: threshold wasn't set for a state
248
+ - **Empty colored circle**: threshold was set but wasn't exceeded for a given state
249
+ - **Filled colored circle**: threshold was set and exceeded
250
+
251
+ In terms of colors, the 'warning' state is gray, the 'error' state is yellow, and the 'critical'
252
+ state is red.
253
+
254
+ Having visual indicators makes it easy to identify which validation steps have crossed into warning,
255
+ error, or critical territory.
256
+
257
+ #### EXT
258
+
259
+ Indicates whether failing row data was extracted for this step:
260
+
261
+ - **Em dash (—)**: no extract available
262
+ - **Download button**: click to download failing rows as CSV
263
+
264
+ When extracts are available, you can download them directly from the report for further analysis or
265
+ to share with data stewards who need to fix the issues.
266
+
267
+ ## Understanding Validation Status
268
+
269
+ The validation report helps you quickly understand the overall status of your data:
270
+
271
+ - **All green status indicators**: all validations passed completely
272
+ - **Light green indicators**: minor failures below warning threshold
273
+ - **Gray, yellow, or red indicators**: threshold exceedances requiring attention
274
+ - **Error icons in EVAL column**: validation steps that couldn't be evaluated
275
+
276
+ By scanning the status indicators column, you can immediately identify which validation steps need
277
+ attention and prioritize your data quality efforts accordingly.
278
+
279
+ ## Customizing the Report Title
280
+
281
+ You can customize the validation report's title using the `title=` parameter in
282
+ `get_tabular_report()`. This is particularly useful when generating multiple reports or when you
283
+ want to provide more context:
284
+
285
+ ```{python}
286
+ # Default title
287
+ validation.get_tabular_report()
288
+ ```
289
+
290
+ ```{python}
291
+ # Use the table name as the title
292
+ validation.get_tabular_report(title=":tbl_name:")
293
+ ```
294
+
295
+ ```{python}
296
+ # Provide a custom title (supports Markdown)
297
+ validation.get_tabular_report(title="**Sales Data** Quality Report")
298
+ ```
299
+
300
+ ```{python}
301
+ # No title
302
+ validation.get_tabular_report(title=":none:")
303
+ ```
304
+
305
+ The title customization options are:
306
+
307
+ - `":default:"` (default): shows `"Pointblank Validation"`
308
+ - `":tbl_name:"`: uses the table name from `tbl_name=` parameter
309
+ - `":none:"`: hides the title completely
310
+ - Any string: custom title text (Markdown is supported)
311
+
312
+ ## Customizing with Great Tables
313
+
314
+ Since the validation report is a Great Tables object, you can leverage the full power of Great
315
+ Tables to customize its appearance. This allows you to match your organization's branding, highlight
316
+ specific information, or adjust the presentation for different audiences.
317
+
318
+ ### Guide to Internal Column Names
319
+
320
+ When working with Great Tables methods to customize the validation report, you'll need to use the
321
+ *internal column names* rather than the display labels you see in the rendered table. This is
322
+ because Great Tables operates on the underlying data table structure, where columns have technical
323
+ names that differ from their user-facing labels.
324
+
325
+ For example, the column labeled `"STEP"` in the report is actually stored internally as `"i"`, and
326
+ the `"TYPE"` column is internally named `"type_upd"`. Most Great Tables methods that target specific
327
+ columns (like `tab_style()`, `cols_width()`, `cols_hide()`, etc.) require these internal names.
328
+
329
+ Here's the complete mapping from display labels to internal column names:
330
+
331
+ 1. Status indicator (no label): `"status_color"`
332
+ 2. Step number (no label): `"i"`
333
+ 3. `TYPE`: `"type_upd"`
334
+ 4. `COLUMNS`: `"columns_upd"`
335
+ 5. `VALUES`: `"values_upd"`
336
+ 6. `TBL`: `"tbl"`
337
+ 7. `EVAL`: `"eval"`
338
+ 8. `UNITS`: `"test_units"`
339
+ 9. `PASS`: `"pass"`
340
+ 10. `FAIL`: `"fail"`
341
+ 11. `W`: `"w_upd"`
342
+ 12. `E`: `"e_upd"`
343
+ 13. `C`: `"c_upd"`
344
+ 14. `EXT`: `"extract_upd"`
345
+
346
+ Always use these internal names when calling Great Tables methods. Using the display labels (like
347
+ `"STEP"` or `"TYPE"`) will result in errors since these labels only exist in the rendered output,
348
+ not in the underlying data structure.
349
+
350
+ In the examples that follow, you'll see how to use these internal column names to customize various
351
+ aspects of the validation report.
352
+
353
+ ### Adding Custom Styling
354
+
355
+ You can apply custom styles to the report table:
356
+
357
+ ```{python}
358
+ from great_tables import style, loc
359
+
360
+ # Get the report as a Great Tables object
361
+ report = validation.get_tabular_report()
362
+
363
+ # Add custom styling using internal column names
364
+ report = (
365
+ report
366
+ .tab_style(
367
+ style=style.fill(color="#F0F8FF"),
368
+ locations=loc.body(columns="i") # Internal name for step number
369
+ )
370
+ .tab_style(
371
+ style=style.text(weight="bold"),
372
+ locations=loc.body(columns="type_upd") # Internal name for TYPE
373
+ )
374
+ )
375
+
376
+ report
377
+ ```
378
+
379
+ ### Modifying Column Widths
380
+
381
+ Adjust column widths to optimize the layout:
382
+
383
+ ```{python}
384
+ report = (
385
+ validation
386
+ .get_tabular_report()
387
+ .cols_width(
388
+ cases={
389
+ "status_color": "20px", # Status indicator column
390
+ "i": "40px", # Step number column
391
+ "type_upd": "170px", # TYPE column
392
+ "columns_upd": "100px", # COLUMNS column
393
+ }
394
+ )
395
+ )
396
+
397
+ report
398
+ ```
399
+
400
+ ### Hiding Columns
401
+
402
+ Hide specific columns that aren't relevant for your audience:
403
+
404
+ ```{python}
405
+ # Hide the TBL and EVAL columns for a cleaner presentation (using internal names)
406
+ report = (
407
+ validation
408
+ .get_tabular_report()
409
+ .cols_hide(columns=["tbl", "eval"]) # Use internal column names
410
+ )
411
+
412
+ report
413
+ ```
414
+
415
+ ### Adding a Source Note
416
+
417
+ Add information about data source or validation context:
418
+
419
+ ```{python}
420
+ report = (
421
+ validation
422
+ .get_tabular_report()
423
+ .tab_source_note(
424
+ source_note="Data validated on 2025-10-10 | Production database snapshot"
425
+ )
426
+ )
427
+
428
+ report
429
+ ```
430
+
431
+ ## Exporting the Report
432
+
433
+ Great Tables provides multiple export options for sharing validation reports:
434
+
435
+ ```python
436
+ # Save as a standalone HTML file
437
+ validation.get_tabular_report().write_raw_html("validation_report.html")
438
+
439
+ # Save as a PNG image
440
+ validation.get_tabular_report().save("validation_report.png")
441
+
442
+ # Open in browser
443
+ validation.get_tabular_report().show("browser")
444
+ ```
445
+
446
+ ## Controlling Header and Footer Display
447
+
448
+ You can control whether the header and footer appear in the validation report:
449
+
450
+ ```{python}
451
+ # Hide the footer
452
+ validation.get_tabular_report(incl_footer=False)
453
+ ```
454
+
455
+ ```{python}
456
+ # Hide the header
457
+ validation.get_tabular_report(incl_header=False)
458
+ ```
459
+
460
+ ```{python}
461
+ # Hide both
462
+ validation.get_tabular_report(incl_header=False, incl_footer=False)
463
+ ```
464
+
465
+ You can also set these preferences globally using `pb.config()`:
466
+
467
+ ```python
468
+ # Set global preferences
469
+ pb.config(report_incl_header=True, report_incl_footer=False)
470
+ ```
471
+
472
+ ## Best Practices for Validation Reports
473
+
474
+ Here are some guidelines for creating effective validation reports:
475
+
476
+ #### 1. Use Descriptive Table Names and Labels
477
+
478
+ Provide meaningful names and labels to make reports self-documenting:
479
+
480
+ ```python
481
+ validation = pb.Validate(
482
+ data=sales_df,
483
+ tbl_name="Q3_2025_sales",
484
+ label="Quarterly sales data validation for financial reporting"
485
+ )
486
+ ```
487
+
488
+ #### 2. Add Brief Messages for Stakeholder Reports
489
+
490
+ When sharing reports with non-technical stakeholders, always include briefs:
491
+
492
+ ```python
493
+ .col_vals_between(
494
+ columns="price",
495
+ left=0, right=10000,
496
+ brief="Product prices must be between $0 and $10,000"
497
+ )
498
+ ```
499
+
500
+ #### 3. Set Appropriate Thresholds
501
+
502
+ Configure thresholds that align with your data quality requirements:
503
+
504
+ ```python
505
+ validation = pb.Validate(
506
+ data=data,
507
+ tbl_name="customer_data",
508
+ thresholds=pb.Thresholds(
509
+ warning=0.01, # 1% failure triggers warning
510
+ error=0.05, # 5% failure triggers error
511
+ critical=0.10 # 10% failure triggers critical
512
+ )
513
+ )
514
+ ```
515
+
516
+ #### 4. Customize for Your Audience
517
+
518
+ Tailor the report presentation to your audience:
519
+
520
+ - **Technical teams**: include all columns, show preprocessing indicators
521
+ - **Management**: hide technical columns, emphasize status indicators
522
+ - **Data stewards**: include extract download buttons, detailed briefs
523
+
524
+ #### 5. Combine with Other Reporting Tools
525
+
526
+ Use validation reports alongside other Pointblank features:
527
+
528
+ - **Step reports**: drill down into specific failing steps with `get_step_report()`
529
+ - **Extracts**: use `get_data_extracts()` to get all failing data for analysis
530
+ - **Sundered data**: use `get_sundered_data()` to split data into passing/failing sets
531
+
532
+ #### 6. Archive Reports for Trend Analysis
533
+
534
+ Save validation reports over time to track data quality trends:
535
+
536
+ ```python
537
+ from datetime import datetime
538
+
539
+ # Save with timestamp
540
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
541
+ validation.get_tabular_report().write_raw_html(f"validation_report_{timestamp}.html")
542
+ ```
543
+
544
+ ## Conclusion
545
+
546
+ The validation report is your primary interface for understanding data quality after running a
547
+ validation. By providing a comprehensive overview of all validation steps, visual status indicators,
548
+ and detailed statistics, it enables you to:
549
+
550
+ - quickly assess overall data quality across multiple dimensions
551
+ - identify specific validation steps that need attention
552
+ - communicate data quality status to technical and non-technical stakeholders
553
+ - track threshold exceedances and their severity levels
554
+ - access failing data through extract downloads
555
+
556
+ Combined with customization options from Great Tables, you can create reports that perfectly match
557
+ your organization's needs and workflows. Whether you're validating data in an interactive notebook,
558
+ generating automated quality reports, or presenting findings to stakeholders, the validation report
559
+ provides the clarity and detail you need to maintain high data quality standards.