py-1.41.1
paulpierre/markdown-crawlerpy-1.41.1May 27, 2026by github-actions[bot]
AI Summary
Performance optimizations include adaptive size dispatch to hashset or radix sort, while bug fixes address length mismatches, precision loss, and CSPE (Common Subplan Elimination) behavior.
Key Highlights
- Adaptive size dispatch to hashset or radix sort
- Allow deeper expressions
- Raise length mismatch in multiple sort_by in group_by
- Fix memory usage regression affecting TPCH Q22
New Features
- Allow deeper expressions
- Add POLARS_ALLOW_NESTED_CSPE env var
- Docs fixes
- Sync from Polars Cloud
Full Release Notes
## π Performance improvements - Adaptive size dispatch to hashset or radix sort + capacity-aware reset in `agg_n_unique` (#27719) ## β¨ Enhancements - Allow deeper expressions (#27768) ## π Bug fixes - Raise length mismatch in multiple `sort_by` in `group_by` (#27772) - Respect min\_samples for rolling\_by ops with nulls (#27706) - Fix memory usage regression affecting TPCH Q22 (#27758) - Add `POLARS_ALLOW_NESTED_CSPE` env var and make nested CSPE opt-in (#27765) - Post-apply residual pyarrow predicates (#27764) - Fix loss of precision for smaller floating types(#27662) (#27732) - Filter at scan dropped in CSPE filter pushdown (#27763) - Fix portstate assertion error on is\_in (#27757) - Fix incorrect when/then after forward fill / reverse in groupby (#27745) - Accept empty Thrift list encoded as bare 0x00 byte in parquet metadata (#27754) - Stabilize object store `credentialprovider` cache key (#27712) - Add to `merge_sorted` docs that the input must be nulls first (#27743) ## π Documentation - Docs fixes (#27766) - Sync from Polars Cloud (#27751) - Add to `merge_sorted` docs that the input must be nulls first (#27743) ## π οΈ Other improvements - Attribute annotations for `CatalogCredentialProvider` (#27739) - Solve `type: ignore` in \_AioDataFrameResult (#27311) - Remove dead code in `_write_utils.py` (#27721) - Remove unnecessary ``not isinstance(v, DataType)`` check (#27723) Thank you to all our contributors for making this release possible! @EndPositive, @JakubValtar, @MarcoGorelli, @NicoOhR, @azimafroozeh, @carnarez, @dsprenkels, @jorenham, @kdn36, @nameexhaustion, @orlp and @ritchie46