vgi-python 0.16.1__tar.gz → 0.17.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.
- {vgi_python-0.16.1 → vgi_python-0.17.0}/PKG-INFO +2 -2
- {vgi_python-0.16.1 → vgi_python-0.17.0}/pyproject.toml +2 -2
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/landing/describe.expected.json +58 -1
- {vgi_python-0.16.1 → vgi_python-0.17.0}/uv.lock +5 -5
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/scalar/__init__.py +10 -0
- vgi_python-0.17.0/vgi/_test_fixtures/scalar/bench_ladder.py +134 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/worker.py +8 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/.gitattributes +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/.github/dependabot.yml +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/.github/styles/config/vocabularies/VGI/accept.txt +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/.github/workflows/ci.yml +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/.github/workflows/docs.yml +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/.github/workflows/integration.yml +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/.github/workflows/release.yml +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/.gitignore +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/.python-version +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/.vale.ini +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/CLAUDE.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/DOCS_ACCEPTANCE_CRITERIA.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/DOCS_REVIEW_RUBRIC.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/DOCS_USABILITY_TEST.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/LICENSE +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/README.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/SECURITY.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/ci/README.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/ci/preprocess-require.awk +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/ci/run-integration.sh +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/dist-vgi/.gitignore +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/aggregate-functions.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/arguments.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/auth.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/catalogs.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/client.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/exceptions.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/filters.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/functions.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/http.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/index.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/metadata.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/observability.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/storage.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/transactor.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/api/worker.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/argument-serialization.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/assets/apple-touch-icon.png +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/assets/favicon-16x16.png +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/assets/favicon-32x32.png +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/assets/favicon.ico +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/assets/kinds/aggregate.svg +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/assets/kinds/buffering.svg +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/assets/kinds/scalar.svg +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/assets/kinds/table-in-out.svg +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/assets/kinds/table.svg +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/assets/logo.png +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/assets/social-card.png +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/authentication.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/catalog-interface.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/cli.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/column-statistics.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/concepts/index.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/contributing-docs.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/filter-pushdown.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/generator-api.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/how-to/catalogs.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/how-to/function-patterns.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/how-to/http-auth.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/how-to/index.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/how-to/pushdown-and-statistics.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/how-to/state-storage.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/index.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/lifecycle.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/metadata.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/overrides/main.html +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/robots.txt +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/shared-storage.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/stylesheets/extra.css +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/tutorial/index.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/tutorial/scalar.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/tutorial/table.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/docs/vgi-logo.png +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/examples/calc_scalar_worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/examples/calc_worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/examples/filter_worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/examples/greeting_scalar_worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/examples/row_count_worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/examples/series_streaming_worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/examples/sum_worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/mkdocs.yml +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/packages/vgi-fixtures/LICENSE +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/packages/vgi-fixtures/README.md +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/packages/vgi-fixtures/docker/Dockerfile +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/packages/vgi-fixtures/docker/docker-entrypoint.sh +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/packages/vgi-fixtures/pyproject.toml +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/scripts/measure_startup.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/scripts/run_all_tests.sh +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/test-data/generate.sh +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/_http_fixtures.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/test_catalog_interface.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/test_client_catalog.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/test_column_statistics.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/test_declarative.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/test_example_worker_catalog.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/test_integration.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/test_required_filters.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/test_scan_branches.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/test_serialization.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/test_setting.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/test_storage.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/test_time_travel.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/catalog/test_writable_table.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/client/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/client/test_broken_pipe.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/client/test_cli.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/client/test_cli_catalog_functions.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/client/test_worker_debug.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/_stub.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/conftest.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_accumulate.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_aggregate.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_attach.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_bearer_auth.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_const_param_enforcement.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_container.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_copy_from.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_copy_to.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_directory_parity.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_function_inventory.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_github.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_http_client.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_http_external_location.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_http_upload_url.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_macro.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_overload.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_protocol_inventory.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_protocol_version.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_resumable_scan.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_scalar.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_scalar_attach_opaque_data.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_secret.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_settings.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_table.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_table_in_out.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_view.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conformance/test_writable.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/conftest.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/landing/_checker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/landing/describe.schema.json +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/scalar/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/scalar/test_bernoulli_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/scalar/test_binary_packet_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/scalar/test_client.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/scalar/test_conditional_message_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/scalar/test_hash_seed_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/scalar/test_multiply_by_setting_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/scalar/test_multiply_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/scalar/test_random_bytes_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/scalar/test_return_secret_value_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/generator/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/generator/test_constant_columns_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/generator/test_double_sequence_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/generator/test_exception_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/generator/test_filter_echo_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/generator/test_logging_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/generator/test_nested_sequence_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/generator/test_partitioned_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/generator/test_projected_data_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/generator/test_sequence_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/generator/test_settings_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/generator/test_struct_settings_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table/generator/test_ten_thousand_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table_in_out/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table_in_out/generator/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table_in_out/generator/test_buffer_input_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table_in_out/generator/test_echo_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table_in_out/generator/test_exception_functions.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table_in_out/generator/test_filter_by_setting_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table_in_out/generator/test_repeat_inputs_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table_in_out/generator/test_substream_partial_sum_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table_in_out/generator/test_sum_all_columns_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table_in_out/test_blended_metadata.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/table_in_out/test_client.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_access_log_audit.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_aggregate_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_argument_spec.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_auth.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_bind_exceptions.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_bind_request_at_clause.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_bound_storage_conformance.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_cache_control.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_catalog_auth_binding.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_copy_from_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_copy_to_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_docstrings.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_documentation_examples.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_example_function_arg_types.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_examples_workers.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_exception_handling.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_exceptions.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_filter_pushdown.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_filter_pushdown_extension.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_function_storage.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_function_storage_azure_sql.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_function_storage_cf_do.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_function_storage_cf_do_integration.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_function_storage_conformance.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_generated_cpp_constants.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_generated_cpp_protocol_version.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_generated_cpp_request_builders.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_generated_cpp_schemas.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_generated_cpp_secret.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_generated_go_schemas.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_generated_protocol_version.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_generated_schemas_cross_lang.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_generated_ts_client.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_generated_ts_schemas.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_http_demo_storage.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_http_s3_offload_input.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_http_s3_offload_output.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_landing_conformance.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_metadata.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_mypy_consolidated.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_nest_tensor.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_otel.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_projection_enforcement.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_projection_repro.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_protocol_classes.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_resolved_secrets.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_schema_utils.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_serve.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_setting_secret_annotations.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_table_buffering_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_table_function_dynamic_to_string.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_tcp_transport.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_type_bounds.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_union_argument.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_worker_cli.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/test_worker_page.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/transactor/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/tests/transactor/test_transactor.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_duckdb.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_storage_profile.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/accumulate/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/accumulate/worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/aggregate/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/aggregate/_common.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/aggregate/basic.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/aggregate/dynamic.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/aggregate/generic.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/aggregate/listagg.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/aggregate/percentile.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/aggregate/secret_typed.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/aggregate/streaming.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/aggregate/varargs.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/aggregate/window.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/attach_options.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/bad_enum.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/bad_protocol.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/cancellable.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/catalog.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/companion.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/copy_from.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/copy_to.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/http_server.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/narrow_bind/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/narrow_bind/worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/nest_tensor.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/orchard_catalog.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/projection_repro/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/projection_repro/worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/scalar/_common.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/scalar/arithmetic.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/scalar/binary.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/scalar/formatting.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/scalar/geo.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/scalar/null_handling.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/scalar/random_demo.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/scalar/settings_secrets.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/scalar/type_info.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/schema_reconcile/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/schema_reconcile/worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/simple_writable.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/_common.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/batch_index.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/batch_index_broken.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/cache.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/catalog_scans.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/filters.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/late_materialization.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/make_series.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/misc.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/order_modes.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/pairs.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/partition_columns.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/partition_columns_broken.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/profiling_example.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/required_filters.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/sequence.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/settings.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/transaction_storage.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/tt_pushdown.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/typed_probe.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table/versioned.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/table_in_out.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/versioned.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/versioned_tables.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/writable/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/writable/generic.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/writable/table.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/_test_fixtures/writable/worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/aggregate_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/argument_spec.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/arguments.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/auth.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/cache_control.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/catalog/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/catalog/_descriptor_spec.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/catalog/attach_option.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/catalog/catalog_interface.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/catalog/descriptors.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/catalog/duckdb_statistics.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/catalog/secret_type.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/catalog/setting.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/catalog/storage.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/client/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/client/catalog_mixin.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/client/cli.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/client/cli_catalog.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/client/cli_schema.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/client/cli_table.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/client/cli_transaction.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/client/cli_utils.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/client/cli_view.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/client/client.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/codegen/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/codegen/_common.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/codegen/cpp_constants.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/codegen/cpp_protocol_version.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/codegen/cpp_request_builders.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/codegen/cpp_schemas.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/codegen/cpp_secret_protocol_version.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/codegen/cpp_secret_request_builders.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/codegen/cpp_secret_schemas.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/codegen/go_schemas.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/codegen/protocol_version.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/codegen/ts_client.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/codegen/ts_schemas.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/copy_from_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/copy_to_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/exceptions.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/function_storage.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/function_storage_azure_sql.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/function_storage_cf_do.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/http/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/http/demo_storage.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/http/describe_json.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/http/landing.html +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/http/landing_page.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/http/worker_page.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/invocation.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/logging_config.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/meta_worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/metadata.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/otel.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/protocol.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/protocol_version.txt +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/py.typed +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/scalar_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/schema_utils.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/secret_protocol.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/secret_service.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/serve.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/table_buffering_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/table_filter_pushdown.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/table_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/table_in_out_function.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/transactor/__init__.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/transactor/_duckdb_compat.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/transactor/client.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/transactor/protocol.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/transactor/server.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/vgi/worker.py +0 -0
- {vgi_python-0.16.1 → vgi_python-0.17.0}/wrangler.jsonc +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vgi-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.17.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
|
|
@@ -162,7 +162,7 @@ Requires-Dist: httpx>=0.24
|
|
|
162
162
|
Requires-Dist: platformdirs
|
|
163
163
|
Requires-Dist: pyarrow
|
|
164
164
|
Requires-Dist: typer>=0.9
|
|
165
|
-
Requires-Dist: vgi-rpc>=0.
|
|
165
|
+
Requires-Dist: vgi-rpc>=0.26.0
|
|
166
166
|
Provides-Extra: azure
|
|
167
167
|
Requires-Dist: azure-identity>=1.16.0; extra == 'azure'
|
|
168
168
|
Requires-Dist: pymssql>=2.3.0; extra == 'azure'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "vgi-python"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.17.0"
|
|
4
4
|
description = "Vector Gateway Interface - Connect DuckDB to external programs via Apache Arrow"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
keywords = [
|
|
@@ -40,7 +40,7 @@ dependencies = [
|
|
|
40
40
|
"pyarrow",
|
|
41
41
|
"typer>=0.9",
|
|
42
42
|
"platformdirs",
|
|
43
|
-
"vgi-rpc>=0.
|
|
43
|
+
"vgi-rpc>=0.26.0",
|
|
44
44
|
"httpx>=0.24",
|
|
45
45
|
]
|
|
46
46
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
{
|
|
4
4
|
"attach_options": [],
|
|
5
5
|
"counts": {
|
|
6
|
-
"functions":
|
|
6
|
+
"functions": 207,
|
|
7
7
|
"schemas": 2,
|
|
8
8
|
"tables": 59,
|
|
9
9
|
"views": 3
|
|
@@ -699,6 +699,19 @@
|
|
|
699
699
|
"returns": "string",
|
|
700
700
|
"type": "scalar"
|
|
701
701
|
},
|
|
702
|
+
{
|
|
703
|
+
"args": [
|
|
704
|
+
{
|
|
705
|
+
"desc": "Positive integer",
|
|
706
|
+
"name": "value",
|
|
707
|
+
"type": "int64"
|
|
708
|
+
}
|
|
709
|
+
],
|
|
710
|
+
"doc": "Number of Collatz (3n+1) steps for each integer to reach 1",
|
|
711
|
+
"name": "collatz_steps",
|
|
712
|
+
"returns": "int64",
|
|
713
|
+
"type": "scalar"
|
|
714
|
+
},
|
|
702
715
|
{
|
|
703
716
|
"args": [
|
|
704
717
|
{
|
|
@@ -908,6 +921,24 @@
|
|
|
908
921
|
"returns": "double",
|
|
909
922
|
"type": "scalar"
|
|
910
923
|
},
|
|
924
|
+
{
|
|
925
|
+
"args": [
|
|
926
|
+
{
|
|
927
|
+
"desc": "String to stretch",
|
|
928
|
+
"name": "value",
|
|
929
|
+
"type": "string"
|
|
930
|
+
},
|
|
931
|
+
{
|
|
932
|
+
"desc": "Number of SHA-256 rounds",
|
|
933
|
+
"name": "rounds",
|
|
934
|
+
"type": "int64"
|
|
935
|
+
}
|
|
936
|
+
],
|
|
937
|
+
"doc": "Apply SHA-256 `rounds` times (key-stretching); rounds is a const compute knob",
|
|
938
|
+
"name": "hash_rounds",
|
|
939
|
+
"returns": "string",
|
|
940
|
+
"type": "scalar"
|
|
941
|
+
},
|
|
911
942
|
{
|
|
912
943
|
"args": [
|
|
913
944
|
{
|
|
@@ -1019,6 +1050,19 @@
|
|
|
1019
1050
|
"returns": "string",
|
|
1020
1051
|
"type": "scalar"
|
|
1021
1052
|
},
|
|
1053
|
+
{
|
|
1054
|
+
"args": [
|
|
1055
|
+
{
|
|
1056
|
+
"desc": "String value",
|
|
1057
|
+
"name": "value",
|
|
1058
|
+
"type": "string"
|
|
1059
|
+
}
|
|
1060
|
+
],
|
|
1061
|
+
"doc": "Returns the input string unchanged (zero-compute wire probe)",
|
|
1062
|
+
"name": "passthru",
|
|
1063
|
+
"returns": "string",
|
|
1064
|
+
"type": "scalar"
|
|
1065
|
+
},
|
|
1022
1066
|
{
|
|
1023
1067
|
"args": [
|
|
1024
1068
|
{
|
|
@@ -1095,6 +1139,19 @@
|
|
|
1095
1139
|
"returns": "string",
|
|
1096
1140
|
"type": "scalar"
|
|
1097
1141
|
},
|
|
1142
|
+
{
|
|
1143
|
+
"args": [
|
|
1144
|
+
{
|
|
1145
|
+
"desc": "String to hash",
|
|
1146
|
+
"name": "value",
|
|
1147
|
+
"type": "string"
|
|
1148
|
+
}
|
|
1149
|
+
],
|
|
1150
|
+
"doc": "Lowercase hex SHA-256 digest of the UTF-8 string",
|
|
1151
|
+
"name": "sha256_hex",
|
|
1152
|
+
"returns": "string",
|
|
1153
|
+
"type": "scalar"
|
|
1154
|
+
},
|
|
1098
1155
|
{
|
|
1099
1156
|
"args": [
|
|
1100
1157
|
{
|
|
@@ -2228,7 +2228,7 @@ requires-dist = [
|
|
|
2228
2228
|
|
|
2229
2229
|
[[package]]
|
|
2230
2230
|
name = "vgi-python"
|
|
2231
|
-
version = "0.
|
|
2231
|
+
version = "0.17.0"
|
|
2232
2232
|
source = { editable = "." }
|
|
2233
2233
|
dependencies = [
|
|
2234
2234
|
{ name = "click" },
|
|
@@ -2338,7 +2338,7 @@ requires-dist = [
|
|
|
2338
2338
|
{ name = "vgi-python", extras = ["test-fixtures"], marker = "extra == 'test-fixtures-writable'" },
|
|
2339
2339
|
{ name = "vgi-python", extras = ["test-fixtures", "test-fixtures-writable", "http", "oauth", "otel", "sentry", "azure"], marker = "extra == 'dev'" },
|
|
2340
2340
|
{ name = "vgi-python", extras = ["transactor"], marker = "extra == 'test-fixtures-writable'" },
|
|
2341
|
-
{ name = "vgi-rpc", specifier = ">=0.
|
|
2341
|
+
{ name = "vgi-rpc", specifier = ">=0.26.0" },
|
|
2342
2342
|
{ name = "vgi-rpc", extras = ["conformance", "external", "http", "oauth", "otel", "sentry"], marker = "extra == 'dev'" },
|
|
2343
2343
|
{ name = "vgi-rpc", extras = ["http"], marker = "extra == 'http'" },
|
|
2344
2344
|
{ name = "vgi-rpc", extras = ["oauth"], marker = "extra == 'oauth'" },
|
|
@@ -2367,7 +2367,7 @@ docs = [
|
|
|
2367
2367
|
|
|
2368
2368
|
[[package]]
|
|
2369
2369
|
name = "vgi-rpc"
|
|
2370
|
-
version = "0.
|
|
2370
|
+
version = "0.26.0"
|
|
2371
2371
|
source = { registry = "https://pypi.org/simple" }
|
|
2372
2372
|
dependencies = [
|
|
2373
2373
|
{ name = "docstring-parser" },
|
|
@@ -2375,9 +2375,9 @@ dependencies = [
|
|
|
2375
2375
|
{ name = "pywin32", marker = "sys_platform == 'win32'" },
|
|
2376
2376
|
{ name = "tzdata", marker = "sys_platform == 'win32'" },
|
|
2377
2377
|
]
|
|
2378
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
2378
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b5/51/86d4c4466cf5311e80db28f535c02b92961f3d5160a0aae348112a03f7d5/vgi_rpc-0.26.0.tar.gz", hash = "sha256:c0966c99e087f923b228b2211877a8695bf42052d9cde05ce9a4bf077047cb78", size = 869625, upload-time = "2026-07-21T17:39:12.871Z" }
|
|
2379
2379
|
wheels = [
|
|
2380
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2380
|
+
{ url = "https://files.pythonhosted.org/packages/57/51/d86efc32aef03d69d197916f9d18d0f3719ebd843424cfb9a782ced041c9/vgi_rpc-0.26.0-py3-none-any.whl", hash = "sha256:2c455edb517831867342ce2f105386b73b1fa23137477916c5e5d7a14b66e0fc", size = 386786, upload-time = "2026-07-21T17:39:11.142Z" },
|
|
2381
2381
|
]
|
|
2382
2382
|
|
|
2383
2383
|
[package.optional-dependencies]
|
|
@@ -28,6 +28,12 @@ from vgi._test_fixtures.scalar.arithmetic import (
|
|
|
28
28
|
MultiplyFunction,
|
|
29
29
|
SumValuesFunction,
|
|
30
30
|
)
|
|
31
|
+
from vgi._test_fixtures.scalar.bench_ladder import (
|
|
32
|
+
CollatzStepsFunction,
|
|
33
|
+
HashRoundsFunction,
|
|
34
|
+
PassthruFunction,
|
|
35
|
+
Sha256HexFunction,
|
|
36
|
+
)
|
|
31
37
|
from vgi._test_fixtures.scalar.binary import (
|
|
32
38
|
BinaryPacketFunction,
|
|
33
39
|
UpperCaseFunction,
|
|
@@ -89,10 +95,14 @@ __all__ = [
|
|
|
89
95
|
"CachedAddConstScalarFunction",
|
|
90
96
|
"CachedDoubleScalarFunction",
|
|
91
97
|
"CachedLabelScalarFunction",
|
|
98
|
+
"CollatzStepsFunction",
|
|
92
99
|
"ConcatValuesIntFunction",
|
|
93
100
|
"ConcatValuesStrFunction",
|
|
94
101
|
"ConditionalMessageFunction",
|
|
95
102
|
"DoubleFunction",
|
|
103
|
+
"HashRoundsFunction",
|
|
104
|
+
"PassthruFunction",
|
|
105
|
+
"Sha256HexFunction",
|
|
96
106
|
"FormatNumberDefaultFunction",
|
|
97
107
|
"FormatNumberFullFunction",
|
|
98
108
|
"FormatNumberPrecisionFunction",
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Copyright 2025, 2026 Query Farm LLC - https://query.farm
|
|
2
|
+
|
|
3
|
+
"""Compute-ladder scalar fixtures for the boundary-amortization benchmark.
|
|
4
|
+
|
|
5
|
+
These span the per-row *compute* axis (near-zero for multiply/upper_case up to
|
|
6
|
+
heavy for iterated hashing) at controlled payload sizes, so a benchmark sweep can
|
|
7
|
+
trace framework overhead as a function of (per-row compute, per-row bytes).
|
|
8
|
+
|
|
9
|
+
- ``collatz_steps`` Int64 -> Int64, data-dependent CPU work (a Python UDF classic).
|
|
10
|
+
- ``sha256_hex`` Utf8 -> Utf8(64), fixed moderate compute per byte.
|
|
11
|
+
- ``hash_rounds`` Utf8 -> Utf8(64), K rounds of SHA-256 (key-stretching): K is a
|
|
12
|
+
clean compute *knob* at a fixed payload — sweep it to walk the
|
|
13
|
+
compute axis without changing bytes on the wire.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import hashlib
|
|
19
|
+
from typing import Annotated
|
|
20
|
+
|
|
21
|
+
import pyarrow as pa
|
|
22
|
+
|
|
23
|
+
from vgi.arguments import ConstParam, Param, Returns
|
|
24
|
+
from vgi.metadata import FunctionExample
|
|
25
|
+
from vgi.scalar_function import ScalarFunction
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class PassthruFunction(ScalarFunction):
|
|
29
|
+
"""Identity: returns the input string unchanged.
|
|
30
|
+
|
|
31
|
+
Zero compute — its whole cost is the VGI round-trip (convert in/out + wire),
|
|
32
|
+
so a payload sweep over it measures the *pure wire cost per byte* with no
|
|
33
|
+
compute contamination (unlike ``upper_case``, whose work grows with length).
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
class Meta:
|
|
37
|
+
name = "passthru"
|
|
38
|
+
description = "Returns the input string unchanged (zero-compute wire probe)"
|
|
39
|
+
|
|
40
|
+
@classmethod
|
|
41
|
+
def compute(
|
|
42
|
+
cls,
|
|
43
|
+
value: Annotated[pa.StringArray, Param(doc="String value")],
|
|
44
|
+
) -> Annotated[pa.StringArray, Returns()]:
|
|
45
|
+
return value
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class CollatzStepsFunction(ScalarFunction):
|
|
49
|
+
"""Collatz sequence length for each integer.
|
|
50
|
+
|
|
51
|
+
A textbook Python-UDF workload: an unvectorizable per-row loop whose cost is
|
|
52
|
+
data-dependent (larger / odd-heavy trajectories take more steps).
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
class Meta:
|
|
56
|
+
name = "collatz_steps"
|
|
57
|
+
description = "Number of Collatz (3n+1) steps for each integer to reach 1"
|
|
58
|
+
examples = [
|
|
59
|
+
FunctionExample(sql="SELECT collatz_steps(n) FROM range(1000) t(n)", description="Step count per integer"),
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
@classmethod
|
|
63
|
+
def compute(
|
|
64
|
+
cls,
|
|
65
|
+
value: Annotated[pa.Int64Array, Param(doc="Positive integer")],
|
|
66
|
+
) -> Annotated[pa.Int64Array, Returns()]:
|
|
67
|
+
out: list[int | None] = []
|
|
68
|
+
for n in value.to_pylist():
|
|
69
|
+
if n is None:
|
|
70
|
+
out.append(None)
|
|
71
|
+
continue
|
|
72
|
+
if n <= 0:
|
|
73
|
+
out.append(0)
|
|
74
|
+
continue
|
|
75
|
+
steps = 0
|
|
76
|
+
while n != 1:
|
|
77
|
+
n = n // 2 if (n & 1) == 0 else 3 * n + 1
|
|
78
|
+
steps += 1
|
|
79
|
+
out.append(steps)
|
|
80
|
+
return pa.array(out, type=pa.int64())
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class Sha256HexFunction(ScalarFunction):
|
|
84
|
+
"""Lowercase hex SHA-256 of each UTF-8 string. Fixed compute per byte."""
|
|
85
|
+
|
|
86
|
+
class Meta:
|
|
87
|
+
name = "sha256_hex"
|
|
88
|
+
description = "Lowercase hex SHA-256 digest of the UTF-8 string"
|
|
89
|
+
examples = [
|
|
90
|
+
FunctionExample(sql="SELECT sha256_hex(s) FROM docs", description="Hash each string"),
|
|
91
|
+
]
|
|
92
|
+
|
|
93
|
+
@classmethod
|
|
94
|
+
def compute(
|
|
95
|
+
cls,
|
|
96
|
+
value: Annotated[pa.StringArray, Param(doc="String to hash")],
|
|
97
|
+
) -> Annotated[pa.StringArray, Returns()]:
|
|
98
|
+
out: list[str | None] = []
|
|
99
|
+
for s in value.to_pylist():
|
|
100
|
+
out.append(None if s is None else hashlib.sha256(s.encode("utf-8")).hexdigest())
|
|
101
|
+
return pa.array(out, type=pa.string())
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
class HashRoundsFunction(ScalarFunction):
|
|
105
|
+
"""Iterated SHA-256 (key-stretching): apply the digest ``rounds`` times.
|
|
106
|
+
|
|
107
|
+
``rounds`` is a constant, so it is the compute knob: at a fixed input payload,
|
|
108
|
+
sweeping it scales per-row compute linearly while bytes on the wire stay put.
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
class Meta:
|
|
112
|
+
name = "hash_rounds"
|
|
113
|
+
description = "Apply SHA-256 `rounds` times (key-stretching); rounds is a const compute knob"
|
|
114
|
+
examples = [
|
|
115
|
+
FunctionExample(sql="SELECT hash_rounds(s, 256) FROM docs", description="256-round key stretch"),
|
|
116
|
+
]
|
|
117
|
+
|
|
118
|
+
@classmethod
|
|
119
|
+
def compute(
|
|
120
|
+
cls,
|
|
121
|
+
value: Annotated[pa.StringArray, Param(doc="String to stretch")],
|
|
122
|
+
rounds: Annotated[pa.Int64Scalar, ConstParam("Number of SHA-256 rounds")],
|
|
123
|
+
) -> Annotated[pa.StringArray, Returns()]:
|
|
124
|
+
k = int(rounds.as_py())
|
|
125
|
+
out: list[str | None] = []
|
|
126
|
+
for s in value.to_pylist():
|
|
127
|
+
if s is None:
|
|
128
|
+
out.append(None)
|
|
129
|
+
continue
|
|
130
|
+
b = s.encode("utf-8")
|
|
131
|
+
for _ in range(k):
|
|
132
|
+
b = hashlib.sha256(b).digest()
|
|
133
|
+
out.append(b.hex())
|
|
134
|
+
return pa.array(out, type=pa.string())
|
|
@@ -78,6 +78,7 @@ from vgi._test_fixtures.scalar import (
|
|
|
78
78
|
CachedAddConstScalarFunction,
|
|
79
79
|
CachedDoubleScalarFunction,
|
|
80
80
|
CachedLabelScalarFunction,
|
|
81
|
+
CollatzStepsFunction,
|
|
81
82
|
ConcatValuesIntFunction,
|
|
82
83
|
ConcatValuesStrFunction,
|
|
83
84
|
ConditionalMessageFunction,
|
|
@@ -91,6 +92,7 @@ from vgi._test_fixtures.scalar import (
|
|
|
91
92
|
GeoDistanceFixedFunction,
|
|
92
93
|
GeoDistanceListFunction,
|
|
93
94
|
GeoDistanceStructFunction,
|
|
95
|
+
HashRoundsFunction,
|
|
94
96
|
HashSeedFunction,
|
|
95
97
|
MultiplyBySettingFunction,
|
|
96
98
|
MultiplyFunction,
|
|
@@ -98,12 +100,14 @@ from vgi._test_fixtures.scalar import (
|
|
|
98
100
|
PairTypeIntIntFunction,
|
|
99
101
|
PairTypeIntStrFunction,
|
|
100
102
|
PairTypeStrStrFunction,
|
|
103
|
+
PassthruFunction,
|
|
101
104
|
QuerySeedFunction,
|
|
102
105
|
RandomBytesFunction,
|
|
103
106
|
RandomIntFunction,
|
|
104
107
|
ReturnSecretValueFunction,
|
|
105
108
|
ScaleBySettingFunction,
|
|
106
109
|
SecretFieldFunction,
|
|
110
|
+
Sha256HexFunction,
|
|
107
111
|
SmartFormatPrefixFunction,
|
|
108
112
|
SmartFormatWidthFunction,
|
|
109
113
|
SumValuesFunction,
|
|
@@ -548,6 +552,10 @@ _EXAMPLE_CATALOG = Catalog(
|
|
|
548
552
|
HashSeedFunction,
|
|
549
553
|
MultiplyBySettingFunction,
|
|
550
554
|
MultiplyFunction,
|
|
555
|
+
CollatzStepsFunction,
|
|
556
|
+
HashRoundsFunction,
|
|
557
|
+
Sha256HexFunction,
|
|
558
|
+
PassthruFunction,
|
|
551
559
|
NullHandlingFunction,
|
|
552
560
|
PairTypeIntIntFunction,
|
|
553
561
|
PairTypeIntStrFunction,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|