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.
- {pointblank-0.14.0 → pointblank-0.15.0}/CITATION.cff +1 -1
- {pointblank-0.14.0 → pointblank-0.15.0}/PKG-INFO +2 -1
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/_quarto.yml +5 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/draft-validation.qmd +6 -6
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/index.qmd +1 -0
- pointblank-0.15.0/docs/user-guide/validation-reports.qmd +559 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_constants.py +63 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_interrogation.py +883 -1
- pointblank-0.15.0/pointblank/_spec_utils.py +1015 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_utils.py +14 -4
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_utils_ai.py +28 -3
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/assistant.py +1 -1
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/api-docs.txt +1599 -76
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/draft.py +52 -3
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/validate.py +1686 -275
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank.egg-info/PKG-INFO +2 -1
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank.egg-info/SOURCES.txt +5 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank.egg-info/requires.txt +1 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank_mcp_server/pointblank_server.py +2 -2
- {pointblank-0.14.0 → pointblank-0.15.0}/pyproject.toml +1 -0
- {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
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_briefs_html/validation_report_with_briefs.html +3 -3
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test__utils_ai.py +11 -5
- pointblank-0.15.0/tests/test_col_vals_increasing_decreasing.py +260 -0
- pointblank-0.15.0/tests/test_col_vals_within_spec.py +925 -0
- pointblank-0.15.0/tests/test_tbl_match.py +1716 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_validate.py +598 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/.github/CODE_OF_CONDUCT.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/.github/ISSUE_TEMPLATE/bug.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/.github/SECURITY.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/.github/workflows/ci-docs.yaml +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/.github/workflows/ci-tests.yaml +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/.github/workflows/code-checks.yaml +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/.gitignore +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/.pre-commit-config.yaml +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/.vscode/settings.json +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/CONTRIBUTING.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/LICENSE +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/Makefile +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/README.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/game_revenue.csv +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/global_sales.csv +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/global_sales_dataset.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/nycflights.csv +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/small_table.csv +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/worldcities.csv +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/x-01-parquet.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/x-02-duckdb.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/data_raw/x-03-sqlite.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/.gitignore +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/_extensions/machow/interlinks/.gitignore +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/_extensions/machow/interlinks/_extension.yml +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/_extensions/machow/interlinks/interlinks.lua +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/fav-logo.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-info-worldcities-csv.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-info-worldcities-github-csv.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-make-template.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-missing-worldcities-csv.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-preview-game_revenue-all-columns.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-preview-game_revenue-column-names.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-preview-game_revenue-column-range.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-preview-worldcities-csv-no-row-numbers.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-preview-worldcities-csv.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-run-worldcities_validation-extracts.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-run-worldcities_validation-fail-on-warning.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-run-worldcities_validation-output.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-run-worldcities_validation.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-scan-worldcities-csv.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-exit-code.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-multi-check.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-rows-complete-worldcities-csv.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-rows-distinct-worldcities-csv.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-show-extract.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-worldcities-gt-0-population.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-worldcities-not-null-city_name.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pb-validate-write-extract.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-draft-validation-report.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.de.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.es.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.fr.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.it.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.ja.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.ko.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.nl.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.pt-BR.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-sales-data.zh-CN.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-step-report.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank-tabular-report.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/pointblank_logo.svg +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/posit-logo-black.svg +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/validation-table-diagram.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/validation-test-units.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/.gitignore +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-cicd-workflows.gif +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-cicd-workflows.tape +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-complete-workflow.gif +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-complete-workflow.tape +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-data-exploration.gif +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-data-exploration.tape +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-essential-validations.gif +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-essential-validations.tape +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-getting-started.gif +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-getting-started.tape +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-using-polars.gif +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/cli-using-polars.tape +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/assets/vhs/validation.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/all-about-actions/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/intro-pointblank/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/intro-pointblank/pointblank-localized.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/intro-pointblank/step_report.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/intro-pointblank/validation-table-diagram.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/intro-pointblank/validation-test-units.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/lets-workshop-together/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/advanced-in-sidebar.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/breadth-and-depth.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/explanation-of-visual.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/links-in-guide.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/segments.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/step-report.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/overhauled-user-guide/validation-three-things.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/pointblank_blog_logo.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/blog/validation-libs-2025/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/01-starter/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/02-advanced/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/03-data-extracts/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/04-sundered-data/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/05-step-report-column-check/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/06-step-report-schema-check/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/07-validation-with-actions/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/08-validation-with-final-actions/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/apply-checks-to-several-columns/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/check-for-freshness/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/check-row-column-counts/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/checks-for-missing/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/cli-interactive/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/col-vals-custom-expr/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/column-selector-functions/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/comparisons-across-columns/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/custom-validation-specially/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/data/game_revenue.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/datetime-validations/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/expect-no-duplicate-rows/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/expect-no-duplicate-values/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/expect-text-pattern/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/failure-thresholds/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/advanced_validation.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/data_extracts.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/starter_validation.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/step_report_column_schema.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/step_report_column_values.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/sundered_data.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/validation_with_actions.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/img/validation_with_final_actions.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/mutate-table-in-step/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/numeric-comparisons/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/schema-check/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/set-membership/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/demos/using-parquet-data/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/index.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/scripts/post-render.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/styles.css +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/actions.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/assertions.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/briefs.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/cli-data-inspection.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/cli-data-validation.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/cli-reference.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/col-summary-tbl.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/column-selection-patterns.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/expressions.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/extracts.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/installation.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/langs.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/mcp-quick-start.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/missing-vals-tbl.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/preprocessing.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/preview.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/schema-validation.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/segmentation.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/step-reports.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/sundering.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/thresholds.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/validation-methods.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/validation-overview.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/yaml-reference.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/docs/user-guide/yaml-validation-workflows.qmd +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/images/pointblank-tabular-report.png +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/images/pointblank_logo.svg +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/__init__.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_constants_translations.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_datascan_utils.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_typing.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_utils_check_args.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/_utils_html.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/actions.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/cli.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/column.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/compare.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/game_revenue-duckdb.zip +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/game_revenue.zip +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/global_sales-duckdb.zip +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/global_sales.zip +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/nycflights-duckdb.zip +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/nycflights.zip +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/polars-api-docs.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/small_table-duckdb.zip +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/small_table.zip +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/README.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/complex_preprocessing.json +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/complex_preprocessing.pkl +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/generate_test_files.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/multiple_steps.json +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/multiple_steps.pkl +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/narwhals_function.json +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/narwhals_function.pkl +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/no_preprocessing.json +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/no_preprocessing.pkl +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/pandas_compatible.json +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/pandas_compatible.pkl +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/preprocessing_functions.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/simple_preprocessing.json +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/data/validations/simple_preprocessing.pkl +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/datascan.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/scan_profile.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/scan_profile_stats.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/schema.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/segments.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/thresholds.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank/yaml.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank.egg-info/dependency_links.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank.egg-info/entry_points.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank.egg-info/top_level.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/pointblank_mcp_server/readme.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/setup.cfg +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/__init__.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/manual_tests/schema_step_reports.qmd +0 -0
- {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
- {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
- {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
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_comprehensive_validation_report_html_snap/comprehensive_validation_report.html +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_01-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_02-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_03-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_04-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_05-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_06-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_07-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_08-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_09-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_10-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_11-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_12-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_13-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-1.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-1.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-1.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-1.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-1.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-1.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-1.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-1.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-2.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-3.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-1.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-1.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-1.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-2.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-3.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-0.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-1.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-2.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-3.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-4.txt +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-5.txt +0 -0
- {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
- {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
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet/validation_report.json +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd/validation_report.json +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl/validation_report.json +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pyspark/validation_report.json +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_segments_html/duckdb/validation_report_segments.html +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_segments_html/pandas/validation_report_segments.html +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/snapshots/test_validate/test_validation_report_segments_html/polars/validation_report_segments.html +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/parquet_data/data_a.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/parquet_data/data_b.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/parquet_data/subdir/nested_data.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_sales/status=cancelled/0.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_sales/status=delivered/0.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_sales/status=pending/0.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_sales/status=returned/0.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_sales/status=shipped/0.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_small_table/f=high/0.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_small_table/f=low/0.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/partitioned_small_table/f=mid/0.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/taxi_part_01.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/taxi_part_02.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/taxi_part_03.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/taxi_sample.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_dates_times_text.ddb +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_dates_times_text.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_dates_times_text.sqlite +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_true_dates_times.ddb +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_xyz.ddb +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_xyz.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_xyz.sqlite +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_xyz_missing.ddb +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_xyz_missing.parquet +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/tbl_files/tbl_xyz_missing.sqlite +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test__interrogation.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test__utils.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test__utils_check_args.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_actions.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_assistant.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_cli.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_column.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_compare.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_datascan.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_draft.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_mcp_integration.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_mcp_server.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_meta.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_prompt_method.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_scan_profile_stats.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_schema.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_segments.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_serialization_compat.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_serialization_edge_cases.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_thresholds.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/tests/test_yaml.py +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.ar.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.de.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.es.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.fr.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.hi.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.it.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.ja.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.ko.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.nl.md +0 -0
- {pointblank-0.14.0 → pointblank-0.15.0}/translations/README.pt-BR.md +0 -0
- {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.
|
|
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.
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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.
|