diff --git a/bigframes/__init__.py b/bigframes/__init__.py index 419899a4ae..a3a9b4e4c7 100644 --- a/bigframes/__init__.py +++ b/bigframes/__init__.py @@ -14,13 +14,26 @@ """BigQuery DataFrames provides a DataFrame API scaled by the BigQuery engine.""" -from bigframes._config import option_context, options -from bigframes._config.bigquery_options import BigQueryOptions -from bigframes.core.global_session import close_session, get_global_session -import bigframes.enums as enums -import bigframes.exceptions as exceptions -from bigframes.session import connect, Session -from bigframes.version import __version__ +import warnings + +# Suppress Python version support warnings from google-cloud libraries. +# These are particularly noisy in Colab which still uses Python 3.10. +warnings.filterwarnings( + "ignore", + category=FutureWarning, + message=".*Google will stop supporting.*Python.*", +) + +from bigframes._config import option_context, options # noqa: E402 +from bigframes._config.bigquery_options import BigQueryOptions # noqa: E402 +from bigframes.core.global_session import ( # noqa: E402 + close_session, + get_global_session, +) +import bigframes.enums as enums # noqa: E402 +import bigframes.exceptions as exceptions # noqa: E402 +from bigframes.session import connect, Session # noqa: E402 +from bigframes.version import __version__ # noqa: E402 _MAGIC_NAMES = ["bqsql"] diff --git a/bigframes/dataframe.py b/bigframes/dataframe.py index c226e5010a..b195ce9902 100644 --- a/bigframes/dataframe.py +++ b/bigframes/dataframe.py @@ -332,7 +332,7 @@ def dtypes(self) -> pandas.Series: @property def columns(self) -> pandas.Index: - return self.dtypes.index + return self._block.column_labels @columns.setter def columns(self, labels: pandas.Index): diff --git a/bigframes/display/anywidget.py b/bigframes/display/anywidget.py index eca435e960..40d04a1d71 100644 --- a/bigframes/display/anywidget.py +++ b/bigframes/display/anywidget.py @@ -23,6 +23,7 @@ import threading from typing import Any, Iterator, Optional import uuid +import warnings import pandas as pd @@ -111,16 +112,7 @@ def __init__(self, dataframe: bigframes.dataframe.DataFrame): self.page_size = initial_page_size self.max_columns = initial_max_columns - # TODO(b/469861913): Nested columns from structs (e.g., 'struct_col.name') are not currently sortable. - # TODO(b/463754889): Support non-string column labels for sorting. - if all(isinstance(col, str) for col in dataframe.columns): - self.orderable_columns = [ - str(col_name) - for col_name, dtype in dataframe.dtypes.items() - if dtypes.is_orderable(dtype) - ] - else: - self.orderable_columns = [] + self.orderable_columns = self._get_orderable_columns(dataframe) self._initial_load() @@ -128,6 +120,24 @@ def __init__(self, dataframe: bigframes.dataframe.DataFrame): # Also used as a guard to prevent observers from firing during initialization. self._initial_load_complete = True + def _get_orderable_columns( + self, dataframe: bigframes.dataframe.DataFrame + ) -> list[str]: + """Determine which columns can be used for client-side sorting.""" + # TODO(b/469861913): Nested columns from structs (e.g., 'struct_col.name') are not currently sortable. + # TODO(b/463754889): Support non-string column labels for sorting. + if not all(isinstance(col, str) for col in dataframe.columns): + return [] + + with warnings.catch_warnings(): + warnings.simplefilter("ignore", bigframes.exceptions.JSONDtypeWarning) + warnings.simplefilter("ignore", category=FutureWarning) + return [ + str(col_name) + for col_name, dtype in dataframe.dtypes.items() + if dtypes.is_orderable(dtype) + ] + def _initial_load(self) -> None: """Get initial data and row count.""" # obtain the row counts diff --git a/bigframes/display/html.py b/bigframes/display/html.py index 6102d1512c..ef34985c8e 100644 --- a/bigframes/display/html.py +++ b/bigframes/display/html.py @@ -363,7 +363,13 @@ def repr_mimebundle( if opts.repr_mode == "anywidget": try: - return get_anywidget_bundle(obj, include=include, exclude=exclude) + with bigframes.option_context("display.progress_bar", None): + with warnings.catch_warnings(): + warnings.simplefilter( + "ignore", category=bigframes.exceptions.JSONDtypeWarning + ) + warnings.simplefilter("ignore", category=FutureWarning) + return get_anywidget_bundle(obj, include=include, exclude=exclude) except ImportError: # Anywidget is an optional dependency, so warn rather than fail. # TODO(shuowei): When Anywidget becomes the default for all repr modes, diff --git a/bigframes/pandas/io/api.py b/bigframes/pandas/io/api.py index b8ad6cbd0c..fade0558ac 100644 --- a/bigframes/pandas/io/api.py +++ b/bigframes/pandas/io/api.py @@ -354,15 +354,14 @@ def _read_gbq_colab( ) _set_default_session_location_if_possible_deferred_query(create_query) if not config.options.bigquery._session_started: - with warnings.catch_warnings(): - # Don't warning about Polars in SQL cell. - # Related to b/437090788. - try: - bigframes._importing.import_polars() - warnings.simplefilter("ignore", bigframes.exceptions.PreviewWarning) - config.options.bigquery.enable_polars_execution = True - except ImportError: - pass # don't fail if polars isn't available + # Don't warning about Polars in SQL cell. + # Related to b/437090788. + try: + bigframes._importing.import_polars() + warnings.simplefilter("ignore", bigframes.exceptions.PreviewWarning) + config.options.bigquery.enable_polars_execution = True + except ImportError: + pass # don't fail if polars isn't available return global_session.with_default_session( bigframes.session.Session._read_gbq_colab,