pointblank 0.11.5__tar.gz → 0.11.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 (395) hide show
  1. {pointblank-0.11.5 → pointblank-0.11.6}/PKG-INFO +2 -2
  2. {pointblank-0.11.5 → pointblank-0.11.6}/docs/_quarto.yml +3 -0
  3. pointblank-0.11.6/docs/user-guide/yaml-reference.qmd +657 -0
  4. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/yaml-validation-workflows.qmd +70 -28
  5. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/validate.py +3 -1
  6. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/yaml.py +162 -19
  7. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank.egg-info/PKG-INFO +2 -2
  8. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank.egg-info/SOURCES.txt +1 -0
  9. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank.egg-info/requires.txt +1 -1
  10. {pointblank-0.11.5 → pointblank-0.11.6}/pyproject.toml +1 -1
  11. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_yaml.py +630 -1
  12. {pointblank-0.11.5 → pointblank-0.11.6}/.github/CODE_OF_CONDUCT.md +0 -0
  13. {pointblank-0.11.5 → pointblank-0.11.6}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  14. {pointblank-0.11.5 → pointblank-0.11.6}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  15. {pointblank-0.11.5 → pointblank-0.11.6}/.github/ISSUE_TEMPLATE/question.md +0 -0
  16. {pointblank-0.11.5 → pointblank-0.11.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  17. {pointblank-0.11.5 → pointblank-0.11.6}/.github/SECURITY.md +0 -0
  18. {pointblank-0.11.5 → pointblank-0.11.6}/.github/workflows/ci-docs.yaml +0 -0
  19. {pointblank-0.11.5 → pointblank-0.11.6}/.github/workflows/ci-tests.yaml +0 -0
  20. {pointblank-0.11.5 → pointblank-0.11.6}/.github/workflows/code-checks.yaml +0 -0
  21. {pointblank-0.11.5 → pointblank-0.11.6}/.gitignore +0 -0
  22. {pointblank-0.11.5 → pointblank-0.11.6}/.pre-commit-config.yaml +0 -0
  23. {pointblank-0.11.5 → pointblank-0.11.6}/.vscode/settings.json +0 -0
  24. {pointblank-0.11.5 → pointblank-0.11.6}/CITATION.cff +0 -0
  25. {pointblank-0.11.5 → pointblank-0.11.6}/CONTRIBUTING.md +0 -0
  26. {pointblank-0.11.5 → pointblank-0.11.6}/LICENSE +0 -0
  27. {pointblank-0.11.5 → pointblank-0.11.6}/Makefile +0 -0
  28. {pointblank-0.11.5 → pointblank-0.11.6}/README.md +0 -0
  29. {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/game_revenue.csv +0 -0
  30. {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/global_sales.csv +0 -0
  31. {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/global_sales_dataset.qmd +0 -0
  32. {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/nycflights.csv +0 -0
  33. {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/small_table.csv +0 -0
  34. {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/worldcities.csv +0 -0
  35. {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/x-01-parquet.qmd +0 -0
  36. {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/x-02-duckdb.qmd +0 -0
  37. {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/x-03-sqlite.qmd +0 -0
  38. {pointblank-0.11.5 → pointblank-0.11.6}/docs/.gitignore +0 -0
  39. {pointblank-0.11.5 → pointblank-0.11.6}/docs/_extensions/machow/interlinks/.gitignore +0 -0
  40. {pointblank-0.11.5 → pointblank-0.11.6}/docs/_extensions/machow/interlinks/_extension.yml +0 -0
  41. {pointblank-0.11.5 → pointblank-0.11.6}/docs/_extensions/machow/interlinks/interlinks.lua +0 -0
  42. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/fav-logo.png +0 -0
  43. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-info-worldcities-csv.png +0 -0
  44. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-info-worldcities-github-csv.png +0 -0
  45. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-make-template.png +0 -0
  46. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-missing-worldcities-csv.png +0 -0
  47. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-preview-game_revenue-all-columns.png +0 -0
  48. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-preview-game_revenue-column-names.png +0 -0
  49. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-preview-game_revenue-column-range.png +0 -0
  50. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-preview-worldcities-csv-no-row-numbers.png +0 -0
  51. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-preview-worldcities-csv.png +0 -0
  52. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-run-worldcities_validation-extracts.png +0 -0
  53. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-run-worldcities_validation-fail-on-warning.png +0 -0
  54. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-run-worldcities_validation-output.png +0 -0
  55. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-run-worldcities_validation.png +0 -0
  56. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-scan-worldcities-csv.png +0 -0
  57. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-exit-code.png +0 -0
  58. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-multi-check.png +0 -0
  59. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-rows-complete-worldcities-csv.png +0 -0
  60. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-rows-distinct-worldcities-csv.png +0 -0
  61. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-show-extract.png +0 -0
  62. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-worldcities-gt-0-population.png +0 -0
  63. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-worldcities-not-null-city_name.png +0 -0
  64. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-write-extract.png +0 -0
  65. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.de.png +0 -0
  66. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.es.png +0 -0
  67. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.fr.png +0 -0
  68. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.it.png +0 -0
  69. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.ja.png +0 -0
  70. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.ko.png +0 -0
  71. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.nl.png +0 -0
  72. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.png +0 -0
  73. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.pt-BR.png +0 -0
  74. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.zh-CN.png +0 -0
  75. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-step-report.png +0 -0
  76. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-tabular-report.png +0 -0
  77. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank_logo.svg +0 -0
  78. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/posit-logo-black.svg +0 -0
  79. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/validation-table-diagram.png +0 -0
  80. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/validation-test-units.png +0 -0
  81. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/.gitignore +0 -0
  82. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-cicd-workflows.gif +0 -0
  83. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-cicd-workflows.tape +0 -0
  84. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-complete-workflow.gif +0 -0
  85. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-complete-workflow.tape +0 -0
  86. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-data-exploration.gif +0 -0
  87. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-data-exploration.tape +0 -0
  88. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-essential-validations.gif +0 -0
  89. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-essential-validations.tape +0 -0
  90. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-getting-started.gif +0 -0
  91. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-getting-started.tape +0 -0
  92. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-using-polars.gif +0 -0
  93. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-using-polars.tape +0 -0
  94. {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/validation.py +0 -0
  95. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/all-about-actions/index.qmd +0 -0
  96. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/index.qmd +0 -0
  97. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/intro-pointblank/index.qmd +0 -0
  98. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/intro-pointblank/pointblank-localized.png +0 -0
  99. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/intro-pointblank/step_report.png +0 -0
  100. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/intro-pointblank/validation-table-diagram.png +0 -0
  101. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/intro-pointblank/validation-test-units.png +0 -0
  102. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/lets-workshop-together/index.qmd +0 -0
  103. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/advanced-in-sidebar.png +0 -0
  104. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/breadth-and-depth.png +0 -0
  105. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/explanation-of-visual.png +0 -0
  106. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/index.qmd +0 -0
  107. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/links-in-guide.png +0 -0
  108. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/segments.png +0 -0
  109. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/step-report.png +0 -0
  110. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/validation-three-things.png +0 -0
  111. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/pointblank_blog_logo.png +0 -0
  112. {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/validation-libs-2025/index.qmd +0 -0
  113. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/01-starter/index.qmd +0 -0
  114. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/02-advanced/index.qmd +0 -0
  115. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/03-data-extracts/index.qmd +0 -0
  116. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/04-sundered-data/index.qmd +0 -0
  117. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/05-step-report-column-check/index.qmd +0 -0
  118. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/06-step-report-schema-check/index.qmd +0 -0
  119. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/07-validation-with-actions/index.qmd +0 -0
  120. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/08-validation-with-final-actions/index.qmd +0 -0
  121. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/apply-checks-to-several-columns/index.qmd +0 -0
  122. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/check-for-freshness/index.qmd +0 -0
  123. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/check-row-column-counts/index.qmd +0 -0
  124. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/checks-for-missing/index.qmd +0 -0
  125. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/cli-interactive/index.qmd +0 -0
  126. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/col-vals-custom-expr/index.qmd +0 -0
  127. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/column-selector-functions/index.qmd +0 -0
  128. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/comparisons-across-columns/index.qmd +0 -0
  129. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/custom-validation-specially/index.qmd +0 -0
  130. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/data/game_revenue.parquet +0 -0
  131. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/expect-no-duplicate-rows/index.qmd +0 -0
  132. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/expect-no-duplicate-values/index.qmd +0 -0
  133. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/expect-text-pattern/index.qmd +0 -0
  134. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/failure-thresholds/index.qmd +0 -0
  135. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/advanced_validation.png +0 -0
  136. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/data_extracts.png +0 -0
  137. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/starter_validation.png +0 -0
  138. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/step_report_column_schema.png +0 -0
  139. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/step_report_column_values.png +0 -0
  140. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/sundered_data.png +0 -0
  141. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/validation_with_actions.png +0 -0
  142. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/validation_with_final_actions.png +0 -0
  143. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/index.qmd +0 -0
  144. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/mutate-table-in-step/index.qmd +0 -0
  145. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/numeric-comparisons/index.qmd +0 -0
  146. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/schema-check/index.qmd +0 -0
  147. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/set-membership/index.qmd +0 -0
  148. {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/using-parquet-data/index.qmd +0 -0
  149. {pointblank-0.11.5 → pointblank-0.11.6}/docs/index.qmd +0 -0
  150. {pointblank-0.11.5 → pointblank-0.11.6}/docs/scripts/post-render.py +0 -0
  151. {pointblank-0.11.5 → pointblank-0.11.6}/docs/styles.css +0 -0
  152. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/actions.qmd +0 -0
  153. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/assertions.qmd +0 -0
  154. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/briefs.qmd +0 -0
  155. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/cli-data-inspection.qmd +0 -0
  156. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/cli-data-validation.qmd +0 -0
  157. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/col-summary-tbl.qmd +0 -0
  158. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/column-selection-patterns.qmd +0 -0
  159. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/draft-validation.qmd +0 -0
  160. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/expressions.qmd +0 -0
  161. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/extracts.qmd +0 -0
  162. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/index.qmd +0 -0
  163. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/installation.qmd +0 -0
  164. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/langs.qmd +0 -0
  165. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/missing-vals-tbl.qmd +0 -0
  166. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/preprocessing.qmd +0 -0
  167. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/preview.qmd +0 -0
  168. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/schema-validation.qmd +0 -0
  169. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/segmentation.qmd +0 -0
  170. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/step-reports.qmd +0 -0
  171. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/sundering.qmd +0 -0
  172. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/thresholds.qmd +0 -0
  173. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/validation-methods.qmd +0 -0
  174. {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/validation-overview.qmd +0 -0
  175. {pointblank-0.11.5 → pointblank-0.11.6}/images/pointblank-tabular-report.png +0 -0
  176. {pointblank-0.11.5 → pointblank-0.11.6}/images/pointblank_logo.svg +0 -0
  177. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/__init__.py +0 -0
  178. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_constants.py +0 -0
  179. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_constants_docs.py +0 -0
  180. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_constants_translations.py +0 -0
  181. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_datascan_utils.py +0 -0
  182. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_interrogation.py +0 -0
  183. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_typing.py +0 -0
  184. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_utils.py +0 -0
  185. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_utils_check_args.py +0 -0
  186. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_utils_html.py +0 -0
  187. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/actions.py +0 -0
  188. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/assistant.py +0 -0
  189. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/cli.py +0 -0
  190. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/column.py +0 -0
  191. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/compare.py +0 -0
  192. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/api-docs.txt +0 -0
  193. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/game_revenue-duckdb.zip +0 -0
  194. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/game_revenue.zip +0 -0
  195. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/global_sales-duckdb.zip +0 -0
  196. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/global_sales.zip +0 -0
  197. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/nycflights-duckdb.zip +0 -0
  198. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/nycflights.zip +0 -0
  199. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/polars-api-docs.txt +0 -0
  200. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/small_table-duckdb.zip +0 -0
  201. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/small_table.zip +0 -0
  202. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/datascan.py +0 -0
  203. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/draft.py +0 -0
  204. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/scan_profile.py +0 -0
  205. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/scan_profile_stats.py +0 -0
  206. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/schema.py +0 -0
  207. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/tf.py +0 -0
  208. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/thresholds.py +0 -0
  209. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank.egg-info/dependency_links.txt +0 -0
  210. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank.egg-info/entry_points.txt +0 -0
  211. {pointblank-0.11.5 → pointblank-0.11.6}/pointblank.egg-info/top_level.txt +0 -0
  212. {pointblank-0.11.5 → pointblank-0.11.6}/setup.cfg +0 -0
  213. {pointblank-0.11.5 → pointblank-0.11.6}/tests/__init__.py +0 -0
  214. {pointblank-0.11.5 → pointblank-0.11.6}/tests/manual_tests/schema_step_reports.qmd +0 -0
  215. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_datascan/test_col_summary_tbl_duckdb_snap/col_summary_html_duckdb.html +0 -0
  216. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_datascan/test_col_summary_tbl_pandas_snap/col_summary_html_pandas.html +0 -0
  217. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_datascan/test_col_summary_tbl_polars_snap/col_summary_html_polars.html +0 -0
  218. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_comprehensive_validation_report_html_snap/comprehensive_validation_report.html +0 -0
  219. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_01/schema_step_report_01-0.txt +0 -0
  220. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_01_1/schema_step_report_01-1.txt +0 -0
  221. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_01_2/schema_step_report_01-2.txt +0 -0
  222. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_01_3/schema_step_report_01-3.txt +0 -0
  223. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_02/schema_step_report_02-0.txt +0 -0
  224. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_02_1/schema_step_report_02-1.txt +0 -0
  225. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_02_2/schema_step_report_02-2.txt +0 -0
  226. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_02_3/schema_step_report_02-3.txt +0 -0
  227. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_03/schema_step_report_03-0.txt +0 -0
  228. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_03_1/schema_step_report_03-1.txt +0 -0
  229. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_03_2/schema_step_report_03-2.txt +0 -0
  230. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_03_3/schema_step_report_03-3.txt +0 -0
  231. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_04/schema_step_report_04-0.txt +0 -0
  232. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_05/schema_step_report_05-0.txt +0 -0
  233. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_06/schema_step_report_06-0.txt +0 -0
  234. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_07/schema_step_report_07-0.txt +0 -0
  235. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_08/schema_step_report_08-0.txt +0 -0
  236. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_09/schema_step_report_09-0.txt +0 -0
  237. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_10/schema_step_report_10-0.txt +0 -0
  238. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_11/schema_step_report_11-0.txt +0 -0
  239. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_12/schema_step_report_12-0.txt +0 -0
  240. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_13/schema_step_report_13-0.txt +0 -0
  241. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_14/schema_step_report_14-0.txt +0 -0
  242. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_14_1/schema_step_report_14-1.txt +0 -0
  243. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_15/schema_step_report_15-0.txt +0 -0
  244. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_15_1/schema_step_report_15-1.txt +0 -0
  245. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_16/schema_step_report_16-0.txt +0 -0
  246. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_16_1/schema_step_report_16-1.txt +0 -0
  247. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_17/schema_step_report_17-0.txt +0 -0
  248. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_17_1/schema_step_report_17-1.txt +0 -0
  249. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_18/schema_step_report_18-0.txt +0 -0
  250. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_18_1/schema_step_report_18-1.txt +0 -0
  251. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_19/schema_step_report_19-0.txt +0 -0
  252. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_19_1/schema_step_report_19-1.txt +0 -0
  253. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_20/schema_step_report_20-0.txt +0 -0
  254. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_20_1/schema_step_report_20-1.txt +0 -0
  255. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_21/schema_step_report_21-0.txt +0 -0
  256. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_21_1/schema_step_report_21-1.txt +0 -0
  257. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_21_2/schema_step_report_21-2.txt +0 -0
  258. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_21_3/schema_step_report_21-3.txt +0 -0
  259. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_22/schema_step_report_22-0.txt +0 -0
  260. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_22_1/schema_step_report_22-1.txt +0 -0
  261. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_23/schema_step_report_23-0.txt +0 -0
  262. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_23_1/schema_step_report_23-1.txt +0 -0
  263. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_24/schema_step_report_24-0.txt +0 -0
  264. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_24_1/schema_step_report_24-1.txt +0 -0
  265. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_24_2/schema_step_report_24-2.txt +0 -0
  266. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_24_3/schema_step_report_24-3.txt +0 -0
  267. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_25/schema_step_report_25-0.txt +0 -0
  268. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_1/schema_step_report_25-1.txt +0 -0
  269. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_2/schema_step_report_25-2.txt +0 -0
  270. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_3/schema_step_report_25-3.txt +0 -0
  271. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_4/schema_step_report_25-4.txt +0 -0
  272. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_5/schema_step_report_25-5.txt +0 -0
  273. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_01-0.txt +0 -0
  274. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_02-0.txt +0 -0
  275. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_03-0.txt +0 -0
  276. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_04-0.txt +0 -0
  277. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_05-0.txt +0 -0
  278. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_06-0.txt +0 -0
  279. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_07-0.txt +0 -0
  280. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_08-0.txt +0 -0
  281. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_09-0.txt +0 -0
  282. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_10-0.txt +0 -0
  283. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_11-0.txt +0 -0
  284. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_12-0.txt +0 -0
  285. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_13-0.txt +0 -0
  286. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-0.txt +0 -0
  287. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-1.txt +0 -0
  288. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-0.txt +0 -0
  289. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-1.txt +0 -0
  290. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-0.txt +0 -0
  291. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-1.txt +0 -0
  292. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-0.txt +0 -0
  293. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-1.txt +0 -0
  294. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-0.txt +0 -0
  295. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-1.txt +0 -0
  296. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-0.txt +0 -0
  297. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-1.txt +0 -0
  298. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-0.txt +0 -0
  299. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-1.txt +0 -0
  300. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-0.txt +0 -0
  301. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-1.txt +0 -0
  302. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-2.txt +0 -0
  303. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-3.txt +0 -0
  304. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-0.txt +0 -0
  305. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-1.txt +0 -0
  306. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-0.txt +0 -0
  307. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-1.txt +0 -0
  308. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-0.txt +0 -0
  309. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-1.txt +0 -0
  310. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-2.txt +0 -0
  311. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-3.txt +0 -0
  312. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-0.txt +0 -0
  313. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-1.txt +0 -0
  314. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-2.txt +0 -0
  315. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-3.txt +0 -0
  316. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-4.txt +0 -0
  317. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-5.txt +0 -0
  318. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_no_interrogation_validation_report_html_snap/no_interrogation_validation_report.html +0 -0
  319. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_no_steps_validation_report_html_snap/no_steps_validation_report.html +0 -0
  320. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_briefs_global_local_html/validation_report_briefs_global_local.html +0 -0
  321. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_briefs_html/validation_report_with_briefs.html +0 -0
  322. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
  323. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet/validation_report.json +0 -0
  324. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd/validation_report.json +0 -0
  325. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl/validation_report.json +0 -0
  326. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
  327. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
  328. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_parquet/validation_report.json +0 -0
  329. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pd/validation_report.json +0 -0
  330. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pl/validation_report.json +0 -0
  331. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
  332. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_segments_html/duckdb/validation_report_segments.html +0 -0
  333. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_segments_html/pandas/validation_report_segments.html +0 -0
  334. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_segments_html/polars/validation_report_segments.html +0 -0
  335. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/polars/validation_report_segments_with_pre.html +0 -0
  336. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/validation_report_segments_with_pre.html +0 -0
  337. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_duckdb/validation_report.json +0 -0
  338. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_parquet/validation_report.json +0 -0
  339. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pd/validation_report.json +0 -0
  340. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pl/validation_report.json +0 -0
  341. {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_sqlite/validation_report.json +0 -0
  342. {pointblank-0.11.5 → pointblank-0.11.6}/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
  343. {pointblank-0.11.5 → pointblank-0.11.6}/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
  344. {pointblank-0.11.5 → pointblank-0.11.6}/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
  345. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/parquet_data/data_a.parquet +0 -0
  346. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/parquet_data/data_b.parquet +0 -0
  347. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/parquet_data/subdir/nested_data.parquet +0 -0
  348. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_sales/status=cancelled/0.parquet +0 -0
  349. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_sales/status=delivered/0.parquet +0 -0
  350. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_sales/status=pending/0.parquet +0 -0
  351. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_sales/status=returned/0.parquet +0 -0
  352. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_sales/status=shipped/0.parquet +0 -0
  353. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_small_table/f=high/0.parquet +0 -0
  354. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_small_table/f=low/0.parquet +0 -0
  355. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_small_table/f=mid/0.parquet +0 -0
  356. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/taxi_part_01.parquet +0 -0
  357. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/taxi_part_02.parquet +0 -0
  358. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/taxi_part_03.parquet +0 -0
  359. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/taxi_sample.parquet +0 -0
  360. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_dates_times_text.ddb +0 -0
  361. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_dates_times_text.parquet +0 -0
  362. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_dates_times_text.sqlite +0 -0
  363. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_true_dates_times.ddb +0 -0
  364. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_xyz.ddb +0 -0
  365. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_xyz.parquet +0 -0
  366. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_xyz.sqlite +0 -0
  367. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_xyz_missing.ddb +0 -0
  368. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_xyz_missing.parquet +0 -0
  369. {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_xyz_missing.sqlite +0 -0
  370. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test__interrogation.py +0 -0
  371. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test__utils.py +0 -0
  372. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test__utils_check_args.py +0 -0
  373. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_actions.py +0 -0
  374. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_assistant.py +0 -0
  375. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_cli.py +0 -0
  376. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_column.py +0 -0
  377. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_compare.py +0 -0
  378. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_datascan.py +0 -0
  379. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_draft.py +0 -0
  380. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_meta.py +0 -0
  381. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_schema.py +0 -0
  382. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_tf.py +0 -0
  383. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_thresholds.py +0 -0
  384. {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_validate.py +0 -0
  385. {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.ar.md +0 -0
  386. {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.de.md +0 -0
  387. {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.es.md +0 -0
  388. {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.fr.md +0 -0
  389. {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.hi.md +0 -0
  390. {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.it.md +0 -0
  391. {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.ja.md +0 -0
  392. {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.ko.md +0 -0
  393. {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.nl.md +0 -0
  394. {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.pt-BR.md +0 -0
  395. {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.zh-CN.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pointblank
3
- Version: 0.11.5
3
+ Version: 0.11.6
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
@@ -43,7 +43,7 @@ License-File: LICENSE
43
43
  Requires-Dist: commonmark>=0.9.1
44
44
  Requires-Dist: importlib-metadata
45
45
  Requires-Dist: great_tables>=0.17.0
46
- Requires-Dist: narwhals>=1.41.0
46
+ Requires-Dist: narwhals>=1.45.0
47
47
  Requires-Dist: typing_extensions>=3.10.0.0
48
48
  Requires-Dist: requests>=2.31.0
49
49
  Requires-Dist: click>=8.0.0
@@ -79,7 +79,10 @@ website:
79
79
  - user-guide/schema-validation.qmd
80
80
  - user-guide/assertions.qmd
81
81
  - user-guide/draft-validation.qmd
82
+ - section: "YAML"
83
+ contents:
82
84
  - user-guide/yaml-validation-workflows.qmd
85
+ - user-guide/yaml-reference.qmd
83
86
  - section: "Post Interrogation"
84
87
  contents:
85
88
  - user-guide/step-reports.qmd
@@ -0,0 +1,657 @@
1
+ ---
2
+ title: YAML Reference
3
+ jupyter: python3
4
+ toc-expand: 2
5
+ html-table-processing: none
6
+ ---
7
+
8
+ This reference provides a comprehensive guide to all YAML keys and parameters supported by
9
+ Pointblank's YAML validation workflows. Use this document as a quick lookup when building validation
10
+ configurations.
11
+
12
+ ## Global Configuration Keys
13
+
14
+ ### Top-level Structure
15
+
16
+ ```yaml
17
+ tbl: data_source # REQUIRED: Data source specification
18
+ df_library: "polars" # OPTIONAL: DataFrame library ("polars", "pandas", "duckdb")
19
+ tbl_name: "Custom Table Name" # OPTIONAL: Human-readable table name
20
+ label: "Validation Description" # OPTIONAL: Description for the validation workflow
21
+ lang: "en" # OPTIONAL: Language code (default: "en")
22
+ locale: "en" # OPTIONAL: Locale setting (default: "en")
23
+ brief: "Global brief: {auto}" # OPTIONAL: Global brief template
24
+ thresholds: # OPTIONAL: Global failure thresholds
25
+ warning: 0.1
26
+ error: 0.2
27
+ critical: 0.3
28
+ actions: # OPTIONAL: Global failure actions
29
+ warning: "Warning message template"
30
+ error: "Error message template"
31
+ critical: "Critical message template"
32
+ highest_only: false
33
+ steps: # REQUIRED: List of validation steps
34
+ - validation_method_name
35
+ - validation_method_name:
36
+ parameter: value
37
+ ```
38
+
39
+ ### Data Source (`tbl`)
40
+
41
+ The `tbl` key specifies the data source and supports multiple formats:
42
+
43
+ ```yaml
44
+ # File paths
45
+ tbl: "data/file.csv"
46
+ tbl: "data/file.parquet"
47
+
48
+ # Built-in datasets
49
+ tbl: small_table
50
+ tbl: game_revenue
51
+ tbl: nycflights
52
+
53
+ # Python expressions for complex data loading
54
+ tbl:
55
+ python: |
56
+ pl.scan_csv("data.csv").filter(pl.col("date") >= "2024-01-01")
57
+ ```
58
+
59
+ ### DataFrame Library (`df_library`)
60
+
61
+ The `df_library` key controls which DataFrame library is used to load data sources. This parameter
62
+ affects both built-in datasets and file loading:
63
+
64
+ ```yaml
65
+ # Use Polars DataFrames (default)
66
+ df_library: polars
67
+
68
+ # Use Pandas DataFrames
69
+ df_library: pandas
70
+
71
+ # Use DuckDB tables (via Ibis)
72
+ df_library: duckdb
73
+ ```
74
+
75
+ Examples with different libraries:
76
+
77
+ ```yaml
78
+ # Load built-in dataset as Pandas DataFrame
79
+ tbl: small_table
80
+ df_library: pandas
81
+ steps:
82
+ - specially:
83
+ expr: "lambda df: df.assign(validation_result=df['a'] > 0)"
84
+
85
+ # Load CSV file as Polars DataFrame
86
+ tbl: "data/sales.csv"
87
+ df_library: polars
88
+ steps:
89
+ - col_vals_gt:
90
+ columns: amount
91
+ value: 0
92
+
93
+ # Load dataset as DuckDB table
94
+ tbl: nycflights
95
+ df_library: duckdb
96
+ steps:
97
+ - row_count_match:
98
+ count: 336776
99
+ ```
100
+
101
+ The `df_library` parameter is particularly useful when:
102
+
103
+ - using validation expressions that require specific DataFrame APIs (e.g., Pandas `.assign()`,
104
+ Polars `.select()`)
105
+ - integrating with existing pipelines that use a specific DataFrame library
106
+ - optimizing performance for different data sizes and operations
107
+ - ensuring compatibility with downstream processing steps
108
+
109
+ ### Global Thresholds
110
+
111
+ Thresholds define when validation failures trigger different severity levels:
112
+
113
+ ```yaml
114
+ thresholds:
115
+ warning: 0.05 # 5% failure rate triggers warning
116
+ error: 0.10 # 10% failure rate triggers error
117
+ critical: 0.15 # 15% failure rate triggers critical
118
+ ```
119
+
120
+ - values: numbers between 0 and 1 (percentages) or integers (row counts)
121
+ - levels: `warning`, `error`, `critical`
122
+
123
+ ### Global Actions
124
+
125
+ Actions define responses when thresholds are exceeded. When supplying a string to a severity level
126
+ ('warning', 'error', 'critical'), you can use template variables that will be automatically
127
+ substituted with contextual information:
128
+
129
+ ```yaml
130
+ actions:
131
+ warning: "Warning: {n_failed} failures in step {step}"
132
+ error:
133
+ python: |
134
+ lambda: print("Error detected!")
135
+ critical: "Critical failure at {time}"
136
+ highest_only: false # Execute all applicable actions vs. only highest severity
137
+ ```
138
+
139
+ Template variables available for action strings:
140
+
141
+ - `{step}`: current validation step number
142
+ - `{col}`: column name(s) being validated
143
+ - `{val}`: validation value or threshold
144
+ - `{n_failed}`: number of failing records
145
+ - `{n}`: total number of records
146
+ - `{type}`: validation method type
147
+ - `{level}`: severity level ('warning'/'error'/'critical')
148
+ - `{time}`: timestamp of validation
149
+
150
+ ## Validation Methods Reference
151
+
152
+ ### Column Value Validations
153
+
154
+ #### Comparison Methods
155
+
156
+ `col_vals_gt`: are column data greater than a fixed value or data in another column?
157
+
158
+ ```yaml
159
+ - col_vals_gt:
160
+ columns: [column_name] # REQUIRED: Column(s) to validate
161
+ value: 100 # REQUIRED: Comparison value
162
+ na_pass: true # OPTIONAL: Pass NULL values (default: false)
163
+ pre: | # OPTIONAL: Data preprocessing
164
+ lambda df: df.filter(condition)
165
+ thresholds: # OPTIONAL: Step-level thresholds
166
+ warning: 0.1
167
+ actions: # OPTIONAL: Step-level actions
168
+ warning: "Custom message"
169
+ brief: "Values must be > 100" # OPTIONAL: Step description
170
+ ```
171
+
172
+ `col_vals_lt`: are column data less than a fixed value or data in another column?
173
+
174
+ ```yaml
175
+ - col_vals_lt:
176
+ columns: [column_name]
177
+ value: 100
178
+ na_pass: true
179
+ # ... (same parameters as col_vals_gt)
180
+ ```
181
+
182
+ `col_vals_ge`: are column data greater than or equal to a fixed value or data in another column?
183
+
184
+ ```yaml
185
+ - col_vals_ge:
186
+ columns: [column_name]
187
+ value: 100
188
+ na_pass: true
189
+ # ... (same parameters as col_vals_gt)
190
+ ```
191
+
192
+ `col_vals_le`: are column data less than or equal to a fixed value or data in another column?
193
+
194
+ ```yaml
195
+ - col_vals_le:
196
+ columns: [column_name]
197
+ value: 100
198
+ na_pass: true
199
+ # ... (same parameters as col_vals_gt)
200
+ ```
201
+
202
+ `col_vals_eq`: are column data equal to a fixed value or data in another column?
203
+
204
+ ```yaml
205
+ - col_vals_eq:
206
+ columns: [column_name]
207
+ value: "expected_value"
208
+ na_pass: true
209
+ # ... (same parameters as col_vals_gt)
210
+ ```
211
+
212
+ `col_vals_ne`: are column data not equal to a fixed value or data in another column?
213
+
214
+ ```yaml
215
+ - col_vals_ne:
216
+ columns: [column_name]
217
+ value: "forbidden_value"
218
+ na_pass: true
219
+ # ... (same parameters as col_vals_gt)
220
+ ```
221
+
222
+ #### Range Methods
223
+
224
+ `col_vals_between`: are column data between two specified values (inclusive)?
225
+
226
+ ```yaml
227
+ - col_vals_between:
228
+ columns: [column_name] # REQUIRED: Column(s) to validate
229
+ left: 0 # REQUIRED: Lower bound
230
+ right: 100 # REQUIRED: Upper bound
231
+ inclusive: [true, true] # OPTIONAL: Include bounds [left, right]
232
+ na_pass: false # OPTIONAL: Pass NULL values
233
+ pre: | # OPTIONAL: Data preprocessing
234
+ lambda df: df.filter(condition)
235
+ thresholds: # OPTIONAL: Step-level thresholds
236
+ warning: 0.1
237
+ actions: # OPTIONAL: Step-level actions
238
+ warning: "Custom message"
239
+ brief: "Values between 0 and 100" # OPTIONAL: Step description
240
+ ```
241
+
242
+ `col_vals_outside`: are column data outside of two specified values?
243
+
244
+ ```yaml
245
+ - col_vals_outside:
246
+ columns: [column_name]
247
+ left: 0
248
+ right: 100
249
+ inclusive: [false, false] # OPTIONAL: Exclude bounds [left, right]
250
+ na_pass: false
251
+ # ... (same parameters as col_vals_between)
252
+ ```
253
+
254
+ #### Set Membership Methods
255
+
256
+ `col_vals_in_set`: are column data part of a specified set of values?
257
+
258
+ ```yaml
259
+ - col_vals_in_set:
260
+ columns: [column_name] # REQUIRED: Column(s) to validate
261
+ set: [value1, value2, value3] # REQUIRED: Allowed values
262
+ na_pass: false # OPTIONAL: Pass NULL values
263
+ pre: | # OPTIONAL: Data preprocessing
264
+ lambda df: df.filter(condition)
265
+ thresholds: # OPTIONAL: Step-level thresholds
266
+ warning: 0.1
267
+ actions: # OPTIONAL: Step-level actions
268
+ warning: "Custom message"
269
+ brief: "Values in allowed set" # OPTIONAL: Step description
270
+ ```
271
+
272
+ `col_vals_not_in_set`: are column data not part of a specified set of values?
273
+
274
+ ```yaml
275
+ - col_vals_not_in_set:
276
+ columns: [column_name]
277
+ set: [forbidden1, forbidden2] # REQUIRED: Forbidden values
278
+ na_pass: false
279
+ # ... (same parameters as col_vals_in_set)
280
+ ```
281
+
282
+ #### NULL Value Methods
283
+
284
+ `col_vals_null`: are column data null (missing)?
285
+
286
+ ```yaml
287
+ - col_vals_null:
288
+ columns: [column_name] # REQUIRED: Column(s) to validate
289
+ pre: | # OPTIONAL: Data preprocessing
290
+ lambda df: df.filter(condition)
291
+ thresholds: # OPTIONAL: Step-level thresholds
292
+ warning: 0.1
293
+ actions: # OPTIONAL: Step-level actions
294
+ warning: "Custom message"
295
+ brief: "Values must be NULL" # OPTIONAL: Step description
296
+ ```
297
+
298
+ `col_vals_not_null`: are column data not null (not missing)?
299
+
300
+ ```yaml
301
+ - col_vals_not_null:
302
+ columns: [column_name]
303
+ # ... (same parameters as col_vals_null)
304
+ ```
305
+
306
+ #### Pattern Matching Methods
307
+
308
+ `col_vals_regex`: do string-based column data match a regular expression?
309
+ ```yaml
310
+ - col_vals_regex:
311
+ columns: [column_name] # REQUIRED: Column(s) to validate
312
+ pattern: "^[A-Z]{2,3}$" # REQUIRED: Regular expression pattern
313
+ na_pass: false # OPTIONAL: Pass NULL values
314
+ pre: | # OPTIONAL: Data preprocessing
315
+ lambda df: df.filter(condition)
316
+ thresholds: # OPTIONAL: Step-level thresholds
317
+ warning: 0.1
318
+ actions: # OPTIONAL: Step-level actions
319
+ warning: "Custom message"
320
+ brief: "Values match pattern" # OPTIONAL: Step description
321
+ ```
322
+
323
+ #### Custom Expression Methods
324
+
325
+ `col_vals_expr`: do column data agree with a predicate expression?
326
+
327
+ ```yaml
328
+ - col_vals_expr:
329
+ expr: # REQUIRED: Custom validation expression
330
+ python: |
331
+ pl.when(pl.col("status") == "active")
332
+ .then(pl.col("value") > 0)
333
+ .otherwise(pl.lit(True))
334
+ pre: | # OPTIONAL: Data preprocessing
335
+ lambda df: df.filter(condition)
336
+ thresholds: # OPTIONAL: Step-level thresholds
337
+ warning: 0.1
338
+ actions: # OPTIONAL: Step-level actions
339
+ warning: "Custom message"
340
+ brief: "Custom validation rule" # OPTIONAL: Step description
341
+ ```
342
+
343
+ ### Row-based Validations
344
+
345
+ `rows_distinct`: are row data distinct?
346
+
347
+ ```yaml
348
+ - rows_distinct # Simple form
349
+
350
+ - rows_distinct: # With parameters
351
+ columns_subset: [col1, col2] # OPTIONAL: Check subset of columns
352
+ pre: | # OPTIONAL: Data preprocessing
353
+ lambda df: df.filter(condition)
354
+ thresholds: # OPTIONAL: Step-level thresholds
355
+ warning: 0.1
356
+ actions: # OPTIONAL: Step-level actions
357
+ warning: "Custom message"
358
+ brief: "No duplicate rows" # OPTIONAL: Step description
359
+ ```
360
+
361
+ `rows_complete`: are row data complete?
362
+
363
+ ```yaml
364
+ - rows_complete # Simple form
365
+
366
+ - rows_complete: # With parameters
367
+ columns_subset: [col1, col2] # OPTIONAL: Check subset of columns
368
+ pre: | # OPTIONAL: Data preprocessing
369
+ lambda df: df.filter(condition)
370
+ thresholds: # OPTIONAL: Step-level thresholds
371
+ warning: 0.1
372
+ actions: # OPTIONAL: Step-level actions
373
+ warning: "Custom message"
374
+ brief: "Complete rows only" # OPTIONAL: Step description
375
+ ```
376
+
377
+ ### Structure Validations
378
+
379
+ `col_exists`: does column exist in the table?
380
+
381
+ ```yaml
382
+ - col_exists:
383
+ columns: [col1, col2, col3] # REQUIRED: Column(s) that must exist
384
+ thresholds: # OPTIONAL: Step-level thresholds
385
+ warning: 0.1
386
+ actions: # OPTIONAL: Step-level actions
387
+ warning: "Custom message"
388
+ brief: "Required columns exist" # OPTIONAL: Step description
389
+ ```
390
+
391
+ `col_schema_match`: does the table have expected column names and data types?
392
+
393
+ ```yaml
394
+ - col_schema_match:
395
+ schema: # REQUIRED: Expected schema
396
+ columns:
397
+ - [column_name, "data_type"] # Column with type validation
398
+ - column_name # Column name only (no type check)
399
+ - [column_name] # Alternative syntax
400
+ complete: true # OPTIONAL: Require exact column set
401
+ in_order: true # OPTIONAL: Require exact column order
402
+ case_sensitive_colnames: true # OPTIONAL: Case-sensitive column names
403
+ case_sensitive_dtypes: true # OPTIONAL: Case-sensitive data types
404
+ full_match_dtypes: true # OPTIONAL: Exact type matching
405
+ thresholds: # OPTIONAL: Step-level thresholds
406
+ warning: 0.1
407
+ actions: # OPTIONAL: Step-level actions
408
+ warning: "Custom message"
409
+ brief: "Schema validation" # OPTIONAL: Step description
410
+ ```
411
+
412
+ `row_count_match`: does the table have n rows?
413
+
414
+ ```yaml
415
+ - row_count_match:
416
+ count: 1000 # REQUIRED: Expected row count
417
+ thresholds: # OPTIONAL: Step-level thresholds
418
+ warning: 0.1
419
+ actions: # OPTIONAL: Step-level actions
420
+ warning: "Custom message"
421
+ brief: "Expected row count" # OPTIONAL: Step description
422
+ ```
423
+
424
+ `col_count_match`: does the table have n columns?
425
+
426
+ ```yaml
427
+ - col_count_match:
428
+ count: 10 # REQUIRED: Expected column count
429
+ thresholds: # OPTIONAL: Step-level thresholds
430
+ warning: 0.1
431
+ actions: # OPTIONAL: Step-level actions
432
+ warning: "Custom message"
433
+ brief: "Expected column count" # OPTIONAL: Step description
434
+ ```
435
+
436
+ ### Special Validation Methods
437
+
438
+ `conjointly`: are multiple validations having a joint dependency?
439
+
440
+ ```yaml
441
+ - conjointly:
442
+ expressions: # REQUIRED: List of lambda expressions
443
+ - "lambda df: df['d'] > df['a']"
444
+ - "lambda df: df['a'] > 0"
445
+ - "lambda df: df['a'] + df['d'] < 12000"
446
+ thresholds: # OPTIONAL: Step-level thresholds
447
+ warning: 0.1
448
+ actions: # OPTIONAL: Step-level actions
449
+ warning: "Custom message"
450
+ brief: "All conditions must pass" # OPTIONAL: Step description
451
+ ```
452
+
453
+ `specially`: do table data pass a custom validation function?
454
+
455
+ ```yaml
456
+ - specially:
457
+ expr: # REQUIRED: Custom validation function
458
+ "lambda df: df.select(pl.col('a') + pl.col('d') > 0)"
459
+ thresholds: # OPTIONAL: Step-level thresholds
460
+ warning: 0.1
461
+ actions: # OPTIONAL: Step-level actions
462
+ warning: "Custom message"
463
+ brief: "Custom validation" # OPTIONAL: Step description
464
+ ```
465
+
466
+ Alternative syntax with Python expressions:
467
+
468
+ ```yaml
469
+ - specially:
470
+ expr:
471
+ python: |
472
+ lambda df: df.select(pl.col('amount') > 0)
473
+ ```
474
+
475
+ For Pandas DataFrames (when using `df_library: pandas`):
476
+
477
+ ```yaml
478
+ - specially:
479
+ expr: "lambda df: df.assign(is_valid=df['a'] + df['d'] > 0)"
480
+
481
+ ## Column Selection Patterns
482
+
483
+ All validation methods that accept a `columns` parameter support these selection patterns:
484
+
485
+ ```yaml
486
+ # Single column
487
+ columns: column_name
488
+
489
+ # Multiple columns as list
490
+ columns: [col1, col2, col3]
491
+
492
+ # Column selector functions (when used in Python expressions)
493
+ columns:
494
+ python: |
495
+ starts_with("prefix_")
496
+
497
+ # Examples of common patterns
498
+ columns: [customer_id, order_id] # Specific columns
499
+ columns: user_email # Single column
500
+ ```
501
+
502
+ ## Parameter Details
503
+
504
+ ### Common Parameters
505
+
506
+ These parameters are available for most validation methods:
507
+
508
+ - `columns`: column selection (string, list, or selector expression)
509
+ - `na_pass`: whether to pass NULL/missing values (boolean, default: false)
510
+ - `pre`: data preprocessing function (Python lambda expression)
511
+ - `thresholds`: step-level failure thresholds (dict)
512
+ - `actions`: step-level failure actions (dict)
513
+ - `brief`: step description (string, boolean, or template)
514
+
515
+ ### Brief Parameter Options
516
+
517
+ The `brief` parameter supports several formats:
518
+
519
+ ```yaml
520
+ brief: "Custom description" # Custom text
521
+ brief: true # Auto-generated description
522
+ brief: false # No description
523
+ brief: "Step {step}: {auto}" # Template with auto-generated text
524
+ brief: "Column '{col}' validation" # Template with variables
525
+ ```
526
+
527
+ template variables: `{step}`, `{col}`, `{value}`, `{set}`, `{pattern}`, `{auto}`
528
+
529
+ ### Python Expressions
530
+
531
+ Several parameters support Python expressions using the `python:` block syntax:
532
+
533
+ ```yaml
534
+ # Data source loading
535
+ tbl:
536
+ python: |
537
+ pl.scan_csv("data.csv").filter(pl.col("active") == True)
538
+
539
+ # Preprocessing
540
+ pre:
541
+ python: |
542
+ lambda df: df.filter(pl.col("date") >= "2024-01-01")
543
+
544
+ # Custom expressions
545
+ expr:
546
+ python: |
547
+ pl.col("value").is_between(0, 100)
548
+
549
+ # Callable actions
550
+ actions:
551
+ error:
552
+ python: |
553
+ lambda: print("VALIDATION ERROR: Critical data quality issue detected!")
554
+ ```
555
+
556
+ Note: The Python environment in YAML is restricted for security. Only built-in functions (`print`,
557
+ `len`, `str`, etc.), `Path` from pathlib, and available DataFrame libraries (`pl`, `pd`) are
558
+ accessible. You cannot import additional modules like `requests`, `logging`, or custom libraries.
559
+
560
+ You can also use the shortcut syntax for lambda expressions:
561
+
562
+ ```yaml
563
+ # Shortcut syntax (equivalent to python: block)
564
+ pre: |
565
+ lambda df: df.filter(pl.col("status") == "active")
566
+ ```
567
+
568
+ ### Restricted Python Environment
569
+
570
+ For security reasons, the Python environment in YAML configurations is restricted to a safe subset
571
+ of functionality. The available namespace includes:
572
+
573
+ Built-in functions:
574
+
575
+ - basic types: `str`, `int`, `float`, `bool`, `list`, `dict`, `tuple`, `set`
576
+ - math functions: `sum`, `min`, `max`, `abs`, `round`, `len`
577
+ - iteration: `range`, `enumerate`, `zip`
578
+ - output: `print`
579
+
580
+ Available modules:
581
+
582
+ - `Path` from pathlib for file path operations
583
+ - `pb` (`pointblank`) for dataset loading and validation functions
584
+ - `pl` (`polars`) if available on the system
585
+ - `pd` (`pandas`) if available on the system
586
+
587
+ Restrictions:
588
+
589
+ - cannot import external libraries (`requests`, `logging`, `os`, `sys`, etc.)
590
+ - cannot use `__import__`, `exec`, `eval`, or other dynamic execution functions
591
+ - file operations are limited to `Path` functionality
592
+
593
+ **Examples of valid callable actions:**
594
+
595
+ ```yaml
596
+ # Simple output with built-in functions
597
+ actions:
598
+ warning:
599
+ python: |
600
+ lambda: print(f"WARNING: {sum([1, 2, 3])} validation issues detected")
601
+
602
+ # Using available variables and string formatting
603
+ actions:
604
+ error:
605
+ python: |
606
+ lambda: print("ERROR: Data validation failed at " + str(len("validation")))
607
+
608
+ # Multiple statements in lambda (using parentheses)
609
+ actions:
610
+ critical:
611
+ python: |
612
+ lambda: (
613
+ print("CRITICAL ALERT:"),
614
+ print("Immediate attention required"),
615
+ print("Contact data team")
616
+ )[-1] # Return the last value
617
+ ```
618
+
619
+ For complex alerting, logging, or external system integration, use string template actions instead
620
+ of callable actions, and handle the external communication in your application code after validation
621
+ completes.
622
+
623
+ ## Best Practices
624
+
625
+ ### Organization
626
+
627
+ - use descriptive `tbl_name` and `label` values
628
+ - add `brief` descriptions for complex validations
629
+ - group related validations logically
630
+ - use consistent indentation and formatting
631
+
632
+ ### Performance
633
+
634
+ - apply `pre` filters early to reduce data volume
635
+ - order validations from fast to slow
636
+ - use `columns_subset` for row-based validations when appropriate
637
+ - consider data source location (local vs. remote)
638
+ - choose `df_library` based on data size and operations:
639
+ - `polars`: fastest for large datasets and analytical operations
640
+ - `pandas`: best for complex transformations and data science workflows
641
+ - `duckdb`: optimal for analytical queries on very large datasets
642
+
643
+ ### Maintainability
644
+
645
+ - store YAML files in version control
646
+ - use template variables in actions and briefs
647
+ - document expected failures with comments
648
+ - test configurations with `validate_yaml()` before deployment
649
+ - specify `df_library` explicitly when using library-specific validation expressions
650
+ - keep DataFrame library choice consistent within related validation workflows
651
+
652
+ ### Error Handling
653
+
654
+ - set appropriate thresholds based on data patterns
655
+ - use actions for monitoring and alerting
656
+ - start with conservative thresholds and adjust
657
+ - consider using `highest_only: false` for comprehensive reporting