Skip to content

chore(migration): Migrate code from googleapis/python-bigquery-dataframes into packages/bigframes#16505

Merged
parthea merged 2231 commits intomainfrom
migration.python-bigquery-dataframes.migration.2026-04-01_11-36-55.migrate
Apr 1, 2026
Merged

chore(migration): Migrate code from googleapis/python-bigquery-dataframes into packages/bigframes#16505
parthea merged 2231 commits intomainfrom
migration.python-bigquery-dataframes.migration.2026-04-01_11-36-55.migrate

Conversation

@chalmerlowe
Copy link
Copy Markdown
Contributor

See #15999.

This PR should be merged with a merge-commit, not a squash-commit, in order to preserve the git history.

chelsea-lin and others added 30 commits November 20, 2025 11:17
Fixes internal issue 445774480🦕

---------

Co-authored-by: Shenyang Cai <sycai@users.noreply.github.com>
Thank you for opening a Pull Request! Before submitting your PR, there
are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a
[bug/issue](https://github.com/googleapis/python-bigquery-dataframes/issues/new/choose)
before writing your code! That way we can discuss the change, evaluate
designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes b/447388852 🦕
Thank you for opening a Pull Request! Before submitting your PR, there
are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a
[bug/issue](https://github.com/googleapis/python-bigquery-dataframes/issues/new/choose)
before writing your code! That way we can discuss the change, evaluate
designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 🦕

---------

Co-authored-by: Shenyang Cai <sycai@users.noreply.github.com>
#2287)

This pull request addresses a pagination display bug in the `anywidget`
table where a small DataFrame (e.g., 5 rows) would incorrectly show
"Page 1 of 5" instead of "Page 1 of 1".

* **Fixed `table_widget.js` pagination logic:** Corrected the JavaScript
to accurately calculate total pages, ensuring "Page 1 of 1" is displayed
for datasets smaller than the page size.
* **Added comprehensive system test:** Enhanced `test_anywidget.py` by
improving the `test_widget_with_few_rows_should_have_only_one_page`
test. This test now explicitly asserts the correct `row_count` and
verifies that page navigation is correctly clamped to the first page,
thus confirming the backend conditions for the "Page 1 of 1" frontend
display.


Fixes #<issue_number_goes_here> 🦕
…2292)

This change aims to fix the tests failing in #2248 because of a 1-based
indexing error.

Fixes internal issue 417774347 🦕
Thank you for opening a Pull Request! Before submitting your PR, there
are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a
[bug/issue](https://github.com/googleapis/python-bigquery-dataframes/issues/new/choose)
before writing your code! That way we can discuss the change, evaluate
designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes b/447388852 🦕
…2293)

Also:

- include link to `bigframes.bigquery.ai` in README
- add partial ordering mode recommendation to starter sample
- remove 2.0 warning

Thank you for opening a Pull Request! Before submitting your PR, there
are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a
[bug/issue](https://github.com/googleapis/python-bigquery-dataframes/issues/new/choose)
before writing your code! That way we can discuss the change, evaluate
designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Towards b/454350869 🦕
Thank you for opening a Pull Request! Before submitting your PR, there
are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a
[bug/issue](https://github.com/googleapis/python-bigquery-dataframes/issues/new/choose)
before writing your code! That way we can discuss the change, evaluate
designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 🦕
…2255)

This PR introduces single-column sorting functionality to the
interactive table widget.

1) **Three-State Sorting UI**

1.1) The sort indicator dot (●) is now hidden by default and only
appears when the user hovers the mouse over a column header
1.2) Implemented a sorting cycle: unsorted (●) → ascending (▲) →
descending (▼) → unsorted (●).
1.3) Visual indicators (●, ▲, ▼) are displayed in column headers to
reflect the current sort state.
1.4) Sorting controls are now only enabled for columns with orderable
data types.

2) **Tests**
2.1) Updated `paginated_pandas_df` fixture for better sorting test
coverage
2.2) Added new system tests to verify ascending, descending, and
multi-column sorting.

**3. Frontend Unit Tests**
JavaScript-level unit tests have been added to validate the widget's
frontend logic, specifically the new sorting functionality and UI
interactions.

**How to Run Frontend Unit Tests**:
To execute these tests from the project root directory:
```bash
cd tests/js
npm install  # Only needed if dependencies haven't been installed or have changed
npm test
```

Docs has been updated to document the new features. The main description
now mentions column sorting and adjustable widths, and a new section has
been added to explain how to use the column resizing feature. The
sorting section was also updated to mention that the indicators are only
visible on hover.

Fixes #<459835971> 🦕

---------

Co-authored-by: Tim Sweña (Swast) <swast@google.com>
Thank you for opening a Pull Request! Before submitting your PR, there
are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a
[bug/issue](https://github.com/googleapis/python-bigquery-dataframes/issues/new/choose)
before writing your code! That way we can discuss the change, evaluate
designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes b/447388852 🦕
…sqlglot compiler (#2297)

This change aims to fix the `to_datetime` related tests failing in
#2248.

Fixes internal issue 417774347 🦕
This change aims to fix the `test_timestamp_series_diff_agg` test
failing in #2248.

Fixes internal issue 417774347 🦕
This change aims to fix some string-related tests failing in #2248.

Fixes internal issue 417774347🦕
The default maximum instances for cloud functions is 100, not 0. Updated
the `expected_max_instances` in the `parametrize` decorator to 100 for
the 'no-set' and 'set-None' test cases to accurately reflect the runtime
behavior.

Thank you for opening a Pull Request! Before submitting your PR, there
are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a
[bug/issue](https://github.com/googleapis/python-bigquery-dataframes/issues/new/choose)
before writing your code! That way we can discuss the change, evaluate
designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes b/465212379 🦕
Thank you for opening a Pull Request! Before submitting your PR, there
are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a
[bug/issue](https://github.com/googleapis/python-bigquery-dataframes/issues/new/choose)
before writing your code! That way we can discuss the change, evaluate
designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 🦕
See instructions at
https://pydata-sphinx-theme.readthedocs.io/en/latest/user_guide/analytics.html#google-analytics

Thank you for opening a Pull Request! Before submitting your PR, there
are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a
[bug/issue](https://github.com/googleapis/python-bigquery-dataframes/issues/new/choose)
before writing your code! That way we can discuss the change, evaluate
designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 🦕

Co-authored-by: Shuowei Li <shuowei@google.com>
…_() protocol for anywidget mode (#2271)

This PR refactors the DataFrame display system to properly implement
IPython's _repr_mimebundle_() protocol for anywidget mode, moving widget
handling logic out of _repr_html_() and into the appropriate display
method.

See design doc here: screen/8XWbJDa2d9mb6r5

Fixes #<458796812> 🦕
PR created by the Librarian CLI to initialize a release. Merging this PR
will auto trigger a release.

Librarian Version: v0.7.0
Language Image:
us-central1-docker.pkg.dev/cloud-sdk-librarian-prod/images-prod/python-librarian-generator@sha256:c8612d3fffb3f6a32353b2d1abd16b61e87811866f7ec9d65b59b02eb452a620
<details><summary>bigframes: 2.30.0</summary>

##
[2.30.0](googleapis/python-bigquery-dataframes@v2.29.0...v2.30.0)
(2025-12-03)

### Features

* Support mixed scalar-analytic expressions (#2239)
([20ab469d](googleapis/python-bigquery-dataframes@20ab469d))

* Allow drop_duplicates over unordered dataframe (#2303)
([52665fa5](googleapis/python-bigquery-dataframes@52665fa5))

* Preserve source names better for more readable sql (#2243)
([64995d65](googleapis/python-bigquery-dataframes@64995d65))

* use end user credentials for `bigframes.bigquery.ai` functions when
`connection_id` is not present (#2272)
([7c062a68](googleapis/python-bigquery-dataframes@7c062a68))

* pivot_table supports fill_value arg (#2257)
([8f490e68](googleapis/python-bigquery-dataframes@8f490e68))

* Support builtins funcs for df.agg (#2256)
([956a5b00](googleapis/python-bigquery-dataframes@956a5b00))

* add bigquery.json_keys (#2286)
([b487cf1f](googleapis/python-bigquery-dataframes@b487cf1f))

* Add agg/aggregate methods to windows (#2288)
([c4cb39dc](googleapis/python-bigquery-dataframes@c4cb39dc))

* Add bigframes.pandas.crosstab (#2231)
([c62e5535](googleapis/python-bigquery-dataframes@c62e5535))

* Implement single-column sorting for interactive table widget (#2255)
([d1ecc61b](googleapis/python-bigquery-dataframes@d1ecc61b))

### Bug Fixes

* Pass credentials properly for read api instantiation (#2280)
([3e3fe259](googleapis/python-bigquery-dataframes@3e3fe259))

* Update max_instances default to reflect actual value (#2302)
([4489687e](googleapis/python-bigquery-dataframes@4489687e))

* Improve Anywidget pagination and display for unknown row counts
(#2258)
([508deae5](googleapis/python-bigquery-dataframes@508deae5))

* Fix issue with stream upload batch size upload limit (#2290)
([6cdf64b0](googleapis/python-bigquery-dataframes@6cdf64b0))

* calling info() on empty dataframes no longer leads to errors (#2267)
([95a83f77](googleapis/python-bigquery-dataframes@95a83f77))

* do not warn with DefaultIndexWarning in partial ordering mode (#2230)
([cc2dbae6](googleapis/python-bigquery-dataframes@cc2dbae6))

### Documentation

* update docs and tests for Gemini 2.5 models (#2279)
([08c0c0c8](googleapis/python-bigquery-dataframes@08c0c0c8))

* Add Google Analytics configuration to conf.py (#2301)
([0b266da1](googleapis/python-bigquery-dataframes@0b266da1))

* fix LogisticRegression docs rendering (#2295)
([32e53134](googleapis/python-bigquery-dataframes@32e53134))

* update API reference to new `dataframes.bigquery.dev` location (#2293)
([da064397](googleapis/python-bigquery-dataframes@da064397))

* use autosummary to split documentation pages (#2251)
([f7fd2d20](googleapis/python-bigquery-dataframes@f7fd2d20))

</details>
This PR adds support for `CREATE MODEL` statement in BigQuery ML via
`bigframes.bigquery.ml.create_model`.
It includes DDL generation logic handling various clauses like
TRANSFORM, OPTIONS, remote models, and different data input formats.
It also refactors `bigframes.core.sql` into a package to support the new
submodule.


---
*PR created automatically by Jules for task
[3846335972146851433](https://jules.google.com/task/3846335972146851433)
started by @tswast*

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Tim Sweña <swast@google.com>
This PR addresses a flaky ZMQError: Address already in use that
occasionally occurred during parallel notebook test execution.

  **Problem:**
The bigframes.display module eagerly imported anywidget and traitlets at
module load time (`bigframes/display/__init__.py`). This meant that when
multiple Jupyter kernels were spun up simultaneously by nox for parallel
testing, they would all try to initialize traitlets.HasTraits objects
with sync=True properties. This led to race conditions and ZMQ port
conflicts, causing notebook tests (including those that did not directly
use anywidget like `streaming_dataframe.ipynb`) to fail. Log is
[here](https://fusion2.corp.google.com/invocations/72088900-0196-4441-944b-ad68e491a8f8/targets/bigframes%2Fpresubmit%2Fnotebook/log).

  **Solution:**
The TableWidget class import in `bigframes/display/__init__.py` has been
refactored to use Python's `__getattr__` for lazy loading. This ensures
that anywidget and traitlets are only imported and their associated
kernel communication channels are initialized when display.TableWidget
is actually accessed by the code. This prevents premature initialization
and eliminates the port collision race condition during parallel test
startup.

Fixes #<465768150> 🦕
Thank you for opening a Pull Request! Before submitting your PR, there
are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a
[bug/issue](https://github.com/googleapis/python-bigquery-dataframes/issues/new/choose)
before writing your code! That way we can discuss the change, evaluate
designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes b/447388852 🦕
@chalmerlowe chalmerlowe marked this pull request as ready for review April 1, 2026 17:51
@chalmerlowe chalmerlowe requested review from a team as code owners April 1, 2026 17:51
@snippet-bot
Copy link
Copy Markdown

snippet-bot bot commented Apr 1, 2026

Here is the summary of changes.

You are about to add 1 region tag.

This comment is generated by snippet-bot.
If you find problems with this result, please file an issue at:
https://github.com/googleapis/repo-automation-bots/issues.
To update this comment, add snippet-bot:force-run label or use the checkbox below:

  • Refresh this comment

@parthea parthea added do not merge Indicates a pull request not ready for merge, due to either quality or timing. and removed do not merge Indicates a pull request not ready for merge, due to either quality or timing. labels Apr 1, 2026
@parthea parthea merged commit 6191647 into main Apr 1, 2026
90 checks passed
@parthea parthea deleted the migration.python-bigquery-dataframes.migration.2026-04-01_11-36-55.migrate branch April 1, 2026 19:12
Copy link
Copy Markdown

@avijitsahaaornoy avijitsahaaornoy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fyi

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.