pointblank 0.9.6__tar.gz → 0.10.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. {pointblank-0.9.6 → pointblank-0.10.0}/.github/workflows/ci-docs.yaml +5 -1
  2. {pointblank-0.9.6 → pointblank-0.10.0}/.github/workflows/ci-tests.yaml +2 -6
  3. {pointblank-0.9.6 → pointblank-0.10.0}/.gitignore +3 -0
  4. {pointblank-0.9.6 → pointblank-0.10.0}/Makefile +1 -1
  5. {pointblank-0.9.6 → pointblank-0.10.0}/PKG-INFO +4 -3
  6. {pointblank-0.9.6 → pointblank-0.10.0}/README.md +2 -1
  7. {pointblank-0.9.6 → pointblank-0.10.0}/docs/_extensions/machow/interlinks/interlinks.lua +183 -26
  8. {pointblank-0.9.6 → pointblank-0.10.0}/docs/_quarto.yml +9 -0
  9. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/pointblank_logo.svg +160 -12
  10. pointblank-0.10.0/docs/assets/posit-logo-black.svg +1 -0
  11. pointblank-0.10.0/docs/blog/lets-workshop-together/index.qmd +35 -0
  12. pointblank-0.10.0/docs/blog/validation-libs-2025/index.qmd +726 -0
  13. pointblank-0.10.0/docs/demos/07-validation-with-actions/index.qmd +115 -0
  14. pointblank-0.10.0/docs/demos/08-validation-with-final-actions/index.qmd +113 -0
  15. pointblank-0.10.0/docs/demos/check-for-freshness/index.qmd +87 -0
  16. pointblank-0.10.0/docs/demos/custom-validation-specially/index.qmd +93 -0
  17. pointblank-0.10.0/docs/demos/img/validation_with_actions.png +0 -0
  18. pointblank-0.10.0/docs/demos/img/validation_with_final_actions.png +0 -0
  19. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/index.qmd +26 -0
  20. pointblank-0.10.0/docs/scripts/post-render.py +365 -0
  21. {pointblank-0.9.6 → pointblank-0.10.0}/docs/styles.css +63 -25
  22. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/actions.qmd +33 -57
  23. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/assertions.qmd +32 -49
  24. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/briefs.qmd +56 -77
  25. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/col-summary-tbl.qmd +9 -11
  26. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/column-selection-patterns.qmd +31 -47
  27. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/draft-validation.qmd +43 -70
  28. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/expressions.qmd +19 -23
  29. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/extracts.qmd +61 -67
  30. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/index.qmd +10 -14
  31. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/missing-vals-tbl.qmd +7 -10
  32. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/preprocessing.qmd +27 -12
  33. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/preview.qmd +13 -20
  34. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/schema-validation.qmd +49 -53
  35. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/segmentation.qmd +32 -26
  36. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/step-reports.qmd +30 -34
  37. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/sundering.qmd +40 -47
  38. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/thresholds.qmd +3 -4
  39. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/validation-methods.qmd +48 -76
  40. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/validation-overview.qmd +4 -8
  41. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/__init__.py +4 -0
  42. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/_constants.py +4 -0
  43. pointblank-0.10.0/pointblank/_datascan_utils.py +65 -0
  44. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/_utils.py +126 -0
  45. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/_utils_html.py +40 -0
  46. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/assistant.py +1 -3
  47. pointblank-0.10.0/pointblank/compare.py +27 -0
  48. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/data/api-docs.txt +518 -125
  49. pointblank-0.10.0/pointblank/datascan.py +570 -0
  50. pointblank-0.10.0/pointblank/scan_profile.py +321 -0
  51. pointblank-0.10.0/pointblank/scan_profile_stats.py +180 -0
  52. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/schema.py +14 -3
  53. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/validate.py +1425 -202
  54. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank.egg-info/PKG-INFO +4 -3
  55. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank.egg-info/SOURCES.txt +31 -0
  56. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank.egg-info/requires.txt +1 -1
  57. {pointblank-0.9.6 → pointblank-0.10.0}/pyproject.toml +12 -5
  58. pointblank-0.10.0/tests/tbl_files/parquet_data/data_a.parquet +0 -0
  59. pointblank-0.10.0/tests/tbl_files/parquet_data/data_b.parquet +0 -0
  60. pointblank-0.10.0/tests/tbl_files/parquet_data/subdir/nested_data.parquet +0 -0
  61. pointblank-0.10.0/tests/tbl_files/partitioned_sales/status=cancelled/0.parquet +0 -0
  62. pointblank-0.10.0/tests/tbl_files/partitioned_sales/status=delivered/0.parquet +0 -0
  63. pointblank-0.10.0/tests/tbl_files/partitioned_sales/status=pending/0.parquet +0 -0
  64. pointblank-0.10.0/tests/tbl_files/partitioned_sales/status=returned/0.parquet +0 -0
  65. pointblank-0.10.0/tests/tbl_files/partitioned_sales/status=shipped/0.parquet +0 -0
  66. pointblank-0.10.0/tests/tbl_files/partitioned_small_table/f=high/0.parquet +0 -0
  67. pointblank-0.10.0/tests/tbl_files/partitioned_small_table/f=low/0.parquet +0 -0
  68. pointblank-0.10.0/tests/tbl_files/partitioned_small_table/f=mid/0.parquet +0 -0
  69. pointblank-0.10.0/tests/tbl_files/taxi_part_01.parquet +0 -0
  70. pointblank-0.10.0/tests/tbl_files/taxi_part_02.parquet +0 -0
  71. pointblank-0.10.0/tests/tbl_files/taxi_part_03.parquet +0 -0
  72. pointblank-0.10.0/tests/tbl_files/taxi_sample.parquet +0 -0
  73. {pointblank-0.9.6 → pointblank-0.10.0}/tests/test__utils.py +19 -0
  74. pointblank-0.10.0/tests/test_compare.py +15 -0
  75. pointblank-0.10.0/tests/test_datascan.py +289 -0
  76. pointblank-0.10.0/tests/test_meta.py +31 -0
  77. {pointblank-0.9.6 → pointblank-0.10.0}/tests/test_schema.py +35 -15
  78. {pointblank-0.9.6 → pointblank-0.10.0}/tests/test_validate.py +2900 -119
  79. pointblank-0.9.6/pointblank/datascan.py +0 -1211
  80. pointblank-0.9.6/tests/test_datascan.py +0 -251
  81. {pointblank-0.9.6 → pointblank-0.10.0}/.github/CODE_OF_CONDUCT.md +0 -0
  82. {pointblank-0.9.6 → pointblank-0.10.0}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  83. {pointblank-0.9.6 → pointblank-0.10.0}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  84. {pointblank-0.9.6 → pointblank-0.10.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
  85. {pointblank-0.9.6 → pointblank-0.10.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  86. {pointblank-0.9.6 → pointblank-0.10.0}/.github/SECURITY.md +0 -0
  87. {pointblank-0.9.6 → pointblank-0.10.0}/.github/workflows/code-checks.yaml +0 -0
  88. {pointblank-0.9.6 → pointblank-0.10.0}/.pre-commit-config.yaml +0 -0
  89. {pointblank-0.9.6 → pointblank-0.10.0}/.vscode/settings.json +0 -0
  90. {pointblank-0.9.6 → pointblank-0.10.0}/CITATION.cff +0 -0
  91. {pointblank-0.9.6 → pointblank-0.10.0}/CONTRIBUTING.md +0 -0
  92. {pointblank-0.9.6 → pointblank-0.10.0}/LICENSE +0 -0
  93. {pointblank-0.9.6 → pointblank-0.10.0}/data_raw/game_revenue.csv +0 -0
  94. {pointblank-0.9.6 → pointblank-0.10.0}/data_raw/global_sales.csv +0 -0
  95. {pointblank-0.9.6 → pointblank-0.10.0}/data_raw/global_sales_dataset.qmd +0 -0
  96. {pointblank-0.9.6 → pointblank-0.10.0}/data_raw/nycflights.csv +0 -0
  97. {pointblank-0.9.6 → pointblank-0.10.0}/data_raw/small_table.csv +0 -0
  98. {pointblank-0.9.6 → pointblank-0.10.0}/data_raw/x-01-parquet.qmd +0 -0
  99. {pointblank-0.9.6 → pointblank-0.10.0}/data_raw/x-02-duckdb.qmd +0 -0
  100. {pointblank-0.9.6 → pointblank-0.10.0}/data_raw/x-03-sqlite.qmd +0 -0
  101. {pointblank-0.9.6 → pointblank-0.10.0}/docs/.gitignore +0 -0
  102. {pointblank-0.9.6 → pointblank-0.10.0}/docs/_extensions/machow/interlinks/.gitignore +0 -0
  103. {pointblank-0.9.6 → pointblank-0.10.0}/docs/_extensions/machow/interlinks/_extension.yml +0 -0
  104. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/fav-logo.png +0 -0
  105. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/pointblank-sales-data.de.png +0 -0
  106. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/pointblank-sales-data.es.png +0 -0
  107. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/pointblank-sales-data.fr.png +0 -0
  108. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/pointblank-sales-data.it.png +0 -0
  109. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/pointblank-sales-data.ja.png +0 -0
  110. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/pointblank-sales-data.ko.png +0 -0
  111. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/pointblank-sales-data.nl.png +0 -0
  112. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/pointblank-sales-data.png +0 -0
  113. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/pointblank-sales-data.pt-BR.png +0 -0
  114. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/pointblank-sales-data.zh-CN.png +0 -0
  115. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/pointblank-step-report.png +0 -0
  116. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/pointblank-tabular-report.png +0 -0
  117. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/validation-table-diagram.png +0 -0
  118. {pointblank-0.9.6 → pointblank-0.10.0}/docs/assets/validation-test-units.png +0 -0
  119. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/all-about-actions/index.qmd +0 -0
  120. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/index.qmd +0 -0
  121. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/intro-pointblank/index.qmd +0 -0
  122. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/intro-pointblank/pointblank-localized.png +0 -0
  123. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/intro-pointblank/step_report.png +0 -0
  124. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/intro-pointblank/validation-table-diagram.png +0 -0
  125. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/intro-pointblank/validation-test-units.png +0 -0
  126. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/overhauled-user-guide/advanced-in-sidebar.png +0 -0
  127. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/overhauled-user-guide/breadth-and-depth.png +0 -0
  128. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/overhauled-user-guide/explanation-of-visual.png +0 -0
  129. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/overhauled-user-guide/index.qmd +0 -0
  130. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/overhauled-user-guide/links-in-guide.png +0 -0
  131. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/overhauled-user-guide/segments.png +0 -0
  132. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/overhauled-user-guide/step-report.png +0 -0
  133. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/overhauled-user-guide/validation-three-things.png +0 -0
  134. {pointblank-0.9.6 → pointblank-0.10.0}/docs/blog/pointblank_blog_logo.png +0 -0
  135. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/01-starter/index.qmd +0 -0
  136. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/02-advanced/index.qmd +0 -0
  137. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/03-data-extracts/index.qmd +0 -0
  138. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/04-sundered-data/index.qmd +0 -0
  139. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/05-step-report-column-check/index.qmd +0 -0
  140. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/06-step-report-schema-check/index.qmd +0 -0
  141. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/apply-checks-to-several-columns/index.qmd +0 -0
  142. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/check-row-column-counts/index.qmd +0 -0
  143. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/checks-for-missing/index.qmd +0 -0
  144. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/col-vals-custom-expr/index.qmd +0 -0
  145. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/column-selector-functions/index.qmd +0 -0
  146. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/comparisons-across-columns/index.qmd +0 -0
  147. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/data/game_revenue.parquet +0 -0
  148. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/expect-no-duplicate-rows/index.qmd +0 -0
  149. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/expect-no-duplicate-values/index.qmd +0 -0
  150. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/expect-text-pattern/index.qmd +0 -0
  151. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/failure-thresholds/index.qmd +0 -0
  152. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/img/advanced_validation.png +0 -0
  153. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/img/data_extracts.png +0 -0
  154. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/img/starter_validation.png +0 -0
  155. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/img/step_report_column_schema.png +0 -0
  156. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/img/step_report_column_values.png +0 -0
  157. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/img/sundered_data.png +0 -0
  158. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/mutate-table-in-step/index.qmd +0 -0
  159. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/numeric-comparisons/index.qmd +0 -0
  160. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/schema-check/index.qmd +0 -0
  161. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/set-membership/index.qmd +0 -0
  162. {pointblank-0.9.6 → pointblank-0.10.0}/docs/demos/using-parquet-data/index.qmd +0 -0
  163. {pointblank-0.9.6 → pointblank-0.10.0}/docs/index.qmd +0 -0
  164. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/installation.qmd +0 -0
  165. {pointblank-0.9.6 → pointblank-0.10.0}/docs/user-guide/langs.qmd +0 -0
  166. {pointblank-0.9.6 → pointblank-0.10.0}/images/pointblank-tabular-report.png +0 -0
  167. {pointblank-0.9.6 → pointblank-0.10.0}/images/pointblank_logo.svg +0 -0
  168. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/_constants_docs.py +0 -0
  169. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/_constants_translations.py +0 -0
  170. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/_interrogation.py +0 -0
  171. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/_typing.py +0 -0
  172. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/_utils_check_args.py +0 -0
  173. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/actions.py +0 -0
  174. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/column.py +0 -0
  175. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/data/game_revenue-duckdb.zip +0 -0
  176. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/data/game_revenue.zip +0 -0
  177. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/data/global_sales-duckdb.zip +0 -0
  178. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/data/global_sales.zip +0 -0
  179. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/data/nycflights-duckdb.zip +0 -0
  180. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/data/nycflights.zip +0 -0
  181. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/data/polars-api-docs.txt +0 -0
  182. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/data/small_table-duckdb.zip +0 -0
  183. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/data/small_table.zip +0 -0
  184. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/draft.py +0 -0
  185. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/tf.py +0 -0
  186. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank/thresholds.py +0 -0
  187. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank.egg-info/dependency_links.txt +0 -0
  188. {pointblank-0.9.6 → pointblank-0.10.0}/pointblank.egg-info/top_level.txt +0 -0
  189. {pointblank-0.9.6 → pointblank-0.10.0}/setup.cfg +0 -0
  190. {pointblank-0.9.6 → pointblank-0.10.0}/tests/__init__.py +0 -0
  191. {pointblank-0.9.6 → pointblank-0.10.0}/tests/manual_tests/schema_step_reports.qmd +0 -0
  192. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_datascan/test_col_summary_tbl_duckdb_snap/col_summary_html_duckdb.html +0 -0
  193. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_datascan/test_col_summary_tbl_pandas_snap/col_summary_html_pandas.html +0 -0
  194. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_datascan/test_col_summary_tbl_polars_snap/col_summary_html_polars.html +0 -0
  195. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_comprehensive_validation_report_html_snap/comprehensive_validation_report.html +0 -0
  196. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_01/schema_step_report_01-0.txt +0 -0
  197. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_01_1/schema_step_report_01-1.txt +0 -0
  198. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_01_2/schema_step_report_01-2.txt +0 -0
  199. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_01_3/schema_step_report_01-3.txt +0 -0
  200. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_02/schema_step_report_02-0.txt +0 -0
  201. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_02_1/schema_step_report_02-1.txt +0 -0
  202. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_02_2/schema_step_report_02-2.txt +0 -0
  203. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_02_3/schema_step_report_02-3.txt +0 -0
  204. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_03/schema_step_report_03-0.txt +0 -0
  205. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_03_1/schema_step_report_03-1.txt +0 -0
  206. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_03_2/schema_step_report_03-2.txt +0 -0
  207. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_03_3/schema_step_report_03-3.txt +0 -0
  208. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_04/schema_step_report_04-0.txt +0 -0
  209. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_05/schema_step_report_05-0.txt +0 -0
  210. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_06/schema_step_report_06-0.txt +0 -0
  211. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_07/schema_step_report_07-0.txt +0 -0
  212. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_08/schema_step_report_08-0.txt +0 -0
  213. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_09/schema_step_report_09-0.txt +0 -0
  214. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_10/schema_step_report_10-0.txt +0 -0
  215. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_11/schema_step_report_11-0.txt +0 -0
  216. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_12/schema_step_report_12-0.txt +0 -0
  217. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_13/schema_step_report_13-0.txt +0 -0
  218. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_14/schema_step_report_14-0.txt +0 -0
  219. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_14_1/schema_step_report_14-1.txt +0 -0
  220. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_15/schema_step_report_15-0.txt +0 -0
  221. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_15_1/schema_step_report_15-1.txt +0 -0
  222. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_16/schema_step_report_16-0.txt +0 -0
  223. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_16_1/schema_step_report_16-1.txt +0 -0
  224. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_17/schema_step_report_17-0.txt +0 -0
  225. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_17_1/schema_step_report_17-1.txt +0 -0
  226. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_18/schema_step_report_18-0.txt +0 -0
  227. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_18_1/schema_step_report_18-1.txt +0 -0
  228. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_19/schema_step_report_19-0.txt +0 -0
  229. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_19_1/schema_step_report_19-1.txt +0 -0
  230. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_20/schema_step_report_20-0.txt +0 -0
  231. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_20_1/schema_step_report_20-1.txt +0 -0
  232. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_21/schema_step_report_21-0.txt +0 -0
  233. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_21_1/schema_step_report_21-1.txt +0 -0
  234. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_21_2/schema_step_report_21-2.txt +0 -0
  235. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_21_3/schema_step_report_21-3.txt +0 -0
  236. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_22/schema_step_report_22-0.txt +0 -0
  237. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_22_1/schema_step_report_22-1.txt +0 -0
  238. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_23/schema_step_report_23-0.txt +0 -0
  239. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_23_1/schema_step_report_23-1.txt +0 -0
  240. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_24/schema_step_report_24-0.txt +0 -0
  241. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_24_1/schema_step_report_24-1.txt +0 -0
  242. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_24_2/schema_step_report_24-2.txt +0 -0
  243. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_24_3/schema_step_report_24-3.txt +0 -0
  244. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_25/schema_step_report_25-0.txt +0 -0
  245. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_1/schema_step_report_25-1.txt +0 -0
  246. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_2/schema_step_report_25-2.txt +0 -0
  247. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_3/schema_step_report_25-3.txt +0 -0
  248. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_4/schema_step_report_25-4.txt +0 -0
  249. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_5/schema_step_report_25-5.txt +0 -0
  250. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_01-0.txt +0 -0
  251. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_02-0.txt +0 -0
  252. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_03-0.txt +0 -0
  253. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_04-0.txt +0 -0
  254. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_05-0.txt +0 -0
  255. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_06-0.txt +0 -0
  256. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_07-0.txt +0 -0
  257. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_08-0.txt +0 -0
  258. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_09-0.txt +0 -0
  259. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_10-0.txt +0 -0
  260. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_11-0.txt +0 -0
  261. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_12-0.txt +0 -0
  262. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_13-0.txt +0 -0
  263. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-0.txt +0 -0
  264. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-1.txt +0 -0
  265. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-0.txt +0 -0
  266. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-1.txt +0 -0
  267. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-0.txt +0 -0
  268. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-1.txt +0 -0
  269. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-0.txt +0 -0
  270. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-1.txt +0 -0
  271. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-0.txt +0 -0
  272. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-1.txt +0 -0
  273. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-0.txt +0 -0
  274. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-1.txt +0 -0
  275. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-0.txt +0 -0
  276. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-1.txt +0 -0
  277. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-0.txt +0 -0
  278. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-1.txt +0 -0
  279. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-2.txt +0 -0
  280. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-3.txt +0 -0
  281. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-0.txt +0 -0
  282. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-1.txt +0 -0
  283. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-0.txt +0 -0
  284. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-1.txt +0 -0
  285. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-0.txt +0 -0
  286. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-1.txt +0 -0
  287. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-2.txt +0 -0
  288. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-3.txt +0 -0
  289. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-0.txt +0 -0
  290. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-1.txt +0 -0
  291. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-2.txt +0 -0
  292. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-3.txt +0 -0
  293. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-4.txt +0 -0
  294. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-5.txt +0 -0
  295. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_no_interrogation_validation_report_html_snap/no_interrogation_validation_report.html +0 -0
  296. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_no_steps_validation_report_html_snap/no_steps_validation_report.html +0 -0
  297. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_briefs_global_local_html/validation_report_briefs_global_local.html +0 -0
  298. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_briefs_html/validation_report_with_briefs.html +0 -0
  299. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
  300. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet/validation_report.json +0 -0
  301. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd/validation_report.json +0 -0
  302. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl/validation_report.json +0 -0
  303. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
  304. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
  305. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_parquet/validation_report.json +0 -0
  306. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pd/validation_report.json +0 -0
  307. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pl/validation_report.json +0 -0
  308. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
  309. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_segments_html/duckdb/validation_report_segments.html +0 -0
  310. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_segments_html/pandas/validation_report_segments.html +0 -0
  311. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_segments_html/polars/validation_report_segments.html +0 -0
  312. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/polars/validation_report_segments_with_pre.html +0 -0
  313. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/validation_report_segments_with_pre.html +0 -0
  314. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_duckdb/validation_report.json +0 -0
  315. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_parquet/validation_report.json +0 -0
  316. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pd/validation_report.json +0 -0
  317. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pl/validation_report.json +0 -0
  318. {pointblank-0.9.6 → pointblank-0.10.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_sqlite/validation_report.json +0 -0
  319. {pointblank-0.9.6 → pointblank-0.10.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
  320. {pointblank-0.9.6 → pointblank-0.10.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
  321. {pointblank-0.9.6 → pointblank-0.10.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
  322. {pointblank-0.9.6 → pointblank-0.10.0}/tests/tbl_files/tbl_dates_times_text.ddb +0 -0
  323. {pointblank-0.9.6 → pointblank-0.10.0}/tests/tbl_files/tbl_dates_times_text.parquet +0 -0
  324. {pointblank-0.9.6 → pointblank-0.10.0}/tests/tbl_files/tbl_dates_times_text.sqlite +0 -0
  325. {pointblank-0.9.6 → pointblank-0.10.0}/tests/tbl_files/tbl_true_dates_times.ddb +0 -0
  326. {pointblank-0.9.6 → pointblank-0.10.0}/tests/tbl_files/tbl_xyz.ddb +0 -0
  327. {pointblank-0.9.6 → pointblank-0.10.0}/tests/tbl_files/tbl_xyz.parquet +0 -0
  328. {pointblank-0.9.6 → pointblank-0.10.0}/tests/tbl_files/tbl_xyz.sqlite +0 -0
  329. {pointblank-0.9.6 → pointblank-0.10.0}/tests/tbl_files/tbl_xyz_missing.ddb +0 -0
  330. {pointblank-0.9.6 → pointblank-0.10.0}/tests/tbl_files/tbl_xyz_missing.parquet +0 -0
  331. {pointblank-0.9.6 → pointblank-0.10.0}/tests/tbl_files/tbl_xyz_missing.sqlite +0 -0
  332. {pointblank-0.9.6 → pointblank-0.10.0}/tests/test__interrogation.py +0 -0
  333. {pointblank-0.9.6 → pointblank-0.10.0}/tests/test__utils_check_args.py +0 -0
  334. {pointblank-0.9.6 → pointblank-0.10.0}/tests/test_actions.py +0 -0
  335. {pointblank-0.9.6 → pointblank-0.10.0}/tests/test_assistant.py +0 -0
  336. {pointblank-0.9.6 → pointblank-0.10.0}/tests/test_column.py +0 -0
  337. {pointblank-0.9.6 → pointblank-0.10.0}/tests/test_draft.py +0 -0
  338. {pointblank-0.9.6 → pointblank-0.10.0}/tests/test_tf.py +0 -0
  339. {pointblank-0.9.6 → pointblank-0.10.0}/tests/test_thresholds.py +0 -0
  340. {pointblank-0.9.6 → pointblank-0.10.0}/translations/README.ar.md +0 -0
  341. {pointblank-0.9.6 → pointblank-0.10.0}/translations/README.de.md +0 -0
  342. {pointblank-0.9.6 → pointblank-0.10.0}/translations/README.es.md +0 -0
  343. {pointblank-0.9.6 → pointblank-0.10.0}/translations/README.fr.md +0 -0
  344. {pointblank-0.9.6 → pointblank-0.10.0}/translations/README.hi.md +0 -0
  345. {pointblank-0.9.6 → pointblank-0.10.0}/translations/README.it.md +0 -0
  346. {pointblank-0.9.6 → pointblank-0.10.0}/translations/README.ja.md +0 -0
  347. {pointblank-0.9.6 → pointblank-0.10.0}/translations/README.ko.md +0 -0
  348. {pointblank-0.9.6 → pointblank-0.10.0}/translations/README.nl.md +0 -0
  349. {pointblank-0.9.6 → pointblank-0.10.0}/translations/README.pt-BR.md +0 -0
  350. {pointblank-0.9.6 → pointblank-0.10.0}/translations/README.zh-CN.md +0 -0
@@ -14,13 +14,17 @@ jobs:
14
14
  - uses: actions/checkout@v4
15
15
  - uses: actions/setup-python@v5
16
16
  with:
17
- python-version: "3.10"
17
+ python-version: "3.11"
18
18
  - name: Install dependencies
19
19
  run: |
20
20
  python -m pip install -e .
21
21
  python -m pip install ".[docs]"
22
22
  python -m pip install ibis-framework[duckdb]
23
23
  python -m pip install pins
24
+ python -m pip install pandera
25
+ python -m pip install patito
26
+ python -m pip install validoopsie
27
+ python -m pip install dataframely
24
28
  - name: Set up Quarto
25
29
  uses: quarto-dev/quarto-actions/setup@v2
26
30
  - name: Build docs
@@ -24,12 +24,8 @@ jobs:
24
24
  uses: actions/setup-python@v5
25
25
  with:
26
26
  python-version: ${{ matrix.python-version }}
27
- - name: Install dependencies
28
- run: |
29
- pip install -e '.[dev]'
30
- - name: Install test dependencies
31
- run: |
32
- pip install pytest pytest-rerunfailures pytest-randomly pytest-xdist pytest-cov pytest-snapshot pandas polars ibis-framework[duckdb,mysql,postgres,sqlite]>=9.5.0 chatlas requests shiny
27
+ - name: Install uv
28
+ uses: astral-sh/setup-uv@v5
33
29
  - name: pytest unit tests
34
30
  run: |
35
31
  make test
@@ -130,3 +130,6 @@ benchmark/results/
130
130
  benchmark/reports/
131
131
  benchmark/data/*.csv.gz
132
132
  benchmark/data/*.json
133
+ .swp
134
+
135
+ uv.lock
@@ -2,7 +2,7 @@
2
2
 
3
3
  .PHONY: test
4
4
  test:
5
- @pytest \
5
+ @uv run pytest \
6
6
  --cov=pointblank \
7
7
  --cov-report=term-missing \
8
8
  --randomly-seed 123 \
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pointblank
3
- Version: 0.9.6
3
+ Version: 0.10.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
@@ -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.24.1
46
+ Requires-Dist: narwhals>=1.41.0
47
47
  Requires-Dist: typing_extensions>=3.10.0.0
48
48
  Requires-Dist: requests>=2.31.0
49
49
  Provides-Extra: pd
@@ -84,7 +84,7 @@ Dynamic: license-file
84
84
 
85
85
  <div align="center">
86
86
 
87
- <a href="https://posit-dev.github.io/pointblank/"><img src="https://posit-dev.github.io/pointblank/assets/pointblank_logo.svg" width="75%"/></a>
87
+ <a href="https://posit-dev.github.io/pointblank/"><img src="https://posit-dev.github.io/pointblank/assets/pointblank_logo.svg" width="85%"/></a>
88
88
 
89
89
  _Data validation made beautiful and powerful_
90
90
 
@@ -98,6 +98,7 @@ _Data validation made beautiful and powerful_
98
98
  [![Codecov branch](https://img.shields.io/codecov/c/github/posit-dev/pointblank/main.svg)](https://codecov.io/gh/posit-dev/pointblank)
99
99
  [![Repo Status](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)
100
100
  [![Documentation](https://img.shields.io/badge/docs-project_website-blue.svg)](https://posit-dev.github.io/pointblank/)
101
+ [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/posit-dev/pointblank)
101
102
 
102
103
  [![Contributors](https://img.shields.io/github/contributors/posit-dev/pointblank)](https://github.com/posit-dev/pointblank/graphs/contributors)
103
104
  [![Discord](https://img.shields.io/discord/1345877328982446110?color=%237289da&label=Discord)](https://discord.com/invite/YH7CybCNCQ)
@@ -1,6 +1,6 @@
1
1
  <div align="center">
2
2
 
3
- <a href="https://posit-dev.github.io/pointblank/"><img src="https://posit-dev.github.io/pointblank/assets/pointblank_logo.svg" width="75%"/></a>
3
+ <a href="https://posit-dev.github.io/pointblank/"><img src="https://posit-dev.github.io/pointblank/assets/pointblank_logo.svg" width="85%"/></a>
4
4
 
5
5
  _Data validation made beautiful and powerful_
6
6
 
@@ -14,6 +14,7 @@ _Data validation made beautiful and powerful_
14
14
  [![Codecov branch](https://img.shields.io/codecov/c/github/posit-dev/pointblank/main.svg)](https://codecov.io/gh/posit-dev/pointblank)
15
15
  [![Repo Status](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)
16
16
  [![Documentation](https://img.shields.io/badge/docs-project_website-blue.svg)](https://posit-dev.github.io/pointblank/)
17
+ [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/posit-dev/pointblank)
17
18
 
18
19
  [![Contributors](https://img.shields.io/github/contributors/posit-dev/pointblank)](https://github.com/posit-dev/pointblank/graphs/contributors)
19
20
  [![Discord](https://img.shields.io/discord/1345877328982446110?color=%237289da&label=Discord)](https://discord.com/invite/YH7CybCNCQ)
@@ -1,3 +1,13 @@
1
+ local inventory = {} -- sphinx inventories
2
+ local autolink -- set in Meta
3
+ local autolink_ignore_token = "qd-no-link"
4
+
5
+ local function _debug_log(text, debug)
6
+ if debug then
7
+ quarto.log.warning(text)
8
+ end
9
+ end
10
+
1
11
  local function read_inv_text(filename)
2
12
  -- read file
3
13
  local file = io.open(filename, "r")
@@ -11,16 +21,16 @@ local function read_inv_text(filename)
11
21
  local project = str:match("# Project: (%S+)")
12
22
  local version = str:match("# Version: (%S+)")
13
23
 
14
- local data = {project = project, version = version, items = {}}
24
+ local data = { project = project, version = version, items = {} }
15
25
 
16
26
  local ptn_data =
17
27
  "^" ..
18
- "(.-)%s+" .. -- name
19
- "([%S:]-):" .. -- domain
20
- "([%S]+)%s+" .. -- role
21
- "(%-?%d+)%s+" .. -- priority
22
- "(%S*)%s+" .. -- uri
23
- "(.-)\r?$" -- dispname
28
+ "(.-)%s+" .. -- name
29
+ "([%S:]-):" .. -- domain
30
+ "([%S]+)%s+" .. -- role
31
+ "(%-?%d+)%s+" .. -- priority
32
+ "(%S*)%s+" .. -- uri
33
+ "(.-)\r?$" -- dispname
24
34
 
25
35
 
26
36
  -- Iterate through each line in the file content
@@ -48,7 +58,6 @@ local function read_inv_text(filename)
48
58
  end
49
59
 
50
60
  local function read_json(filename)
51
-
52
61
  local file = io.open(filename, "r")
53
62
  if file == nil then
54
63
  return nil
@@ -66,7 +75,6 @@ local function read_inv_text_or_json(base_name)
66
75
  -- TODO: refactors so we don't just close the file immediately
67
76
  io.close(file)
68
77
  json = read_inv_text(base_name .. ".txt")
69
-
70
78
  else
71
79
  json = read_json(base_name .. ".json")
72
80
  end
@@ -74,10 +82,8 @@ local function read_inv_text_or_json(base_name)
74
82
  return json
75
83
  end
76
84
 
77
- local inventory = {}
78
-
79
- local function lookup(search_object)
80
-
85
+ -- each inventory has entries: project, version, items
86
+ local function lookup(search_object, debug)
81
87
  local results = {}
82
88
  for _, inv in ipairs(inventory) do
83
89
  for _, item in ipairs(inv.items) do
@@ -98,7 +104,7 @@ local function lookup(search_object)
98
104
  goto continue
99
105
  else
100
106
  if search_object.domain or item.domain == "py" then
101
- table.insert(results, item)
107
+ table.insert(results, item)
102
108
  end
103
109
 
104
110
  goto continue
@@ -112,23 +118,24 @@ local function lookup(search_object)
112
118
  return results[1]
113
119
  end
114
120
  if #results > 1 then
115
- quarto.log.warning("Found multiple matches for " .. search_object.name .. ", using the first match.")
121
+ _debug_log("Found multiple matches for " .. search_object.name .. ", using the first match.", debug)
116
122
  return results[1]
117
123
  end
118
124
  if #results == 0 then
119
- quarto.log.warning("Found no matches for object:\n", search_object)
125
+ _debug_log("Found no matches for object:\n", debug)
126
+ _debug_log(search_object, debug)
120
127
  end
121
128
 
122
129
  return nil
123
130
  end
124
131
 
125
- local function mysplit (inputstr, sep)
132
+ local function mysplit(inputstr, sep)
126
133
  if sep == nil then
127
- sep = "%s"
134
+ sep = "%s"
128
135
  end
129
- local t={}
130
- for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
131
- table.insert(t, str)
136
+ local t = {}
137
+ for str in string.gmatch(inputstr, "([^" .. sep .. "]+)") do
138
+ table.insert(t, str)
132
139
  end
133
140
  return t
134
141
  end
@@ -140,7 +147,84 @@ local function normalize_role(role)
140
147
  return role
141
148
  end
142
149
 
143
- local function build_search_object(str)
150
+ local function copy_replace(original, key, new_value)
151
+ -- First create a copy of the table
152
+ local copy = {}
153
+ for k, v in pairs(original) do
154
+ copy[k] = v
155
+ end
156
+
157
+ -- Then replace the specific value
158
+ copy[key] = new_value
159
+
160
+ return copy
161
+ end
162
+
163
+ local function contains(list, value)
164
+ -- check if list contains a value
165
+ for i, v in ipairs(list) do
166
+ if v == value then
167
+ return true
168
+ end
169
+ end
170
+ return false
171
+ end
172
+
173
+ local function flatten_alias_list(list)
174
+ -- flatten a list of lists into a single list,
175
+ -- where each entry has the form {key, subvalue}}
176
+ -- e.g.
177
+ -- input: {key1 = {subval1, subval2}, key2 = subval3}
178
+ -- output: {{key1, subval1}, {key1, subval2}, {key2, subval3}}
179
+ local flat = {}
180
+ for key, sublist in pairs(list) do
181
+ if type(sublist) == "table" then
182
+ for _, subvalue in ipairs(sublist) do
183
+ table.insert(flat, { key, subvalue })
184
+ end
185
+ else
186
+ table.insert(flat, { key, sublist })
187
+ end
188
+ end
189
+ return flat
190
+ end
191
+
192
+ local function prepend_aliases(flat_aliases)
193
+ -- if str up to first period starts with an alias, then
194
+ -- replace it with the full name.
195
+ -- For example, suppose we have the alias quartodoc -> qd
196
+ -- e.g. qd.Auto -> quartodoc.Auto
197
+ -- e.g. qda.Auto -> qda.Auto
198
+
199
+ local new_inv = {}
200
+ new_inv["project"] = "aliases"
201
+ new_inv["version"] = "0.0.9999" -- I have not begun to think about version...
202
+ new_inv["items"] = {}
203
+
204
+ for _, name_pair in pairs(flat_aliases) do
205
+ local full = name_pair[1]
206
+ local alias = name_pair[2]
207
+ for _, inv in ipairs(inventory) do
208
+ for _, item in ipairs(inv.items) do
209
+ if string.sub(item.name, 1, string.len(full) + 1) == (full .. ".") then
210
+ -- replace full .. "." with alias .. "."
211
+ local prefix
212
+ if not alias or pandoc.utils.stringify(alias) == "" then
213
+ prefix = ""
214
+ else
215
+ -- TODO: ensure alias doesn't end with period
216
+ prefix = pandoc.utils.stringify(alias) .. "."
217
+ end
218
+ local new_name = prefix .. string.sub(item.name, string.len(full) + 2)
219
+ table.insert(new_inv.items, copy_replace(item, "name", new_name))
220
+ end
221
+ end
222
+ end
223
+ end
224
+ table.insert(inventory, new_inv)
225
+ end
226
+
227
+ local function build_search_object(str, debug)
144
228
  local starts_with_colon = str:sub(1, 1) == ":"
145
229
  local search = {}
146
230
  if starts_with_colon then
@@ -163,7 +247,7 @@ local function build_search_object(str)
163
247
  search.role = normalize_role(t[3])
164
248
  search.name = t[4]:match("%%60(.*)%%60")
165
249
  else
166
- quarto.log.warning("couldn't parse this link: " .. str)
250
+ _debug_log("couldn't parse this link: " .. str, debug)
167
251
  return {}
168
252
  end
169
253
  else
@@ -171,7 +255,7 @@ local function build_search_object(str)
171
255
  end
172
256
 
173
257
  if search.name == nil then
174
- quarto.log.warning("couldn't parse this link: " .. str)
258
+ _debug_log("couldn't parse this link: " .. str, debug)
175
259
  return {}
176
260
  end
177
261
 
@@ -220,7 +304,60 @@ function Link(link)
220
304
  return link
221
305
  end
222
306
 
223
- local function fixup_json(json, prefix)
307
+ function Code(code)
308
+ if (not autolink) or contains(code.classes, autolink_ignore_token) then
309
+ return code
310
+ end
311
+
312
+ -- allow text for lookup to be simple function call
313
+ -- and also support shortened syntax (~~ prefix)
314
+ -- e.g. my_func() -> my_func
315
+ -- e.g. a.b.call() -> a.b.call
316
+ -- e.g. ~~my_func() -> my_func
317
+ local text
318
+
319
+ -- detect and remove shortening syntax (~~ prefix)
320
+ local is_shortened = code.text:sub(1, 2) == "~~"
321
+ local is_short_dot = code.text:sub(1, 3) == "~~."
322
+ local unprefixed = code.text:gsub("^~~%.?", "")
323
+ if unprefixed:match("%(%s*%)") then
324
+ text = unprefixed:gsub("%(%s*%)", "")
325
+ else
326
+ text = unprefixed
327
+ end
328
+
329
+
330
+ -- return code.attr
331
+ local search = build_search_object("%60" .. text .. "%60")
332
+ local item = lookup(search)
333
+
334
+ -- determine replacement, used if no link text specified ----
335
+ if item == nil then
336
+ code.text = unprefixed
337
+ return code
338
+ end
339
+
340
+ -- shorten text if shortening syntax used
341
+ if is_shortened then
342
+ -- keep text after last period (.)
343
+ local split = mysplit(unprefixed, ".")
344
+ if #split > 0 then
345
+ local new_name = split[#split]
346
+ if is_short_dot then
347
+ -- if shortened with dot, keep the dot
348
+ new_name = "." .. new_name
349
+ end
350
+ code.text = new_name
351
+ else
352
+ code.text = unprefixed
353
+ end
354
+ end
355
+
356
+
357
+ return pandoc.Link(code, item.uri:gsub("%$$", search.name))
358
+ end
359
+
360
+ local function fixup_json(json, prefix, attach)
224
361
  for _, item in ipairs(json.items) do
225
362
  item.uri = prefix .. item.uri
226
363
  end
@@ -232,6 +369,23 @@ return {
232
369
  Meta = function(meta)
233
370
  local json
234
371
  local prefix
372
+ local aliases
373
+
374
+ -- set globals from config
375
+ if meta.interlinks and meta.interlinks.autolink then
376
+ autolink = true
377
+ else
378
+ autolink = false
379
+ end
380
+
381
+ local aliases
382
+ if meta.interlinks and meta.interlinks.aliases then
383
+ aliases = meta.interlinks.aliases
384
+ else
385
+ aliases = {}
386
+ end
387
+
388
+ -- process sources
235
389
  if meta.interlinks and meta.interlinks.sources then
236
390
  for k, v in pairs(meta.interlinks.sources) do
237
391
  local base_name = quarto.project.offset .. "/_inv/" .. k .. "_objects"
@@ -246,9 +400,12 @@ return {
246
400
  if json ~= nil then
247
401
  fixup_json(json, "/")
248
402
  end
403
+
404
+ prepend_aliases(flatten_alias_list(aliases))
249
405
  end
250
406
  },
251
407
  {
252
- Link = Link
408
+ Link = Link,
409
+ Code = Code
253
410
  }
254
411
  }
@@ -1,5 +1,6 @@
1
1
  project:
2
2
  type: website
3
+ post-render: scripts/post-render.py
3
4
 
4
5
  format:
5
6
  html:
@@ -19,6 +20,9 @@ filters:
19
20
 
20
21
  interlinks:
21
22
  fast: true
23
+ autolink: true
24
+ aliases:
25
+ pointblank: [null, pb]
22
26
  sources:
23
27
  numpy:
24
28
  url: https://numpy.org/doc/stable/
@@ -83,6 +87,9 @@ website:
83
87
  - user-guide/preview.qmd
84
88
  - user-guide/col-summary-tbl.qmd
85
89
  - user-guide/missing-vals-tbl.qmd
90
+ page-footer:
91
+ left: 'Proudly supported by <a href="https://www.posit.co/" class="no-icon"><img src="/assets/posit-logo-black.svg" alt="Posit" width="80" style="padding-left: 3px;vertical-align:text-top;"></a>'
92
+ right: "&copy; 2024&ndash;2025 Posit Software, PBC."
86
93
 
87
94
  html-table-processing: none
88
95
 
@@ -203,6 +210,8 @@ quartodoc:
203
210
  - name: missing_vals_tbl
204
211
  - name: assistant
205
212
  - name: load_dataset
213
+ - name: get_data_path
214
+ - name: connect_to_table
206
215
  - title: Utility Functions
207
216
  desc: >
208
217
  The *Utility Functions* group contains functions that are useful accessing metadata about
@@ -1,7 +1,92 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <svg width="2481px" height="441px" viewBox="0 0 2481 441" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="background: #FFFFFF;">
3
- <title>pointblank_logo@1x</title>
3
+ <title>pointblank_logo</title>
4
+
4
5
  <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
6
+ <!-- Background shadow circles (render first, so they appear behind everything) -->
7
+ <g id="shadow-circles">
8
+ <!-- Shadow for main circle -->
9
+ <circle id="shadow-1" fill="#E20000" fill-opacity="0.15" cx="154.010993" cy="260.268789" r="24">
10
+ <animate attributeName="r" dur="4s" repeatCount="indefinite" begin="0s"
11
+ values="24;36;24;24;24" />
12
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="0s"
13
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
14
+ </circle>
15
+
16
+ <!-- Shadow for circle 2 -->
17
+ <circle id="shadow-2" fill="#E20000" fill-opacity="0.15" cx="570.7139" cy="265.65" r="21">
18
+ <animate attributeName="r" dur="3.5s" repeatCount="indefinite" begin="0.4s"
19
+ values="21;32;21;21;21" />
20
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="2s"
21
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
22
+ </circle>
23
+
24
+ <!-- Shadow for circle 3 -->
25
+ <circle id="shadow-3" fill="#E20000" fill-opacity="0.15" cx="735.702447" cy="124.804146" r="20">
26
+ <animate attributeName="r" dur="4.5s" repeatCount="indefinite" begin="0.8s"
27
+ values="20;30;20;20;20" />
28
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="4s"
29
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
30
+ </circle>
31
+
32
+ <!-- Shadow for circle 4 -->
33
+ <circle id="shadow-4" fill="#E20000" fill-opacity="0.15" cx="901.711934" cy="265.65" r="22">
34
+ <animate attributeName="r" dur="3.8s" repeatCount="indefinite" begin="1.2s"
35
+ values="22;33;22;22;22" />
36
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="6s"
37
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
38
+ </circle>
39
+
40
+ <!-- Shadow for circle 5 -->
41
+ <circle id="shadow-5" fill="#E20000" fill-opacity="0.15" cx="1154.49299" cy="265.65" r="23">
42
+ <animate attributeName="r" dur="3.2s" repeatCount="indefinite" begin="1.6s"
43
+ values="23;34;23;23;23" />
44
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="8s"
45
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
46
+ </circle>
47
+
48
+ <!-- Shadow for circle 6 -->
49
+ <circle id="shadow-6" fill="#E20000" fill-opacity="0.15" cx="1388.5509" cy="265.65" r="19">
50
+ <animate attributeName="r" dur="4.2s" repeatCount="indefinite" begin="2.0s"
51
+ values="19;29;19;19;19" />
52
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="10s"
53
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
54
+ </circle>
55
+
56
+ <!-- Shadow for circle 7 -->
57
+ <circle id="shadow-7" fill="#E20000" fill-opacity="0.15" cx="1771.94209" cy="265.65" r="21">
58
+ <animate attributeName="r" dur="3.7s" repeatCount="indefinite" begin="2.4s"
59
+ values="21;32;21;21;21" />
60
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="12s"
61
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
62
+ </circle>
63
+
64
+ <!-- Shadow for circle 8 -->
65
+ <circle id="shadow-8" fill="#E20000" fill-opacity="0.15" cx="1554.27939" cy="334.832228" r="20">
66
+ <animate attributeName="r" dur="3.9s" repeatCount="indefinite" begin="2.8s"
67
+ values="20;30;20;20;20" />
68
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="14s"
69
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
70
+ </circle>
71
+
72
+ <!-- Shadow for circle 9 -->
73
+ <circle id="shadow-9" fill="#E20000" fill-opacity="0.15" cx="1997.72491" cy="265.64697" r="22">
74
+ <animate attributeName="r" dur="3.4s" repeatCount="indefinite" begin="3.2s"
75
+ values="22;33;22;22;22" />
76
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="16s"
77
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
78
+ </circle>
79
+
80
+ <!-- Shadow for circle 10 -->
81
+ <circle id="shadow-10" fill="#E20000" fill-opacity="0.15" cx="2274.81495" cy="260.187731" r="20">
82
+ <animate attributeName="r" dur="4.1s" repeatCount="indefinite" begin="3.6s"
83
+ values="20;30;20;20;20" />
84
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="18s"
85
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
86
+ </circle>
87
+ </g>
88
+
89
+ <!-- Main text content -->
5
90
  <g id="Pointblank" transform="translate(82.453382, 67.360000)" fill="#3C0000" fill-rule="nonzero">
6
91
  <path d="M44.3962295,192.730366 C44.3962295,185.366492 47.0299041,179.018325 52.2972534,173.685864 C57.5646026,168.353403 63.9606696,165.687173 71.4854542,165.687173 C78.7594128,165.687173 85.0300666,168.353403 90.2974159,173.685864 C95.5647652,179.018325 98.1984398,185.366492 98.1984398,192.730366 C98.1984398,200.348168 95.5647652,206.823298 90.2974159,212.155759 C85.0300666,217.48822 78.7594128,220.15445 71.4854542,220.15445 C63.9606696,220.15445 57.5646026,217.48822 52.2972534,212.155759 C47.0299041,206.823298 44.3962295,200.348168 44.3962295,192.730366 Z M0,11.4267016 L290.080449,11.4267016 C306.384149,11.4267016 318.172978,15.1086387 325.446936,22.4725131 C332.720895,29.8363874 336.357874,41.7709424 336.357874,58.276178 L336.357874,151.213351 C336.357874,167.718586 332.720895,179.653141 325.446936,187.017016 C318.172978,194.38089 306.384149,198.062827 290.080449,198.062827 L68.8517796,198.062827 L68.8517796,186.636126 L291.209166,186.636126 C302.997996,186.636126 311.463378,184.033377 316.605314,178.82788 C321.747251,173.622382 324.318219,165.052356 324.318219,153.117801 L324.318219,56.3717277 C324.318219,44.4371728 321.747251,35.8671466 316.605314,30.6616492 C311.463378,25.4561518 302.997996,22.8534031 291.209166,22.8534031 L12.0396555,22.8534031 L12.0396555,289.47644 L0,289.47644 L0,11.4267016 Z" id="P"></path>
7
92
  <path d="M366.833252,153.498691 C366.833252,136.993455 370.470231,125.058901 377.74419,117.695026 C385.018148,110.331152 396.806978,106.649215 413.110678,106.649215 L563.230132,106.649215 C579.533832,106.649215 591.322661,110.331152 598.59662,117.695026 C605.870578,125.058901 609.507557,136.993455 609.507557,153.498691 L609.507557,242.626963 C609.507557,259.132199 605.870578,271.066754 598.59662,278.430628 C591.322661,285.794503 579.533832,289.47644 563.230132,289.47644 L413.110678,289.47644 C396.806978,289.47644 385.018148,285.794503 377.74419,278.430628 C370.470231,271.066754 366.833252,259.132199 366.833252,242.626963 L366.833252,153.498691 Z M564.358849,278.049738 C576.147679,278.049738 584.613061,275.44699 589.754998,270.241492 C594.896934,265.035995 597.467902,256.465969 597.467902,244.531414 L597.467902,151.594241 C597.467902,139.659686 594.896934,131.08966 589.754998,125.884162 C584.613061,120.678665 576.147679,118.075916 564.358849,118.075916 L411.98196,118.075916 C400.193131,118.075916 391.727748,120.678665 386.585812,125.884162 C381.443876,131.08966 378.872908,139.659686 378.872908,151.594241 L378.872908,244.531414 C378.872908,256.465969 381.443876,265.035995 386.585812,270.241492 C391.727748,275.44699 400.193131,278.049738 411.98196,278.049738 L564.358849,278.049738 Z M487.982285,221.67801 C481.711631,221.67801 476.318869,219.39267 471.803998,214.82199 C467.289127,210.251309 465.031692,204.664921 465.031692,198.062827 C465.031692,191.71466 467.289127,186.255236 471.803998,181.684555 C476.318869,177.113874 481.711631,174.828534 487.982285,174.828534 C494.503765,174.828534 500.021941,177.113874 504.536811,181.684555 C509.051682,186.255236 511.309118,191.71466 511.309118,198.062827 C511.309118,204.664921 509.051682,210.251309 504.536811,214.82199 C500.021941,219.39267 494.503765,221.67801 487.982285,221.67801 Z" id="o"></path>
@@ -14,15 +99,78 @@
14
99
  <path d="M1793.90866,153.498691 C1793.90866,136.993455 1797.54564,125.058901 1804.8196,117.695026 C1812.09356,110.331152 1823.88239,106.649215 1840.18609,106.649215 L1990.30554,106.649215 C2006.60924,106.649215 2018.39807,110.331152 2025.67203,117.695026 C2032.94599,125.058901 2036.58297,136.993455 2036.58297,153.498691 L2036.58297,289.47644 L2024.54331,289.47644 L2024.54331,151.594241 C2024.54331,139.659686 2021.97234,131.08966 2016.83041,125.884162 C2011.68847,120.678665 2003.22309,118.075916 1991.43426,118.075916 L1839.05737,118.075916 C1827.26854,118.075916 1818.80316,120.678665 1813.66122,125.884162 C1808.51929,131.08966 1805.94832,139.659686 1805.94832,151.594241 L1805.94832,289.47644 L1793.90866,289.47644 L1793.90866,153.498691 Z M1915.0577,221.67801 C1908.78704,221.67801 1903.39428,219.39267 1898.87941,214.82199 C1894.36454,210.251309 1892.1071,204.664921 1892.1071,198.062827 C1892.1071,191.71466 1894.36454,186.255236 1898.87941,181.684555 C1903.39428,177.113874 1908.78704,174.828534 1915.0577,174.828534 C1921.57918,174.828534 1927.09735,177.113874 1931.61222,181.684555 C1936.12709,186.255236 1938.38453,191.71466 1938.38453,198.062827 C1938.38453,204.664921 1936.12709,210.251309 1931.61222,214.82199 C1927.09735,219.39267 1921.57918,221.67801 1915.0577,221.67801 Z" id="n"></path>
15
100
  <path d="M2192.34601,216.34555 C2186.07536,216.34555 2180.68259,214.060209 2176.16772,209.489529 C2171.65285,204.918848 2169.39542,199.332461 2169.39542,192.730366 C2169.39542,186.382199 2171.65285,180.922775 2176.16772,176.352094 C2180.68259,171.781414 2186.07536,169.496073 2192.34601,169.496073 C2198.86749,169.496073 2204.38567,171.781414 2208.90054,176.352094 C2213.41541,180.922775 2215.67284,186.382199 2215.67284,192.730366 C2215.67284,199.332461 2213.41541,204.918848 2208.90054,209.489529 C2204.38567,214.060209 2198.86749,216.34555 2192.34601,216.34555 Z M2076.08809,0 L2088.12774,0 L2088.12774,197.301047 C2095.65253,190.445026 2107.06512,187.017016 2122.36551,187.017016 L2252.16805,187.017016 L2301.45539,106.649215 L2315,106.649215 L2265.71266,187.017016 C2281.76553,187.017016 2293.36624,190.762435 2300.51479,198.253272 C2307.66333,205.74411 2311.23761,217.615183 2311.23761,233.866492 L2311.23761,289.47644 L2299.19795,289.47644 L2299.19795,231.962042 C2299.19795,220.027487 2296.62698,211.457461 2291.48505,206.251963 C2286.34311,201.046466 2277.87773,198.443717 2266.0889,198.443717 L2121.2368,198.443717 C2109.44797,198.443717 2100.98258,201.046466 2095.84065,206.251963 C2090.69871,211.457461 2088.12774,220.027487 2088.12774,231.962042 L2088.12774,289.47644 L2076.08809,289.47644 L2076.08809,0 Z" id="k"></path>
16
101
  </g>
17
- <circle id="Oval" fill="#E20000" cx="154.010993" cy="260.268789" r="18"></circle>
18
- <circle id="Oval-Copy-3" fill="#E20000" cx="570.7139" cy="265.65" r="15"></circle>
19
- <circle id="Oval-Copy-8" fill="#E20000" cx="735.702447" cy="124.804146" r="15"></circle>
20
- <circle id="Oval-Copy-9" fill="#E20000" cx="901.711934" cy="265.65" r="15"></circle>
21
- <circle id="Oval-Copy-10" fill="#E20000" cx="1154.49299" cy="265.65" r="15"></circle>
22
- <circle id="Oval-Copy-11" fill="#E20000" cx="1388.5509" cy="265.65" r="15"></circle>
23
- <circle id="Oval-Copy-12" fill="#E20000" cx="1771.94209" cy="265.65" r="15"></circle>
24
- <circle id="Oval-Copy-15" fill="#E20000" cx="1554.27939" cy="334.832228" r="15"></circle>
25
- <circle id="Oval-Copy-13" fill="#E20000" cx="1997.72491" cy="265.64697" r="15"></circle>
26
- <circle id="Oval-Copy-14" fill="#E20000" cx="2274.81495" cy="260.187731" r="15"></circle>
102
+
103
+ <!-- Main foreground circles -->
104
+ <g id="main-circles">
105
+ <circle id="Oval" fill="#E20000" cx="154.010993" cy="260.268789" r="18">
106
+ <animate attributeName="r" dur="4s" repeatCount="indefinite" begin="0s"
107
+ values="18;24;18;18;18" />
108
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="0s"
109
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
110
+ </circle>
111
+
112
+ <circle id="Oval-Copy-3" fill="#E20000" cx="570.7139" cy="265.65" r="15">
113
+ <animate attributeName="r" dur="3.5s" repeatCount="indefinite" begin="0.4s"
114
+ values="15;21;15;15;15" />
115
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="2s"
116
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
117
+ </circle>
118
+
119
+ <circle id="Oval-Copy-8" fill="#E20000" cx="735.702447" cy="124.804146" r="15">
120
+ <animate attributeName="r" dur="4.5s" repeatCount="indefinite" begin="0.8s"
121
+ values="15;20;15;15;15" />
122
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="4s"
123
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
124
+ </circle>
125
+
126
+ <circle id="Oval-Copy-9" fill="#E20000" cx="901.711934" cy="265.65" r="15">
127
+ <animate attributeName="r" dur="3.8s" repeatCount="indefinite" begin="1.2s"
128
+ values="15;22;15;15;15" />
129
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="6s"
130
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
131
+ </circle>
132
+
133
+ <circle id="Oval-Copy-10" fill="#E20000" cx="1154.49299" cy="265.65" r="15">
134
+ <animate attributeName="r" dur="3.2s" repeatCount="indefinite" begin="1.6s"
135
+ values="15;23;15;15;15" />
136
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="8s"
137
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
138
+ </circle>
139
+
140
+ <circle id="Oval-Copy-11" fill="#E20000" cx="1388.5509" cy="265.65" r="15">
141
+ <animate attributeName="r" dur="4.2s" repeatCount="indefinite" begin="2.0s"
142
+ values="15;19;15;15;15" />
143
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="10s"
144
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
145
+ </circle>
146
+
147
+ <circle id="Oval-Copy-12" fill="#E20000" cx="1771.94209" cy="265.65" r="15">
148
+ <animate attributeName="r" dur="3.7s" repeatCount="indefinite" begin="2.4s"
149
+ values="15;21;15;15;15" />
150
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="12s"
151
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
152
+ </circle>
153
+
154
+ <circle id="Oval-Copy-15" fill="#E20000" cx="1554.27939" cy="334.832228" r="15">
155
+ <animate attributeName="r" dur="3.9s" repeatCount="indefinite" begin="2.8s"
156
+ values="15;20;15;15;15" />
157
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="14s"
158
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
159
+ </circle>
160
+
161
+ <circle id="Oval-Copy-13" fill="#E20000" cx="1997.72491" cy="265.64697" r="15">
162
+ <animate attributeName="r" dur="3.4s" repeatCount="indefinite" begin="3.2s"
163
+ values="15;22;15;15;15" />
164
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="16s"
165
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
166
+ </circle>
167
+
168
+ <circle id="Oval-Copy-14" fill="#E20000" cx="2274.81495" cy="260.187731" r="15">
169
+ <animate attributeName="r" dur="4.1s" repeatCount="indefinite" begin="3.6s"
170
+ values="15;20;15;15;15" />
171
+ <animate attributeName="fill" dur="20s" repeatCount="indefinite" begin="18s"
172
+ values="#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000;#888888;#FFCC00;#E20000;#E20000;#E20000;#E20000;#E20000;#E20000" />
173
+ </circle>
174
+ </g>
27
175
  </g>
28
- </svg>
176
+ </svg>