## pola-rs/polars — rs-0.50.0…rs-0.51.0

_295+ commits._

### Features
- **feat(python): Add unstable `pl.Config.set_default_credential_provider` (#24434)** (152e176)
- **feat: Roundtrip `BinaryOffset` type through Parquet (#24344)** (479c88d)
- **feat: Add opt-in unstable functionality to load interval types as `Struct` (#24320)** (0ed3499)
- **feat(python): Support reading parquet metadata from cloud storage (#24443)** (a66e748)
- **feat: Add user guide section on AWS role assumption (#24421)** (8589631)
- **feat: Support `unique` / `n_unique` / `arg_unique` for `array` columns (#24406)** (74c485e)
- **feat: Support S3 virtual-hosted–style URI (#24405)** (3f1e8fa)
- **feat: Remove explicit file create for local async writes (#24358)** (4968729)
- **feat(python): Add PyCapsule `__arrow_c_schema__` interface to `pl.Schema` (#24365)** (a572361)
- **feat: Support Partitioning sinks in cloud (#24399)** (5384ccd)
- **feat: User-friendly error message on empty path expansion (#24337)** (8e08958)
- **feat: Add unstable `pre_execution_query` parameter to `read_database_uri` (#23634)** (80e5179)
- **feat: Add Polars security policy (#24314)** (207975c)
- **feat(python): Add CSE for custom io sources using pointer for hashing (#24297)** (983dbab)
- **feat: Allow pl.Expr.log to take in an expression (#24226)** (0e19c7d)
- **feat(python): Add caching to user credential providers (#23789)** (e9d4d65)
- **feat(python): Expose `mkdir` parameter on `write_parquet` (#24239)** (27e22d1)
- **feat: Implement diff() in streaming engine (#24189)** (132c2ee)
- **feat: Enable Expr.diff(n) for negative n (#24200)** (aaba384)
- **feat: Allow upcasting null-typed columns to nested column types in scans (#24185)** (38ffef0)
- **feat: Log pyarrow predicate conversion result in sensitive verbose logs (#24186)** (f84176e)
- **feat(python): Drop PyArrow requirement for `write_database` with the ADBC engine (#24136)** (79b4dd8)

### Fixes
- **fix: Ignore Iceberg list element ID if missing (#24479)** (2155cbf)
- **fix: Fix panic on streaming full join with coalesce (#23409)** (e2d9e26)
- **perf: Native streaming `.mode()` expression (#24459)** (ea109ed)
- **fix: Fix `AggState` on `all_literal` in `BinaryExpr` (#24461)** (cdd247a)
- **fix: Show IR sort options in `explain` (#24465)** (1e2507c)
- **fix: Benchmark CI import (#24463)** (d132d2c)
- **fix: Fix schema on `ApplyExpr` with single row `literal` in agg context (#24422)** (6b5df3d)
- **fix: Fix planner schema for dividing `pl.Float32` by int (#24432)** (f39d6f1)
- **fix: Fix panic scanning from AWS legacy global endpoint URL (#24450)** (1069806)
- **fix(rust): Emit proper tuple for Log in expression nodes (#24426)** (1c2ac1a)
- **fix(python): Fix `iterable_to_pydf(..., infer_schema_length=None)` to scan all data (#23405)** (6803c2d)
- **fix: Do not propagate struct of nulls with null (#24420)** (038168a)
- **fix: Be stricter with invalid NDJSON input when `ignore_errors=False` (#24404)** (64f0c12)
- **fix: Implement `approx_n_unique` for temporal dtypes and Null (#24417)** (588d391)
- **perf: Use specialized decoding for all predicates for Parquet dictionary encoding (#24403)** (1333f3f)
- **perf: Allocate only for read items when reading Parquet with predicate (#24401)** (f994aa0)
- **fix: Correct `sink_ipc` overload for compression (#24398)** (5e77f76)
- **fix: Enable all integer dtypes for `by` parameter in `join_asof` (#24384)** (4507677)
- **perf: Don't aggregate groups for strict cast if original len (#24381)** (b8bfb07)
- **fix: Fix Group-By + filter aggregation performs subsequent operations on all data instead of only filtered data (#23682) (#24373)** (efe029e)
- **fix(python): Wrap deprecated top-level imports in TYPE_CHECKING (#24340)** (2557bb2)
- **fix: Fix incorrect output ordering for row-separable exprs (#24354)** (c50a014)
- **fix: Fix `Series.__arrow_c_stream__` for Decimal and other logical types (#24120)** (cb4f5b1)
- **fix: Match output type to engine for `Struct` arithmetic (#23805)** (ce0106f)
- **fix(rust): Make mmap use MAP_PRIVATE rather than MAP_SHARED (#24343)** (96f559d)
- **fix: Fix cloud iceberg scan DATASET_PROVIDER_VTABLE error (#24338)** (02128f8)
- **fix(python): Don't throw away type information for NumPy numeric values when using lit() (#24229)** (f73720c)
- **fix: Incorrect logic in negative streaming slice (#24326)** (dd80ff9)
- **perf: Allocate only for read items when reading Parquet with predicate (#24324)** (b4f7ff5)
- **fix(python): Ensure `read_database_uri` with ADBC works as expected with DuckDB URIs (#24097)** (1be5a37)
- **fix: Do not error on non-list `Sequence` for `columns` parameter in `read_excel` (#23967)** (9a8a93d)
- **fix: Invalid conversion from non-bit numpy bools (#24312)** (665722a)
- **perf: Native streaming `int_range` with `len` or `count` (#24280)** (1a2a088)
- **perf: Lower `arg_unique` natively to the streaming engine (#24279)** (3be90aa)
- **fix: Make `dt.epoch('s')` serializable (#24302)** (efdb76f)
- **fix: Make `Expr.rechunk` serializable (#24303)** (0c4650f)
- **perf: Move unordering optimization to end (#24286)** (e688e7b)
- **fix: Schema mismatch for 'log' operation (#24300)** (0d523fb)
- **fix: Incorrect first/last aggregate in streaming engine (#24289)** (82c79d3)
- **perf: Do ordering simplification step after common sub-plan elimination (#24269)** (1ef4e2b)
- **fix: Fix group offsets in sliced groups (#24274)** (d0aad16)
- **fix: Correctly update cache nodes after ordering pass** (7b6a699)
- **fix: Panic in inexact date(time) conversion (#24268)** (b68bc3d)
- **fix(rust): The `index_of` feature should not depends on the `object` feature (#24256)** (f5b155d)
- **fix: Keep DSL cache after serialization and deserialization (#24265)** (91fed31)
- **fix: Sanitize and warn about eval usage (#24262)** (39e0690)
- **fix(python): Correct incorrect default in `from_pandas` overload for `include_index` (#24258)** (5249e9f)
- **fix: Unique with keep="none" in new optimization pass (#24261)** (65e0795)
- **fix: Correct size limits for Decimal cast (#24252)** (cbf621a)
- **fix: Unordered unions in check order observing pass (#24253)** (4608fcf)
- **fix: Fix dtype for `slice` on `Literal` in agg context (#24137)** (21f7269)
- **fix: Fix incorrect `filter(lit(True))` when scanning hive (#24237)** (b41be5c)
- **fix: In-memory group_by on 128-bit integers (#24242)** (045318b)
- **fix(rust): Fix panic in `gather` inside groupby with invalid indices (#24182)** (cf1f9fe)
- **fix: Release the GIL in map_groups (#24225)** (f0b9c07)
- **perf: Always simplify order requirements in IR (#24192)** (f6943b8)
- **perf: Basic de-duplication of filter expressions (#24220)** (6d1f44b)
- **fix: Remove extra explode in `LazyGroupBy.{head,tail}` (#24221)** (194b7c2)
- **perf: Cache the IR in `pipe_with_schema` (#24213)** (67042c0)
- **fix: Fix panic in polars cloud CSV scan (#24197)** (70c7478)
- **fix: Fix panic when loading categorical columns from IO plugin (#24205)** (f45b1d4)
- **fix(python): Fix credential provider did not auto-init on partition sinks (#24188)** (8d1e47f)
- **fix: Fix engine type for `concat_list` on AggScalar `implode` (#24160)** (0dfc90b)
- **fix: Rolling_mean handle centered weights with len(values) < window_size (#24158)** (92c77cc)
- **fix: Reading `is_in` predicate for Parquet plain strings (#24184)** (f08d3ab)
- **fix(python): Support native DuckDB connection in read_database (#24177)** (1288194)
- **perf: Lower `arg_where` natively to streaming engine (#24088)** (5989787)
- **fix: Make PyCategories pickleable (#24170)** (89f9e2c)
- **fix: Remove unused unsound function `to_mutable_slice` (#24173)** (e28d12e)

### Backend
- **Python Polars 1.33.1 (#24408)** (869fe5d)
- **Revert "perf: Allocate only for read items when reading Parquet with predicate" (#24361)** (ad4a4b2)
- **Python Polars 1.33.0 (#24310)** (1e8cab3)
- **Revert "perf: Do ordering simplification step after common sub-plan elimination" (#24283)** (f5b0e87)
- **rename input to parent** (3a35bd4)
- **Python Polars 1.33 pre-release (#24247)** (0ac25a6)

### Tests
- **test: Refactor parametric tests for `as_struct` on aggstates (#24493)** (6505e1e)
- **test(python): Fix iceberg test failure in CI (#24456)** (37f7737)
- **test(python): Fix mypy lint (#24341)** (44567ba)
- **test(python): Add hint to update `PYPOLARS_VERSION` on version assert test (#24313)** (c525053)

### Docs
- **docs(python): Rename `avg_birthday` -> `avg_age` in examples aggregation (#23726)** (b7271f3)
- **docs: Update Polars Cloud user guide (#24366)** (b3c5558)
- **docs(python): Fix typo in `set_expr_depth_warning` docstring (#24427)** (57cbc95)
- **docs: Update readme. (#24413)** (5ff1287)
- **docs(python): Document newly added `is_pure` parameter for `register_io_source` (#24311)** (20d7aeb)
- **docs(python): Create a module docstring for the public `polars` module (#24332)** (ff3a4df)
- **docs: Update to Polars Cloud user guide (#24187)** (338610c)
- **docs: Update distributed page (#24323)** (f294906)
- **docs(python): Add a note and example about exporting unformatted `Excel` sheet data (#24145)** (944961e)
- **docs(python): Add detail about server-side cursor behaviour for SQLAlchemy in the "iter_batches" parameter of `read_database` (#24094)** (fb48d01)
- **docs: Fix few typos (#24305)** (da0d242)
- **docs: Add missing reference to `LazyFrame.pipe_with_schema()` on the website (#24285)** (3f94cc2)
- **docs(python): Automatically register `doctest.ELLIPSIS` so we don't have to add the inline directive each time (#24146)** (e664ae2)
- **docs(python): Update categorical comparison documentation in user guide (#24249)** (87d1ecf)
- **docs(python): Add missing references for `Seriers.rolling_*_by` methods (#24254)** (d99b704)
- **docs: Fix formatting of Series.value_counts examples (#24245)** (658c625)
- **docs(python): Add hint to use `DataFrame/Series` constructors in `from_arrow` docstring (#22942)** (cf98504)
- **docs(python): Update GPU un/supported features (#24195)** (f31e40d)

### Chore
- **chore: Update versions (#24508)** (400ca33)
- **chore(python): Add additional unit tests for `pl.concat` (#24487)** (1ad3d5d)
- **refactor: Use `PlanCallback` in `name.map_*` (#24484)** (c42929d)
- **refactor(rust): Replace unsafe with collect (#24494)** (b0d2b8c)
- **refactor(rust): Move dataset expansion to end and refactor not to use stack optimizer (#24457)** (dd15d3a)
- **chore: Pin `xlsvwriter` to `3.2.5` or before (#24485)** (82c568a)
- **refactor(rust): Add methods to `EnumUnitVec` and shorten name (#24415)** (e54330b)
- **refactor(python): Add dataclass to hold resolved iceberg scan data (#24418)** (4df65df)
- **refactor: Move CompressionUtils to polars-utils (#24430)** (73554fb)
- **chore: Update github template to dispatch to cloud client (#24416)** (d6cee6d)
- **chore: Bump c-api (#24412)** (1dc7792)
- **chore: Add a regression test for #7631 (#24363)** (0dc7e75)
- **chore: Update cloud test `InteractiveQuery` to `DirectQuery` (#24287)** (7948ffb)
- **chore: Mark some tests as slow (#24327)** (3c22780)
- **chore: Mark more tests as ready for cloud (#24315)** (209b1d5)
- **refactor(rust): Remove unnecessary stable_features for AVX512 (#24321)** (c95eed1)
- **chore: Remove PDS-H code (#24301)** (0ed7a14)
- **chore: Get ready for even more cloud tests (#24292)** (38ad5aa)
- **chore: Add tests for slices with caches (#24288)** (1b8e27f)
- **chore: Readd ordering tests (#24284)** (948e9a5)
- **build: Re-enable macos-x86-64 (#24266)** (58dd8e5)
- **refactor(rust): Expand BitRepr to u8/u16 and use in in_memory group_by (#24248)** (f46d608)
- **chore: Fix Makefile venv path (#24251)** (edc38b7)
- **build: Drop binary support for macos_x86-64 (#24257)** (73acd74)
- **chore: Remove unnecessary parentheses (#24244)** (1b63df6)
- **refactor(rust): Remove some transmutes (#24246)** (7f5e73b)
- **refactor(rust): Wrap Py* data structures in polars-python in locks (#24209)** (b133575)
- **refactor: Make non-nested shift{,_and_fill} ops generic (#24224)** (e562838)
- **chore: Remove unused `Wrap` (#24214)** (d4fdcc8)
- **refactor(rust): Propagate some python feature flags (#24201)** (b5e84bb)
- **ci: Automatically label a few more types of PR (#24147)** (d99fdce)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/pola-rs/polars?utm_source=github-action)._