vgi-python 0.33.0__tar.gz → 0.34.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 (656) hide show
  1. {vgi_python-0.33.0 → vgi_python-0.34.0}/PKG-INFO +1 -1
  2. {vgi_python-0.33.0 → vgi_python-0.34.0}/pyproject.toml +1 -1
  3. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table_in_out/test_blended_exchange.py +70 -0
  4. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table_in_out/test_blended_metadata.py +40 -0
  5. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_argument_spec.py +59 -2
  6. {vgi_python-0.33.0 → vgi_python-0.34.0}/uv.lock +1 -1
  7. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table_in_out.py +84 -1
  8. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/worker.py +4 -0
  9. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/argument_spec.py +42 -8
  10. {vgi_python-0.33.0 → vgi_python-0.34.0}/.dockerignore +0 -0
  11. {vgi_python-0.33.0 → vgi_python-0.34.0}/.gitattributes +0 -0
  12. {vgi_python-0.33.0 → vgi_python-0.34.0}/.github/dependabot.yml +0 -0
  13. {vgi_python-0.33.0 → vgi_python-0.34.0}/.github/styles/config/vocabularies/VGI/accept.txt +0 -0
  14. {vgi_python-0.33.0 → vgi_python-0.34.0}/.github/workflows/ci.yml +0 -0
  15. {vgi_python-0.33.0 → vgi_python-0.34.0}/.github/workflows/docs.yml +0 -0
  16. {vgi_python-0.33.0 → vgi_python-0.34.0}/.github/workflows/integration.yml +0 -0
  17. {vgi_python-0.33.0 → vgi_python-0.34.0}/.github/workflows/release.yml +0 -0
  18. {vgi_python-0.33.0 → vgi_python-0.34.0}/.github/workflows/tailnet-integration.yml +0 -0
  19. {vgi_python-0.33.0 → vgi_python-0.34.0}/.gitignore +0 -0
  20. {vgi_python-0.33.0 → vgi_python-0.34.0}/.python-version +0 -0
  21. {vgi_python-0.33.0 → vgi_python-0.34.0}/.vale.ini +0 -0
  22. {vgi_python-0.33.0 → vgi_python-0.34.0}/CLAUDE.md +0 -0
  23. {vgi_python-0.33.0 → vgi_python-0.34.0}/DOCS_ACCEPTANCE_CRITERIA.md +0 -0
  24. {vgi_python-0.33.0 → vgi_python-0.34.0}/DOCS_REVIEW_RUBRIC.md +0 -0
  25. {vgi_python-0.33.0 → vgi_python-0.34.0}/DOCS_USABILITY_TEST.md +0 -0
  26. {vgi_python-0.33.0 → vgi_python-0.34.0}/LICENSE +0 -0
  27. {vgi_python-0.33.0 → vgi_python-0.34.0}/PROTOCOL.md +0 -0
  28. {vgi_python-0.33.0 → vgi_python-0.34.0}/README.md +0 -0
  29. {vgi_python-0.33.0 → vgi_python-0.34.0}/RELEASE-RUNBOOK.md +0 -0
  30. {vgi_python-0.33.0 → vgi_python-0.34.0}/SECURITY.md +0 -0
  31. {vgi_python-0.33.0 → vgi_python-0.34.0}/ci/README.md +0 -0
  32. {vgi_python-0.33.0 → vgi_python-0.34.0}/ci/preprocess-require.awk +0 -0
  33. {vgi_python-0.33.0 → vgi_python-0.34.0}/ci/run-integration.sh +0 -0
  34. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/README.md +0 -0
  35. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/cases/negative/and-too-few-children.json +0 -0
  36. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/cases/negative/delta-required-upsert.json +0 -0
  37. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/cases/negative/nested-runtime-filter.json +0 -0
  38. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/cases/negative/remove-with-expression.json +0 -0
  39. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/cases/negative/required-runtime-filter.json +0 -0
  40. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/cases/negative/snapshot-nonzero-revision.json +0 -0
  41. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/cases/negative/unknown-document-property.json +0 -0
  42. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/cases/negative/unknown-node.json +0 -0
  43. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/cases/positive/advisory-upsert-delta.json +0 -0
  44. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/cases/positive/empty-snapshot.json +0 -0
  45. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/cases/positive/nested-required-snapshot.json +0 -0
  46. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/cases/positive/remove-delta.json +0 -0
  47. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/cases/positive/runtime-filter-snapshot.json +0 -0
  48. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/filter-v2.schema.json +0 -0
  49. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/generate_runtime.py +0 -0
  50. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/manifest.json +0 -0
  51. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/run_worker.py +0 -0
  52. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/arithmetic-add/expected.arrow +0 -0
  53. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/arithmetic-add/filter.arrow +0 -0
  54. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/arithmetic-add/input.arrow +0 -0
  55. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/arithmetic-multiply/expected.arrow +0 -0
  56. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/arithmetic-multiply/filter.arrow +0 -0
  57. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/arithmetic-multiply/input.arrow +0 -0
  58. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/arithmetic-negate/expected.arrow +0 -0
  59. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/arithmetic-negate/filter.arrow +0 -0
  60. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/arithmetic-negate/input.arrow +0 -0
  61. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/arithmetic-subtract/expected.arrow +0 -0
  62. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/arithmetic-subtract/filter.arrow +0 -0
  63. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/arithmetic-subtract/input.arrow +0 -0
  64. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/cast-integer-to-double/expected.arrow +0 -0
  65. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/cast-integer-to-double/filter.arrow +0 -0
  66. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/cast-integer-to-double/input.arrow +0 -0
  67. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-distinct_from/expected.arrow +0 -0
  68. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-distinct_from/filter.arrow +0 -0
  69. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-distinct_from/input.arrow +0 -0
  70. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-distinct_from/worker-expected.arrow +0 -0
  71. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-eq/expected.arrow +0 -0
  72. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-eq/filter.arrow +0 -0
  73. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-eq/input.arrow +0 -0
  74. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-eq/worker-expected.arrow +0 -0
  75. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-ge/expected.arrow +0 -0
  76. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-ge/filter.arrow +0 -0
  77. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-ge/input.arrow +0 -0
  78. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-ge/worker-expected.arrow +0 -0
  79. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-gt/expected.arrow +0 -0
  80. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-gt/filter.arrow +0 -0
  81. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-gt/input.arrow +0 -0
  82. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-gt/worker-expected.arrow +0 -0
  83. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-le/expected.arrow +0 -0
  84. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-le/filter.arrow +0 -0
  85. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-le/input.arrow +0 -0
  86. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-le/worker-expected.arrow +0 -0
  87. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-lt/expected.arrow +0 -0
  88. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-lt/filter.arrow +0 -0
  89. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-lt/input.arrow +0 -0
  90. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-lt/worker-expected.arrow +0 -0
  91. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-ne/expected.arrow +0 -0
  92. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-ne/filter.arrow +0 -0
  93. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-ne/input.arrow +0 -0
  94. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-ne/worker-expected.arrow +0 -0
  95. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-not_distinct_from/expected.arrow +0 -0
  96. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-not_distinct_from/filter.arrow +0 -0
  97. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-not_distinct_from/input.arrow +0 -0
  98. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/comparison-not_distinct_from/worker-expected.arrow +0 -0
  99. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-atomic-multi-update/delta-0.arrow +0 -0
  100. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-atomic-multi-update/expected.arrow +0 -0
  101. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-atomic-multi-update/filter.arrow +0 -0
  102. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-atomic-multi-update/input.arrow +0 -0
  103. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-empty-noop/delta-0.arrow +0 -0
  104. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-empty-noop/expected.arrow +0 -0
  105. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-empty-noop/filter.arrow +0 -0
  106. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-empty-noop/input.arrow +0 -0
  107. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-upsert-remove-stale/delta-0.arrow +0 -0
  108. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-upsert-remove-stale/delta-1.arrow +0 -0
  109. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-upsert-remove-stale/delta-2.arrow +0 -0
  110. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-upsert-remove-stale/expected.arrow +0 -0
  111. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-upsert-remove-stale/filter.arrow +0 -0
  112. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/delta-upsert-remove-stale/input.arrow +0 -0
  113. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/empty-snapshot/expected.arrow +0 -0
  114. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/empty-snapshot/filter.arrow +0 -0
  115. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/empty-snapshot/input.arrow +0 -0
  116. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/empty-snapshot/worker-expected.arrow +0 -0
  117. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-cast-type-not-null/filter.arrow +0 -0
  118. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-cast-type-not-null/input.arrow +0 -0
  119. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-column-index/filter.arrow +0 -0
  120. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-column-index/input.arrow +0 -0
  121. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-column-name/filter.arrow +0 -0
  122. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-column-name/input.arrow +0 -0
  123. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-contextual-cast-without-session/filter.arrow +0 -0
  124. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-contextual-cast-without-session/input.arrow +0 -0
  125. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-duplicate-predicate-id/filter.arrow +0 -0
  126. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-duplicate-predicate-id/input.arrow +0 -0
  127. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-external-column-index/filter.arrow +0 -0
  128. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-external-column-index/input.arrow +0 -0
  129. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-external-column-index/join-keys-0.arrow +0 -0
  130. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-external-column-name/filter.arrow +0 -0
  131. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-external-column-name/input.arrow +0 -0
  132. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-external-column-name/join-keys-0.arrow +0 -0
  133. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-field-non-struct/filter.arrow +0 -0
  134. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-field-non-struct/input.arrow +0 -0
  135. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-in-payload-not-list/filter.arrow +0 -0
  136. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-in-payload-not-list/input.arrow +0 -0
  137. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-in-payload-null-list/filter.arrow +0 -0
  138. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-in-payload-null-list/input.arrow +0 -0
  139. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-invalid-overload/filter.arrow +0 -0
  140. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-invalid-overload/input.arrow +0 -0
  141. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-missing-literal/filter.arrow +0 -0
  142. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-missing-literal/input.arrow +0 -0
  143. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-non-boolean-root/filter.arrow +0 -0
  144. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-non-boolean-root/input.arrow +0 -0
  145. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-unknown-standard-function/filter.arrow +0 -0
  146. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/error-unknown-standard-function/input.arrow +0 -0
  147. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/external-in-nonzero-column/expected.arrow +0 -0
  148. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/external-in-nonzero-column/filter.arrow +0 -0
  149. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/external-in-nonzero-column/input.arrow +0 -0
  150. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/external-in-nonzero-column/join-keys-0.arrow +0 -0
  151. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/external-in-nonzero-column/worker-expected.arrow +0 -0
  152. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/function-contains/expected.arrow +0 -0
  153. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/function-contains/filter.arrow +0 -0
  154. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/function-contains/input.arrow +0 -0
  155. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/function-ends-with/expected.arrow +0 -0
  156. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/function-ends-with/filter.arrow +0 -0
  157. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/function-ends-with/input.arrow +0 -0
  158. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/function-list-contains/expected.arrow +0 -0
  159. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/function-list-contains/filter.arrow +0 -0
  160. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/function-list-contains/input.arrow +0 -0
  161. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/function-starts-with/expected.arrow +0 -0
  162. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/function-starts-with/filter.arrow +0 -0
  163. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/function-starts-with/input.arrow +0 -0
  164. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/in-empty/expected.arrow +0 -0
  165. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/in-empty/filter.arrow +0 -0
  166. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/in-empty/input.arrow +0 -0
  167. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/in-empty/worker-expected.arrow +0 -0
  168. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/in-with-null/expected.arrow +0 -0
  169. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/in-with-null/filter.arrow +0 -0
  170. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/in-with-null/input.arrow +0 -0
  171. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/in-with-null/worker-expected.arrow +0 -0
  172. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/is-not-null/expected.arrow +0 -0
  173. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/is-not-null/filter.arrow +0 -0
  174. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/is-not-null/input.arrow +0 -0
  175. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/is-not-null/worker-expected.arrow +0 -0
  176. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/is-null/expected.arrow +0 -0
  177. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/is-null/filter.arrow +0 -0
  178. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/is-null/input.arrow +0 -0
  179. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/is-null/worker-expected.arrow +0 -0
  180. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/kleene-and/expected.arrow +0 -0
  181. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/kleene-and/filter.arrow +0 -0
  182. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/kleene-and/input.arrow +0 -0
  183. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/kleene-not/expected.arrow +0 -0
  184. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/kleene-not/filter.arrow +0 -0
  185. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/kleene-not/input.arrow +0 -0
  186. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/kleene-or/expected.arrow +0 -0
  187. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/kleene-or/filter.arrow +0 -0
  188. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/kleene-or/input.arrow +0 -0
  189. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/nan-comparison/expected.arrow +0 -0
  190. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/nan-comparison/filter.arrow +0 -0
  191. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/nan-comparison/input.arrow +0 -0
  192. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/negative-zero-membership/expected.arrow +0 -0
  193. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/negative-zero-membership/filter.arrow +0 -0
  194. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/negative-zero-membership/input.arrow +0 -0
  195. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/nested-null-propagation/expected.arrow +0 -0
  196. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/nested-null-propagation/filter.arrow +0 -0
  197. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/nested-null-propagation/input.arrow +0 -0
  198. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/not-in-empty/expected.arrow +0 -0
  199. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/not-in-empty/filter.arrow +0 -0
  200. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/not-in-empty/input.arrow +0 -0
  201. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/not-in-empty/worker-expected.arrow +0 -0
  202. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/not-in-with-null/expected.arrow +0 -0
  203. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/not-in-with-null/filter.arrow +0 -0
  204. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/not-in-with-null/input.arrow +0 -0
  205. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/not-in-with-null/worker-expected.arrow +0 -0
  206. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/session-integer-division/expected.arrow +0 -0
  207. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/session-integer-division/filter.arrow +0 -0
  208. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime/session-integer-division/input.arrow +0 -0
  209. {vgi_python-0.33.0 → vgi_python-0.34.0}/conformance/filter-v2/runtime-manifest.json +0 -0
  210. {vgi_python-0.33.0 → vgi_python-0.34.0}/dist-vgi/.gitignore +0 -0
  211. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/aggregate-functions.md +0 -0
  212. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/arguments.md +0 -0
  213. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/auth.md +0 -0
  214. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/catalogs.md +0 -0
  215. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/client.md +0 -0
  216. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/exceptions.md +0 -0
  217. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/filters.md +0 -0
  218. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/functions.md +0 -0
  219. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/http.md +0 -0
  220. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/index.md +0 -0
  221. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/metadata.md +0 -0
  222. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/observability.md +0 -0
  223. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/storage.md +0 -0
  224. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/transactor.md +0 -0
  225. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/api/worker.md +0 -0
  226. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/argument-serialization.md +0 -0
  227. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/assets/apple-touch-icon.png +0 -0
  228. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/assets/favicon-16x16.png +0 -0
  229. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/assets/favicon-32x32.png +0 -0
  230. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/assets/favicon.ico +0 -0
  231. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/assets/kinds/aggregate.svg +0 -0
  232. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/assets/kinds/buffering.svg +0 -0
  233. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/assets/kinds/scalar.svg +0 -0
  234. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/assets/kinds/table-in-out.svg +0 -0
  235. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/assets/kinds/table.svg +0 -0
  236. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/assets/logo.png +0 -0
  237. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/assets/social-card.png +0 -0
  238. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/authentication.md +0 -0
  239. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/catalog-interface.md +0 -0
  240. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/cli.md +0 -0
  241. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/column-statistics.md +0 -0
  242. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/concepts/index.md +0 -0
  243. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/contributing-docs.md +0 -0
  244. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/filter-pushdown.md +0 -0
  245. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/generator-api.md +0 -0
  246. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/global-functions.md +0 -0
  247. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/how-to/catalogs.md +0 -0
  248. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/how-to/function-patterns.md +0 -0
  249. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/how-to/http-auth.md +0 -0
  250. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/how-to/index.md +0 -0
  251. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/how-to/iroh.md +0 -0
  252. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/how-to/pushdown-and-statistics.md +0 -0
  253. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/how-to/state-storage.md +0 -0
  254. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/how-to/tailnet.md +0 -0
  255. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/index.md +0 -0
  256. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/lifecycle.md +0 -0
  257. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/metadata.md +0 -0
  258. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/overrides/main.html +0 -0
  259. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/protocol/index.md +0 -0
  260. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/protocol/vgi-catalog-query-pushdown-design.md +0 -0
  261. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/protocol/vgi-duckdb-filter-adapter.md +0 -0
  262. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/protocol/vgi-filter-encoding-v2-spec.md +0 -0
  263. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/protocol/vgi-protocol-proposed-changes.md +0 -0
  264. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/protocol/vgi-runtime-filter-artifacts.md +0 -0
  265. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/robots.txt +0 -0
  266. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/shared-storage.md +0 -0
  267. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/stylesheets/extra.css +0 -0
  268. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/tutorial/index.md +0 -0
  269. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/tutorial/scalar.md +0 -0
  270. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/tutorial/table.md +0 -0
  271. {vgi_python-0.33.0 → vgi_python-0.34.0}/docs/vgi-logo.png +0 -0
  272. {vgi_python-0.33.0 → vgi_python-0.34.0}/examples/batch_index_worker.py +0 -0
  273. {vgi_python-0.33.0 → vgi_python-0.34.0}/examples/cache_worker.py +0 -0
  274. {vgi_python-0.33.0 → vgi_python-0.34.0}/examples/calc_scalar_worker.py +0 -0
  275. {vgi_python-0.33.0 → vgi_python-0.34.0}/examples/calc_worker.py +0 -0
  276. {vgi_python-0.33.0 → vgi_python-0.34.0}/examples/copy_format_worker.py +0 -0
  277. {vgi_python-0.33.0 → vgi_python-0.34.0}/examples/filter_worker.py +0 -0
  278. {vgi_python-0.33.0 → vgi_python-0.34.0}/examples/greeting_scalar_worker.py +0 -0
  279. {vgi_python-0.33.0 → vgi_python-0.34.0}/examples/row_count_worker.py +0 -0
  280. {vgi_python-0.33.0 → vgi_python-0.34.0}/examples/series_streaming_worker.py +0 -0
  281. {vgi_python-0.33.0 → vgi_python-0.34.0}/examples/sum_worker.py +0 -0
  282. {vgi_python-0.33.0 → vgi_python-0.34.0}/identity.png +0 -0
  283. {vgi_python-0.33.0 → vgi_python-0.34.0}/mkdocs.yml +0 -0
  284. {vgi_python-0.33.0 → vgi_python-0.34.0}/packages/vgi-fixtures/LICENSE +0 -0
  285. {vgi_python-0.33.0 → vgi_python-0.34.0}/packages/vgi-fixtures/README.md +0 -0
  286. {vgi_python-0.33.0 → vgi_python-0.34.0}/packages/vgi-fixtures/docker/Dockerfile +0 -0
  287. {vgi_python-0.33.0 → vgi_python-0.34.0}/packages/vgi-fixtures/docker/docker-entrypoint.sh +0 -0
  288. {vgi_python-0.33.0 → vgi_python-0.34.0}/packages/vgi-fixtures/pyproject.toml +0 -0
  289. {vgi_python-0.33.0 → vgi_python-0.34.0}/scripts/measure_startup.py +0 -0
  290. {vgi_python-0.33.0 → vgi_python-0.34.0}/scripts/regen_generated.py +0 -0
  291. {vgi_python-0.33.0 → vgi_python-0.34.0}/scripts/run_all_tests.sh +0 -0
  292. {vgi_python-0.33.0 → vgi_python-0.34.0}/test-data/generate.sh +0 -0
  293. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/__init__.py +0 -0
  294. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/_http_fixtures.py +0 -0
  295. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/__init__.py +0 -0
  296. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_attach_option.py +0 -0
  297. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_catalog_interface.py +0 -0
  298. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_client_catalog.py +0 -0
  299. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_column_statistics.py +0 -0
  300. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_declarative.py +0 -0
  301. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_example_worker_catalog.py +0 -0
  302. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_integration.py +0 -0
  303. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_required_filters.py +0 -0
  304. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_scan_branches.py +0 -0
  305. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_serialization.py +0 -0
  306. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_setting.py +0 -0
  307. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_storage.py +0 -0
  308. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_time_travel.py +0 -0
  309. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/catalog/test_writable_table.py +0 -0
  310. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/__init__.py +0 -0
  311. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_aggregate_client.py +0 -0
  312. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_batch_metadata_callback.py +0 -0
  313. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_bind_and_join_keys.py +0 -0
  314. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_broken_pipe.py +0 -0
  315. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_cli.py +0 -0
  316. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_cli_catalog_functions.py +0 -0
  317. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_copy_client.py +0 -0
  318. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_http_response_budget.py +0 -0
  319. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_iroh_client.py +0 -0
  320. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_scan_branches_client.py +0 -0
  321. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_split_client.py +0 -0
  322. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_stop_force.py +0 -0
  323. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_table_column_statistics.py +0 -0
  324. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_time_travel_client.py +0 -0
  325. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/client/test_worker_debug.py +0 -0
  326. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/__init__.py +0 -0
  327. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/_stub.py +0 -0
  328. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/conftest.py +0 -0
  329. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_accumulate.py +0 -0
  330. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_aggregate.py +0 -0
  331. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_attach.py +0 -0
  332. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_bearer_auth.py +0 -0
  333. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_const_param_enforcement.py +0 -0
  334. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_container.py +0 -0
  335. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_copy_from.py +0 -0
  336. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_copy_to.py +0 -0
  337. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_directory_parity.py +0 -0
  338. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_function_inventory.py +0 -0
  339. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_github.py +0 -0
  340. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_http_client.py +0 -0
  341. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_http_external_location.py +0 -0
  342. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_http_upload_url.py +0 -0
  343. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_macro.py +0 -0
  344. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_overload.py +0 -0
  345. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_protocol_inventory.py +0 -0
  346. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_protocol_version.py +0 -0
  347. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_resumable_scan.py +0 -0
  348. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_scalar.py +0 -0
  349. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_scalar_attach_opaque_data.py +0 -0
  350. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_secret.py +0 -0
  351. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_settings.py +0 -0
  352. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_splits.py +0 -0
  353. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_table.py +0 -0
  354. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_table_in_out.py +0 -0
  355. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_view.py +0 -0
  356. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conformance/test_writable.py +0 -0
  357. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/conftest.py +0 -0
  358. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/data/split_tokens/anchor_len_overrun.bin +0 -0
  359. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/data/split_tokens/bad_fingerprint.bin +0 -0
  360. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/data/split_tokens/bad_flags_unsealed_but_key_present.bin +0 -0
  361. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/data/split_tokens/bad_version.bin +0 -0
  362. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/data/split_tokens/generate.py +0 -0
  363. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/data/split_tokens/manifest.json +0 -0
  364. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/data/split_tokens/reserved_flag_bit.bin +0 -0
  365. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/data/split_tokens/stale_anchor.bin +0 -0
  366. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/data/split_tokens/truncated.bin +0 -0
  367. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/data/split_tokens/valid_sealed.bin +0 -0
  368. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/data/split_tokens/valid_unsealed.bin +0 -0
  369. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/scalar/__init__.py +0 -0
  370. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/scalar/test_bernoulli_function.py +0 -0
  371. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/scalar/test_binary_packet_function.py +0 -0
  372. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/scalar/test_client.py +0 -0
  373. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/scalar/test_conditional_message_function.py +0 -0
  374. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/scalar/test_hash_seed_function.py +0 -0
  375. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/scalar/test_multiply_by_setting_function.py +0 -0
  376. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/scalar/test_multiply_function.py +0 -0
  377. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/scalar/test_random_bytes_function.py +0 -0
  378. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/scalar/test_return_secret_value_function.py +0 -0
  379. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/__init__.py +0 -0
  380. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/generator/__init__.py +0 -0
  381. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/generator/test_constant_columns_function.py +0 -0
  382. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/generator/test_double_sequence_function.py +0 -0
  383. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/generator/test_exception_function.py +0 -0
  384. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/generator/test_filter_echo_function.py +0 -0
  385. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/generator/test_logging_function.py +0 -0
  386. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/generator/test_nested_sequence_function.py +0 -0
  387. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/generator/test_partitioned_function.py +0 -0
  388. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/generator/test_projected_data_function.py +0 -0
  389. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/generator/test_sequence_function.py +0 -0
  390. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/generator/test_settings_function.py +0 -0
  391. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/generator/test_struct_settings_function.py +0 -0
  392. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/generator/test_ten_thousand_function.py +0 -0
  393. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table/test_wide_columns.py +0 -0
  394. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table_in_out/__init__.py +0 -0
  395. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table_in_out/generator/__init__.py +0 -0
  396. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table_in_out/generator/test_buffer_input_function.py +0 -0
  397. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table_in_out/generator/test_echo_function.py +0 -0
  398. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table_in_out/generator/test_exception_functions.py +0 -0
  399. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table_in_out/generator/test_filter_by_setting_function.py +0 -0
  400. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table_in_out/generator/test_repeat_inputs_function.py +0 -0
  401. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table_in_out/generator/test_substream_partial_sum_function.py +0 -0
  402. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table_in_out/generator/test_sum_all_columns_function.py +0 -0
  403. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/table_in_out/test_client.py +0 -0
  404. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/tailnet/Dockerfile +0 -0
  405. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/tailnet/__init__.py +0 -0
  406. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/tailnet/compose.yaml +0 -0
  407. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/tailnet/probe.py +0 -0
  408. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/tailnet/run.sh +0 -0
  409. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/tailnet/test_worker.py +0 -0
  410. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/tailnet/worker.py +0 -0
  411. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_access_log_audit.py +0 -0
  412. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_aggregate_function.py +0 -0
  413. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_auth.py +0 -0
  414. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_bind_exceptions.py +0 -0
  415. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_bind_request_at_clause.py +0 -0
  416. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_bound_storage_conformance.py +0 -0
  417. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_cache_control.py +0 -0
  418. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_call_state_attach.py +0 -0
  419. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_catalog_auth_binding.py +0 -0
  420. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_client_oauth.py +0 -0
  421. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_codegen_request_inventory.py +0 -0
  422. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_copy_from_function.py +0 -0
  423. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_copy_to_function.py +0 -0
  424. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_docstrings.py +0 -0
  425. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_documentation_examples.py +0 -0
  426. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_example_function_arg_types.py +0 -0
  427. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_examples_workers.py +0 -0
  428. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_exception_handling.py +0 -0
  429. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_exceptions.py +0 -0
  430. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_filter_pushdown.py +0 -0
  431. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_filter_pushdown_extension.py +0 -0
  432. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_filter_v2.py +0 -0
  433. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_filter_v2_builder.py +0 -0
  434. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_filter_v2_runtime_corpus.py +0 -0
  435. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_filter_v2_spec_schema.py +0 -0
  436. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_fixture_catalog_parity.py +0 -0
  437. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_function_shape_mismatch.py +0 -0
  438. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_function_storage.py +0 -0
  439. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_function_storage_azure_sql.py +0 -0
  440. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_function_storage_cf_do.py +0 -0
  441. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_function_storage_cf_do_integration.py +0 -0
  442. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_function_storage_conformance.py +0 -0
  443. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_cpp_constants.py +0 -0
  444. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_cpp_protocol_name.py +0 -0
  445. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_cpp_protocol_version.py +0 -0
  446. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_cpp_request_builders.py +0 -0
  447. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_cpp_schemas.py +0 -0
  448. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_cpp_secret.py +0 -0
  449. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_go_schemas.py +0 -0
  450. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_java_schemas.py +0 -0
  451. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_protocol_version.py +0 -0
  452. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_rust_request_builders.py +0 -0
  453. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_rust_schemas.py +0 -0
  454. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_schemas_cross_lang.py +0 -0
  455. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_ts_client.py +0 -0
  456. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_generated_ts_schemas.py +0 -0
  457. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_http_demo_storage.py +0 -0
  458. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_http_s3_offload_input.py +0 -0
  459. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_http_s3_offload_output.py +0 -0
  460. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_launch_transport.py +0 -0
  461. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_metadata.py +0 -0
  462. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_mypy_consolidated.py +0 -0
  463. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_nest_tensor.py +0 -0
  464. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_otel.py +0 -0
  465. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_projection_enforcement.py +0 -0
  466. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_projection_repro.py +0 -0
  467. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_protocol_classes.py +0 -0
  468. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_resolved_secrets.py +0 -0
  469. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_schema_paths_v2.py +0 -0
  470. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_schema_scoped_functions.py +0 -0
  471. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_schema_utils.py +0 -0
  472. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_serve.py +0 -0
  473. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_setting_secret_annotations.py +0 -0
  474. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_signing_key.py +0 -0
  475. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_split_token.py +0 -0
  476. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_table_buffering_function.py +0 -0
  477. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_table_function_dynamic_to_string.py +0 -0
  478. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_tcp_transport.py +0 -0
  479. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_type_bounds.py +0 -0
  480. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_union_argument.py +0 -0
  481. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_wire_record_schema_parity.py +0 -0
  482. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_worker.py +0 -0
  483. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_worker_cli.py +0 -0
  484. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_worker_page.py +0 -0
  485. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/test_write_results.py +0 -0
  486. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/transactor/__init__.py +0 -0
  487. {vgi_python-0.33.0 → vgi_python-0.34.0}/tests/transactor/test_transactor.py +0 -0
  488. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/__init__.py +0 -0
  489. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_duckdb.py +0 -0
  490. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_storage_profile.py +0 -0
  491. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/__init__.py +0 -0
  492. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/accumulate/__init__.py +0 -0
  493. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/accumulate/worker.py +0 -0
  494. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/aggregate/__init__.py +0 -0
  495. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/aggregate/_common.py +0 -0
  496. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/aggregate/basic.py +0 -0
  497. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/aggregate/dynamic.py +0 -0
  498. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/aggregate/generic.py +0 -0
  499. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/aggregate/listagg.py +0 -0
  500. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/aggregate/percentile.py +0 -0
  501. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/aggregate/same_name.py +0 -0
  502. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/aggregate/secret_typed.py +0 -0
  503. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/aggregate/streaming.py +0 -0
  504. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/aggregate/varargs.py +0 -0
  505. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/aggregate/window.py +0 -0
  506. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/attach_options.py +0 -0
  507. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/bad_enum.py +0 -0
  508. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/bad_protocol.py +0 -0
  509. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/cancellable.py +0 -0
  510. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/catalog.py +0 -0
  511. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/companion.py +0 -0
  512. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/copy_from.py +0 -0
  513. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/copy_to.py +0 -0
  514. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/global_functions.py +0 -0
  515. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/http_server.py +0 -0
  516. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/narrow_bind/__init__.py +0 -0
  517. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/narrow_bind/worker.py +0 -0
  518. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/nest_tensor.py +0 -0
  519. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/orchard_catalog.py +0 -0
  520. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/projection_repro/__init__.py +0 -0
  521. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/projection_repro/worker.py +0 -0
  522. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/scalar/__init__.py +0 -0
  523. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/scalar/_common.py +0 -0
  524. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/scalar/arithmetic.py +0 -0
  525. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/scalar/bench_ladder.py +0 -0
  526. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/scalar/binary.py +0 -0
  527. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/scalar/formatting.py +0 -0
  528. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/scalar/geo.py +0 -0
  529. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/scalar/null_handling.py +0 -0
  530. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/scalar/random_demo.py +0 -0
  531. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/scalar/same_name.py +0 -0
  532. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/scalar/settings_secrets.py +0 -0
  533. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/scalar/type_info.py +0 -0
  534. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/schema_reconcile/__init__.py +0 -0
  535. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/schema_reconcile/worker.py +0 -0
  536. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/simple_writable.py +0 -0
  537. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/__init__.py +0 -0
  538. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/_common.py +0 -0
  539. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/batch_index.py +0 -0
  540. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/batch_index_broken.py +0 -0
  541. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/cache.py +0 -0
  542. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/catalog_scans.py +0 -0
  543. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/filters.py +0 -0
  544. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/late_materialization.py +0 -0
  545. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/make_series.py +0 -0
  546. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/misc.py +0 -0
  547. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/order_modes.py +0 -0
  548. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/pairs.py +0 -0
  549. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/partition_columns.py +0 -0
  550. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/partition_columns_broken.py +0 -0
  551. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/profiling_example.py +0 -0
  552. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/required_filters.py +0 -0
  553. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/same_name_cached.py +0 -0
  554. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/same_name_schemas.py +0 -0
  555. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/sequence.py +0 -0
  556. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/settings.py +0 -0
  557. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/splits.py +0 -0
  558. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/transaction_storage.py +0 -0
  559. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/tt_pushdown.py +0 -0
  560. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/typed_probe.py +0 -0
  561. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/versioned.py +0 -0
  562. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table/wide.py +0 -0
  563. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/table_in_out_same_name.py +0 -0
  564. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/twin_catalogs.py +0 -0
  565. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/versioned.py +0 -0
  566. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/versioned_tables.py +0 -0
  567. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/writable/__init__.py +0 -0
  568. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/writable/generic.py +0 -0
  569. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/writable/table.py +0 -0
  570. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/_test_fixtures/writable/worker.py +0 -0
  571. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/aggregate_function.py +0 -0
  572. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/arguments.py +0 -0
  573. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/attach_header.py +0 -0
  574. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/auth.py +0 -0
  575. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/cache_control.py +0 -0
  576. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/catalog/__init__.py +0 -0
  577. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/catalog/_descriptor_spec.py +0 -0
  578. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/catalog/attach_option.py +0 -0
  579. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/catalog/catalog_interface.py +0 -0
  580. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/catalog/descriptors.py +0 -0
  581. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/catalog/duckdb_statistics.py +0 -0
  582. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/catalog/secret_type.py +0 -0
  583. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/catalog/setting.py +0 -0
  584. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/catalog/storage.py +0 -0
  585. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/client/__init__.py +0 -0
  586. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/client/aggregate.py +0 -0
  587. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/client/catalog_mixin.py +0 -0
  588. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/client/cli.py +0 -0
  589. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/client/cli_catalog.py +0 -0
  590. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/client/cli_schema.py +0 -0
  591. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/client/cli_table.py +0 -0
  592. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/client/cli_transaction.py +0 -0
  593. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/client/cli_utils.py +0 -0
  594. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/client/cli_view.py +0 -0
  595. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/client/client.py +0 -0
  596. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/client/errors.py +0 -0
  597. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/__init__.py +0 -0
  598. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/_common.py +0 -0
  599. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/cpp_constants.py +0 -0
  600. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/cpp_protocol_name.py +0 -0
  601. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/cpp_protocol_version.py +0 -0
  602. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/cpp_request_builders.py +0 -0
  603. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/cpp_schemas.py +0 -0
  604. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/cpp_secret_protocol_version.py +0 -0
  605. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/cpp_secret_request_builders.py +0 -0
  606. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/cpp_secret_schemas.py +0 -0
  607. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/go_schemas.py +0 -0
  608. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/java_schemas.py +0 -0
  609. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/protocol_version.py +0 -0
  610. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/rust_request_builders.py +0 -0
  611. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/rust_schemas.py +0 -0
  612. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/ts_client.py +0 -0
  613. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/codegen/ts_schemas.py +0 -0
  614. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/copy_from_function.py +0 -0
  615. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/copy_to_function.py +0 -0
  616. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/exceptions.py +0 -0
  617. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/filter_v2.py +0 -0
  618. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/filter_v2_builder.py +0 -0
  619. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/function.py +0 -0
  620. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/function_storage.py +0 -0
  621. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/function_storage_azure_sql.py +0 -0
  622. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/function_storage_cf_do.py +0 -0
  623. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/http/__init__.py +0 -0
  624. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/http/demo_storage.py +0 -0
  625. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/http/landing.html +0 -0
  626. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/http/landing_page.py +0 -0
  627. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/http/vgi-client.js +0 -0
  628. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/http/worker_page.py +0 -0
  629. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/invocation.py +0 -0
  630. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/logging_config.py +0 -0
  631. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/meta_worker.py +0 -0
  632. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/metadata.py +0 -0
  633. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/otel.py +0 -0
  634. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/profiling.py +0 -0
  635. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/protocol.py +0 -0
  636. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/protocol_version.txt +0 -0
  637. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/py.typed +0 -0
  638. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/scalar_function.py +0 -0
  639. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/schema_path.py +0 -0
  640. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/schema_utils.py +0 -0
  641. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/secret_protocol.py +0 -0
  642. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/secret_service.py +0 -0
  643. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/serve.py +0 -0
  644. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/split_token.py +0 -0
  645. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/table_buffering_function.py +0 -0
  646. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/table_filter_pushdown.py +0 -0
  647. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/table_function.py +0 -0
  648. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/table_in_out_function.py +0 -0
  649. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/transactor/__init__.py +0 -0
  650. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/transactor/_duckdb_compat.py +0 -0
  651. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/transactor/client.py +0 -0
  652. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/transactor/protocol.py +0 -0
  653. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/transactor/server.py +0 -0
  654. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/worker.py +0 -0
  655. {vgi_python-0.33.0 → vgi_python-0.34.0}/vgi/write_results.py +0 -0
  656. {vgi_python-0.33.0 → vgi_python-0.34.0}/wrangler.jsonc +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: vgi-python
3
- Version: 0.33.0
3
+ Version: 0.34.0
4
4
  Summary: Vector Gateway Interface - Connect DuckDB to external programs via Apache Arrow
5
5
  Project-URL: Homepage, https://query.farm
6
6
  Project-URL: Repository, https://github.com/Query-farm/vgi-python
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "vgi-python"
3
- version = "0.33.0"
3
+ version = "0.34.0"
4
4
  description = "Vector Gateway Interface - Connect DuckDB to external programs via Apache Arrow"
5
5
  readme = "README.md"
6
6
  keywords = [
@@ -280,3 +280,73 @@ class TestHasFinalizeSkip:
280
280
  assert len(with_finalize) == 1
281
281
  assert len(without_finalize) == 1
282
282
  assert with_finalize[0].column("i").to_pylist() == without_finalize[0].column("i").to_pylist()
283
+
284
+
285
+ class TestBlendedAny:
286
+ """`blended_any` / `blended_any_varargs`: positional input columns declared ANY.
287
+
288
+ An ANY arg names no concrete Arrow type, so the output type can only come from
289
+ the input schema the client supplies at bind. These drive that over the wire:
290
+ the same registration must bind to whatever type each call resolves to, and
291
+ echo the column back untouched (nested types and nulls included).
292
+ """
293
+
294
+ @pytest.mark.parametrize(
295
+ "array",
296
+ [
297
+ pa.array(["a", None, "c"], type=pa.string()),
298
+ pa.array([1, 2, None], type=pa.int32()),
299
+ pa.array(
300
+ [{"message": "lost pkg", "tier": "gold"}, None, {"message": None, "tier": "free"}],
301
+ type=pa.struct([("message", pa.string()), ("tier", pa.string())]),
302
+ ),
303
+ pa.array([[1, 2], [], None], type=pa.list_(pa.int64())),
304
+ ],
305
+ ids=["string", "int32", "struct", "list"],
306
+ )
307
+ def test_output_is_typed_from_the_input_and_echoed(self, fixture_worker: str, array: pa.Array[Any]) -> None:
308
+ """One registration, bound per call to the resolved input type."""
309
+ batch = pa.record_batch({"value": array})
310
+ bound: list[pa.Schema] = []
311
+
312
+ with Client(fixture_worker) as client:
313
+ results = list(
314
+ client.table_in_out_function(
315
+ function_name="blended_any",
316
+ schema_path=["main"],
317
+ input=iter([batch]),
318
+ bind_result_callback=lambda r: bound.append(r.output_schema),
319
+ has_finalize=False,
320
+ )
321
+ )
322
+
323
+ assert [s.names for s in bound] == [["value"]]
324
+ assert bound[0].field("value").type == array.type
325
+ (out,) = results
326
+ assert out.column("value").type == array.type
327
+ # A null struct and a struct with a null field must stay distinct.
328
+ assert out.column("value").to_pylist() == array.to_pylist()
329
+
330
+ def test_varargs_columns_each_keep_their_own_type(self, fixture_worker: str) -> None:
331
+ """The vararg element type is ANY, so every runtime column types itself."""
332
+ batch = pa.record_batch(
333
+ {
334
+ "col0": pa.array(["a", "b"], type=pa.string()),
335
+ "col1": pa.array([[1], [2, 3]], type=pa.list_(pa.int32())),
336
+ "col2": pa.array([{"k": 1.5}, None], type=pa.struct([("k", pa.float64())])),
337
+ }
338
+ )
339
+
340
+ with Client(fixture_worker) as client:
341
+ (out,) = list(
342
+ client.table_in_out_function(
343
+ function_name="blended_any_varargs",
344
+ schema_path=["main"],
345
+ input=iter([batch]),
346
+ has_finalize=False,
347
+ )
348
+ )
349
+
350
+ assert out.schema.names == ["col0", "col1", "col2"]
351
+ assert out.schema.types == batch.schema.types
352
+ assert out.to_pylist() == batch.to_pylist()
@@ -148,3 +148,43 @@ class TestBlendedFootguns:
148
148
 
149
149
  with pytest.raises(TypeError, match="at least one positional Arg"):
150
150
  resolve_metadata(_NamedOnly)
151
+
152
+
153
+ class TestBlendedAnyResolution:
154
+ """A blended function may declare its positional input column(s) ANY.
155
+
156
+ The ANY marker lives on the argument *spec* — the ``vgi_type=any`` field
157
+ metadata the client reads to learn it must take the column's type from the
158
+ call rather than from the declaration.
159
+ """
160
+
161
+ def test_any_positional_is_a_blended_input_column(self) -> None:
162
+ """The ANY arg resolves as a positional input column, not a bind constant."""
163
+ from vgi._test_fixtures.table_in_out import BlendedAnyFunction
164
+ from vgi.argument_spec import extract_argument_specs
165
+
166
+ m = resolve_metadata(BlendedAnyFunction)
167
+ assert m.input_from_args is True
168
+ assert m.has_finalize is False
169
+ (spec,) = extract_argument_specs(BlendedAnyFunction)
170
+ assert (spec.name, spec.position, spec.is_any_type, spec.is_varargs) == ("value", 0, True, False)
171
+
172
+ def test_any_varargs_is_a_blended_input_column(self) -> None:
173
+ """The varargs form keeps both markers: ANY element type and varargs."""
174
+ from vgi._test_fixtures.table_in_out import BlendedAnyVarargsFunction
175
+ from vgi.argument_spec import extract_argument_specs
176
+
177
+ assert resolve_metadata(BlendedAnyVarargsFunction).input_from_args is True
178
+ (spec,) = extract_argument_specs(BlendedAnyVarargsFunction)
179
+ assert (spec.name, spec.position, spec.is_any_type, spec.is_varargs) == ("values", 0, True, True)
180
+
181
+ def test_any_marker_survives_the_wire_schema(self) -> None:
182
+ """The client learns the arg is ANY from the serialized arguments schema."""
183
+ from vgi._test_fixtures.table_in_out import BlendedAnyFunction, BlendedAnyVarargsFunction
184
+ from vgi.argument_spec import argument_specs_to_schema, extract_argument_specs, schema_to_argument_specs
185
+
186
+ for function in (BlendedAnyFunction, BlendedAnyVarargsFunction):
187
+ specs = extract_argument_specs(function)
188
+ wire = schema_to_argument_specs(argument_specs_to_schema(specs))
189
+ assert [s.is_any_type for s in wire] == [True]
190
+ assert [s.is_varargs for s in wire] == [s.is_varargs for s in specs]
@@ -4,6 +4,7 @@
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
+ import dataclasses
7
8
  from typing import Annotated, Any
8
9
 
9
10
  import pyarrow as pa
@@ -856,7 +857,7 @@ class TestArgumentConstraints:
856
857
  assert defaults.column("label")[0].as_py() is None
857
858
 
858
859
  def test_typed_default_requires_concrete_parameter_type(self) -> None:
859
- """An ANY parameter cannot carry an untyped protocol default."""
860
+ """An ANY parameter cannot carry an untyped protocol default VALUE."""
860
861
  spec = ArgumentSpec(
861
862
  name="value",
862
863
  position=0,
@@ -865,9 +866,65 @@ class TestArgumentConstraints:
865
866
  default_value=1,
866
867
  )
867
868
 
868
- with pytest.raises(ValueError, match="typed defaults require an explicit parameter type"):
869
+ with pytest.raises(ValueError, match="a typed default requires an explicit parameter type"):
869
870
  parameter_default_values_from_specs([spec], require_trailing=True)
870
871
 
872
+ def test_an_any_parameter_may_default_to_none(self) -> None:
873
+ """`None` IS representable on an ANY parameter — a null array holds nulls.
874
+
875
+ It is column presence, not the value, that marks a parameter as having a
876
+ default, so this costs the protocol nothing. It buys a function the
877
+ ability to declare a *required* ANY argument with ``default=None`` so
878
+ that omitting it reaches ``on_bind()``, where the function can name the
879
+ argument and show its shape, instead of raising a bare ``KeyError``
880
+ during argument parsing before any user code runs.
881
+ """
882
+ spec = ArgumentSpec(
883
+ name="questions",
884
+ position="questions",
885
+ arrow_type=pa.null(),
886
+ is_any_type=True,
887
+ default_value=None,
888
+ )
889
+
890
+ defaults = parameter_default_values_from_specs([spec], require_trailing=True)
891
+
892
+ assert defaults is not None
893
+ assert defaults.schema.names == ["questions"]
894
+ assert defaults.column("questions").type == pa.null()
895
+ assert defaults.column("questions")[0].as_py() is None
896
+
897
+ def test_an_optional_any_argument_is_still_an_any_argument(self) -> None:
898
+ """``AnyArrow | None`` must stay ANY-typed, not collapse to a NULL column.
899
+
900
+ A marker type is recognised by identity, so an Optional wrapper used to
901
+ hide it: the parameter silently became NULL-typed and DuckDB could then
902
+ cast nothing into it (`Unimplemented type for cast (STRUCT(...) -> NULL)`).
903
+ Declaring a REQUIRED ANY argument nullable, with ``default=None``, is how
904
+ a function gets to reject the missing case in its own ``on_bind()`` with
905
+ a message naming the argument.
906
+ """
907
+
908
+ @dataclasses.dataclass(slots=True, frozen=True, kw_only=True)
909
+ class _Args:
910
+ """Args with a required-but-nullable ANY parameter."""
911
+
912
+ payload: Annotated[AnyArrow | None, Arg("payload", default=None)] = None
913
+
914
+ class _Fn(TableInOutFunction[_Args]):
915
+ """A function declaring one optional ANY argument."""
916
+
917
+ FunctionArguments = _Args
918
+
919
+ class Meta:
920
+ """Metadata."""
921
+
922
+ name = "optional_any"
923
+
924
+ (spec,) = [sp for sp in extract_argument_specs(_Fn) if sp.name == "payload"]
925
+ assert spec.is_any_type, "an optional ANY argument lost its ANY marker"
926
+ assert pa.types.is_null(spec.arrow_type)
927
+
871
928
  def test_typed_defaults_reject_case_insensitive_duplicate_names(self) -> None:
872
929
  """Default-batch field names must identify one signature slot."""
873
930
  specs = [
@@ -2580,7 +2580,7 @@ requires-dist = [
2580
2580
 
2581
2581
  [[package]]
2582
2582
  name = "vgi-python"
2583
- version = "0.33.0"
2583
+ version = "0.34.0"
2584
2584
  source = { editable = "." }
2585
2585
  dependencies = [
2586
2586
  { name = "click" },
@@ -51,7 +51,7 @@ from vgi_rpc import ArrowSerializableDataclass, ArrowType
51
51
  from vgi_rpc.log import Level
52
52
  from vgi_rpc.rpc import OutputCollector
53
53
 
54
- from vgi.arguments import Arg, Setting, TableInput
54
+ from vgi.arguments import AnyArrow, Arg, Setting, TableInput
55
55
  from vgi.cache_control import CacheControl
56
56
  from vgi.invocation import BindResponse
57
57
  from vgi.metadata import FunctionExample
@@ -94,6 +94,8 @@ __all__ = [
94
94
  "GeoEncode3Function",
95
95
  "RowSumFunction",
96
96
  "BlendedDropFunction",
97
+ "BlendedAnyFunction",
98
+ "BlendedAnyVarargsFunction",
97
99
  "SubstreamPartialSumFunction",
98
100
  "MultiBatchFinishFunction",
99
101
  "SumAllColumnsFunction",
@@ -1880,6 +1882,87 @@ class BlendedExplodeFunction(RowTransformFunction[_ExplodeArgs]):
1880
1882
  cast("VgiOutputCollector", out).emit(out_batch, parent_rows=parent_rows)
1881
1883
 
1882
1884
 
1885
+ @dataclass(slots=True, frozen=True, kw_only=True)
1886
+ class _AnyArgs:
1887
+ """One positional ANY-typed input column."""
1888
+
1889
+ value: Annotated[AnyArrow, Arg(0, doc="Input column of any type (echoed back unchanged)")]
1890
+
1891
+
1892
+ class BlendedAnyFunction(RowTransformFunction[_AnyArgs]):
1893
+ """Blended 1->1 echo of a single ANY-typed input column.
1894
+
1895
+ Proves a blended positional arg may be declared ANY: the declared type names
1896
+ no concrete Arrow type, so the client must build the worker's input schema
1897
+ from the type DuckDB actually resolved for the call (a STRUCT built per row,
1898
+ a whole-row struct, a LIST, a plain VARCHAR ...) rather than from the
1899
+ declaration. The output column ``value`` is bound to that resolved input
1900
+ type at bind time and the column is passed through untouched, so a test
1901
+ asserts on DuckDB's own ``typeof(value)`` and on the round-tripped values —
1902
+ nothing here depends on how an SDK happens to render a type name.
1903
+ """
1904
+
1905
+ class Meta:
1906
+ name = "blended_any"
1907
+ description = "Blended 1->1 echo of one ANY-typed input column (output typed from the input)"
1908
+ categories = ["blended", "test"]
1909
+
1910
+ @classmethod
1911
+ def on_bind(cls, params: BindParams[_AnyArgs]) -> BindResponse:
1912
+ input_schema = params.bind_call.input_schema
1913
+ assert input_schema is not None
1914
+ return BindResponse(output_schema=pa.schema([pa.field("value", input_schema.field(0).type)]))
1915
+
1916
+ @classmethod
1917
+ def process(
1918
+ cls,
1919
+ params: ProcessParams[_AnyArgs],
1920
+ state: None,
1921
+ batch: pa.RecordBatch,
1922
+ out: OutputCollector,
1923
+ ) -> None:
1924
+ out.emit(pa.record_batch([batch.column(0)], schema=params.output_schema))
1925
+
1926
+
1927
+ @dataclass(slots=True, frozen=True, kw_only=True)
1928
+ class _AnyVarargsArgs:
1929
+ """N positional ANY-typed input columns, each free to be a different type."""
1930
+
1931
+ values: Annotated[list[AnyArrow], Arg(0, varargs=True, doc="Input columns of any types (echoed back)")]
1932
+
1933
+
1934
+ class BlendedAnyVarargsFunction(RowTransformFunction[_AnyVarargsArgs]):
1935
+ """Blended 1->1 echo of N ANY-typed VARARGS input columns.
1936
+
1937
+ The varargs counterpart of ``blended_any``: every runtime column may resolve
1938
+ to a different concrete type, so the client must take each column's type
1939
+ from the call rather than from the (ANY) vararg element type. Output columns
1940
+ are ``col0..colN-1`` — the names the client generates for varargs blended
1941
+ input — each bound to its own resolved input type.
1942
+ """
1943
+
1944
+ class Meta:
1945
+ name = "blended_any_varargs"
1946
+ description = "Blended 1->1 echo of N ANY-typed varargs input columns (col0..colN-1)"
1947
+ categories = ["blended", "test"]
1948
+
1949
+ @classmethod
1950
+ def on_bind(cls, params: BindParams[_AnyVarargsArgs]) -> BindResponse:
1951
+ input_schema = params.bind_call.input_schema
1952
+ assert input_schema is not None
1953
+ return BindResponse(output_schema=pa.schema([pa.field(f"col{i}", f.type) for i, f in enumerate(input_schema)]))
1954
+
1955
+ @classmethod
1956
+ def process(
1957
+ cls,
1958
+ params: ProcessParams[_AnyVarargsArgs],
1959
+ state: None,
1960
+ batch: pa.RecordBatch,
1961
+ out: OutputCollector,
1962
+ ) -> None:
1963
+ out.emit(pa.record_batch(cls.input_columns(batch), schema=params.output_schema))
1964
+
1965
+
1883
1966
  class CachedExplodeFunction(RowTransformFunction[_ExplodeArgs]):
1884
1967
  """Cacheable blended 1->N fan-out advertising vgi.cache.per_value.
1885
1968
 
@@ -267,6 +267,8 @@ from vgi._test_fixtures.table.tt_pushdown import (
267
267
  )
268
268
  from vgi._test_fixtures.table_in_out import (
269
269
  BatchIndexBufferInputFunction,
270
+ BlendedAnyFunction,
271
+ BlendedAnyVarargsFunction,
270
272
  BlendedDropFunction,
271
273
  BlendedExplodeFunction,
272
274
  BufferEmitWideFunction,
@@ -432,6 +434,8 @@ _EXAMPLE_CATALOG = Catalog(
432
434
  GeoEncode3Function,
433
435
  RowSumFunction,
434
436
  BlendedDropFunction,
437
+ BlendedAnyFunction,
438
+ BlendedAnyVarargsFunction,
435
439
  BlendedExplodeFunction,
436
440
  CachedExplodeFunction,
437
441
  ProjectableBlendedFunction,
@@ -19,7 +19,8 @@ import warnings
19
19
  from collections.abc import Sequence
20
20
  from dataclasses import dataclass
21
21
  from functools import cache
22
- from typing import Annotated, Any, get_args, get_origin, get_type_hints
22
+ from types import UnionType
23
+ from typing import Annotated, Any, Union, get_args, get_origin, get_type_hints
23
24
 
24
25
  import pyarrow as pa
25
26
 
@@ -395,14 +396,22 @@ def parameter_default_values_from_specs(
395
396
  arrays: list[pa.Array[Any]] = []
396
397
  names: list[str] = []
397
398
  for spec in default_specs:
398
- if pa.types.is_null(spec.arrow_type):
399
- raise ValueError(
400
- f"Parameter {spec.name!r} has a default but no concrete Arrow type; "
401
- "typed defaults require an explicit parameter type"
402
- )
403
399
  value = spec.default_value
404
400
  if isinstance(value, pa.Scalar):
405
401
  value = value.as_py()
402
+ # An ANY-typed parameter (AnyArrow) has no concrete Arrow type, so a
403
+ # VALUE default cannot be represented. `None` still can: a null-typed
404
+ # array holds nulls, and it is column PRESENCE, not the value, that
405
+ # marks a parameter as having a default. Allowing it lets a required
406
+ # ANY parameter be declared `default=None` so that omitting it reaches
407
+ # the function's own on_bind() validation — which can name the argument
408
+ # and show its shape — instead of raising a bare KeyError during
409
+ # argument parsing, before any user code runs.
410
+ if pa.types.is_null(spec.arrow_type) and value is not None:
411
+ raise ValueError(
412
+ f"Parameter {spec.name!r} has a non-null default but no concrete Arrow type; "
413
+ "a typed default requires an explicit parameter type (None is allowed)"
414
+ )
406
415
  try:
407
416
  arrays.append(pa.array([value], type=spec.arrow_type))
408
417
  except (pa.ArrowException, TypeError, ValueError) as exc:
@@ -538,6 +547,30 @@ def _format_range(
538
547
  return f"{low}, {high}"
539
548
 
540
549
 
550
+ def _unwrap_optional(annotation: Any) -> Any:
551
+ """``T | None`` -> ``T``; anything else unchanged.
552
+
553
+ A special marker type (``AnyArrow``, ``TableInput``) is recognised by
554
+ identity, so an Optional wrapper would hide it — an ``AnyArrow | None``
555
+ parameter would silently become a NULL-typed one, and DuckDB then cannot
556
+ cast anything into it. Unwrapping first lets a marker be declared nullable,
557
+ which is how a REQUIRED ANY argument opts into reaching its function's own
558
+ ``on_bind()`` validation (with ``default=None``) instead of being rejected
559
+ during parsing. Mirrors what ``_accepts_none`` already looks for.
560
+
561
+ Args:
562
+ annotation: The declared type of an ``Annotated[T, Arg(...)]`` field.
563
+
564
+ Returns:
565
+ The single non-``None`` member of an optional union, else ``annotation``.
566
+ """
567
+ origin = get_origin(annotation)
568
+ if origin is not Union and origin is not UnionType:
569
+ return annotation
570
+ members = [a for a in get_args(annotation) if a is not type(None)]
571
+ return members[0] if len(members) == 1 else annotation
572
+
573
+
541
574
  def _constraint_kwargs(arg: Arg[Any]) -> dict[str, Any]:
542
575
  """Extract discovery-facing constraint metadata from an [`Arg`][] descriptor.
543
576
 
@@ -744,6 +777,7 @@ def _extract_argument_specs(
744
777
  if type_args:
745
778
  infer_type = type_args[0]
746
779
 
780
+ infer_type = _unwrap_optional(infer_type)
747
781
  is_table_input = infer_type is TableInput
748
782
  is_any_type = infer_type is AnyArrow or infer_type is AnyArrowValue
749
783
 
@@ -790,8 +824,8 @@ def _extract_argument_specs(
790
824
  # Check for special types (AnyArrow, TableInput)
791
825
  # Priority: Arg subscript type (Arg[AnyArrow]) > class type hint
792
826
  # Also check _returns_any_arrow_value for Annotated[AnyArrowValue, ...]
793
- hint = hints.get(attr_name)
794
- type_param = getattr(arg_legacy, "_type_param", None)
827
+ hint = _unwrap_optional(hints.get(attr_name))
828
+ type_param = _unwrap_optional(getattr(arg_legacy, "_type_param", None))
795
829
  is_table_input = type_param is TableInput or hint is TableInput
796
830
  is_any_type = (
797
831
  type_param is AnyArrow
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes