polars

Dataframes powered by a multithreaded, vectorized query engine, written in Rust

OTHER License

Downloads
9.7M
Stars
26.3K
Committers
213

Bot releases are visible (Hide)

polars - Python Polars 0.20.28

Published by github-actions[bot] 5 months ago

⚠️ Deprecations

  • Deprecate use_pyarrow parameter for to_numpy methods (#16391)

✨ Enhancements

  • Add field expression as selector with an struct scope (#16402)
  • Field expansion renaming (#16397)
  • Respect index order in DataFrame.to_numpy also for non-numeric frames (#16390)
  • add Expr.interpolate_by (#16313)
  • Implement Struct support for Series.to_numpy (#16383)

🐞 Bug fixes

  • Fix struct arithmetic schema (#16396)
  • Handle non-Sequence iterables in filter (#16254)
  • Fix don't panic on chunked to_numpy conversion (#16393)
  • Don't check nulls before conversion (#16392)
  • Add support for generalized ufunc with different size input and output (#16336)
  • Improve cursor close behaviour with respect to Oracle "thick mode" connections (#16380)
  • Fix DataFrame.to_numpy for Array/Struct types (#16386)
  • Handle ambiguous/nonexistent datetimes in Series construction (#16342)
  • Fix DataFrame.to_numpy for Struct columns when structured=True (#16358)
  • Use strings to expose ClosedInterval in expr IR (#16369)

πŸ“– Documentation

  • Expand docstrings for to_numpy methods (#16394)
  • Add a not about index access on struct.field (#16389)

Thank you to all our contributors for making this release possible!
@MarcoGorelli, @alexander-beedie, @coastalwhite, @dangotbanned, @itamarst, @ritchie46, @stinodego and @wence-

polars - Rust Polars 0.40.0

Published by ritchie46 5 months ago

πŸ’₯ Breaking changes

  • Remove incremental read based batched CSV reader (#16259)
  • separate rolling_*_by from rolling_*(..., by=...) in Rust (#16102)
  • Move CSV read options from CsvReader to CsvReadOptions (#16126)
  • Rename all 'Chunk's to RecordBatch (#16063)
  • prepare for join coalescing argument (#15418)
  • Rename to CsvParserOptions to CsvReaderOptions, use in CsvReader (#15919)
  • Add context trace to LazyFrame conversion errors (#15761)
  • Move schema resolving of file scan to IR phase (#15739)
  • Move schema resolving to IR phase. (#15714)
  • Rename LogicalPlan and builders to reflect their uses better (#15712)

πŸš€ Performance improvements

  • Use branchless uleb128 decoding for parquet (#16352)
  • Reduce error bubbling in parquet hybrid_rle (#16348)
  • use is_sorted in ewm_mean_by, deprecate check_sorted (#16335)
  • Optimize is_sorted for numeric data (#16333)
  • do not use pyo3-built (#16309)
  • Faster bitpacking for Parquet writer (#16278)
  • Avoid importing ctypes.util in CPU check script if possible (#16307)
  • Don't rechunk when converting DataFrame to numpy/ndarray (#16288)
  • use zeroed vec in ewm_mean_by for sorted fastpath (#16265)
  • use zeroable_vec in ewm_mean_by (#16166)
  • Improve cost of chunk_idx compute (#16154)
  • Don't rechunk by default in concat (#16128)
  • Ensure rechunk is parallel (#16127)
  • Don't traverse deep datasets that we repr as union in CSE (#16096)
  • Ensure better chunk sizes (#16071)
  • Don't rechunk in parallel collection (#15907)
  • Improve non-trivial list aggregations (#15888)
  • Ensure we hit specialized gather for binary/strings (#15886)
  • Limit the cache size for to_datetime (#15826)
  • skip initial null items and don't recompute slope in interpolate (#15819)
  • Fix quadratic in binview growable same source (#15734)

✨ Enhancements

  • Raise when joining on the same keys twice (#16329)
  • Don't require data to be sorted by by column in rolling_*_by operations (#16249)
  • Add struct.field expansion (regex, wildcard, columns) (#16320)
  • Faster bitpacking for Parquet writer (#16278)
  • Add struct.with_fields (#16305)
  • Handle implicit SQL string β†’ temporal conversion in the BETWEEN clause (#16279)
  • Add new index/range based selector cs.by_index, allow multiple indices for nth (#16217)
  • Show warning if expressions are very deep (#16233)
  • Native CSV file list reading (#16180)
  • Register memory mapped files and raise when written to (#16208)
  • Raise when encountering invalid supertype in functions during conversion (#16182)
  • Add SQL support for GROUP BY ALL syntax and fix several issues with aliased group keys (#16179)
  • Allow implicit string β†’ temporal conversion in SQL comparisons (#15958)
  • separate rolling_*_by from rolling_*(..., by=...) in Rust (#16102)
  • Add run-length encoding to Parquet writer (#16125)
  • add date pattern dd.mm.YYYY (#16045)
  • Add RLE to RLE_DICTIONARY encoder (#15959)
  • Support non-coalescing joins in default engine (#16036)
  • Move diagonal & horizontal concat schema resolving to IR phase (#16034)
  • raise more informative error messages in rolling_* aggregations instead of panicking (#15979)
  • Convert concat during IR conversion (#16016)
  • Improve dynamic supertypes (#16009)
  • Additional uint datatype support for the SQL interface (#15993)
  • Support Decimal read from IPC (#15965)
  • Add typed collection from par iterators (#15961)
  • Add by argument for Expr.top_k and Expr.bottom_k (#15468)
  • Add option to disable globbing in csv (#15930)
  • Add option to disable globbing in parquet (#15928)
  • Rename to CsvParserOptions to CsvReaderOptions, use in CsvReader (#15919)
  • Expressify dt.round (#15861)
  • Improve error messages in context stack (#15881)
  • Add dynamic literals to ensure schema correctness (#15832)
  • dt.truncate supports broadcasting lhs (#15768)
  • Expressify str.json_path_match (#15764)
  • Support decimal float parsing in CSV (#15774)
  • Add context trace to LazyFrame conversion errors (#15761)

🐞 Bug fixes

  • correct AExpr.to_field for bitwise and logical and/or (#16360)
  • cargo clippy for uleb128 safety comment (#16368)
  • Infer CSV schema as supertype of all files (#16349)
  • Address overflow combining u64 hashes in Debug builds (#16323)
  • Don't exclude explicitly named columns in group-by context' expr expansion (#16318)
  • Harden Series.reshape against invalid parameters (#16281)
  • Fix list.sum dtype for boolean (#16290)
  • Don't stackoverflow on all/any horizontal (#16287)
  • compilation error when both lazy and ipc features are enabled (#16284)
  • `rolling_*_by was throwing incorrect error when dataframe was sorted by contained multiple chunks (#16247)
  • Clippy Error for CPUID (#16241)
  • Reading CSV with low_memory gave no data (#16231)
  • Empty unique (#16214)
  • Fix empty drop nulls (#16213)
  • Fix get expression group-by state (#16189)
  • Fix rolling empty group OOB (#16186)
  • offset=-0i was being treated differently to offset=0i in rolling (#16184)
  • Fix panic on empty frame joins (#16181)
  • Fix streaming glob slice (#16174)
  • Fix CSV skip_rows_after_header for streaming (#16176)
  • Flush parquet at end of batches tick (#16073)
  • Check CSE name aliases for collisions. (#16149)
  • Don't override CSV reader encoding with lossy UTF-8 (#16151)
  • Add missing allow macros for windows (#16130)
  • Ensure hex and bitstring literals work inside SQL IN clauses (#16101)
  • Revert "Add RLE to RLE_DICTIONARY encoder" (#16113)
  • Respect user passed 'reader_schema' in 'scan_csv' (#16080)
  • Lazy csv + projection; respect null values arg (#16077)
  • Materialize dtypes when converting to arrow (#16074)
  • Fix casting decimal to decimal for high precision (#16049)
  • Fix printing max scale decimals (#16048)
  • Decimal supertype for dyn int (#16046)
  • Do not set sorted flag on lexical sorting (#16032)
  • properly handle nulls in DictionaryArray::iter_typed (#16013)
  • Fix CSE case where upper plan has no projection (#16011)
  • Crash/incorrect group_by/n_unique on categoricals created by (q)cut (#16006)
  • Ternary supertype dynamics (#15995)
  • Treat splitting by empty string as iterating over chars (#15922)
  • Fix PartialEq for DataType::Unknown (#15992)
  • Do not reverse null indices in descending arg_sort (#15974)
  • Finish adding typed_lit to help schema determination in SQL "extract" func (#15955)
  • do not panic when comparing against categorical with incompatible dtype (#15857)
  • Join validation for multiple keys (#15947)
  • Set default limit for String column display to 30 and fix edge cases (#15934)
  • typo in add_half_life takes ln(negative) (#15932)
  • Remove ffspec from parquet reader (#15927)
  • avoid WRITE+EXEC for CPUID check (#15912)
  • fix inconsistent decimal formatting (#15457)
  • Preserve NULLs for is_not_nan (#15889)
  • double projection check should only take the upstream projections into account (#15901)
  • Ensure we don't create invalid frames when combining unit lit + … (#15903)
  • Clear cached rename schema (#15902)
  • Fix OOB in struct lit/agg aggregation (#15891)
  • create (q)cut labels in fixed order (#15843)
  • Tag shrink_dtype as non-streaming (#15828)
  • drop-nulls edge case; remove drop-nulls special case (#15815)
  • ewm_mean_by was skipping initial nulls when it was already sorted by "by" column (#15812)
  • Consult cgroups to determine free memory (#15798)
  • raise if index count like 2i is used when performing rolling, group_by_dynamic, upsample, or other temporal operatios (#15751)
  • Don't deduplicate sort that has slice pushdown (#15784)
  • Fix incorrect is_between pushdown to scan_pyarrow_dataset (#15769)
  • Handle null index correctly for list take (#15737)
  • Preserve lexical ordering on concat (#15753)
  • Remove incorrect unsafe pointer cast for int -> enum (#15740)
  • pass series name to apply for cut/qcut (#15715)
  • count of null column shouldn't panic in agg context (#15710)

πŸ“– Documentation

  • Clarify arrow usage (#16152)
  • Solve inconsistency between code and comment (#16135)
  • add filter docstring examples to date and datetime (#15996)
  • update the link to R API docs (#15973)
  • Fix a typo in categorical section of the user guide (#15777)
  • Fix incorrect column name in LazyFrame.sort doc example (#15658)

πŸ“¦ Build system

  • Update Rust nightly toolchain version (#16222)
  • Don't import jemalloc (#15942)
  • Use default allocator for lts-cpu (#15941)
  • replace all macos-latest referrals with macos-13 (#15926)
  • pin mimalloc and macos-13 (#15925)
  • use jemalloc in lts-cpu (#15913)

πŸ› οΈ Other improvements

  • simplify interpolate code, add test for rolling_*_by with nulls (#16334)
  • Move expression expansion to conversion module (#16331)
  • Add polars-expr README (#16316)
  • Move physical expressions to new crate (#16306)
  • Use cls (not self) in classmethods (#16303)
  • conditionally print the CSEs (#16292)
  • Rename ChunkedArray.chunk_id to chunk_lengths (#16273)
  • Use Scalar instead of Series some aggregations (#16277)
  • Use CsvReadOptions in LazyCsvReader (#16283)
  • Do not hardcode bash path in Makefile (#16263)
  • Add IR::Reduce (not yet implemented) (#16216)
  • Remove incremental read based batched CSV reader (#16259)
  • move all describe, describe_tree and dot-viz code to IR instead of DslPlan (#16237)
  • move describe to IR instead of DSL (#16191)
  • Use Duration.is_zero instead of comparing Duration.duration_ns to 0 (#16195)
  • Remove unused code (#16175)
  • Don't override CSV reader encoding with lossy UTF-8 (#16151)
  • Move CSV read options from CsvReader to CsvReadOptions (#16126)
  • Bump sccache action (#16088)
  • Fix failures in test coverage workflow (#16083)
  • Rename all 'Chunk's to RecordBatch (#16063)
  • Use UnionArgs for DSL side (#16017)
  • Add some comments (#16008)
  • prepare for join coalescing argument (#15418)
  • Pin coverage job to MacOS 13 for now (#15918)
  • Reorganize from_iter and dispatch to collect_ca when possible (#15904)
  • More polars-io cleanup (#15885)
  • Improve type-coercion (#15879)
  • Move type coercion to IR conversion phase (#15868)
  • Reorganize polars_io::parquet module (#15860)
  • Reorganize polars_io::csv module (#15831)
  • Always expand horizontal_any/all (#15816)
  • Rename decimal_float to decimal_comma (#15817)
  • Move IO-related options structs to polars-io (#15806)
  • Split coverage calculation (#15780)
  • Update readme (#15787)
  • Move schema resolving of file scan to IR phase (#15739)
  • Factor out ensure_is_constant_duration (#15733)
  • Move schema resolving to IR phase. (#15714)
  • Rename LogicalPlan and builders to reflect their uses better (#15712)

Thank you to all our contributors for making this release possible!
@CanglongCl, @JulianCologne, @KDruzhkin, @MarcoGorelli, @NedJWestern, @NexVeridian, @NickCondron, @Robinsane, @ShivMunagala, @TobiasDummschat, @YichiZhang0613, @alexander-beedie, @avimallu, @bertiewooster, @brandon-b-miller, @c-peters, @coastalwhite, @dangotbanned, @datenzauberai, @deanm0000, @dependabot, @dependabot[bot], @eitsupi, @gasmith, @haocheng6, @ion-elgreco, @itamarst, @janpipek, @jr200, @jrycw, @jsarbach, @luke396, @marenwestermann, @max-muoto, @mbuhidar, @nameexhaustion, @orlp, @pydanny, @r-brink, @reswqa, @ritchie46, @stinodego, @thalassemia, @tharunsuresh-code, @twoertwein, @wence- and @wsyxbcl

polars - Rust Polars 0.40.0

Published by github-actions[bot] 5 months ago

πŸ’₯ Breaking changes

  • Remove incremental read based batched CSV reader (#16259)
  • separate rolling_*_by from rolling_*(..., by=...) in Rust (#16102)
  • Move CSV read options from CsvReader to CsvReadOptions (#16126)
  • Rename all 'Chunk's to RecordBatch (#16063)
  • prepare for join coalescing argument (#15418)
  • Rename to CsvParserOptions to CsvReaderOptions, use in CsvReader (#15919)
  • Add context trace to LazyFrame conversion errors (#15761)
  • Move schema resolving of file scan to IR phase (#15739)
  • Move schema resolving to IR phase. (#15714)
  • Rename LogicalPlan and builders to reflect their uses better (#15712)

πŸš€ Performance improvements

  • Use branchless uleb128 decoding for parquet (#16352)
  • Reduce error bubbling in parquet hybrid_rle (#16348)
  • use is_sorted in ewm_mean_by, deprecate check_sorted (#16335)
  • Optimize is_sorted for numeric data (#16333)
  • do not use pyo3-built (#16309)
  • Faster bitpacking for Parquet writer (#16278)
  • Avoid importing ctypes.util in CPU check script if possible (#16307)
  • Don't rechunk when converting DataFrame to numpy/ndarray (#16288)
  • use zeroed vec in ewm_mean_by for sorted fastpath (#16265)
  • use zeroable_vec in ewm_mean_by (#16166)
  • Improve cost of chunk_idx compute (#16154)
  • Don't rechunk by default in concat (#16128)
  • Ensure rechunk is parallel (#16127)
  • Don't traverse deep datasets that we repr as union in CSE (#16096)
  • Ensure better chunk sizes (#16071)
  • Don't rechunk in parallel collection (#15907)
  • Improve non-trivial list aggregations (#15888)
  • Ensure we hit specialized gather for binary/strings (#15886)
  • Limit the cache size for to_datetime (#15826)
  • skip initial null items and don't recompute slope in interpolate (#15819)
  • Fix quadratic in binview growable same source (#15734)

✨ Enhancements

  • Raise when joining on the same keys twice (#16329)
  • Don't require data to be sorted by by column in rolling_*_by operations (#16249)
  • Add struct.field expansion (regex, wildcard, columns) (#16320)
  • Faster bitpacking for Parquet writer (#16278)
  • Add struct.with_fields (#16305)
  • Handle implicit SQL string β†’ temporal conversion in the BETWEEN clause (#16279)
  • Add new index/range based selector cs.by_index, allow multiple indices for nth (#16217)
  • Show warning if expressions are very deep (#16233)
  • Native CSV file list reading (#16180)
  • Register memory mapped files and raise when written to (#16208)
  • Raise when encountering invalid supertype in functions during conversion (#16182)
  • Add SQL support for GROUP BY ALL syntax and fix several issues with aliased group keys (#16179)
  • Allow implicit string β†’ temporal conversion in SQL comparisons (#15958)
  • separate rolling_*_by from rolling_*(..., by=...) in Rust (#16102)
  • Add run-length encoding to Parquet writer (#16125)
  • add date pattern dd.mm.YYYY (#16045)
  • Add RLE to RLE_DICTIONARY encoder (#15959)
  • Support non-coalescing joins in default engine (#16036)
  • Move diagonal & horizontal concat schema resolving to IR phase (#16034)
  • raise more informative error messages in rolling_* aggregations instead of panicking (#15979)
  • Convert concat during IR conversion (#16016)
  • Improve dynamic supertypes (#16009)
  • Additional uint datatype support for the SQL interface (#15993)
  • Support Decimal read from IPC (#15965)
  • Add typed collection from par iterators (#15961)
  • Add by argument for Expr.top_k and Expr.bottom_k (#15468)
  • Add option to disable globbing in csv (#15930)
  • Add option to disable globbing in parquet (#15928)
  • Rename to CsvParserOptions to CsvReaderOptions, use in CsvReader (#15919)
  • Expressify dt.round (#15861)
  • Improve error messages in context stack (#15881)
  • Add dynamic literals to ensure schema correctness (#15832)
  • dt.truncate supports broadcasting lhs (#15768)
  • Expressify str.json_path_match (#15764)
  • Support decimal float parsing in CSV (#15774)
  • Add context trace to LazyFrame conversion errors (#15761)

🐞 Bug fixes

  • correct AExpr.to_field for bitwise and logical and/or (#16360)
  • cargo clippy for uleb128 safety comment (#16368)
  • Infer CSV schema as supertype of all files (#16349)
  • Address overflow combining u64 hashes in Debug builds (#16323)
  • Don't exclude explicitly named columns in group-by context' expr expansion (#16318)
  • Harden Series.reshape against invalid parameters (#16281)
  • Fix list.sum dtype for boolean (#16290)
  • Don't stackoverflow on all/any horizontal (#16287)
  • compilation error when both lazy and ipc features are enabled (#16284)
  • `rolling_*_by was throwing incorrect error when dataframe was sorted by contained multiple chunks (#16247)
  • Clippy Error for CPUID (#16241)
  • Reading CSV with low_memory gave no data (#16231)
  • Empty unique (#16214)
  • Fix empty drop nulls (#16213)
  • Fix get expression group-by state (#16189)
  • Fix rolling empty group OOB (#16186)
  • offset=-0i was being treated differently to offset=0i in rolling (#16184)
  • Fix panic on empty frame joins (#16181)
  • Fix streaming glob slice (#16174)
  • Fix CSV skip_rows_after_header for streaming (#16176)
  • Flush parquet at end of batches tick (#16073)
  • Check CSE name aliases for collisions. (#16149)
  • Don't override CSV reader encoding with lossy UTF-8 (#16151)
  • Add missing allow macros for windows (#16130)
  • Ensure hex and bitstring literals work inside SQL IN clauses (#16101)
  • Revert "Add RLE to RLE_DICTIONARY encoder" (#16113)
  • Respect user passed 'reader_schema' in 'scan_csv' (#16080)
  • Lazy csv + projection; respect null values arg (#16077)
  • Materialize dtypes when converting to arrow (#16074)
  • Fix casting decimal to decimal for high precision (#16049)
  • Fix printing max scale decimals (#16048)
  • Decimal supertype for dyn int (#16046)
  • Do not set sorted flag on lexical sorting (#16032)
  • properly handle nulls in DictionaryArray::iter_typed (#16013)
  • Fix CSE case where upper plan has no projection (#16011)
  • Crash/incorrect group_by/n_unique on categoricals created by (q)cut (#16006)
  • Ternary supertype dynamics (#15995)
  • Treat splitting by empty string as iterating over chars (#15922)
  • Fix PartialEq for DataType::Unknown (#15992)
  • Do not reverse null indices in descending arg_sort (#15974)
  • Finish adding typed_lit to help schema determination in SQL "extract" func (#15955)
  • do not panic when comparing against categorical with incompatible dtype (#15857)
  • Join validation for multiple keys (#15947)
  • Set default limit for String column display to 30 and fix edge cases (#15934)
  • typo in add_half_life takes ln(negative) (#15932)
  • Remove ffspec from parquet reader (#15927)
  • avoid WRITE+EXEC for CPUID check (#15912)
  • fix inconsistent decimal formatting (#15457)
  • Preserve NULLs for is_not_nan (#15889)
  • double projection check should only take the upstream projections into account (#15901)
  • Ensure we don't create invalid frames when combining unit lit + … (#15903)
  • Clear cached rename schema (#15902)
  • Fix OOB in struct lit/agg aggregation (#15891)
  • create (q)cut labels in fixed order (#15843)
  • Tag shrink_dtype as non-streaming (#15828)
  • drop-nulls edge case; remove drop-nulls special case (#15815)
  • ewm_mean_by was skipping initial nulls when it was already sorted by "by" column (#15812)
  • Consult cgroups to determine free memory (#15798)
  • raise if index count like 2i is used when performing rolling, group_by_dynamic, upsample, or other temporal operatios (#15751)
  • Don't deduplicate sort that has slice pushdown (#15784)
  • Fix incorrect is_between pushdown to scan_pyarrow_dataset (#15769)
  • Handle null index correctly for list take (#15737)
  • Preserve lexical ordering on concat (#15753)
  • Remove incorrect unsafe pointer cast for int -> enum (#15740)
  • pass series name to apply for cut/qcut (#15715)
  • count of null column shouldn't panic in agg context (#15710)

πŸ“– Documentation

  • Clarify arrow usage (#16152)
  • Solve inconsistency between code and comment (#16135)
  • add filter docstring examples to date and datetime (#15996)
  • update the link to R API docs (#15973)
  • Fix a typo in categorical section of the user guide (#15777)
  • Fix incorrect column name in LazyFrame.sort doc example (#15658)

πŸ“¦ Build system

  • Update Rust nightly toolchain version (#16222)
  • Don't import jemalloc (#15942)
  • Use default allocator for lts-cpu (#15941)
  • replace all macos-latest referrals with macos-13 (#15926)
  • pin mimalloc and macos-13 (#15925)
  • use jemalloc in lts-cpu (#15913)

πŸ› οΈ Other improvements

  • simplify interpolate code, add test for rolling_*_by with nulls (#16334)
  • Move expression expansion to conversion module (#16331)
  • Add polars-expr README (#16316)
  • Move physical expressions to new crate (#16306)
  • Use cls (not self) in classmethods (#16303)
  • conditionally print the CSEs (#16292)
  • Rename ChunkedArray.chunk_id to chunk_lengths (#16273)
  • Use Scalar instead of Series some aggregations (#16277)
  • Use CsvReadOptions in LazyCsvReader (#16283)
  • Do not hardcode bash path in Makefile (#16263)
  • Add IR::Reduce (not yet implemented) (#16216)
  • Remove incremental read based batched CSV reader (#16259)
  • move all describe, describe_tree and dot-viz code to IR instead of DslPlan (#16237)
  • move describe to IR instead of DSL (#16191)
  • Use Duration.is_zero instead of comparing Duration.duration_ns to 0 (#16195)
  • Remove unused code (#16175)
  • Don't override CSV reader encoding with lossy UTF-8 (#16151)
  • Move CSV read options from CsvReader to CsvReadOptions (#16126)
  • Bump sccache action (#16088)
  • Fix failures in test coverage workflow (#16083)
  • Rename all 'Chunk's to RecordBatch (#16063)
  • Use UnionArgs for DSL side (#16017)
  • Add some comments (#16008)
  • prepare for join coalescing argument (#15418)
  • Pin coverage job to MacOS 13 for now (#15918)
  • Reorganize from_iter and dispatch to collect_ca when possible (#15904)
  • More polars-io cleanup (#15885)
  • Improve type-coercion (#15879)
  • Move type coercion to IR conversion phase (#15868)
  • Reorganize polars_io::parquet module (#15860)
  • Reorganize polars_io::csv module (#15831)
  • Always expand horizontal_any/all (#15816)
  • Rename decimal_float to decimal_comma (#15817)
  • Move IO-related options structs to polars-io (#15806)
  • Split coverage calculation (#15780)
  • Update readme (#15787)
  • Move schema resolving of file scan to IR phase (#15739)
  • Factor out ensure_is_constant_duration (#15733)
  • Move schema resolving to IR phase. (#15714)
  • Rename LogicalPlan and builders to reflect their uses better (#15712)

Thank you to all our contributors for making this release possible!
@CanglongCl, @JulianCologne, @KDruzhkin, @MarcoGorelli, @NedJWestern, @NexVeridian, @NickCondron, @Robinsane, @ShivMunagala, @TobiasDummschat, @YichiZhang0613, @alexander-beedie, @avimallu, @bertiewooster, @brandon-b-miller, @c-peters, @coastalwhite, @dangotbanned, @datenzauberai, @deanm0000, @dependabot, @dependabot[bot], @eitsupi, @gasmith, @haocheng6, @ion-elgreco, @itamarst, @janpipek, @jr200, @jrycw, @jsarbach, @luke396, @marenwestermann, @max-muoto, @mbuhidar, @nameexhaustion, @orlp, @pydanny, @r-brink, @reswqa, @ritchie46, @stinodego, @thalassemia, @tharunsuresh-code, @twoertwein, @wence- and @wsyxbcl

polars - Python Polars 0.20.27

Published by github-actions[bot] 5 months ago

⚠️ Deprecations

  • Change parameter chunked to allow_chunks in parametric testing strategies (#16264)

πŸš€ Performance improvements

  • Use branchless uleb128 decoding for parquet (#16352)
  • Reduce error bubbling in parquet hybrid_rle (#16348)
  • use is_sorted in ewm_mean_by, deprecate check_sorted (#16335)
  • Optimize is_sorted for numeric data (#16333)
  • do not use pyo3-built (#16309)
  • Faster bitpacking for Parquet writer (#16278)
  • Improve Series.to_numpy performance for chunked Series that would otherwise be zero-copy (#16301)
  • Further optimise initial polars import (#16308)
  • Avoid importing ctypes.util in CPU check script if possible (#16307)
  • Don't rechunk when converting DataFrame to numpy/ndarray (#16288)
  • use zeroed vec in ewm_mean_by for sorted fastpath (#16265)

✨ Enhancements

  • expose BooleanFunction in expr IR (#16355)
  • Allow read_excel to handle bytes/BytesIO directly when using the "calamine" (fastexcel) engine (#16344)
  • Raise when joining on the same keys twice (#16329)
  • Don't require data to be sorted by by column in rolling_*_by operations (#16249)
  • Support List types in Series.to_numpy (#16315)
  • Add to_jax methods to support Jax Array export from DataFrame and Series (#16294)
  • Enable generating data with time zones in parametric testing (#16298)
  • Add struct.field expansion (regex, wildcard, columns) (#16320)
  • Add new alpha, alphanumeric and digit selectors (#16310)
  • Faster bitpacking for Parquet writer (#16278)
  • Add require_all parameter to the by_name column selector (#15028)
  • Start updating BytecodeParser for Python 3.13 (#16304)
  • Add struct.with_fields (#16305)
  • Handle implicit SQL string β†’ temporal conversion in the BETWEEN clause (#16279)
  • Expose string expression nodes to python (#16221)
  • Add new index/range based selector cs.by_index, allow multiple indices for nth (#16217)
  • Show warning if expressions are very deep (#16233)
  • Fix some issues in parametric testing with nested dtypes (#16211)

🐞 Bug fixes

  • pick a consistent order for the sort options in PyIR (#16350)
  • Infer CSV schema as supertype of all files (#16349)
  • Fix issue in parametric testing where excluded_dtypes list would grow indefinitely (#16340)
  • Address overflow combining u64 hashes in Debug builds (#16323)
  • Don't exclude explicitly named columns in group-by context' expr expansion (#16318)
  • Improve map_elements typing (#16257)
  • Harden Series.reshape against invalid parameters (#16281)
  • Fix list.sum dtype for boolean (#16290)
  • Don't stackoverflow on all/any horizontal (#16287)
  • Fix Series.to_numpy for Array types with nulls and nested Arrays (#16230)
  • `rolling_*_by was throwing incorrect error when dataframe was sorted by contained multiple chunks (#16247)
  • Don't allow passing missing data to generalized ufuncs (#16198)
  • Address overly-permissive expand_selectors function, minor fixes (#16250)
  • Add missing support for parsing instantiated Object dtypes Object() (#16260)
  • Reading CSV with low_memory gave no data (#16231)
  • Add missing read_database overload (#16229)
  • Fix a rounding error in parametric test datetimes generation (#16228)
  • Fix some issues in parametric testing with nested dtypes (#16211)

πŸ“– Documentation

  • Add missing word in join docstring (#16299)
  • document that month_start/month_end preserve the current time (#16293)
  • Add example for separator parameter in pivot (#15957)

πŸ“¦ Build system

  • Fix allocator features (#16365)
  • Update Rust nightly toolchain version (#16222)

πŸ› οΈ Other improvements

  • Move DataFrame.to_numpy implementation to Rust side (#16354)
  • Organize PyO3 NumPy code into interop::numpy module (#16346)
  • simplify interpolate code, add test for rolling_*_by with nulls (#16334)
  • Very minor refactor of DataFrame.to_numpy code (#16325)
  • InterchangeDataFrame.version should be a ClassVar (not a property) (#16312)
  • Add polars-expr README (#16316)
  • Raise import timing test threshold (#16302)
  • Use cls (not self) in classmethods (#16303)
  • Use Scalar instead of Series some aggregations (#16277)
  • Do not hardcode bash path in Makefile (#16263)
  • Add IR::Reduce (not yet implemented) (#16216)
  • move all describe, describe_tree and dot-viz code to IR instead of DslPlan (#16237)

Thank you to all our contributors for making this release possible!
@MarcoGorelli, @NickCondron, @ShivMunagala, @alexander-beedie, @brandon-b-miller, @coastalwhite, @datenzauberai, @itamarst, @jsarbach, @max-muoto, @nameexhaustion, @orlp, @r-brink, @ritchie46, @stinodego, @thalassemia, @twoertwein and @wence-

polars - Python Polars 0.20.26

Published by github-actions[bot] 5 months ago

⚠️ Deprecations

  • Deprecate allow_infinities and null_probability args to parametric test strategies (#16183)

πŸš€ Performance improvements

  • Avoid needless copy when converting chunked Series to NumPy (#16178)
  • use zeroable_vec in ewm_mean_by (#16166)
  • Improve cost of chunk_idx compute (#16154)
  • Don't rechunk by default in concat (#16128)
  • Ensure rechunk is parallel (#16127)

✨ Enhancements

  • Clarify to_torch "features" and "label" parameter behaviour when return type is not "dataset" (#16218)
  • Native CSV file list reading (#16180)
  • Register memory mapped files and raise when written to (#16208)
  • Implement support for Struct types in parametric tests (#16197)
  • Enable Null datatype and null values by default in parametric testing (#16192)
  • Support Enum types in parametric testing (#16188)
  • Raise when encountering invalid supertype in functions during conversion (#16182)
  • Add SQL support for GROUP BY ALL syntax and fix several issues with aliased group keys (#16179)
  • Overhaul parametric test implementations and update Hypothesis to latest version (#16062)
  • Avoid an extra copy when converting Boolean Series to writable NumPy array (#16164)
  • Allow implicit string β†’ temporal conversion in SQL comparisons (#15958)
  • Add run-length encoding to Parquet writer (#16125)
  • Support passing instantiated adbc/alchemy connection objects to write_database (#16099)
  • Add top-level nth(n) method, to go with existing first and last (#16112)

🐞 Bug fixes

  • Empty unique (#16214)
  • Fix empty drop nulls (#16213)
  • Fix get expression group-by state (#16189)
  • Fix rolling empty group OOB (#16186)
  • offset=-0i was being treated differently to offset=0i in rolling (#16184)
  • Fix panic on empty frame joins (#16181)
  • Fix streaming glob slice (#16174)
  • Fix CSV skip_rows_after_header for streaming (#16176)
  • Flush parquet at end of batches tick (#16073)
  • Check CSE name aliases for collisions. (#16149)
  • Don't override CSV reader encoding with lossy UTF-8 (#16151)
  • Respect dtype and strict in pl.Series's constructor for pyarrow arrays, numpy arrays, and pyarrow-backed pandas (#15962)
  • Ensure hex and bitstring literals work inside SQL IN clauses (#16101)

πŸ“– Documentation

  • Add examples for multiple Series functions (#16172)
  • Add deprecated messages to cumfold and cumreduce (#16173)
  • StringNameSpace.replace_all docstring (#16169)
  • Explain how Polars floor division differs from Python (#16054)
  • Clarify arrow usage (#16152)
  • Add example to polars.Series.flags (#16123)

πŸ› οΈ Other improvements

  • Switch over some of the custom Python date/time conversions to native PyO3 conversions (#16203)
  • move describe to IR instead of DSL (#16191)
  • More PyO3 0.21 Bound<> APIs, and finally disable gil-refs backwards compat feature on pyo3 crate (#16143)
  • Move hypothesis tests into unit test module (#16185)
  • Remove unused code (#16175)
  • Update plugin example to PyO3 0.21 (#16157)
  • Return correct temporal type from Rust in to_numpy (#14353)
  • Create NumPy view for Datetime/Duration Series on the Rust side (#16148)
  • Don't override CSV reader encoding with lossy UTF-8 (#16151)
  • Continue converting to PyO3 0.21 Bound<> APIs (#16081)

Thank you to all our contributors for making this release possible!
@MarcoGorelli, @YichiZhang0613, @alexander-beedie, @bertiewooster, @coastalwhite, @dangotbanned, @itamarst, @janpipek, @jrycw, @luke396, @nameexhaustion, @pydanny, @ritchie46, @stinodego, @thalassemia and @tharunsuresh-code

polars - Python Polars 0.20.25

Published by github-actions[bot] 6 months ago

🐞 Bug fixes

  • Revert "Add RLE to RLE_DICTIONARY encoder"
  • Improve error handling of ParameterCollisionError in read_excel (#16100)

Thank you to all our contributors for making this release possible!
@nameexhaustion, @ritchie46 and @wsyxbcl

polars - Python Polars 0.20.24

Published by github-actions[bot] 6 months ago

[!WARNING]
This release was yanked. Please use the 0.20.25 release instead.

πŸ† Highlights

  • Support pytorch Tensor and Dataset export with new to_torch DataFrame/Series method (#15931)

πŸš€ Performance improvements

  • Don't traverse deep datasets that we repr as union in CSE (#16096)
  • Ensure better chunk sizes (#16071)

✨ Enhancements

  • split out rolling_*(..., by='foo') into rolling_*_by('foo', ...) (#16059)
  • add date pattern dd.mm.YYYY (#16045)
  • split Expr.top_k and Expr.top_k_by into separate functions (#16041)
  • Support non-coalescing joins in default engine (#16036)
  • Support pytorch Tensor and Dataset export with new to_torch DataFrame/Series method (#15931)
  • Minor DB type inference updates (#16030)
  • Move diagonal & horizontal concat schema resolving to IR phase (#16034)
  • raise more informative error messages in rolling_* aggregations instead of panicking (#15979)
  • Convert concat during IR conversion (#16016)
  • Improve dynamic supertypes (#16009)
  • Additional uint datatype support for the SQL interface (#15993)
  • Add post-optimization callback (#15972)
  • Support Decimal read from IPC (#15965)
  • Expose plan and expression nodes through NodeTraverser to Python (#15776)
  • Add typed collection from par iterators (#15961)
  • Add by argument for Expr.top_k and Expr.bottom_k (#15468)

🐞 Bug fixes

  • Respect user passed 'reader_schema' in 'scan_csv' (#16080)
  • Lazy csv + projection; respect null values arg (#16077)
  • Materialize dtypes when converting to arrow (#16074)
  • Fix casting decimal to decimal for high precision (#16049)
  • Fix Series constructor failure for Array types for large integers (#16050)
  • Fix printing max scale decimals (#16048)
  • Decimal supertype for dyn int (#16046)
  • Correctly handle large timedelta objects in Series constructor (#16043)
  • Do not close connection just because we're not returning Arrow data in batches (#16031)
  • properly handle nulls in DictionaryArray::iter_typed (#16013)
  • Fix CSE case where upper plan has no projection (#16011)
  • Crash/incorrect group_by/n_unique on categoricals created by (q)cut (#16006)
  • converting from numpy datetime64 and overriding dtype with a different resolution was returning incorrect results (#15994)
  • Ternary supertype dynamics (#15995)
  • Fix PartialEq for DataType::Unknown (#15992)
  • Finish adding typed_lit to help schema determination in SQL "extract" func (#15955)
  • Fix dtype parameter in pandas_to_pyseries function (#15948)
  • do not panic when comparing against categorical with incompatible dtype (#15857)
  • Join validation for multiple keys (#15947)
  • Add missing "truncate_ragged_lines" parameter to read_csv_batched (#15944)

πŸ“– Documentation

  • Ensure consistent docstring warning in fill_nan methods (pointing out that nan isn't null) (#16061)
  • add filter docstring examples to date and datetime (#15996)
  • Fix docstring mistake for polars.concat_str (#15937)
  • Update reference to apply (#15982)
  • Remove unwanted linebreaks from docstrings (#16002)
  • correct default in rolling_* function examples (#16000)
  • Improve user-guide doc of UDF (#15923)
  • update the link to R API docs (#15973)

πŸ› οΈ Other improvements

  • Bump sccache action (#16088)
  • Fix failures in test coverage workflow (#16083)
  • Update benchmarks/coverage jobs with "requirements-ci" (#16072)
  • Add TypeGuard to is_polars_dtype util (#16065)
  • Clean up hypothesis decimal strategy (#16056)
  • split Expr.top_k and Expr.top_k_by into separate functions (#16041)
  • Use UnionArgs for DSL side (#16017)
  • Add some comments (#16008)
  • Improve hypothesis strategy for decimals (#16001)
  • Set up TPC-H benchmark tests (#15908)
  • Even more Pyo3 0.21 Bound<> APIs (#15914)
  • Fix failing test (#15936)

Thank you to all our contributors for making this release possible!
@CanglongCl, @JulianCologne, @KDruzhkin, @MarcoGorelli, @alexander-beedie, @avimallu, @bertiewooster, @c-peters, @dependabot, @dependabot[bot], @eitsupi, @haocheng6, @itamarst, @luke396, @marenwestermann, @nameexhaustion, @orlp, @ritchie46, @stinodego, @thalassemia, @wence- and @wsyxbcl

polars - Python Polars 0.20.23

Published by github-actions[bot] 6 months ago

πŸ† Highlights

  • Add a low-friction sql method for DataFrame and LazyFrame (#15783)

πŸš€ Performance improvements

  • Don't rechunk in parallel collection (#15907)
  • Improve non-trivial list aggregations (#15888)
  • Ensure we hit specialized gather for binary/strings (#15886)
  • Limit the cache size for to_datetime (#15826)
  • skip initial null items and don't recompute slope in interpolate (#15819)

✨ Enhancements

  • don't require pyarrow for converting pandas to Polars if all columns have simple numpy-backed datatypes (#15933)
  • Add option to disable globbing in csv (#15930)
  • Add option to disable globbing in parquet (#15928)
  • Expressify dt.round (#15861)
  • Improve error messages in context stack (#15881)
  • Add dynamic literals to ensure schema correctness (#15832)
  • add timestamp time travel in delta scan/read (#15813)

🐞 Bug fixes

  • Set default limit for String column display to 30 and fix edge cases (#15934)
  • Change recognition of numba ufunc (#15916)
  • series.search_sorted could support more types of input (#15940)
  • Remove ffspec from parquet reader (#15927)
  • avoid WRITE+EXEC for CPUID check (#15912)
  • fix inconsistent decimal formatting (#15457)
  • Preserve NULLs for is_not_nan (#15889)
  • double projection check should only take the upstream projections into account (#15901)
  • Ensure we don't create invalid frames when combining unit lit + … (#15903)
  • Clear cached rename schema (#15902)
  • Fix OOB in struct lit/agg aggregation (#15891)
  • Refine interaction of "schema_overrides" with read_excel when using "calamine" engine (#15827)
  • Don't modify user-supplied storage_options dict (take a shallow-copy) (#15859)
  • create (q)cut labels in fixed order (#15843)
  • Tag shrink_dtype as non-streaming (#15828)

πŸ“– Documentation

  • improve graphviz install documentation/error message (#15791)
  • Extend docstring examples for asof_join (#15810)

πŸ“¦ Build system

  • Don't import jemalloc (#15942)
  • Use default allocator for lts-cpu (#15941)
  • replace all macos-latest referrals with macos-13 (#15926)
  • pin mimalloc and macos-13 (#15925)
  • use jemalloc in lts-cpu (#15913)
  • Update Cargo.lock (#15865)
  • Bump ruff version and improve make clean on the Python side (#15858)
  • Exclude rust-toolchain.toml from wheels (#15840)

πŸ› οΈ Other improvements

  • Replace copy/paste import handling with import_optional utility function (#15906)
  • Reorganize from_iter and dispatch to collect_ca when possible (#15904)
  • More PyO3 0.21 bound APIs (#15872)
  • Improve type-coercion (#15879)
  • Move type coercion to IR conversion phase (#15868)
  • Fix Python test coverage upload (#15853)
  • More upgrades to PyO3 0.21 Bound<> APIs (#15790)
  • Use uv for installing Python dependencies in CI (#15848)
  • Update benchmark tests (#15825)

Thank you to all our contributors for making this release possible!
@JulianCologne, @MarcoGorelli, @NedJWestern, @NexVeridian, @alexander-beedie, @deanm0000, @dependabot, @dependabot[bot], @ion-elgreco, @itamarst, @jr200, @nameexhaustion, @orlp, @reswqa, @ritchie46 and @stinodego

polars - Python Polars 0.20.22

Published by github-actions[bot] 6 months ago

πŸš€ Performance improvements

  • Improved type-inference for read_excel and read_ods, use calamine engine for read_ods (#15808)
  • Fix quadratic in binview growable same source (#15734)
  • use two binary searches for equality mask when data is sorted (#15702)
  • improve filter parallelism (#15686)

✨ Enhancements

  • Minor type-inference update for read_database (#15809)
  • Improved type-inference for read_excel and read_ods, use calamine engine for read_ods (#15808)
  • dt.truncate supports broadcasting lhs (#15768)
  • Expressify str.json_path_match (#15764)
  • raise if storage_options is passed to read_csv but fsspec isnt available (#15778)
  • Support decimal float parsing in CSV (#15774)
  • Add context trace to LazyFrame conversion errors (#15761)
  • Improve error message when passing invalid input to lit (#15718)
  • Remove outdated join validation checks (#15701)

🐞 Bug fixes

  • drop-nulls edge case; remove drop-nulls special case (#15815)
  • ewm_mean_by was skipping initial nulls when it was already sorted by "by" column (#15812)
  • Consult cgroups to determine free memory (#15798)
  • raise if index count like 2i is used when performing rolling, group_by_dynamic, upsample, or other temporal operatios (#15751)
  • Don't deduplicate sort that has slice pushdown (#15784)
  • Allow passing files opened by fsspec in read_parquet (#15770)
  • Fix incorrect is_between pushdown to scan_pyarrow_dataset (#15769)
  • Handle null index correctly for list take (#15737)
  • Preserve lexical ordering on concat (#15753)
  • Remove incorrect unsafe pointer cast for int -> enum (#15740)
  • pass series name to apply for cut/qcut (#15715)
  • count of null column shouldn't panic in agg context (#15710)
  • manual cache (#15711)
  • Ensure we don't hold onto Mutex when grabbing join tuples (#15704)
  • allow null dtypes in UDFs if they match the schema (#15699)
  • Respect join_null argument for semi/anti joins (#15696)
  • Ensure we don't hold RwLock when spawning group parallelism in w… (#15697)
  • Ensure empty with_columns is a no-op (#15694)
  • Include predicate in cache state union (#15693)
  • Add the missing feature flag for ewm_mean_by (#15687)
  • 8/16-bits int could also apply in place for log expr (#15680)
  • prepare_expression_for_context shouldn't panic if exceptions raised from optimizer (#15681)

πŸ“– Documentation

  • Add docstring examples for datetimes (#13161) (#15804)
  • Fix a typo in categorical section of the user guide (#15777)
  • Fix a docstring mistake for DataType.is_float (#15773)
  • Remove incorrect "1i (1 index count)" from some docs methods (#15750)
  • Add example for Config.set_tbl_width_chars (#15566)
  • Align docstring phrasing in Series/Expr.dt.truncate/round (#15698)
  • Various deprecation docstring improvements (#15648)

πŸ› οΈ Other improvements

  • Always expand horizontal_any/all (#15816)
  • Rename decimal_float to decimal_comma (#15817)
  • Split coverage calculation (#15780)
  • Update readme (#15787)
  • Start at using new Bound<> API from PyO3 (#15752)
  • Make json_path_match expr non-anonymous (#15682)

Thank you to all our contributors for making this release possible!
@MarcoGorelli, @NedJWestern, @Robinsane, @TobiasDummschat, @alexander-beedie, @c-peters, @dependabot, @dependabot[bot], @gasmith, @henryharbeck, @itamarst, @kszlim, @mbuhidar, @nameexhaustion, @orlp, @reswqa, @ritchie46, @stinodego and @wsyxbcl

polars - Rust Polars 0.39.2

Published by github-actions[bot] 6 months ago

πŸš€ Performance improvements

  • use two binary searches for equality mask when data is sorted (#15702)
  • improve filter parallelism (#15686)

✨ Enhancements

  • Remove outdated join validation checks (#15701)

🐞 Bug fixes

  • manual cache (#15711)
  • Ensure we don't hold onto Mutex when grabbing join tuples (#15704)
  • allow null dtypes in UDFs if they match the schema (#15699)
  • Respect join_null argument for semi/anti joins (#15696)
  • Ensure we don't hold RwLock when spawning group parallelism in w… (#15697)
  • Ensure empty with_columns is a no-op (#15694)
  • Include predicate in cache state union (#15693)
  • Add the missing feature flag for ewm_mean_by (#15687)
  • 8/16-bits int could also apply in place for log expr (#15680)
  • prepare_expression_for_context shouldn't panic if exceptions raised from optimizer (#15681)

πŸ› οΈ Other improvements

  • Make json_path_match expr non-anonymous (#15682)

Thank you to all our contributors for making this release possible!
@henryharbeck, @kszlim, @orlp, @reswqa and @ritchie46

polars - Python Polars 0.20.22-rc.1

Published by github-actions[bot] 6 months ago

πŸš€ Performance improvements

  • improve filter parallelism (#15686)

🐞 Bug fixes

  • Add the missing feature flag for ewm_mean_by (#15687)
  • 8/16-bits int could also apply in place for log expr (#15680)
  • prepare_expression_for_context shouldn't panic if exceptions raised from optimizer (#15681)

πŸ“– Documentation

  • Various deprecation docstring improvements (#15648)

πŸ› οΈ Other improvements

  • Make json_path_match expr non-anonymous (#15682)

Thank you to all our contributors for making this release possible!
@henryharbeck, @reswqa and @ritchie46

polars - Rust Polars 0.39.1

Published by github-actions[bot] 6 months ago

πŸš€ Performance improvements

  • Fix regression that led to using only a single thread (#15667)

✨ Enhancements

  • add ewm_mean_by (#15638)

🐞 Bug fixes

  • Ensure profile of simple-projection only take own runtime (#15671)
  • Panic if invalid array in object (#15664)
  • Ensure 'CachedSchema' doesn't get synced between plans (#15661)
  • group_by multiple null columns produce phantom row (#15659)
  • rolling_* aggs were behaving as if they return scalars in group-by (#15657)
  • Correct the unsoundness slice range of arr.min/max (#15654)
  • list.mean fast path shouldn't produce NaN (#15652)
  • Fix Display implementation of Duration (#15647)

πŸ“– Documentation

  • Fix typo in legacy install instructions (#15662)
  • Include prelude import in the example (#15633)

πŸ› οΈ Other improvements

  • Remove the remaining usage of deprecated numpy crate APIs (#15668)
  • make Duration.is_constant_duration less strict for non-timezone-aware case (#15639)
  • Fix some typos in comments (#15665)
  • remove unnecessary unsafe in list mean/sum (#15660)

Thank you to all our contributors for making this release possible!
@MarcoGorelli, @Priyansh4444, @StevenMia, @itamarst, @mcrumiller, @orlp, @reswqa, @ritchie46 and @stinodego

polars - Python Polars 0.20.21

Published by github-actions[bot] 6 months ago

πŸš€ Performance improvements

  • Fix regression that led to using only a single thread (#15667)

✨ Enhancements

  • add ewm_mean_by (#15638)

🐞 Bug fixes

  • Ensure profile of simple-projection only take own runtime (#15671)
  • Panic if invalid array in object (#15664)
  • Ensure 'CachedSchema' doesn't get synced between plans (#15661)
  • group_by multiple null columns produce phantom row (#15659)
  • rolling_* aggs were behaving as if they return scalars in group-by (#15657)
  • Correct the unsoundness slice range of arr.min/max (#15654)
  • list.mean fast path shouldn't produce NaN (#15652)

πŸ“– Documentation

  • Add missing deprecation warning to DataFrame.replace (#15612)
  • Fix typo in legacy install instructions (#15662)

πŸ› οΈ Other improvements

  • make Duration.is_constant_duration less strict for non-timezone-aware case (#15639)
  • Fix some typos in comments (#15665)
  • remove unnecessary unsafe in list mean/sum (#15660)
  • fixup failing test due to offset deprecation in upsample (#15636)

Thank you to all our contributors for making this release possible!
@MarcoGorelli, @Priyansh4444, @StevenMia, @eitsupi, @itamarst, @mcrumiller, @orlp, @reswqa, @ritchie46 and @stinodego

polars - Rust Polars 0.39.0

Published by github-actions[bot] 6 months ago

πŸ† Highlights

  • Full plan CSE (#15264)

πŸ’₯ Breaking changes

  • rename memmap -> memory_map as like Python (#15642)
  • pref(rust!, python): Unify sort with SortOptions and SortMultipleOptions (#15590)
  • Update the argument name from dims to dimensions in reshape (#15561)
  • Allow specifying Hive schema in read/scan_parquet (#15434)
  • Raise error when schema_overrides contains nonexistent column name (#15290)
  • Rename Chunk to RecordBatch (#15298)
  • Refactor AnyValue supertype logic (#15280)
  • Rename group_by_rolling to rolling and improve related error messages (#14765)
  • Rename ChunkedArray.try_apply to try_apply_values (#14947)
  • Rename parameter by to group_by in DataFrame.upsample/group_by_dynamic/rolling (#14840)

πŸš€ Performance improvements

  • Fix cross join batch size when one of the DataFrames is tiny (#14347)
  • Fix binview growable complexity O(n*m) -> O(n) (#15628)
  • Remove extra thread spawn from row group fetcher (#15626)
  • Use vertical parallelism if input is chunked for Filter,Select,WithColumns (#15608)
  • read_ipc memory usage tests, and writing fix (#15599)
  • Refactor CSV serialization to not go thorough AnyValue (#15576)
  • don't use dynamic dispatch in visitors (#15607)
  • Improve Bitmap construction performance (#15570)
  • join by row-encoding (#15559)
  • Replace std::thread spawn with tokio block_in_place (#15517)
  • speed up offset_by when a single offset is passed (#15493)
  • Avoid allocation in the hot path for struct JSON serialization (#15449)
  • avoid double-allocation in rolling_apply_agg_window (#15423)
  • Make LogicalPlan immutable (#15416)
  • Add non-order preserving variable row-encoding (#15414)
  • Use row-encoding for multiple key group by (#15392)
  • load bits one word at a time for BitmapIter (#15333)
  • Ipc exec multiple paths (#15040)
  • add SIMD support for if-then-else kernels (#15131)

✨ Enhancements

  • add Expr.dt.add_business_days and Series.dt.add_business_days (#15595)
  • Add str.head and str.tail (#14425)
  • Extended BytecodeParser to handle additional math functions, and imports from the global namespace (#15627)
  • Push down is_between expressions to Arrow (#15180)
  • add holidays argument to business_day_count (#15580)
  • change default to write parquet statistics (#15597)
  • Expressify to_integer (#15604)
  • Optimizer; remove double SORT and redundant projections (#15573)
  • Add null_on_oob parameter to expr.array.get (#15426)
  • support weekend argument in business_day_count (#15544)
  • Enable is_first/last_distinct for not nested non-numeric list (#15552)
  • Turn off cse if cache node found (#15554)
  • Tag concat list as elementwise (#15545)
  • Support list group-by of non numeric lists (#15540)
  • add business_day_count function (#15512)
  • Add SQL support for MEDIAN aggfunc (#15519)
  • Implement string, boolean and binary dtype in top_k (#15488)
  • Add SQL support for TRUNCATE TABLE command (#15513)
  • Add SQL support for GREATEST and LEAST (#15511)
  • Allow specifying Hive schema in read/scan_parquet (#15434)
  • Implements agg_list for NullChunked (#15439)
  • Supports explode_by_offsets for decimal (#15417)
  • Add null_on_oob parameter to expr.list.get (#15395)
  • CSV-writer escape carriage return (#15399)
  • Remove 'FileCacher' optimization (#15357)
  • check input type in entropy (#15351)
  • Implements arr.n_unique (#15296)
  • CSE don't scan share if predicate pushdown predicates don't match (#15328)
  • Remove cached nodes when finished (#15310)
  • Full plan CSE (#15264)
  • Add IR for expressions. (#15168)
  • Warn if map_elements is called without return_dtype specified (#15188)
  • Rename group_by_rolling to rolling and improve related error messages (#14765)
  • Rename ChunkedArray.try_apply to try_apply_values (#14947)
  • Implement strict AnyValue construction for temporal types (#15146)

🐞 Bug fixes

  • Return appropriate data type for time mean and median (#14471)
  • Support index upsampling (#13621)
  • Fix issue in write_excel that could lead to incorrect spanning range determination (#15631)
  • Output correct dtype for mean_horizontal on a single column (#15118)
  • Recompute RowIndex schema after projection pd (#15625)
  • Mean of boolean in streaming group_by incorrectly always gave NULL (#15616)
  • Include cloud creds in cache key (#15609)
  • Fix elementwise-apply if any input is AggregatedScalar (#15606)
  • Explode list should take validity into account (#15572)
  • use larger recursive stack in debug mode (#15593)
  • SQL interface "off-by-one' indexing error with GROUP BY clauses that use position ordinals (#15584)
  • Enable missing features in polars-time (#15558)
  • Handle quoted identifiers when registering CTEs in the SQL engine (#15564)
  • Decompress moved out of schema initialization (#15550)
  • Turn off cse if cache node found (#15554)
  • Resolve function names and prune all aliases. (#15522)
  • list.get should take validity into account (#15516)
  • block decimal in streaming (#15520)
  • group_by partitioned with literal Series panic (#15487)
  • Initialize validity for GroupsProxy::Slice windows (#15509)
  • Fix struct name resolving (#15507)
  • pow return type evaluation (#15506)
  • Allow selectors inside frame-level .filter() (#15445)
  • Don't prune alias in AnonymousFunction subtree (#15453)
  • Fix deadlock in async parquet scan (#15440)
  • datetime operations (e.g. .dt.year) were raising when null values were backed by out-of-range integers (#15420)
  • Ensure Binary -> Binview cast doesn't overflow the buffer size (#15408)
  • Don't prune alias in function subtree (#15406)
  • Return 0 for n_unique() in group-by context when group is empty (#15289)
  • Unset UpdateGroups after group-sensitive expression (#15400)
  • to_any_value should supports all LiteralValue type (#15387)
  • Hash failure combining hash of two numeric columns containing equal values (#15397)
  • Add FixedSizeBinary to arrow field conversion (#15389)
  • Conversion of expr_ir in partition fast path (#15388)
  • sort for series with unsupported dtype should raise instead of panic (#15385)
  • Return correct dtype for s.clear() when dtype is Object (#15315)
  • ensure first datapoint is always included in group_by_dynamic (#15312)
  • Non-exhaustive patterns: arrow-schema::DataType in polars-arrow (#15250)
  • use dynamic stacks for problematic recursive functions (#15355)
  • Raise error when schema_overrides contains nonexistent column name (#15290)
  • Fix cache dot visualization (#15311)
  • Properly propagate strict flag when constructing a Struct Series from any values (#15302)
  • ensure eq for BinaryViewArray checks all elements (#15268)
  • Raise when join projects name with suffix that doesn't exist (#15256)
  • fix kurtosis/skew (#15137)
  • Ensure ooc_start is set (#15255)
  • Fix bug where rolling operations were ignoring check_sorted in some cases (#15227)
  • Fix lazy schema for rle expression (#15248)
  • incorrect negative offset in multi-byte string slicing (#15140)
  • do not clamp negative offsets to start of array prematurely (#15242)
  • allow null index in list.get and array.get (#15239)
  • properly support nulls_last + descending (#15212)
  • Block rounding/truncating to negative durations (#15175)
  • Make parse_url work on windows with object_store (#15191)
  • divide by zero in download speed computation (#15182)

πŸ“– Documentation

  • Add legacy CPU install instructions in user guide (#13676)
  • Various minor updates to User Guide's SQL intro section (#15557)
  • Add outer_coalesce join strategy in the user guide (#15405)
  • Improve docs for Series::new with AnyValue input (#15306)
  • Fix formatting in Series::from_any_values_and_dtype docs (#15244)
  • Correct the definition of an expression in the user guide (#14750)

πŸ“¦ Build system

  • Fix a feature gate for lz4 compression in polars-parquet (#15565)
  • Update Rust toolchain (#15353)

πŸ› οΈ Other improvements

  • rename memmap -> memory_map as like Python (#15642)
  • fixup failing test due to offset deprecation in upsample (#15636)
  • use bound api (#15630)
  • Don't run streaming group-by in partitionable gb (#15611)
  • pref(rust!, python): Unify sort with SortOptions and SortMultipleOptions (#15590)
  • remove try_binary_elementwise_values (#15592)
  • remove raw pointers from visitors. (#15579)
  • rename to IR (#15571)
  • Update the argument name from dims to dimensions in reshape (#15561)
  • Rename ALogicalPlan to FullAccessIR (#15553)
  • Set up CodSpeed (#15537)
  • make dsl immutable and cheap to clone (#15394)
  • use recursive crate, add missing recursive tag (#15393)
  • Update CODEOWNERS (polars-sql) (#15384)
  • Update Rust toolchain (#15353)
  • Update CODEOWNERS (#15352)
  • remove try_apply_values (#15336)
  • always use non-legacy float_sum for mean (#15343)
  • remove legacy bitmap module (#15335)
  • More clippy in Makefile (#15340)
  • Rename Cache[count] to Cache[cache_hits] (#15300)
  • Cleanup file_caching optimization call (#15299)
  • Rename Chunk to RecordBatch (#15298)
  • Refactor AnyValue supertype logic (#15280)
  • reuse message parsing in IPC (#15265)
  • remove 'fast-projection' node (#15253)
  • cleanup column names in optimizer (#15252)
  • remove left_most_input_name from expr ir (#15251)
  • add AlignedBitmapSlice (#15171)
  • Refactor AnyValue construction for Categorical/Enum dtype (#15220)
  • Move ConsecutiveCountState into support module (#15186)
  • Run non-benchmark tests in benchmark workflow (#15207)
  • Add wrapping_abs to arithmetic kernel (#15210)
  • remove raw buffers from BinViewArray (#15206)
  • Enable RUST_BACKTRACE=1 in the CI test suite (#15204)
  • Rename parameter by to group_by in DataFrame.upsample/group_by_dynamic/rolling (#14840)
  • Set dual license for polars-arrow and polars-parquet (#15173)
  • remove parts of legacy bit_util (#15169)
  • remove legacy arrow compute (#15164)

Thank you to all our contributors for making this release possible!
@CanglongCl, @ChayimFriedman2, @Fokko, @JamesCE2001, @MarcoGorelli, @NedJWestern, @Sol-Hee, @TrevorWinstral, @alexander-beedie, @braaannigan, @c-peters, @cmdlineluser, @cojmeister, @deanm0000, @dependabot, @dependabot[bot], @douglas-raillard-arm, @eitsupi, @filabrazilska, @henryharbeck, @i-aki-y, @itamarst, @kszlim, @leoforney, @mbuhidar, @mcrumiller, @mickvangelderen, @nameexhaustion, @orlp, @ozgrakkurt, @petrosbar, @reswqa, @ritchie46, @rob-sil, @sportfloh, @stinodego, @thomaslin2020 and @yutannihilation

polars - Python Polars 0.20.20

Published by github-actions[bot] 6 months ago

πŸš€ Performance improvements

  • Fix cross join batch size when one of the DataFrames is tiny (#14347)
  • Fix binview growable complexity O(n*m) -> O(n) (#15628)
  • Remove extra thread spawn from row group fetcher (#15626)
  • Use vertical parallelism if input is chunked for Filter,Select,WithColumns (#15608)
  • Refactor CSV serialization to not go thorough AnyValue (#15576)
  • don't use dynamic dispatch in visitors (#15607)
  • Improve Bitmap construction performance (#15570)
  • join by row-encoding (#15559)

✨ Enhancements

  • add Expr.dt.add_business_days and Series.dt.add_business_days (#15595)
  • Add str.head and str.tail (#14425)
  • Add union/or operator for pl.Enum (#14965)
  • Extended BytecodeParser to handle additional math functions, and imports from the global namespace (#15627)
  • Push down is_between expressions to Arrow (#15180)
  • add holidays argument to business_day_count (#15580)
  • change default to write parquet statistics (#15597)
  • Expressify to_integer (#15604)
  • Optimizer; remove double SORT and redundant projections (#15573)
  • Add null_on_oob parameter to expr.array.get (#15426)
  • support weekend argument in business_day_count (#15544)
  • Enable is_first/last_distinct for not nested non-numeric list (#15552)
  • Turn off cse if cache node found (#15554)
  • Tag concat list as elementwise (#15545)

🐞 Bug fixes

  • Return appropriate data type for time mean and median (#14471)
  • Fix issue in write_excel that could lead to incorrect spanning range determination (#15631)
  • Output correct dtype for mean_horizontal on a single column (#15118)
  • Recompute RowIndex schema after projection pd (#15625)
  • Mean of boolean in streaming group_by incorrectly always gave NULL (#15616)
  • Include cloud creds in cache key (#15609)
  • Fix elementwise-apply if any input is AggregatedScalar (#15606)
  • Explode list should take validity into account (#15572)
  • use larger recursive stack in debug mode (#15593)
  • SQL interface "off-by-one' indexing error with GROUP BY clauses that use position ordinals (#15584)
  • Enable missing features in polars-time (#15558)
  • Handle quoted identifiers when registering CTEs in the SQL engine (#15564)
  • Decompress moved out of schema initialization (#15550)
  • Turn off cse if cache node found (#15554)

πŸ“– Documentation

  • Add legacy CPU install instructions in user guide (#13676)
  • Examples for errors (#13724)
  • Add docstring examples for reading json (#14481)
  • Add security warning in LazyFrame.deserialize() docstring (#15282)
  • Various minor updates to User Guide's SQL intro section (#15557)

πŸ› οΈ Other improvements

  • Replace most deprecated calls with bounded version (#15632)
  • use bound api (#15630)
  • Initial PyO3 0.21 support (#15622)
  • Don't run streaming group-by in partitionable gb (#15611)
  • pref(rust!, python): Unify sort with SortOptions and SortMultipleOptions (#15590)
  • Set up CodSpeed (#15537)

Thank you to all our contributors for making this release possible!
@CanglongCl, @ChayimFriedman2, @Fokko, @JamesCE2001, @MarcoGorelli, @NedJWestern, @TrevorWinstral, @alexander-beedie, @deanm0000, @douglas-raillard-arm, @eitsupi, @filabrazilska, @i-aki-y, @itamarst, @leoforney, @mcrumiller, @nameexhaustion, @orlp, @ozgrakkurt, @reswqa, @ritchie46 and @stinodego

polars - Python Polars 0.20.19

Published by github-actions[bot] 7 months ago

πŸš€ Performance improvements

  • Replace std::thread spawn with tokio block_in_place (#15517)
  • speed up offset_by when a single offset is passed (#15493)
  • Avoid allocation in the hot path for struct JSON serialization (#15449)

✨ Enhancements

  • Support list group-by of non numeric lists (#15540)
  • add business_day_count function (#15512)
  • Add SQL support for MEDIAN aggfunc (#15519)
  • Implement string, boolean and binary dtype in top_k (#15488)
  • Add SQL support for TRUNCATE TABLE command (#15513)
  • Add SQL support for GREATEST and LEAST (#15511)
  • Allow specifying Hive schema in read/scan_parquet (#15434)
  • Implements agg_list for NullChunked (#15439)

🐞 Bug fixes

  • dot product of two integer series is cast to float (#15502)
  • Resolve function names and prune all aliases. (#15522)
  • Pass skip_rows_after_header to pyarrow csv reader (#15533)
  • No longer error when schema_overrides contains nonexistent columns (#15528)
  • list.get should take validity into account (#15516)
  • block decimal in streaming (#15520)
  • group_by partitioned with literal Series panic (#15487)
  • Initialize validity for GroupsProxy::Slice windows (#15509)
  • Fix struct name resolving (#15507)
  • pow return type evaluation (#15506)
  • Address issue with read_database draining iter_batches early (#15504)
  • Allow selectors inside frame-level .filter() (#15445)
  • Don't prune alias in AnonymousFunction subtree (#15453)
  • Raise if pass a negative n into clear (#15432)
  • Fix deadlock in async parquet scan (#15440)

πŸ“– Documentation

  • Update leftover references of by parameter to group_by in DataFrame/LazyFrame.upsample/group_by_dynamic/rolling (#15527)
  • Add make docs command, DataType docs/layout tweak, minor README updates (#15386)
  • Add example for Series.list.median. (#15451)

πŸ› οΈ Other improvements

  • Remove unused code paths in read_parquet (#15532)
  • Organize utils for I/O functionality (#15529)
  • Remove private DataFrame._read classmethods (#15521)
  • Move dedicated inference code out of io.database executor module (#15526)
  • Add unstable warning to hive_schema functionality (#15508)

Thank you to all our contributors for making this release possible!
@CanglongCl, @ChayimFriedman2, @MarcoGorelli, @alexander-beedie, @cmdlineluser, @dependabot, @dependabot[bot], @henryharbeck, @mbuhidar, @nameexhaustion, @reswqa, @ritchie46, @rob-sil and @stinodego

polars - Python Polars 0.20.18

Published by github-actions[bot] 7 months ago

πŸš€ Performance improvements

  • CSV reading memory usage tests and fixes (#15422)
  • avoid double-allocation in rolling_apply_agg_window (#15423)
  • Make LogicalPlan immutable (#15416)
  • Add non-order preserving variable row-encoding (#15414)
  • Use row-encoding for multiple key group by (#15392)

✨ Enhancements

  • Supports explode_by_offsets for decimal (#15417)
  • Add read_clipboard and DataFrame.write_clipboard (#15272)
  • Add null_on_oob parameter to expr.list.get (#15395)
  • make Series.__bool__ error message Rusttier (#15407)
  • CSV-writer escape carriage return (#15399)

🐞 Bug fixes

  • datetime operations (e.g. .dt.year) were raising when null values were backed by out-of-range integers (#15420)
  • Ensure Binary -> Binview cast doesn't overflow the buffer size (#15408)
  • Don't prune alias in function subtree (#15406)
  • Return 0 for n_unique() in group-by context when group is empty (#15289)
  • Unset UpdateGroups after group-sensitive expression (#15400)
  • to_any_value should supports all LiteralValue type (#15387)
  • Hash failure combining hash of two numeric columns containing equal values (#15397)
  • Add FixedSizeBinary to arrow field conversion (#15389)
  • Conversion of expr_ir in partition fast path (#15388)
  • fix panic when doing a scan_parquet with hive partioning (#15381)
  • sort for series with unsupported dtype should raise instead of panic (#15385)

πŸ“– Documentation

  • Added example for explode mapping strategy in pl.Expr.over (#15402)
  • Add outer_coalesce join strategy in the user guide (#15405)
  • Change the example to series for series/array.py (#15383)
  • Add "See Also" for arg_sort and arg_sort_by (#15348)

πŸ› οΈ Other improvements

  • make dsl immutable and cheap to clone (#15394)
  • use recursive crate, add missing recursive tag (#15393)
  • Update CODEOWNERS (polars-sql) (#15384)

Thank you to all our contributors for making this release possible!
@CanglongCl, @JamesCE2001, @MarcoGorelli, @Sol-Hee, @alexander-beedie, @dependabot, @dependabot[bot], @itamarst, @kszlim, @mcrumiller, @nameexhaustion, @orlp, @reswqa, @ritchie46, @rob-sil and @thomaslin2020

polars - Python Polars 0.20.17

Published by github-actions[bot] 7 months ago

πŸ† Highlights

  • Full plan CSE (#15264)

⚠️ Deprecations

  • Rename parameter by to group_by in DataFrame.upsample/group_by_dynamic/rolling (#14840)
  • Rename from_repr parameter from tbl to data (#15156)

πŸš€ Performance improvements

  • load bits one word at a time for BitmapIter (#15333)
  • Ipc exec multiple paths (#15040)
  • add SIMD support for if-then-else kernels (#15131)

✨ Enhancements

  • Remove 'FileCacher' optimization (#15357)
  • check input type in entropy (#15351)
  • Implements arr.n_unique (#15296)
  • CSE don't scan share if predicate pushdown predicates don't match (#15328)
  • Add read_database support for SurrealDB ("ws" and "http") (#15269)
  • Only allow inputs of type Sequence in from_records (#15329)
  • In hypothesis testing strategies, enable Decimal strategy by default (#15321)
  • Remove cached nodes when finished (#15310)
  • Full plan CSE (#15264)
  • More robust handling of async database calls (#15202)
  • Add name parameter to GroupBy.len method (#15235)
  • Add IR for expressions. (#15168)
  • Improve read_database when reading from KΓΉzu graph database (#15218)
  • Warn if map_elements is called without return_dtype specified (#15188)
  • Add support for async SQLAlchemy connections to read_database (#15162)
  • Infer time_unit in pl.duration when nanoseconds is specified (#14987)
  • Add strict parameter to from_dict/from_records (#15158)

🐞 Bug fixes

  • Return correct dtype for s.clear() when dtype is Object (#15315)
  • ensure first datapoint is always included in group_by_dynamic (#15312)
  • Non-exhaustive patterns: arrow-schema::DataType in polars-arrow (#15250)
  • use dynamic stacks for problematic recursive functions (#15355)
  • Adding default ddof for Series.list.std and Series.list.var (#15267)
  • Raise properly for slices not supported by LazyFrame (#15331)
  • Propagate strictness in from_dicts (#15344)
  • Raise error when schema_overrides contains nonexistent column name (#15290)
  • Enforce integer dtype input for int_range and int_ranges (#15339)
  • Preserve Decimal precision when constructing empty Series (#15320)
  • Fix cache dot visualization (#15311)
  • Handle special case correctly when slicing a LazyFrame (#15297)
  • Properly propagate strict flag when constructing a Struct Series from any values (#15302)
  • Consistent expansion of nested struct data during DataFrame init from dict (#15217)
  • Raise when join projects name with suffix that doesn't exist (#15256)
  • Ensure ooc_start is set (#15255)
  • Fix bug where rolling operations were ignoring check_sorted in some cases (#15227)
  • Fix lazy schema for rle expression (#15248)
  • incorrect negative offset in multi-byte string slicing (#15140)
  • do not clamp negative offsets to start of array prematurely (#15242)
  • allow null index in list.get and array.get (#15239)
  • Avoid loading all columns in read_parquet when columns parameter is specified (#15229)
  • properly support nulls_last + descending (#15212)
  • fix nested runtime panic (#15216)
  • Block rounding/truncating to negative durations (#15175)
  • Ensure the cs.temporal() selector uses wildcard time zone matching for Datetime (#13683)
  • Consistently raise TypeError on constructor failure (#15178)
  • Properly propagate strictness in some constructor cases (#15166)
  • Fix constructing a Series from a list of Series with given dtype (#15144)

πŸ“– Documentation

  • Fix time unit in timestamp example (#15281)
  • Fix link to renamed method (.list.lengths -> .list.len) (#15228)
  • Update Excel and database pages in user guide (#14721)
  • Add examples for Series.search_sorted (#14737)
  • Correct the definition of an expression in the user guide (#14750)
  • Add a note about the behaviour of lower/upper bounds for is_between, and add an example (#15197)

πŸ“¦ Build system

  • Update Cargo lock (#15370)

πŸ› οΈ Other improvements

  • Memory usage test infrastructure, plus a test for #15098 (#15285)
  • Update CODEOWNERS (#15352)
  • remove try_apply_values (#15336)
  • always use non-legacy float_sum for mean (#15343)
  • remove legacy bitmap module (#15335)
  • Fix test not writing to temporary directory (#15318)
  • Reorganize tests for clear operation (#15304)
  • Rename Cache[count] to Cache[cache_hits] (#15300)
  • Cleanup file_caching optimization call (#15299)
  • Minor refactor of PyDataFrame.from_dicts (#15274)
  • remove 'fast-projection' node (#15253)
  • cleanup column names in optimizer (#15252)
  • remove left_most_input_name from expr ir (#15251)
  • add AlignedBitmapSlice (#15171)
  • Run non-benchmark tests in benchmark workflow (#15207)
  • Add wrapping_abs to arithmetic kernel (#15210)
  • remove raw buffers from BinViewArray (#15206)
  • Enable RUST_BACKTRACE=1 in the CI test suite (#15204)
  • Split read_database functionality into cleaner module structure (#15201)
  • Clean up some of the AnyValue conversion logic (#15190)
  • remove parts of legacy bit_util (#15169)
  • remove legacy arrow compute (#15164)
  • Split up dataframe module in PyO3 bindings (#15165)
  • Remove unused private constructors (#15160)

Thank you to all our contributors for making this release possible!
@MarcoGorelli, @alexander-beedie, @braaannigan, @c-peters, @cojmeister, @deanm0000, @dependabot, @dependabot[bot], @itamarst, @kszlim, @mbuhidar, @mcrumiller, @mickvangelderen, @orlp, @petrosbar, @reswqa, @ritchie46, @rob-sil, @sportfloh, @stinodego and @yutannihilation

polars - Rust Polars 0.38.3

Published by github-actions[bot] 7 months ago

πŸš€ Performance improvements

  • add new when-then-otherwise kernels (#15089)
  • Coerce sorted flag of unit arrays during concat (#15104)
  • Use sorted flag for (first|last)_non_null (#15050)
  • OOC sort improvements (#14994)

✨ Enhancements

  • raise if both closed and by are passed to rolling_* aggregations (#15108)
  • raise informative error for rolling_* aggs with by of invalid dtype (#15088)
  • add non_existent arg to replace_time_zone (#15062)
  • Support single nested row encodings (#15105)
  • make ooc sort configurable (#15084)
  • Make register_plugin a standalone function and include shared lib discovery (#14804)
  • Async parquet: Decode parquet on a blocking thread pool (#15083)
  • let "ambiguous" take "null" value (#14961)
  • Raise informative error message when join would introduce duplicate column name (#15042)
  • Allow cast of decimal to boolean (#15015)
  • Return error when no supertype can be determined in AnyValue constructor when strict=false (#15025)
  • Implement IpcReaderAsync (#14984)
  • Support Array statistics in parquet (#15031)
  • Support decimal groupby (#15000)
  • Add thread names to rayon thread pool (#15024)
  • Support decimal uniq (#15001)
  • expose timings in verbose state of OOC sort (#14979)

🐞 Bug fixes

  • Fix Series construction from nested list with mixed data types (#15046)
  • Support BinaryView in row decoder to prevent a panic in streaming group by (#15117)
  • Binview chunked gather; don't modify inlined view (#15124)
  • Fix chunked_id gather for binview buffers (#15123)
  • Don't cache HTTP object stores as they maintain URL state (#15121)
  • use wrapping_add in csv line snooping (#15109)
  • Output u32 when sum_horizontal provided with single boolean column (#15114)
  • Ensure eprintln! is only called within debug/verbose context (#15100)
  • Propagate error instead of panicking when calling product on an invalid type (#15093)
  • Raise error when casting Array to different width (#14995)
  • Fix file scan bugs for ipc, csv and parquet that occur with combinations of glob paths, row indices and predicates (#15065)
  • Incorrectly preserved sorted flag when concatenating sorted series containing nulls (#15082)
  • Return largest non-NaN value for max() on sorted float arrays if it exists instead of NaN (#15060)
  • return NaN for all-NaN min/max (#15066)
  • Prevent "index out of range for slice" error in parquet reader (#15021)
  • Respect nulls_last in streaming sort (#15061)
  • Fix Series construction from nested list with mixed data types (#15046)
  • Don't count nulls in streaming count agg (#15051)
  • agg_list on decimal lost scale (#15054)
  • Block predicate pushdown on equality that are use in join (#15055)
  • Enum equality based on categories (#15053)
  • Strict cast in when/then/otherwise operation (#15052)
  • Don't panic in string_addition_to_linear_concat (#15006)
  • CSV do utf8-validation after escaping fields (#15004)
  • Use primitive constructors to create a Series of lists when dtype is provided (#15002)
  • replace_time_zone with single-null-element "ambiguous" was panicking (#14971)

πŸ“– Documentation

  • Fix typo in comment (#14997)

πŸ› οΈ Other improvements

  • Extend and speed up scan tests (#15127)
  • always assert on ChunkedArray::get (#15120)
  • Use ObjectStore instead of AsyncRead in parquet get metadata (#15069)
  • Minor refactor of Rust any value constructors (#15077)
  • Simplify streaming execution (#15039)
  • Ensure we hit the spilled source path in ooc sort test (#15010)
  • Refactor constructor code (#15009)
  • Apply clippy:assigning_clones lint (#14999)
  • fix features (#14977)

Thank you to all our contributors for making this release possible!
@JackRolfe, @MKisilyov, @MarcoGorelli, @alexander-beedie, @c-peters, @flisky, @jqnatividad, @mcrumiller, @mickvangelderen, @nameexhaustion, @orlp, @petrosbar, @ritchie46, @stinodego and @trueb2

polars - Python Polars 0.20.16

Published by github-actions[bot] 7 months ago

πŸš€ Performance improvements

  • add new when-then-otherwise kernels (#15089)
  • Coerce sorted flag of unit arrays during concat (#15104)
  • Use sorted flag for (first|last)_non_null (#15050)
  • OOC sort improvements (#14994)

✨ Enhancements

  • improved dtype inference/refinement for read_database results (#15126)
  • raise if both closed and by are passed to rolling_* aggregations (#15108)
  • raise informative error for rolling_* aggs with by of invalid dtype (#15088)
  • add non_existent arg to replace_time_zone (#15062)
  • Support single nested row encodings (#15105)
  • make ooc sort configurable (#15084)
  • Make register_plugin a standalone function and include shared lib discovery (#14804)
  • Expose infer_schema_length parameter on read_database (#15076)
  • Async parquet: Decode parquet on a blocking thread pool (#15083)
  • let "ambiguous" take "null" value (#14961)
  • Raise informative error message when join would introduce duplicate column name (#15042)
  • Allow cast of decimal to boolean (#15015)
  • Add strict parameter to DataFrame constructor to allow non-strict construction (#15034)
  • Support Array statistics in parquet (#15031)
  • Support decimal groupby (#15000)
  • Add thread names to rayon thread pool (#15024)
  • Support decimal uniq (#15001)
  • expose timings in verbose state of OOC sort (#14979)

🐞 Bug fixes

  • Support BinaryView in row decoder to prevent a panic in streaming group by (#15117)
  • Binview chunked gather; don't modify inlined view (#15124)
  • Fix chunked_id gather for binview buffers (#15123)
  • Don't cache HTTP object stores as they maintain URL state (#15121)
  • Output u32 when sum_horizontal provided with single boolean column (#15114)
  • Propagate error instead of panicking when calling product on an invalid type (#15093)
  • Raise error when casting Array to different width (#14995)
  • Fix file scan bugs for ipc, csv and parquet that occur with combinations of glob paths, row indices and predicates (#15065)
  • Incorrectly preserved sorted flag when concatenating sorted series containing nulls (#15082)
  • Return largest non-NaN value for max() on sorted float arrays if it exists instead of NaN (#15060)
  • return NaN for all-NaN min/max (#15066)
  • Prevent "index out of range for slice" error in parquet reader (#15021)
  • Respect nulls_last in streaming sort (#15061)
  • Fix Series construction from nested list with mixed data types (#15046)
  • Don't count nulls in streaming count agg (#15051)
  • agg_list on decimal lost scale (#15054)
  • Block predicate pushdown on equality that are use in join (#15055)
  • Enum equality based on categories (#15053)
  • Don't panic in string_addition_to_linear_concat (#15006)
  • CSV do utf8-validation after escaping fields (#15004)
  • Use primitive constructors to create a Series of lists when dtype is provided (#15002)
  • replace_time_zone with single-null-element "ambiguous" was panicking (#14971)

πŸ“– Documentation

  • Update write_database code blocks in user guide (#15106)
  • Add missing docstring examples in the Struct namespace (#15071)
  • Improve API reference landing page (#14888)
  • improve join_asof example (#14993)
  • Fix inadvertent swap of new and old parameters in replace description (#15019)

πŸ› οΈ Other improvements

  • Extend and speed up scan tests (#15127)
  • Add parameterized-scan-tests (#15057)
  • Simplify streaming execution (#15039)
  • Ensure we hit the spilled source path in ooc sort test (#15010)
  • Refactor constructor code (#15009)
  • fix features (#14977)
  • Revert pinning PyPI publish action (#14975)

Thank you to all our contributors for making this release possible!
@JackRolfe, @MKisilyov, @MarcoGorelli, @alexander-beedie, @c-peters, @flisky, @jqnatividad, @mcrumiller, @mickvangelderen, @nameexhaustion, @orlp, @petrosbar, @ritchie46, @stinodego and @trueb2