Skip to content

Forward-merge release/26.08 into main - #23372

Merged
jameslamb merged 6 commits into
mainfrom
release/26.08
Jul 21, 2026
Merged

Forward-merge release/26.08 into main#23372
jameslamb merged 6 commits into
mainfrom
release/26.08

Conversation

@rapids-bot

@rapids-bot rapids-bot Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Forward-merge triggered by push to release/26.08 that creates a PR to keep main up-to-date. If this PR is unable to be immediately merged due to conflicts, it will remain open for the team to manually merge. See forward-merger docs for more info.

* Split the JAR build into three composable stages (static libcudf build, per-classifier JAR packaging, and Maven-repo gather) so each stage is independently runnable in CI and locally.

* Link against a static libcudf built from source per CUDA version rather than a conda shared libcudf.

* Emit the Maven classifier based on the host architecture the build runs on, introducing a new `-arm64` suffix to distinguish aarch64 JARs from their x86_64 counterparts.

* Add `test_java_build_local.sh` as a one-command local reproducer of the full CI matrix for the host arch, with per-step timings and GPU compute-capability auto-detection.

Contributes to #22204

Authors:
  - https://github.com/paul-aiyedun

Approvers:
  - Mike Sarahan (https://github.com/msarahan)
  - Tim Liu (https://github.com/NvTimLiu)

URL: #23261
@rapids-bot
rapids-bot Bot requested review from a team as code owners July 21, 2026 15:46
@rapids-bot
rapids-bot Bot requested a review from jameslamb July 21, 2026 15:46
@rapids-bot

rapids-bot Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor Author

FAILURE - Unable to forward-merge due to an error, manual merge is necessary. Do not use the Resolve conflicts option in this PR, follow these instructions https://docs.rapids.ai/maintainers/forward-merger/

IMPORTANT: When merging this PR, do not use the auto-merger (i.e. the /merge comment). Instead, an admin must manually merge by changing the merging strategy to Create a Merge Commit. Otherwise, history will be lost and the branches become incompatible.

@github-actions github-actions Bot added the Java Affects Java cuDF API. label Jul 21, 2026
…imeout (#23332)

## Description
Timing out an individual test is actually not useful since it is not
safe
to cancel a test at an arbitrary point in execution: that might leave a
collective dangling.

Moreover, many of the Polars tests run quite close to the, arbitrarily
chosen, timeout limit on CI runners if they are heavily loaded.

Since the signal we actually want is the state of a hanging process,
instead just add a test-suite level timeout with a utility to print the
state of the hanging processes.

closes #22948

## Checklist
- [x] I am familiar with the [Contributing
Guidelines](https://github.com/rapidsai/cudf/blob/HEAD/CONTRIBUTING.md).
- [x] New or existing tests cover these changes.
- [x] The documentation is up to date with these changes.
@vyasr
vyasr requested a review from a team as a code owner July 21, 2026 16:35
@vyasr
vyasr requested a review from madsbk July 21, 2026 16:35
@github-actions github-actions Bot added Python Affects Python cuDF API. cudf-polars Issues specific to cudf-polars labels Jul 21, 2026
@GPUtester GPUtester moved this to In Progress in cuDF Python Jul 21, 2026
…sts (#23364)

Split out of #23255 (1/6).

`NumericalColumn.as_numerical_column` short-circuits casts between equivalent dtypes (same pylibcudf type, e.g. `float64` → `Float64`), but implemented the shortcut by assigning the target dtype onto `self._dtype` in place. The column object is shared with the caller's Series/DataFrame, so the *source* object silently changed dtype as a side effect of the cast. This returns a fresh column over the same pylibcudf data instead (`nans_to_nulls` first for float → masked casts), and adds a classic regression test.

Fixes 5 pandas-tests (`test_stack_nullable_dtype[*]`, `test_loc_set_nan_in_categorical_series[Float64]`, `test_assert_series_equal_extension_dtype_mismatch`, `test_assert_frame_equal_extension_dtype_mismatch`); their xfail entries are removed. Attribution verified by running the node ids against an isolated build containing only this fix (they pass) and a clean build (they fail).

Independent of the other #23255 split PRs; can merge in any order.

Authors:
  - GALI PREM SAGAR (https://github.com/galipremsagar)

Approvers:
  - Vyas Ramasubramani (https://github.com/vyasr)

URL: #23364
@rapids-bot
rapids-bot Bot requested a review from a team as a code owner July 21, 2026 16:43
@rapids-bot
rapids-bot Bot requested review from TomAugspurger and mroeschke July 21, 2026 16:43
@github-actions github-actions Bot added the cudf.pandas Issues specific to cudf.pandas label Jul 21, 2026
galipremsagar and others added 2 commits July 21, 2026 18:02
Split out of #22927 per review.

## Problem

A class-level attribute write on a cudf.pandas proxy type — e.g. `monkeypatch.setattr(pd.ExcelFile, "parse", fn)` — was only applied to the proxy class. Code that runs under `disable_module_accelerator()` (such as the pandas fallback path of `pd.read_excel`) resolves attributes from the *real* class, so a patch applied only to the proxy was invisible to it.

## Fix

Add `_FastSlowProxyMeta.__setattr__`/`__delattr__` to mirror runtime class-level patches onto the underlying "slow" (real) type:

- `__setattr__` mirrors the assignment after translating the assigned value into "slow" space. A plain value is forwarded as-is. Re-assigning the proxy's *pristine* attribute for a name (which is exactly what `monkeypatch.setattr` / `mock.patch.object` save and re-assign on undo) translates to the slow type's pristine attribute for that name — restored if the slow type had one of its own, or removed if it didn't (leaving any inherited implementation visible). Proxy machinery (e.g. a saved `pd.ExcelFile.parse`, a `_MethodProxy`) unwraps to the slow object it delegates to.
- `__delattr__` mirrors a deletion as a deletion. Nothing is restored on delete.

The pristine state is a per-type map `name -> (pristine proxy attribute, pristine slow class-dict entry)` snapshotted once, when `make_*_proxy_type` finishes building the type (the same point mirroring is enabled via `_fsproxy_mirror_slow_overrides`). It is a fixed translation table, not runtime patch tracking: there is no stash of "what to put back", and undo works for any code that follows the standard save/patch/re-assign pattern (pytest `monkeypatch`, `unittest.mock.patch.object`, manual saves) because the saved value itself identifies the pristine state. The translation is what makes mirroring safe at all — the values readable off a proxy type live in proxy space, and forwarding e.g. the saved `columns` property or `eval`/`query` functions verbatim onto `pandas.DataFrame` would install cudf machinery on the real class (for `columns` this infinitely recurses on the fallback path).

cudf.pandas's own custom methods (`DataFrame.eval`/`query`) are installed via the new `_setattr_fsproxy_no_mirror` helper, which registers them as part of the proxy's pristine state without forwarding them to pandas.

## Tests

Adds unit tests in `cudf_pandas_tests/test_fast_slow_proxy.py` covering: set/delete mirroring, monkeypatch round-trips (new attr, existing attr, nested, `delattr`), `mock.patch.object` (which saves the raw descriptor without resolving it), properties, plain data attributes, `staticmethod`/`classmethod` descriptor preservation, methods the slow type only inherits, and the no-mirror helper; plus an end-to-end test in `test_cudf_pandas.py` that patches/unpatches `DataFrame.columns`/`eval` and `Series.str` and checks real pandas is restored and functional.

Removes 14 now-passing xfails from the pandas-tests plugin (13× `read_excel` engine-selection tests that monkeypatch the engine, plus a monkeypatch-registered custom accessor). The attribution of these 14 to the proxy fix (vs the Excel-reader fixes remaining in #22927) was verified locally by running each removed xfail with the proxy fix in isolation.

Authors:
  - GALI PREM SAGAR (https://github.com/galipremsagar)
  - Vyas Ramasubramani (https://github.com/vyasr)

Approvers:
  - Vyas Ramasubramani (https://github.com/vyasr)

URL: #23001
This is an empty commit to trigger a build. This is needed after the RMM
ABI break in rapidsai/rmm#2462.
Fixes build error introduced by an RMM change. The forward declaration in types.hpp is not actually needed and removing it fixes the build errors.

Authors:
  - David Wendt (https://github.com/davidwendt)
  - James Lamb (https://github.com/jameslamb)

Approvers:
  - Robert Maynard (https://github.com/robertmaynard)
  - Bradley Dice (https://github.com/bdice)
  - Vyas Ramasubramani (https://github.com/vyasr)

URL: #23373
@rapids-bot
rapids-bot Bot requested a review from a team as a code owner July 21, 2026 21:31
@rapids-bot
rapids-bot Bot requested review from abigalekim and mythrocks July 21, 2026 21:31
@github-actions github-actions Bot added the libcudf Affects libcudf (C++/CUDA) code. label Jul 21, 2026
@jameslamb
jameslamb merged commit 9ea91f8 into main Jul 21, 2026
50 of 56 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cudf.pandas Issues specific to cudf.pandas cudf-polars Issues specific to cudf-polars Java Affects Java cuDF API. libcudf Affects libcudf (C++/CUDA) code. Python Affects Python cuDF API.

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

9 participants