## pola-rs/polars — rs-0.53.0…rs-0.54.4

_640+ commits._

### Features
- **feat(python): Expose fixed-size rolling window expressions in Python visitor (#27108)** (da19eb8)
- **feat(rust): Expose `IR::Scan` hive parts in the python node visitor (#27829)** (0d4f999)
- **feat(rust): Expose `IRFunctionExpr::DynamicPred` in the python visitor (#27616)** (33e94ee)
- **feat(rust): Add pinning and queuing logic to polars-ooc (#27791)** (67bbd28)
- **feat: Add tiered multi-file parquet metadata resolver (#27720)** (cfc2452)
- **feat: Cache and shuffle DNS for cloud object_store (#27659)** (c23a345)
- **feat: Allow deeper expressions (#27768)** (3159dad)
- **feat(rust): Add `is_inherently_nondeterministic` helper for `AExpr` (#27687)** (ff616e6)
- **feat: Use true division for the `/` operator in Polars SQL (#27391)** (18e3422)
- **feat: Add Rust backend for Expr.has_nulls (#27590)** (447664f)
- **feat(rust): Add block_in_place to Polars' async executor (#27612)** (0202d39)
- **feat: Stabilize float16 (#27607)** (ba7f092)

### Fixes
- **fix(rust): Fix skip_batches not handling negation of bool dtype with None values (#27452)** (d54df64)
- **fix: Use block_in_place_on for calls which can come from executor thread (#27855)** (ceb32c1)
- **fix: Mismatch in max_threads -> pipeline configuration (#27854)** (3de3853)
- **perf: Eliminate filters with contradictory predicates (#27775)** (e7cc9c7)
- **fix: Keep maintain_order on sliced unique (#27852)** (afac644)
- **fix: Fix SchemaError using lazy HConcat->Sink (#27770)** (f3b8bb3)
- **fix: Fix incorrect projection height when selecting only literals (#27825)** (4ed8f61)
- **fix(rust): Fix rolling aggregations with window_size=0 (#27812)** (79e4108)
- **fix: Select with expr slice and len gave incorrect len (#27824)** (8e0125d)
- **fix: Prevent import panic when environment variable set to unexpected value (#27831)** (ea5e82b)
- **fix: Update to new jemalloc (#27797)** (18e9bf5)
- **fix(rust): Swap PlHashMap for PlIndexMap to make Multiplexer insertion order stable (#27785)** (9881f80)
- **perf: Do not materialize `ScalarColumn` in Column `split_at` (#27782)** (7792536)
- **perf: Avoid materializing broadcast in `array.shift` (#27740)** (04afb07)
- **fix(rust): Compare length for inline slice as usize (#27779)** (a217276)
- **perf: Avoid materializing broadcast list in `list.sample(n)` and `list.sample(frac)` (#27679)** (0a6ede6)
- **fix: Raise length mismatch in multiple `sort_by` in `group_by` (#27772)** (04313c1)
- **perf: Adaptive size dispatch to hashset or radix sort + capacity-aware reset in `agg_n_unique` (#27719)** (878246b)
- **fix: Respect min_samples for rolling_by ops with nulls (#27706)** (10e97bf)
- **fix: Fix memory usage regression affecting TPCH Q22 (#27758)** (17a6216)
- **fix: Add `POLARS_ALLOW_NESTED_CSPE` env var and make nested CSPE opt-in (#27765)** (d87650d)
- **fix: Post-apply residual pyarrow predicates (#27764)** (a865828)
- **fix(rust): Fix loss of precision for smaller cum_sum in floating types (#27732)** (1903d6d)
- **fix: Filter at scan dropped in CSPE filter pushdown (#27763)** (2abcf3c)
- **fix: Fix portstate assertion error on is_in (#27757)** (7907888)
- **fix: Fix incorrect when/then after forward fill / reverse in groupby (#27745)** (3909bb5)
- **fix: Accept empty Thrift list encoded as bare 0x00 byte in parquet metadata (#27754)** (fc5316a)
- **fix: Stabilize object store `credentialprovider` cache key (#27712)** (ef5933c)
- **perf: Dispatch `{list,arr}.{unique,n_unique,reverse}` to group_by engine (#27278)** (ff62eb5)
- **fix: Panic in scan of empty IPC with slice (#27708)** (58939bc)
- **fix: Persist object_store rebuild state in cache (#27707)** (83e2b79)
- **fix: Sort flag on GroupsType only applies to first element (#27684)** (d598e30)
- **fix: Invalid unwrap_unchecked when length isn't exact (#27685)** (19503cc)
- **perf: Improve in-memory grouped non-null count (#27702)** (13be689)
- **perf: Factor shared conjuncts out of OR-of-ANDs predicates (#27627)** (54d8935)
- **perf: Skip downloading IPC batches exceeding slice bounds (#27683)** (a5e1a03)
- **fix(rust): Logic error in async executor block_in_place (#27698)** (eef899c)
- **fix: Don't unwrap channel send in streaming join_asof (#27688)** (1cc7a63)
- **fix: Fix `merge_sorted` panic when List in frame (#27568)** (1d0e4f6)
- **perf(rust): Faster `Series::is_sorted` for logical / non-primitive types (#27567)** (9bd5042)
- **fix: Put AsOf join buffered Morsels back the front of the deque if we cannot process them rn (#27658)** (fcb502f)
- **fix(io): handle i64 overflow during CSV schema inference (#27668)** (733bfa4)
- **fix(rust): Fix `FixedRingBuffer` allocation provenance (#27669)** (fecdbb1)
- **fix: Fix skip_batches logic for NaN (#27673)** (71dfa88)
- **perf: Avoid materializing broadcast list in `list.shift` (#27628)** (219c787)
- **fix(python): Raise `TypeError` when calling `next()` directly on `GroupBy` objects (#27562)** (a59fdb9)
- **fix: Data type comparison for extension types (#27632)** (61571ee)
- **fix(rust): Fix `filter_scan_ir` usize integer underflow (#27633)** (219ba8f)
- **fix: Share last-morsel split budget across files in streaming multi-scan (#27630)** (0497dec)
- **fix(python): Bytes scalars were not being broadcast in dataframe constructor (#27621)** (5174f72)
- **fix: Reset the sort-options in `Series::is_sorted()` after row-encoding columns (#27614)** (346a793)
- **fix: Rayon deadlock with re-entrant io sources (#27600)** (58eae59)
- **fix: Don't push negative-offset slices through `HConcat` (#27570)** (68b36d3)
- **fix: Logic error in streaming is_empty (#27602)** (713fef1)
- **fix: Fix incorrect CSE with large is_in literal (#27575)** (b199b3d)
- **fix: AnonymousFunction can qualify as SQL aggregator (#26986)** (d2a289d)
- **fix: Fix CSPE panic in cloud (#27594)** (9637737)

### Backend
- **Python Polars 1.41.2 (#27784)** (599a503)
- **Python Polars 1.41.1 (#27771)** (8b0b902)
- **Python Polars 1.41.0 (#27710)** (fe5955a)
- **Revert "chore: Harden against async blocking deadlocks" (#27709)** (d7befeb)
- **depr(python): Deprecate the StringCache (#27580)** (5b93330)

### Tests
- **test: Remove superfluous test (#27676)** (b84ac5a)

### Docs
- **docs: Bump to patched version (#27851)** (243def2)
- **docs: Replace Typeform sign-up URL with new enterprise link (#27838)** (bf0ce66)
- **docs: Correct wrong head call (#27848)** (758e359)
- **docs: Add Polars On-Prem 0.5.0 release (#27849)** (701c18a)
- **docs: Correct onprem license helm values (#27847)** (6141b11)
- **docs: Update connecting Polars Cloud to AWS documentation (#27823)** (3fc5369)
- **docs(python): Correct cost/connectivity sections (#27813)** (a6c0644)
- **docs(python): Add sections about egress (#27805)** (b9df64f)
- **docs(python): Tragic typo in On-Prem docs (#27804)** (deb124f)
- **docs(python): Update Polars On-Prem version stamp (#27799)** (46bb74e)
- **docs: Broken link to AI Policy corrected (#27793)** (7dd3923)
- **docs: Add release dates to the On-Prem releases page (#27787)** (0eb7518)
- **docs: Improve on-prem docs (#27788)** (81ce144)
- **docs: Add query profiler video to On-Prem user guide (#27786)** (295b191)
- **docs: Add EKS/AKS/GKE guides (#27774)** (a3155c5)
- **docs(python): Add Polars On-Prem 0.4.2 (#27780)** (8a239fe)
- **docs(python): Docs fixes (#27766)** (1165f87)
- **docs: Sync from Polars Cloud (#27751)** (098eac1)
- **docs(python): Add to `merge_sorted` docs that the input must be nulls first (#27743)** (feac0d4)
- **docs: Document Expr.list.__getitem__ (#27689)** (ebcb5a9)
- **docs: Add cloudpickle requirement (#27703)** (fd9e524)
- **docs: Clarify from_arrow schema ordering (#27493)** (98c5815)
- **docs(python): Fix a typo in `join_asof` docstring (#27682)** (ba304b8)
- **docs: Clarify schema column order (#27681)** (4f948c7)
- **docs(python): Document horizontal string concatenation (#27542)** (f520e61)
- **docs(rust): Update DataFrame construction docs for Column (#27541)** (12d3769)
- **docs: Document all valid `engine` options on LazyFrame collect/sink/explain methods (#27374)** (5ee1e62)
- **docs(python): Orchestration docs check (#27605)** (f91ab47)

### Chore
- **refactor(rust): Add statistics to spill contexts (#27859)** (133a526)
- **chore(rust): Include license file in polars-ooc crate (#27864)** (583ec85)
- **refactor(rust): Changes needed for Rust 0.54.x (#27853)** (fbbc242)
- **refactor(rust): Use `Vec` instead of `PlHashMap` for `ProjectionInfo.map` (#27856)** (22906ad)
- **chore: Reduce `codegen-units` (#27835)** (d127ffd)
- **chore(python): Refactor to avoid `unbound-name` Pyright/Pyrefly errors (#27827)** (778fdbc)
- **refactor(rust): Deduplicate thrift field-walk loops (#27790)** (d307ef1)
- **chore(python): Run Pyrefly on `_utils` and `functions` (#27789)** (2209281)
- **chore: Harden against async blocking deadlocks (take 2) (#27767)** (8a1894a)
- **ci(rust): Added `jlumbroso/free-disk-space` cleaning action where relevant (#27769)** (e8d118a)
- **chore(rust): Update runtime edition to 2024 (#27746)** (c8ca269)
- **chore(python): Attribute annotations for `CatalogCredentialProvider` (#27739)** (bc0af0d)
- **chore(python): Solve `type: ignore` in _AioDataFrameResult (#27311)** (031ac84)
- **chore(python): Remove dead code in `_write_utils.py` (#27721)** (210b34b)
- **chore(python): Remove unnecessary ``not isinstance(v, DataType)`` check (#27723)** (6d60df7)
- **chore: Remove redundant DSL::AGG::Unique (#27718)** (5fceb9c)
- **chore: Harden against async blocking deadlocks (#27653)** (0d00d44)
- **chore: Print Python traceback when POLARS_TIMEOUT_MS is exceeded (#27657)** (8adc2a8)
- **refactor(rust): Remove last global static mut (#27704)** (298d8da)
- **refactor(rust): Remove unused equal_element code (#27701)** (836d0d1)
- **refactor(rust): Remove unused suspect AsRef impl (#27699)** (5f4540c)
- **refactor(rust): Remove Box<dyn Iterator> IntoIterator for ChunkedArray (#27697)** (f8c5d69)
- **refactor(rust): Remove trailing semicolons in fmt macros (#27705)** (9f6a697)
- **refactor(rust): Add dynamic slice to unoptimized dispatch (#27693)** (1ff3753)
- **chore: Format missed in previous PR (#27700)** (ce3b246)
- **chore: Bump pytest and remove codspeed (#27686)** (676e029)
- **refactor(rust): Store record batch row counts custom polars IPC metadata field (#27549)** (fa6caa7)
- **chore: Remove client-side `allow_local_scans` option for `prepare_cloud_plan` (#27663)** (14a628a)
- **build: Bump openssl from 0.10.79 to 0.10.80 (#27674)** (83eb035)
- **chore: Cleanup streaming flags (#27671)** (4d8e13a)
- **refactor: Expose unordered concatenation in python visitor (#27666)** (7e8c1d2)
- **chore: Bump `deltalake` and fix CI (#27660)** (9d8a77e)
- **refactor: Add `impl IntoAExprBuilder` for `ExprIR` (#27656)** (4082dc3)
- **chore(python): Split `_expand_selector_dicts` into multiple functions so return type is simple and accurate (#27618)** (a21ee56)
- **chore: Update object_store patch repo (#27650)** (20dd23a)
- **chore(python): Match NumPy signature in `DataFrame.__array__` and `Series.__array__` (#27634)** (1e3a7b4)
- **chore(rust): Bump up thiserror (#27648)** (6c5d0df)
- **refactor(rust): Move async executor and primitives to polars-async (#27629)** (3d5a70b)
- **ci: Add ImageVersion to rust-cache key (#27626)** (281361a)
- **build: Also split debug info in debug-release (#27609)** (d61618f)
- **build: Use split-debuginfo on linux (#27608)** (5c87c1d)
- **refactor(rust): Rename POOL to RAYON (#27606)** (c7896b9)
- **chore(python): Run Pyrefly on tests (#27459)** (14cb8cf)
- **refactor(rust): Use first_non_null for strptime infer (#27577)** (b8dc203)
- **refactor(rust): Add arg mapper to unoptimized dispatch (#27599)** (811006d)
- **chore: Fix is_empty test (#27597)** (c89ecf7)
- **chore: Fix tz type difference pandas assert, take 2 (#27596)** (cd6a488)

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