bigframes 2.3.0__tar.gz → 2.4.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.
- {bigframes-2.3.0/bigframes.egg-info → bigframes-2.4.0}/PKG-INFO +5 -3
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/_config/__init__.py +18 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/_config/bigquery_options.py +20 -9
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/_config/compute_options.py +9 -1
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/_config/display_options.py +4 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/_config/experiment_options.py +46 -18
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/bigquery/__init__.py +2 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/bigquery/_operations/json.py +34 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/blob/_functions.py +32 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/array_value.py +0 -27
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/blocks.py +3 -3
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/__init__.py +6 -2
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/api.py +2 -32
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/scalar_op_compiler.py +57 -13
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/sqlglot/compiler.py +10 -0
- bigframes-2.4.0/bigframes/core/compile/sqlglot/scalar_compiler.py +77 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/sqlglot/sqlglot_ir.py +15 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/indexes/__init__.py +2 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/indexes/base.py +24 -5
- bigframes-2.4.0/bigframes/core/indexes/datetimes.py +56 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/local_data.py +20 -4
- bigframes-2.4.0/bigframes/core/pyarrow_utils.py +87 -0
- bigframes-2.4.0/bigframes/core/pyformat.py +111 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/sql.py +15 -3
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/utils.py +20 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/dataframe.py +76 -21
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/forecasting.py +21 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/llm.py +26 -11
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/loader.py +1 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/metrics/_metrics.py +2 -2
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/__init__.py +16 -7
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/blob.py +48 -65
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/date_ops.py +19 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/datetimes.py +49 -1
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/numeric_ops.py +22 -2
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/string_ops.py +27 -12
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/strings.py +16 -10
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/pandas/__init__.py +2 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/series.py +68 -7
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/__init__.py +70 -8
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/_io/bigquery/__init__.py +1 -9
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/_io/bigquery/read_gbq_table.py +10 -1
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/bq_caching_executor.py +137 -109
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/dry_runs.py +13 -9
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/executor.py +24 -7
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/loader.py +18 -9
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/local_scan_executor.py +10 -16
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/read_api_execution.py +21 -22
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/testing/mocks.py +19 -3
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/version.py +2 -2
- {bigframes-2.3.0 → bigframes-2.4.0/bigframes.egg-info}/PKG-INFO +5 -3
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes.egg-info/SOURCES.txt +16 -1
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes.egg-info/requires.txt +4 -2
- {bigframes-2.3.0 → bigframes-2.4.0}/setup.py +6 -3
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/conftest.py +4 -12
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/blob/test_function.py +24 -22
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/ml/test_forecasting.py +3 -0
- bigframes-2.4.0/tests/system/large/streaming/test_bigtable.py +104 -0
- bigframes-2.3.0/tests/system/large/test_streaming.py → bigframes-2.4.0/tests/system/large/streaming/test_pubsub.py +5 -82
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/test_dataframe_io.py +7 -13
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/load/test_llm.py +3 -2
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/bigquery/test_json.py +28 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/blob/test_io.py +0 -6
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/blob/test_properties.py +21 -37
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/blob/test_urls.py +0 -5
- bigframes-2.4.0/tests/system/small/core/indexes/test_datetimes.py +46 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_llm.py +7 -11
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_multimodal_llm.py +3 -9
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/operations/test_datetimes.py +73 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/operations/test_strings.py +66 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/operations/test_timedeltas.py +3 -0
- bigframes-2.4.0/tests/system/small/session/test_read_gbq_colab.py +75 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_dataframe.py +38 -1
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_dataframe_io.py +70 -2
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_index_io.py +2 -2
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_progress_bar.py +1 -1
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_series.py +26 -1
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_series_io.py +1 -1
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_session.py +10 -5
- bigframes-2.4.0/tests/unit/_config/test_compute_options.py +22 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/_config/test_experiment_options.py +0 -15
- bigframes-2.4.0/tests/unit/core/compile/sqlglot/snapshots/test_compile_projection/test_compile_projection/out.sql +12 -0
- bigframes-2.4.0/tests/unit/core/compile/sqlglot/test_compile_projection.py +31 -0
- bigframes-2.4.0/tests/unit/core/test_pyarrow_utils.py +65 -0
- bigframes-2.4.0/tests/unit/core/test_pyformat.py +145 -0
- bigframes-2.4.0/tests/unit/core/tools/__init__.py +13 -0
- bigframes-2.4.0/tests/unit/functions/__init__.py +13 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/polars_session.py +1 -1
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/session/test_io_bigquery.py +3 -4
- bigframes-2.4.0/tests/unit/session/test_read_gbq_colab.py +68 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_local_data.py +20 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/config_init.py +6 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/frame.py +22 -6
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/indexes/accessor.py +131 -0
- bigframes-2.4.0/third_party/bigframes_vendored/pandas/core/indexes/datetimes.py +106 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/series.py +8 -2
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/strings/accessor.py +32 -7
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q11.py +1 -1
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/version.py +2 -2
- bigframes-2.3.0/bigframes/core/compile/sqlglot/scalar_compiler.py +0 -33
- {bigframes-2.3.0 → bigframes-2.4.0}/LICENSE +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/MANIFEST.in +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/README.rst +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/_config/sampling_options.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/_tools/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/_tools/strings.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/bigquery/_operations/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/bigquery/_operations/approx_agg.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/bigquery/_operations/array.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/bigquery/_operations/datetime.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/bigquery/_operations/geo.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/bigquery/_operations/search.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/bigquery/_operations/sql.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/bigquery/_operations/struct.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/clients.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/constants.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/bigframe_node.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/block_transforms.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/aggregate_compiler.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/compiled.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/compiler.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/concat.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/configs.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/constants.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/default_ordering.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/explode.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/googlesql/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/googlesql/abc.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/googlesql/datatype.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/googlesql/expression.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/googlesql/function.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/googlesql/query.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/ibis_types.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/polars/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/polars/compiler.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/schema_translator.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/sqlglot/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/compile/sqlglot/sqlglot_types.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/convert.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/eval.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/explode.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/expression.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/global_session.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/groupby/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/groupby/aggs.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/groupby/dataframe_group_by.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/groupby/series_group_by.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/guid.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/identifiers.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/indexers.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/indexes/multi.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/join_def.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/log_adapter.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/nodes.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/ordering.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/pruning.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/reshape/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/reshape/api.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/reshape/concat.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/reshape/encoding.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/reshape/merge.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/reshape/tile.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/rewrite/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/rewrite/fold_row_count.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/rewrite/identifiers.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/rewrite/implicit_align.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/rewrite/legacy_align.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/rewrite/order.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/rewrite/pruning.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/rewrite/scan_reduction.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/rewrite/slices.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/rewrite/timedeltas.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/rewrite/windows.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/scalar.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/schema.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/sequences.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/slices.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/tools/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/tools/datetimes.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/tree_properties.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/validations.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/window/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/window/ordering.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/window/rolling.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/core/window_spec.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/dtypes.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/enums.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/exceptions.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/features.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/formatting_helpers.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/functions/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/functions/_function_client.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/functions/_function_session.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/functions/_utils.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/functions/function.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/functions/function_template.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/geopandas/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/geopandas/geoseries.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/base.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/cluster.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/compose.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/core.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/decomposition.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/ensemble.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/globals.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/imported.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/impute.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/linear_model.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/metrics/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/metrics/pairwise.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/model_selection.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/pipeline.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/preprocessing.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/remote.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/sql.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/ml/utils.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/_matplotlib/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/_matplotlib/core.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/_matplotlib/hist.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/_op_converters.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/aggregations.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/ai.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/array_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/base.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/base_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/blob_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/bool_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/comparison_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/datetime_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/distance_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/frequency_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/generic_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/geo_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/json_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/lists.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/numpy_op_maps.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/plotting.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/remote_function_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/semantics.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/struct_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/structs.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/time_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/timedelta_ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/operations/type.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/pandas/core/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/pandas/core/api.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/pandas/core/tools/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/pandas/core/tools/timedeltas.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/pandas/io/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/pandas/io/api.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/py.typed +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/_io/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/_io/pandas.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/anonymous_dataset.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/bigquery_session.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/clients.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/environment.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/metrics.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/planner.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/semi_executor.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/temporary_storage.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/time.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/session/validation.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/streaming/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/streaming/dataframe.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes/testing/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes.egg-info/dependency_links.txt +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes.egg-info/not-zip-safe +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/bigframes.egg-info/top_level.txt +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/pyproject.toml +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/setup.cfg +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/README.md +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/groupby/config.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/groupby/q1.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/groupby/q10.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/groupby/q2.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/groupby/q3.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/groupby/q4.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/groupby/q5.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/groupby/q6.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/groupby/q7.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/groupby/q8.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/join/config.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/join/q1.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/join/q2.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/join/q3.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/join/q4.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/join/q5.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/sort/config.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/db_benchmark/sort/q1.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/config.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q1.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q10.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q11.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q12.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q13.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q14.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q15.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q16.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q17.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q18.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q19.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q2.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q20.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q21.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q22.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q3.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q4.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q5.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q6.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q7.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q8.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/tpch/q9.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/benchmark/utils.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/hockey_players.json +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/hockey_players.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/json.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/json_schema.json +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/matrix_2by3.json +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/matrix_2by3.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/matrix_3by4.json +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/matrix_3by4.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/nested.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/nested_schema.json +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/nested_structs.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/nested_structs_schema.json +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/penguins.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/penguins_schema.json +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/people.csv +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/ratings.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/ratings_schema.json +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/repeated.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/repeated_schema.json +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/scalars.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/scalars_schema.json +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/time_series.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/time_series_schema.json +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/urban_areas.jsonl +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/data/urban_areas_schema.json +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/functions/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/functions/test_managed_function.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/functions/test_remote_function.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/ml/test_cluster.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/ml/test_compose.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/ml/test_core.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/ml/test_decomposition.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/ml/test_ensemble.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/ml/test_linear_model.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/ml/test_model_selection.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/ml/test_pipeline.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/operations/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/operations/conftest.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/operations/test_ai.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/operations/test_semantics.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/test_dataframe.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/test_location.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/large/test_session.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/load/conftest.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/load/test_large_tables.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/bigquery/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/bigquery/test_approx_agg.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/bigquery/test_array.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/bigquery/test_datetime.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/bigquery/test_geo.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/bigquery/test_sql.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/bigquery/test_struct.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/bigquery/test_vector_search.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/core/__init__.py +0 -0
- {bigframes-2.3.0/tests/system/small/functions → bigframes-2.4.0/tests/system/small/core/indexes}/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/core/test_convert.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/core/test_indexers.py +0 -0
- {bigframes-2.3.0/tests/unit/bigquery → bigframes-2.4.0/tests/system/small/functions}/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/functions/test_remote_function.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/geopandas/test_geoseries.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/conftest.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_cluster.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_core.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_decomposition.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_ensemble.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_forecasting.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_imported.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_impute.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_linear_model.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_metrics.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_metrics_pairwise.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_model_selection.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_preprocessing.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_register.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_remote.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/ml/test_utils.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/operations/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/operations/test_ai.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/operations/test_dates.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/operations/test_lists.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/operations/test_plotting.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/operations/test_semantics.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/operations/test_struct.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/regression/test_issue355_merge_after_filter.py +0 -0
- {bigframes-2.3.0/tests/unit/core/compile/sqlglot → bigframes-2.4.0/tests/system/small/session}/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_bq_sessions.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_encryption.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_groupby.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_index.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_ipython.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_multiindex.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_null_index.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_numpy.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_pandas.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_pandas_options.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_scalar.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_unordered.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/small/test_window.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/system/utils.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/_config/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/_config/test_bigquery_options.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/_config/test_threaded_options.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/_tools/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/_tools/test_strings.py +0 -0
- {bigframes-2.3.0/tests/unit/core/tools → bigframes-2.4.0/tests/unit/bigquery}/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/bigquery/test_json.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/googlesql/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/googlesql/test_expression.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/googlesql/test_function.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/googlesql/test_query.py +0 -0
- {bigframes-2.3.0/tests/unit/functions → bigframes-2.4.0/tests/unit/core/compile/sqlglot}/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/sqlglot/compiler_session.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/sqlglot/conftest.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/sqlglot/snapshots/test_compile_readlocal/test_compile_readlocal/out.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/sqlglot/snapshots/test_compile_readlocal/test_compile_readlocal_w_json_df/out.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/sqlglot/snapshots/test_compile_readlocal/test_compile_readlocal_w_lists_df/out.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/sqlglot/snapshots/test_compile_readlocal/test_compile_readlocal_w_nested_structs_df/out.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/sqlglot/snapshots/test_compile_readlocal/test_compile_readlocal_w_structs_df/out.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/sqlglot/test_compile_readlocal.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/compile/sqlglot/test_sqlglot_types.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/test_bf_utils.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/test_blocks.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/test_dtypes.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/test_expression.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/test_indexes.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/test_log_adapter.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/test_rewrite.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/test_slices.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/test_sql.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/test_windowspec.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/core/tools/test_datetimes.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/functions/test_function_template.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/functions/test_remote_function.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/functions/test_remote_function_utils.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/ml/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/ml/test_api_primitives.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/ml/test_compose.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/ml/test_forecasting.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/ml/test_golden_sql.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/ml/test_matrix_factorization.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/ml/test_pipeline.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/ml/test_sql.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/operations/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/session/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/session/test_clients.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/session/test_io_pandas.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/session/test_read_gbq_table.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/session/test_session.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/session/test_time.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_clients.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_constants.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_daemon.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_dataframe.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_dataframe_io.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_features.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_formatting_helpers.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_local_engine.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_notebook.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_pandas.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_planner.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_sequences.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_series.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/tests/unit/test_series_io.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/constants.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/cpython/LICENSE +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/cpython/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/cpython/_pprint.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/db_benchmark/LICENSE +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/db_benchmark/METADATA +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/db_benchmark/README.md +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/db_benchmark/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/db_benchmark/groupby_queries.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/db_benchmark/join_queries.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/db_benchmark/sort_queries.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/geopandas/LICENSE.txt +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/geopandas/geoseries.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/google_cloud_bigquery/LICENSE +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/google_cloud_bigquery/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/google_cloud_bigquery/_pandas_helpers.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/google_cloud_bigquery/tests/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/google_cloud_bigquery/tests/unit/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/google_cloud_bigquery/tests/unit/test_pandas_helpers.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/LICENSE.txt +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/README.md +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/bigquery/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/bigquery/backend.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/bigquery/client.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/bigquery/converter.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/bigquery/datatypes.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/bigquery/udf/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/bigquery/udf/core.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/bigquery/udf/find.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/bigquery/udf/rewrite.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/sql/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/sql/compilers/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/sql/compilers/base.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/sql/compilers/bigquery/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/sql/datatypes.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/backends/sql/rewrites.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/annotations.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/bases.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/caching.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/collections.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/deferred.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/dispatch.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/egraph.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/exceptions.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/graph.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/grounds.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/numeric.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/patterns.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/selectors.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/temporal.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/common/typing.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/config.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/api.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/builders.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/datashape.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/datatypes/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/datatypes/cast.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/datatypes/core.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/datatypes/value.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/decompile.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/format.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/analytic.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/arrays.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/core.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/generic.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/geospatial.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/histograms.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/json.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/logical.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/maps.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/numeric.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/reductions.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/relations.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/sortkeys.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/strings.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/structs.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/subqueries.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/temporal.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/udf.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/operations/window.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/rewrites.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/rules.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/schema.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/sql.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/arrays.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/binary.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/core.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/dataframe_interchange.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/generic.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/geospatial.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/groupby.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/joins.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/json.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/logical.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/maps.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/numeric.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/pretty.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/relations.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/strings.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/structs.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/temporal.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/temporal_windows.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/typing.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/types/uuid.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/expr/visualize.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/formats/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/formats/numpy.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/formats/pandas.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/formats/polars.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/formats/pyarrow.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/selectors.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/ibis/util.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/AUTHORS.md +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/LICENSE +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/README.md +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/_config/config.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/arrays/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/arrays/arrow/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/arrays/arrow/accessors.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/arrays/datetimelike.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/common.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/computation/align.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/computation/common.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/computation/engines.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/computation/eval.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/computation/expr.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/computation/ops.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/computation/parsing.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/computation/scope.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/dtypes/inference.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/generic.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/groupby/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/indexes/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/indexes/base.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/indexes/multi.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/indexing.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/reshape/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/reshape/concat.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/reshape/encoding.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/reshape/merge.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/reshape/tile.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/tools/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/tools/datetimes.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/tools/timedeltas.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/window/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/core/window/rolling.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/io/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/io/common.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/io/gbq.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/io/parquet.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/io/parsers/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/io/parsers/readers.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/io/pickle.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/pandas/_typing.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/plotting/_core.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/util/_exceptions.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/pandas/util/_validators.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/py.typed +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/COPYING +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/base.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/cluster/_kmeans.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/compose/_column_transformer.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/decomposition/_mf.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/decomposition/_pca.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/ensemble/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/ensemble/_forest.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/impute/_base.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/linear_model/_base.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/linear_model/_logistic.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/metrics/_classification.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/metrics/_ranking.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/metrics/_regression.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/metrics/pairwise.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/model_selection/_split.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/model_selection/_validation.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/pipeline.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/preprocessing/_data.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/preprocessing/_discretization.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/preprocessing/_encoder.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/preprocessing/_label.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/sklearn/preprocessing/_polynomial.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/LICENSE +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/METADATA +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/README.md +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/TPC-EULA.txt +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q1.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q10.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q12.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q13.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q14.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q15.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q16.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q17.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q18.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q19.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q2.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q20.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q21.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q22.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q3.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q4.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q5.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q6.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q7.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q8.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/queries/q9.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q1.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q10.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q11.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q12.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q13.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q14.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q15.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q16.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q17.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q18.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q19.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q2.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q20.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q21.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q22.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q3.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q4.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q5.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q6.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q7.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q8.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/tpch/sql_queries/q9.sql +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/xgboost/LICENSE +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/xgboost/__init__.py +0 -0
- {bigframes-2.3.0 → bigframes-2.4.0}/third_party/bigframes_vendored/xgboost/sklearn.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: bigframes
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.0
|
|
4
4
|
Summary: BigQuery DataFrames -- scalable analytics and machine learning with BigQuery
|
|
5
5
|
Home-page: https://github.com/googleapis/python-bigquery-dataframes
|
|
6
6
|
Author: Google LLC
|
|
@@ -27,8 +27,6 @@ Requires-Dist: fsspec>=2023.3.0
|
|
|
27
27
|
Requires-Dist: gcsfs>=2023.3.0
|
|
28
28
|
Requires-Dist: geopandas>=0.12.2
|
|
29
29
|
Requires-Dist: google-auth<3.0,>=2.15.0
|
|
30
|
-
Requires-Dist: google-cloud-bigtable>=2.24.0
|
|
31
|
-
Requires-Dist: google-cloud-pubsub>=2.21.4
|
|
32
30
|
Requires-Dist: google-cloud-bigquery[bqstorage,pandas]>=3.31.0
|
|
33
31
|
Requires-Dist: google-cloud-bigquery-storage<3.0.0,>=2.30.0
|
|
34
32
|
Requires-Dist: google-cloud-functions>=1.12.0
|
|
@@ -58,6 +56,8 @@ Requires-Dist: rich<14,>=12.4.4
|
|
|
58
56
|
Provides-Extra: tests
|
|
59
57
|
Requires-Dist: freezegun; extra == "tests"
|
|
60
58
|
Requires-Dist: pytest-snapshot; extra == "tests"
|
|
59
|
+
Requires-Dist: google-cloud-bigtable>=2.24.0; extra == "tests"
|
|
60
|
+
Requires-Dist: google-cloud-pubsub>=2.21.4; extra == "tests"
|
|
61
61
|
Provides-Extra: polars
|
|
62
62
|
Requires-Dist: polars>=1.7.0; extra == "polars"
|
|
63
63
|
Provides-Extra: scikit-learn
|
|
@@ -69,6 +69,8 @@ Requires-Dist: nox; extra == "dev"
|
|
|
69
69
|
Requires-Dist: google-cloud-testutils; extra == "dev"
|
|
70
70
|
Provides-Extra: all
|
|
71
71
|
Requires-Dist: freezegun; extra == "all"
|
|
72
|
+
Requires-Dist: google-cloud-bigtable>=2.24.0; extra == "all"
|
|
73
|
+
Requires-Dist: google-cloud-pubsub>=2.21.4; extra == "all"
|
|
72
74
|
Requires-Dist: google-cloud-testutils; extra == "all"
|
|
73
75
|
Requires-Dist: nox; extra == "all"
|
|
74
76
|
Requires-Dist: polars>=1.7.0; extra == "all"
|
|
@@ -150,6 +150,24 @@ class Options:
|
|
|
150
150
|
"""
|
|
151
151
|
return self._local.bigquery_options is not None
|
|
152
152
|
|
|
153
|
+
@property
|
|
154
|
+
def _allow_large_results(self) -> bool:
|
|
155
|
+
"""The effective 'allow_large_results' setting.
|
|
156
|
+
|
|
157
|
+
This value is `self.compute.allow_large_results` if set (not `None`),
|
|
158
|
+
otherwise it defaults to `self.bigquery.allow_large_results`.
|
|
159
|
+
|
|
160
|
+
Returns:
|
|
161
|
+
bool:
|
|
162
|
+
Whether large query results are permitted.
|
|
163
|
+
- `True`: The BigQuery result size limit (e.g., 10 GB) is removed.
|
|
164
|
+
- `False`: Results are restricted to this limit (potentially faster).
|
|
165
|
+
BigQuery will raise an error if this limit is exceeded.
|
|
166
|
+
"""
|
|
167
|
+
if self.compute.allow_large_results is None:
|
|
168
|
+
return self.bigquery.allow_large_results
|
|
169
|
+
return self.compute.allow_large_results
|
|
170
|
+
|
|
153
171
|
|
|
154
172
|
options = Options()
|
|
155
173
|
"""Global options for default session."""
|
|
@@ -19,10 +19,8 @@ from __future__ import annotations
|
|
|
19
19
|
from typing import Literal, Optional
|
|
20
20
|
import warnings
|
|
21
21
|
|
|
22
|
-
import google.api_core.exceptions
|
|
23
22
|
import google.auth.credentials
|
|
24
23
|
|
|
25
|
-
import bigframes.constants
|
|
26
24
|
import bigframes.enums
|
|
27
25
|
import bigframes.exceptions as bfe
|
|
28
26
|
|
|
@@ -239,21 +237,34 @@ class BigQueryOptions:
|
|
|
239
237
|
@property
|
|
240
238
|
def allow_large_results(self) -> bool:
|
|
241
239
|
"""
|
|
242
|
-
|
|
240
|
+
DEPRECATED: Checks the legacy global setting for allowing large results.
|
|
241
|
+
Use ``bpd.options.compute.allow_large_results`` instead.
|
|
243
242
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
is exceeded.
|
|
243
|
+
Warning: Accessing ``bpd.options.bigquery.allow_large_results`` is deprecated
|
|
244
|
+
and this property will be removed in a future version. The configuration for
|
|
245
|
+
handling large results has moved.
|
|
248
246
|
|
|
249
247
|
Returns:
|
|
250
|
-
bool:
|
|
251
|
-
False if results are limited to 10 GB and errors are raised when exceeded.
|
|
248
|
+
bool: The value of the deprecated setting.
|
|
252
249
|
"""
|
|
253
250
|
return self._allow_large_results
|
|
254
251
|
|
|
255
252
|
@allow_large_results.setter
|
|
256
253
|
def allow_large_results(self, value: bool):
|
|
254
|
+
warnings.warn(
|
|
255
|
+
"Setting `bpd.options.bigquery.allow_large_results` is deprecated, "
|
|
256
|
+
"and will be removed in the future. "
|
|
257
|
+
"Please use `bpd.options.compute.allow_large_results = <value>` instead. "
|
|
258
|
+
"The `bpd.options.bigquery.allow_large_results` option is ignored if "
|
|
259
|
+
"`bpd.options.compute.allow_large_results` is set.",
|
|
260
|
+
FutureWarning,
|
|
261
|
+
stacklevel=2,
|
|
262
|
+
)
|
|
263
|
+
if self._session_started and self._allow_large_results != value:
|
|
264
|
+
raise ValueError(
|
|
265
|
+
SESSION_STARTED_MESSAGE.format(attribute="allow_large_results")
|
|
266
|
+
)
|
|
267
|
+
|
|
257
268
|
self._allow_large_results = value
|
|
258
269
|
|
|
259
270
|
@property
|
|
@@ -86,6 +86,12 @@ class ComputeOptions:
|
|
|
86
86
|
ai_ops_threshold_autofail (bool):
|
|
87
87
|
Guards against unexpected processing of large amount of rows by semantic operators.
|
|
88
88
|
When set to True, the operation automatically fails without asking for user inputs.
|
|
89
|
+
|
|
90
|
+
allow_large_results (bool):
|
|
91
|
+
Specifies whether query results can exceed 10 GB. Defaults to False. Setting this
|
|
92
|
+
to False (the default) restricts results to 10 GB for potentially faster execution;
|
|
93
|
+
BigQuery will raise an error if this limit is exceeded. Setting to True removes
|
|
94
|
+
this result size limit.
|
|
89
95
|
"""
|
|
90
96
|
|
|
91
97
|
maximum_bytes_billed: Optional[int] = None
|
|
@@ -97,7 +103,9 @@ class ComputeOptions:
|
|
|
97
103
|
semantic_ops_threshold_autofail = False
|
|
98
104
|
|
|
99
105
|
ai_ops_confirmation_threshold: Optional[int] = 0
|
|
100
|
-
ai_ops_threshold_autofail = False
|
|
106
|
+
ai_ops_threshold_autofail: bool = False
|
|
107
|
+
|
|
108
|
+
allow_large_results: Optional[bool] = None
|
|
101
109
|
|
|
102
110
|
def assign_extra_query_labels(self, **kwargs: Any) -> None:
|
|
103
111
|
"""
|
|
@@ -35,6 +35,10 @@ class DisplayOptions:
|
|
|
35
35
|
max_info_rows: Optional[int] = 200000
|
|
36
36
|
memory_usage: bool = True
|
|
37
37
|
|
|
38
|
+
blob_display: bool = True
|
|
39
|
+
blob_display_width: Optional[int] = None
|
|
40
|
+
blob_display_height: Optional[int] = None
|
|
41
|
+
|
|
38
42
|
|
|
39
43
|
@contextlib.contextmanager
|
|
40
44
|
def pandas_repr(display_options: DisplayOptions):
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
from typing import Optional
|
|
16
16
|
import warnings
|
|
17
17
|
|
|
18
|
+
import bigframes
|
|
18
19
|
import bigframes.exceptions as bfe
|
|
19
20
|
|
|
20
21
|
|
|
@@ -26,10 +27,6 @@ class ExperimentOptions:
|
|
|
26
27
|
def __init__(self):
|
|
27
28
|
self._semantic_operators: bool = False
|
|
28
29
|
self._ai_operators: bool = False
|
|
29
|
-
self._blob: bool = False
|
|
30
|
-
self._blob_display: bool = True
|
|
31
|
-
self._blob_display_width: Optional[int] = None
|
|
32
|
-
self._blob_display_height: Optional[int] = None
|
|
33
30
|
|
|
34
31
|
@property
|
|
35
32
|
def semantic_operators(self) -> bool:
|
|
@@ -60,41 +57,72 @@ class ExperimentOptions:
|
|
|
60
57
|
|
|
61
58
|
@property
|
|
62
59
|
def blob(self) -> bool:
|
|
63
|
-
|
|
60
|
+
msg = bfe.format_message(
|
|
61
|
+
"BigFrames Blob is in preview now. This flag is no longer needed."
|
|
62
|
+
)
|
|
63
|
+
warnings.warn(msg, category=bfe.ApiDeprecationWarning)
|
|
64
|
+
return True
|
|
64
65
|
|
|
65
66
|
@blob.setter
|
|
66
67
|
def blob(self, value: bool):
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
)
|
|
72
|
-
warnings.warn(msg, category=bfe.PreviewWarning)
|
|
73
|
-
self._blob = value
|
|
68
|
+
msg = bfe.format_message(
|
|
69
|
+
"BigFrames Blob is in preview now. This flag is no longer needed."
|
|
70
|
+
)
|
|
71
|
+
warnings.warn(msg, category=bfe.ApiDeprecationWarning)
|
|
74
72
|
|
|
75
73
|
@property
|
|
76
74
|
def blob_display(self) -> bool:
|
|
77
75
|
"""Whether to display the blob content in notebook DataFrame preview. Default True."""
|
|
78
|
-
|
|
76
|
+
msg = bfe.format_message(
|
|
77
|
+
"BigFrames Blob is in preview now. The option has been moved to bigframes.options.display.blob_display."
|
|
78
|
+
)
|
|
79
|
+
warnings.warn(msg, category=bfe.ApiDeprecationWarning)
|
|
80
|
+
|
|
81
|
+
return bigframes.options.display.blob_display
|
|
79
82
|
|
|
80
83
|
@blob_display.setter
|
|
81
84
|
def blob_display(self, value: bool):
|
|
82
|
-
|
|
85
|
+
msg = bfe.format_message(
|
|
86
|
+
"BigFrames Blob is in preview now. The option has been moved to bigframes.options.display.blob_display."
|
|
87
|
+
)
|
|
88
|
+
warnings.warn(msg, category=bfe.ApiDeprecationWarning)
|
|
89
|
+
|
|
90
|
+
bigframes.options.display.blob_display = value
|
|
83
91
|
|
|
84
92
|
@property
|
|
85
93
|
def blob_display_width(self) -> Optional[int]:
|
|
86
94
|
"""Width in pixels that the blob constrained to."""
|
|
87
|
-
|
|
95
|
+
msg = bfe.format_message(
|
|
96
|
+
"BigFrames Blob is in preview now. The option has been moved to bigframes.options.display.blob_display_width."
|
|
97
|
+
)
|
|
98
|
+
warnings.warn(msg, category=bfe.ApiDeprecationWarning)
|
|
99
|
+
|
|
100
|
+
return bigframes.options.display.blob_display_width
|
|
88
101
|
|
|
89
102
|
@blob_display_width.setter
|
|
90
103
|
def blob_display_width(self, value: Optional[int]):
|
|
91
|
-
|
|
104
|
+
msg = bfe.format_message(
|
|
105
|
+
"BigFrames Blob is in preview now. The option has been moved to bigframes.options.display.blob_display_width."
|
|
106
|
+
)
|
|
107
|
+
warnings.warn(msg, category=bfe.ApiDeprecationWarning)
|
|
108
|
+
|
|
109
|
+
bigframes.options.display.blob_display_width = value
|
|
92
110
|
|
|
93
111
|
@property
|
|
94
112
|
def blob_display_height(self) -> Optional[int]:
|
|
95
113
|
"""Height in pixels that the blob constrained to."""
|
|
96
|
-
|
|
114
|
+
msg = bfe.format_message(
|
|
115
|
+
"BigFrames Blob is in preview now. The option has been moved to bigframes.options.display.blob_display_height."
|
|
116
|
+
)
|
|
117
|
+
warnings.warn(msg, category=bfe.ApiDeprecationWarning)
|
|
118
|
+
|
|
119
|
+
return bigframes.options.display.blob_display_height
|
|
97
120
|
|
|
98
121
|
@blob_display_height.setter
|
|
99
122
|
def blob_display_height(self, value: Optional[int]):
|
|
100
|
-
|
|
123
|
+
msg = bfe.format_message(
|
|
124
|
+
"BigFrames Blob is in preview now. The option has been moved to bigframes.options.display.blob_display_height."
|
|
125
|
+
)
|
|
126
|
+
warnings.warn(msg, category=bfe.ApiDeprecationWarning)
|
|
127
|
+
|
|
128
|
+
bigframes.options.display.blob_display_height = value
|
|
@@ -38,6 +38,7 @@ from bigframes.bigquery._operations.json import (
|
|
|
38
38
|
json_extract_array,
|
|
39
39
|
json_extract_string_array,
|
|
40
40
|
json_set,
|
|
41
|
+
json_value,
|
|
41
42
|
parse_json,
|
|
42
43
|
)
|
|
43
44
|
from bigframes.bigquery._operations.search import create_vector_index, vector_search
|
|
@@ -61,6 +62,7 @@ __all__ = [
|
|
|
61
62
|
"json_extract",
|
|
62
63
|
"json_extract_array",
|
|
63
64
|
"json_extract_string_array",
|
|
65
|
+
"json_value",
|
|
64
66
|
"parse_json",
|
|
65
67
|
# search ops
|
|
66
68
|
"create_vector_index",
|
|
@@ -231,6 +231,40 @@ def json_extract_string_array(
|
|
|
231
231
|
return array_series
|
|
232
232
|
|
|
233
233
|
|
|
234
|
+
def json_value(
|
|
235
|
+
input: series.Series,
|
|
236
|
+
json_path: str,
|
|
237
|
+
) -> series.Series:
|
|
238
|
+
"""Extracts a JSON scalar value and converts it to a SQL ``STRING`` value. In
|
|
239
|
+
addtion, this function:
|
|
240
|
+
- Removes the outermost quotes and unescapes the values.
|
|
241
|
+
- Returns a SQL ``NULL`` if a non-scalar value is selected.
|
|
242
|
+
- Uses double quotes to escape invalid ``JSON_PATH`` characters in JSON keys.
|
|
243
|
+
|
|
244
|
+
**Examples:**
|
|
245
|
+
|
|
246
|
+
>>> import bigframes.pandas as bpd
|
|
247
|
+
>>> import bigframes.bigquery as bbq
|
|
248
|
+
>>> bpd.options.display.progress_bar = None
|
|
249
|
+
|
|
250
|
+
>>> s = bpd.Series(['{"name": "Jakob", "age": "6"}', '{"name": "Jakob", "age": []}'])
|
|
251
|
+
>>> bbq.json_value(s, json_path="$.age")
|
|
252
|
+
0 6
|
|
253
|
+
1 <NA>
|
|
254
|
+
dtype: string
|
|
255
|
+
|
|
256
|
+
Args:
|
|
257
|
+
input (bigframes.series.Series):
|
|
258
|
+
The Series containing JSON data (as native JSON objects or JSON-formatted strings).
|
|
259
|
+
json_path (str):
|
|
260
|
+
The JSON path identifying the data that you want to obtain from the input.
|
|
261
|
+
|
|
262
|
+
Returns:
|
|
263
|
+
bigframes.series.Series: A new Series with the JSON-formatted STRING.
|
|
264
|
+
"""
|
|
265
|
+
return input._apply_unary_op(ops.JSONValue(json_path=json_path))
|
|
266
|
+
|
|
267
|
+
|
|
234
268
|
@utils.preview(name="The JSON-related API `parse_json`")
|
|
235
269
|
def parse_json(
|
|
236
270
|
input: series.Series,
|
|
@@ -108,6 +108,38 @@ AS r\"\"\"
|
|
|
108
108
|
return self._session.read_gbq_function(udf_name)
|
|
109
109
|
|
|
110
110
|
|
|
111
|
+
def exif_func(src_obj_ref_rt: str) -> str:
|
|
112
|
+
import io
|
|
113
|
+
import json
|
|
114
|
+
|
|
115
|
+
from PIL import ExifTags, Image
|
|
116
|
+
import requests
|
|
117
|
+
from requests import adapters
|
|
118
|
+
|
|
119
|
+
session = requests.Session()
|
|
120
|
+
session.mount("https://", adapters.HTTPAdapter(max_retries=3))
|
|
121
|
+
|
|
122
|
+
src_obj_ref_rt_json = json.loads(src_obj_ref_rt)
|
|
123
|
+
|
|
124
|
+
src_url = src_obj_ref_rt_json["access_urls"]["read_url"]
|
|
125
|
+
|
|
126
|
+
response = session.get(src_url, timeout=30)
|
|
127
|
+
bts = response.content
|
|
128
|
+
|
|
129
|
+
image = Image.open(io.BytesIO(bts))
|
|
130
|
+
exif_data = image.getexif()
|
|
131
|
+
exif_dict = {}
|
|
132
|
+
if exif_data:
|
|
133
|
+
for tag, value in exif_data.items():
|
|
134
|
+
tag_name = ExifTags.TAGS.get(tag, tag)
|
|
135
|
+
exif_dict[tag_name] = value
|
|
136
|
+
|
|
137
|
+
return json.dumps(exif_dict)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
exif_func_def = FunctionDef(exif_func, ["pillow", "requests"])
|
|
141
|
+
|
|
142
|
+
|
|
111
143
|
# Blur images. Takes ObjectRefRuntime as JSON string. Outputs ObjectRefRuntime JSON string.
|
|
112
144
|
def image_blur_func(
|
|
113
145
|
src_obj_ref_rt: str, dst_obj_ref_rt: str, ksize_x: int, ksize_y: int, ext: str
|
|
@@ -172,33 +172,6 @@ class ArrayValue:
|
|
|
172
172
|
def supports_fast_peek(self) -> bool:
|
|
173
173
|
return bigframes.core.tree_properties.can_fast_peek(self.node)
|
|
174
174
|
|
|
175
|
-
def as_cached(
|
|
176
|
-
self: ArrayValue,
|
|
177
|
-
cache_table: google.cloud.bigquery.Table,
|
|
178
|
-
ordering: Optional[orderings.RowOrdering],
|
|
179
|
-
) -> ArrayValue:
|
|
180
|
-
"""
|
|
181
|
-
Replace the node with an equivalent one that references a table where the value has been materialized to.
|
|
182
|
-
"""
|
|
183
|
-
table = nodes.GbqTable.from_table(cache_table)
|
|
184
|
-
source = nodes.BigqueryDataSource(
|
|
185
|
-
table, ordering=ordering, n_rows=cache_table.num_rows
|
|
186
|
-
)
|
|
187
|
-
# Assumption: GBQ cached table uses field name as bq column name
|
|
188
|
-
scan_list = nodes.ScanList(
|
|
189
|
-
tuple(
|
|
190
|
-
nodes.ScanItem(field.id, field.dtype, field.id.name)
|
|
191
|
-
for field in self.node.fields
|
|
192
|
-
)
|
|
193
|
-
)
|
|
194
|
-
node = nodes.CachedTableNode(
|
|
195
|
-
original_node=self.node,
|
|
196
|
-
source=source,
|
|
197
|
-
table_session=self.session,
|
|
198
|
-
scan_list=scan_list,
|
|
199
|
-
)
|
|
200
|
-
return ArrayValue(node)
|
|
201
|
-
|
|
202
175
|
def get_column_type(self, key: str) -> bigframes.dtypes.Dtype:
|
|
203
176
|
return self.schema.get_type(key)
|
|
204
177
|
|
|
@@ -586,10 +586,10 @@ class Block:
|
|
|
586
586
|
self.expr,
|
|
587
587
|
ordered=True,
|
|
588
588
|
use_explicit_destination=allow_large_results,
|
|
589
|
-
page_size=page_size,
|
|
590
|
-
max_results=max_results,
|
|
591
589
|
)
|
|
592
|
-
for df in execute_result.to_pandas_batches(
|
|
590
|
+
for df in execute_result.to_pandas_batches(
|
|
591
|
+
page_size=page_size, max_results=max_results
|
|
592
|
+
):
|
|
593
593
|
self._copy_index_to_pandas(df)
|
|
594
594
|
if squeeze:
|
|
595
595
|
yield df.squeeze(axis=1)
|
|
@@ -13,9 +13,13 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
|
-
from bigframes.core.compile.api import
|
|
16
|
+
from bigframes.core.compile.api import test_only_ibis_inferred_schema
|
|
17
|
+
from bigframes.core.compile.compiler import compile_sql
|
|
18
|
+
from bigframes.core.compile.configs import CompileRequest, CompileResult
|
|
17
19
|
|
|
18
20
|
__all__ = [
|
|
19
|
-
"SQLCompiler",
|
|
20
21
|
"test_only_ibis_inferred_schema",
|
|
22
|
+
"compile_sql",
|
|
23
|
+
"CompileRequest",
|
|
24
|
+
"CompileResult",
|
|
21
25
|
]
|
|
@@ -13,43 +13,13 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
|
-
from typing import
|
|
17
|
-
|
|
18
|
-
import google.cloud.bigquery as bigquery
|
|
16
|
+
from typing import TYPE_CHECKING
|
|
19
17
|
|
|
20
18
|
from bigframes.core import rewrite
|
|
21
|
-
from bigframes.core.compile import compiler
|
|
19
|
+
from bigframes.core.compile import compiler
|
|
22
20
|
|
|
23
21
|
if TYPE_CHECKING:
|
|
24
22
|
import bigframes.core.nodes
|
|
25
|
-
import bigframes.core.ordering
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
class SQLCompiler:
|
|
29
|
-
def compile(
|
|
30
|
-
self,
|
|
31
|
-
node: bigframes.core.nodes.BigFrameNode,
|
|
32
|
-
*,
|
|
33
|
-
ordered: bool = True,
|
|
34
|
-
limit: Optional[int] = None,
|
|
35
|
-
) -> str:
|
|
36
|
-
"""Compile node into sql where rows are sorted with ORDER BY."""
|
|
37
|
-
request = configs.CompileRequest(node, sort_rows=ordered, peek_count=limit)
|
|
38
|
-
return compiler.compile_sql(request).sql
|
|
39
|
-
|
|
40
|
-
def compile_raw(
|
|
41
|
-
self,
|
|
42
|
-
node: bigframes.core.nodes.BigFrameNode,
|
|
43
|
-
) -> Tuple[
|
|
44
|
-
str, Sequence[bigquery.SchemaField], bigframes.core.ordering.RowOrdering
|
|
45
|
-
]:
|
|
46
|
-
"""Compile node into sql that exposes all columns, including hidden ordering-only columns."""
|
|
47
|
-
request = configs.CompileRequest(
|
|
48
|
-
node, sort_rows=False, materialize_all_order_keys=True
|
|
49
|
-
)
|
|
50
|
-
result = compiler.compile_sql(request)
|
|
51
|
-
assert result.row_order is not None
|
|
52
|
-
return result.sql, result.sql_schema, result.row_order
|
|
53
23
|
|
|
54
24
|
|
|
55
25
|
def test_only_ibis_inferred_schema(node: bigframes.core.nodes.BigFrameNode):
|
|
@@ -456,9 +456,19 @@ def upper_op_impl(x: ibis_types.Value):
|
|
|
456
456
|
return typing.cast(ibis_types.StringValue, x).upper()
|
|
457
457
|
|
|
458
458
|
|
|
459
|
-
@scalar_op_compiler.register_unary_op(ops.
|
|
460
|
-
def
|
|
461
|
-
return
|
|
459
|
+
@scalar_op_compiler.register_unary_op(ops.StrLstripOp, pass_op=True)
|
|
460
|
+
def str_lstrip_op_impl(x: ibis_types.Value, op: ops.StrStripOp):
|
|
461
|
+
return str_lstrip_op(x, to_strip=op.to_strip)
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
@scalar_op_compiler.register_unary_op(ops.StrRstripOp, pass_op=True)
|
|
465
|
+
def str_rstrip_op_impl(x: ibis_types.Value, op: ops.StrRstripOp):
|
|
466
|
+
return str_rstrip_op(x, to_strip=op.to_strip)
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
@scalar_op_compiler.register_unary_op(ops.StrStripOp, pass_op=True)
|
|
470
|
+
def str_strip_op_impl(x: ibis_types.Value, op: ops.StrStripOp):
|
|
471
|
+
return str_strip_op(x, to_strip=op.to_strip)
|
|
462
472
|
|
|
463
473
|
|
|
464
474
|
@scalar_op_compiler.register_unary_op(ops.isnumeric_op)
|
|
@@ -519,16 +529,6 @@ def isupper_op_impl(x: ibis_types.Value):
|
|
|
519
529
|
).re_search(r"\p{Ll}|\p{Lt}")
|
|
520
530
|
|
|
521
531
|
|
|
522
|
-
@scalar_op_compiler.register_unary_op(ops.rstrip_op)
|
|
523
|
-
def rstrip_op_impl(x: ibis_types.Value):
|
|
524
|
-
return typing.cast(ibis_types.StringValue, x).rstrip()
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
@scalar_op_compiler.register_unary_op(ops.lstrip_op)
|
|
528
|
-
def lstrip_op_impl(x: ibis_types.Value):
|
|
529
|
-
return typing.cast(ibis_types.StringValue, x).lstrip()
|
|
530
|
-
|
|
531
|
-
|
|
532
532
|
@scalar_op_compiler.register_unary_op(ops.capitalize_op)
|
|
533
533
|
def capitalize_op_impl(x: ibis_types.Value):
|
|
534
534
|
return typing.cast(ibis_types.StringValue, x).capitalize()
|
|
@@ -667,6 +667,22 @@ def date_op_impl(x: ibis_types.Value):
|
|
|
667
667
|
return typing.cast(ibis_types.TimestampValue, x).date()
|
|
668
668
|
|
|
669
669
|
|
|
670
|
+
@scalar_op_compiler.register_unary_op(ops.iso_day_op)
|
|
671
|
+
def iso_day_op_impl(x: ibis_types.Value):
|
|
672
|
+
# Plus 1 because iso day of week uses 1-based indexing
|
|
673
|
+
return dayofweek_op_impl(x) + 1
|
|
674
|
+
|
|
675
|
+
|
|
676
|
+
@scalar_op_compiler.register_unary_op(ops.iso_week_op)
|
|
677
|
+
def iso_week_op_impl(x: ibis_types.Value):
|
|
678
|
+
return typing.cast(ibis_types.TimestampValue, x).week_of_year()
|
|
679
|
+
|
|
680
|
+
|
|
681
|
+
@scalar_op_compiler.register_unary_op(ops.iso_year_op)
|
|
682
|
+
def iso_year_op_impl(x: ibis_types.Value):
|
|
683
|
+
return typing.cast(ibis_types.TimestampValue, x).iso_year()
|
|
684
|
+
|
|
685
|
+
|
|
670
686
|
@scalar_op_compiler.register_unary_op(ops.dayofweek_op)
|
|
671
687
|
def dayofweek_op_impl(x: ibis_types.Value):
|
|
672
688
|
return (
|
|
@@ -676,6 +692,13 @@ def dayofweek_op_impl(x: ibis_types.Value):
|
|
|
676
692
|
)
|
|
677
693
|
|
|
678
694
|
|
|
695
|
+
@scalar_op_compiler.register_unary_op(ops.dayofyear_op)
|
|
696
|
+
def dayofyear_op_impl(x: ibis_types.Value):
|
|
697
|
+
return (
|
|
698
|
+
typing.cast(ibis_types.TimestampValue, x).day_of_year().cast(ibis_dtypes.int64)
|
|
699
|
+
)
|
|
700
|
+
|
|
701
|
+
|
|
679
702
|
@scalar_op_compiler.register_unary_op(ops.hour_op)
|
|
680
703
|
def hour_op_impl(x: ibis_types.Value):
|
|
681
704
|
return typing.cast(ibis_types.TimestampValue, x).hour().cast(ibis_dtypes.int64)
|
|
@@ -2070,3 +2093,24 @@ def obj_make_ref(uri: str, authorizer: str) -> _OBJ_REF_IBIS_DTYPE: # type: ign
|
|
|
2070
2093
|
@ibis_udf.scalar.builtin(name="OBJ.GET_ACCESS_URL")
|
|
2071
2094
|
def obj_get_access_url(obj_ref: _OBJ_REF_IBIS_DTYPE, mode: ibis_dtypes.String) -> ibis_dtypes.JSON: # type: ignore
|
|
2072
2095
|
"""Get access url (as ObjectRefRumtime JSON) from ObjectRef."""
|
|
2096
|
+
|
|
2097
|
+
|
|
2098
|
+
@ibis_udf.scalar.builtin(name="ltrim")
|
|
2099
|
+
def str_lstrip_op( # type: ignore[empty-body]
|
|
2100
|
+
x: ibis_dtypes.String, to_strip: ibis_dtypes.String
|
|
2101
|
+
) -> ibis_dtypes.String:
|
|
2102
|
+
"""Remove leading and trailing characters."""
|
|
2103
|
+
|
|
2104
|
+
|
|
2105
|
+
@ibis_udf.scalar.builtin(name="rtrim")
|
|
2106
|
+
def str_rstrip_op( # type: ignore[empty-body]
|
|
2107
|
+
x: ibis_dtypes.String, to_strip: ibis_dtypes.String
|
|
2108
|
+
) -> ibis_dtypes.String:
|
|
2109
|
+
"""Remove leading and trailing characters."""
|
|
2110
|
+
|
|
2111
|
+
|
|
2112
|
+
@ibis_udf.scalar.builtin(name="trim")
|
|
2113
|
+
def str_strip_op( # type: ignore[empty-body]
|
|
2114
|
+
x: ibis_dtypes.String, to_strip: ibis_dtypes.String
|
|
2115
|
+
) -> ibis_dtypes.String:
|
|
2116
|
+
"""Remove leading and trailing characters."""
|
|
@@ -163,6 +163,16 @@ class SQLGlotCompiler:
|
|
|
163
163
|
)
|
|
164
164
|
return child.select(selected_cols)
|
|
165
165
|
|
|
166
|
+
@_compile_node.register
|
|
167
|
+
def compile_projection(
|
|
168
|
+
self, node: nodes.ProjectionNode, child: ir.SQLGlotIR
|
|
169
|
+
) -> ir.SQLGlotIR:
|
|
170
|
+
projected_cols: tuple[tuple[str, sge.Expression], ...] = tuple(
|
|
171
|
+
(id.sql, scalar_compiler.compile_scalar_expression(expr))
|
|
172
|
+
for expr, id in node.assignments
|
|
173
|
+
)
|
|
174
|
+
return child.project(projected_cols)
|
|
175
|
+
|
|
166
176
|
|
|
167
177
|
def _replace_unsupported_ops(node: nodes.BigFrameNode):
|
|
168
178
|
node = nodes.bottom_up(node, rewrite.rewrite_slice)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Copyright 2025 Google LLC
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import functools
|
|
17
|
+
|
|
18
|
+
import sqlglot.expressions as sge
|
|
19
|
+
|
|
20
|
+
from bigframes.core import expression
|
|
21
|
+
import bigframes.core.compile.sqlglot.sqlglot_ir as ir
|
|
22
|
+
import bigframes.operations as ops
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@functools.singledispatch
|
|
26
|
+
def compile_scalar_expression(
|
|
27
|
+
expression: expression.Expression,
|
|
28
|
+
) -> sge.Expression:
|
|
29
|
+
"""Compiles BigFrames scalar expression into SQLGlot expression."""
|
|
30
|
+
raise ValueError(f"Can't compile unrecognized node: {expression}")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@compile_scalar_expression.register
|
|
34
|
+
def compile_deref_expression(expr: expression.DerefOp) -> sge.Expression:
|
|
35
|
+
return sge.ColumnDef(this=sge.to_identifier(expr.id.sql, quoted=True))
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@compile_scalar_expression.register
|
|
39
|
+
def compile_constant_expression(
|
|
40
|
+
expr: expression.ScalarConstantExpression,
|
|
41
|
+
) -> sge.Expression:
|
|
42
|
+
return ir._literal(expr.value, expr.dtype)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@compile_scalar_expression.register
|
|
46
|
+
def compile_op_expression(expr: expression.OpExpression):
|
|
47
|
+
# Non-recursively compiles the children scalar expressions.
|
|
48
|
+
args = tuple(map(compile_scalar_expression, expr.inputs))
|
|
49
|
+
|
|
50
|
+
op = expr.op
|
|
51
|
+
op_name = expr.op.__class__.__name__
|
|
52
|
+
method_name = f"compile_{op_name.lower()}"
|
|
53
|
+
method = globals().get(method_name, None)
|
|
54
|
+
if method is None:
|
|
55
|
+
raise ValueError(
|
|
56
|
+
f"Compilation method '{method_name}' not found for operator '{op_name}'."
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
if isinstance(op, ops.UnaryOp):
|
|
60
|
+
return method(op, args[0])
|
|
61
|
+
elif isinstance(op, ops.BinaryOp):
|
|
62
|
+
return method(op, args[0], args[1])
|
|
63
|
+
elif isinstance(op, ops.TernaryOp):
|
|
64
|
+
return method(op, args[0], args[1], args[2])
|
|
65
|
+
elif isinstance(op, ops.NaryOp):
|
|
66
|
+
return method(op, *args)
|
|
67
|
+
else:
|
|
68
|
+
raise TypeError(
|
|
69
|
+
f"Operator '{op_name}' has an unrecognized arity or type "
|
|
70
|
+
"and cannot be compiled."
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
# TODO: add parenthesize for operators
|
|
75
|
+
def compile_addop(op: ops.AddOp, left: sge.Expression, right: sge.Expression):
|
|
76
|
+
# TODO: support addop for string dtype.
|
|
77
|
+
return sge.Add(this=left, expression=right)
|