Releases: neutrinoceros/rlic
v0.5.3
What's Changed
This release fixes a couple of bugs introduced in rlic 0.5.2 where results would be incorrect for some combinations of build-time options, some of which affected existing wheels.
Version 0.5.2 was yanked from PyPI and never published to conda-forge.
Changes
- BLD: warning free builds in any configuration by @neutrinoceros in #267
- BUG: fix time_to_next_pixel computation with branchless (and without fma) features by @neutrinoceros in #268
- BUG: fix time_to_next_pixel computation wihout branchless feature by @neutrinoceros in #271
- WHL: re-enable fma on manylinux x86_64 wheels, disable branchless by @neutrinoceros in #274
- WHL: build macos-x86_64 wheels natively again, and ensure they are tested by @neutrinoceros in #265
Internal
- MNT: disable uv caching in release workflows by @neutrinoceros in #266
- TST: run rust tests against all build configurations by @neutrinoceros in #275
- REL: prepare release 0.5.3 by @neutrinoceros in #276
Full Changelog: v0.5.2...v0.5.3
v0.5.2 (yanked)
Summary
This release was motivated by the discovery that some previous changes, labeled as optimizations were actually detrimental to performance on other platforms (macos and Linux, both on x86_64, were known to be impacted). rlic 0.5.1 could take about 2x as long to converge, as compared with the pristine version 0.2.0.
This new release more than makes up for it; by deselecting changes known to affect performance negatively, making it the fastest release yet on these targets.
This is also the first release to support Windows arm64. Python 3.10 to 3.14 is supported.
What's Changed
- WHL: add support for Windows-arm64 by @neutrinoceros in #194
- DOC: document stability guarantees and free-threading support by @neutrinoceros in #204
- ENH: enable FMA for x86_64 targets by @neutrinoceros in #257
- BLD/WHL: add 'fma' and 'branchless' opt-out build options by @neutrinoceros in #253
- WHL: disable FMA for Linux x86_64 wheels by @neutrinoceros in #254
- WHL: fixup musllinux build setup by @neutrinoceros in #256
Internal
- MNT: remove cp39 PyPI trove classifier by @neutrinoceros in #206
- MNT: upgrade lockfile (numpy 2.3.2) by @neutrinoceros in #208
- TST: upgrade regular CI to CPython 3.14 by @neutrinoceros in #207
- WHL: cross compile macos x86_64 wheels by @neutrinoceros in #209
- Lock file maintenance by @renovate[bot] in #211
- Update astral-sh/setup-uv action to v6.4.3 by @renovate[bot] in #212
- RFC: rewrite complex pattern-matching trees with
asbounding by @neutrinoceros in #215 - Lock file maintenance by @renovate[bot] in #216
- Lock file maintenance by @renovate[bot] in #217
- RFC: use
case str(x)shorthand forcase str() as xby @neutrinoceros in #218 - Lock file maintenance by @renovate[bot] in #219
- Lock file maintenance by @renovate[bot] in #221
- Update actions/checkout action to v5 by @renovate[bot] in #222
- Update actions/download-artifact action to v5 by @renovate[bot] in #223
- MNT: refine coverage settings by @neutrinoceros in #224
- DEP: bump rust dependencies by @neutrinoceros in #226
- Lock file maintenance by @renovate[bot] in #227
- Lock file maintenance by @renovate[bot] in #228
- Lock file maintenance by @renovate[bot] in #229
- Update PyO3/maturin-action action to v1.49.4 by @renovate[bot] in #231
- Update Swatinem/rust-cache action to v2.8.1 by @renovate[bot] in #232
- Update astral-sh/setup-uv action to v6.8.0 by @renovate[bot] in #233
- Update pypa/gh-action-pypi-publish action to v1.13.0 by @renovate[bot] in #234
- SEC: apply zizmor-generated auto-fixes by @neutrinoceros in #235
- SEC: refine GHA permissions by @neutrinoceros in #236
- SEC: add zizmor as a pre-commit hook by @neutrinoceros in #237
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #238
- Lock file maintenance by @renovate[bot] in #230
- Update actions/setup-python action to v6 by @renovate[bot] in #239
- Update GitHub Artifact Actions (major) by @renovate[bot] in #241
- Update astral-sh/setup-uv action to v7 by @renovate[bot] in #240
- BLD/DEP: bump pyO3 and numpy-rust to 0.27 by @neutrinoceros in #242
- Lock file maintenance by @renovate[bot] in #243
- Update astral-sh/setup-uv action to v7.1.2 by @renovate[bot] in #244
- Lock file maintenance by @renovate[bot] in #246
- TST/DEP: upgrade pytest to version 9 by @neutrinoceros in #247
- Lock file maintenance by @renovate[bot] in #248
- MNT: bump vectorplot to 0.2.0post5 by @neutrinoceros in #249
- BLD: use a reference target CPU instead of specific instructions (FMA) for x86-64 targets by @neutrinoceros in #251
- Lock file maintenance by @renovate[bot] in #261
- Update astral-sh/setup-uv action to v7.1.3 - autoclosed by @renovate[bot] in #260
- REL: prepare release 0.5.2 by @neutrinoceros in #259
Full Changelog: v0.5.1...v0.5.2
v0.5.1
v0.5.0
What's Changed
- DEP: drop support for Python 3.9, require 3.10 or newer by @neutrinoceros in #197
- FEAT: add support for fine-grained boundary conditions selection. Support periodic boundaries. by @neutrinoceros in #196
Internal:
- TST: rewrite
test_exceptions.pyusing pytest 8.4 by @neutrinoceros in #198 - Update astral-sh/setup-uv action to v6.4.0 by @renovate[bot] in #199
- REL: prepare release 0.5.0 by @neutrinoceros in #200
Full Changelog: v0.4.0...v0.5.0
v0.4.0
Highlights
This release brings a new batch of small performance optimizations. This version is overall between 15% and 20% faster, compared to rLIC 0.3.4
These improvements come at the cost of one, extremely minor breaking change. Namely, rust panics are not unwind anymore. This means in the unlikely event that an error would happen within rLIC.convolve's hotloop, the Python process will now be straight up killed. Previously, a Python exception would be raised in this case.
Binary size was also reduced by a couple 10%, though it was already very small (>1 MiB) to begin with.
Support for NumPy 1.21.x was dropped. NumPy 1.22 (or newer) is now required.
CPython 3.14 (currently in beta) is now officially supported. Python 3.9 to 3.14 is supported.
Following NumPy, manylinux image was bumped from 2014 to 2_28. In practice this means that manylinux-supported platforms now require glibc 2.28 (2018) or newer, which is still very conservative.
Some minor documentation fixes and internal refactors are also included.
What's Changed
- DOC: consistently indicate argument types (positional-only and keyword-only) in
rlic.convolve's docstring by @neutrinoceros in #151 - TST: start testing against CPython 3.14 by @neutrinoceros in #155
- TST: run regression tests by default with
uvby @neutrinoceros in #166 - DOC: fix invalid example code and re-generate output image by @neutrinoceros in #167
- PERF: make panics fatal errors, improving performance and reducing binary size by @neutrinoceros in #172
- DEP: drop support for NumPy 1.21.x, require >=1.22.0 by @neutrinoceros in #174
- PERF: leverage FMA instructions (~3% gain) by @neutrinoceros in #173
- PERF: avoid back-and-forth conversions between usize and i64 representations for image coordinates (gain ~2%) by @neutrinoceros in #178
- DOC: document memory usage by @neutrinoceros in #185
- DOC: add PyPI classifiers by @neutrinoceros in #186
Internal
- TST: inspect core module location in pytest header by @neutrinoceros in #140
- TST: fine tune cache keys in CI to better avoid repeated downloads of Python packages by @neutrinoceros in #141
- Lock file maintenance by @renovate in #142
- Lock file maintenance by @renovate in #143
- Lock file maintenance by @renovate in #144
- Update astral-sh/setup-uv action to v6 by @renovate in #145
- Update astral-sh/setup-uv action to v6.0.1 by @renovate in #146
- Update actions/download-artifact action to v4.3.0 by @renovate in #147
- Lock file maintenance by @renovate in #149
- Lock file maintenance by @renovate in #150
- DEP: bump PyO3 and numpy-rust to 0.25.0 by @neutrinoceros in #152
- Lock file maintenance by @renovate in #154
- Lock file maintenance by @renovate in #156
- Update actions/setup-python action to v5.6.0 by @renovate in #157
- Update astral-sh/setup-uv action to v6.1.0 by @renovate in #158
- Lock file maintenance by @renovate in #159
- TYP: let mypy typecheck against runtime-detected Python, rather than hardcoded oldest supported by @neutrinoceros in #161
- Lock file maintenance by @renovate in #160
- Lock file maintenance by @renovate in #162
- Lock file maintenance by @renovate in #163
- Update PyO3/maturin-action action to v1.49.3 by @renovate in #164
- Update astral-sh/setup-uv action to v6.3.1 by @renovate in #165
- TST: don't cache dev dependencies in CI and don't build vectorplot by @neutrinoceros in #168
- RFC: split
UVMode::parseinto its own function by @neutrinoceros in #170 - RFC: simplify duplicated, internal logic for pixel selection by @neutrinoceros in #171
- DEP: upgrade PyO3 0.25.1 by @neutrinoceros in #176
- MNT: handle intentional underflows in debug mode by @neutrinoceros in #179
- TST: include debug builds to CI by @neutrinoceros in #181
- RFC/CLN: cleanup underflow handling by @neutrinoceros in #182
- RFC: clean up image boundary handling by @neutrinoceros in #183
- RFC: apply boundary conditions in all directions on each step, allowing for complex cases by @neutrinoceros in #188
- RFC: tidy up passing u/v field in between functions by @neutrinoceros in #189
- TST: ensure lock file upgrades include tested Python version in future python deps job by @neutrinoceros in #191
- Update Swatinem/rust-cache action to v2.8.0 by @renovate in #190
- WHL: bump manylinux from 2014 to 2_28 by @neutrinoceros in #193
- REL: prepare release 0.4.0 by @neutrinoceros in #195
Full Changelog: v0.3.4...v0.4.0
v0.3.4
Changed
- BLD: declare compatibility with free-threaded CPython by @neutrinoceros in #117
- TYP: add array shape information to type hints by @neutrinoceros in #120
- ENH: report all exceptions instead of just the first one when validating inputs, on Python 3.9 and 3.10 by @neutrinoceros in #135
- additional documentation fixes.
Internal
- Lock file maintenance by @renovate in #115
- DEP: bump pyO3 (->0.24.0) and numpy-rust (->0.24.0) by @neutrinoceros in #116
- Lock file maintenance by @renovate in #119
- Lock file maintenance by @renovate in #122
- Lock file maintenance by @renovate in #123
- Update PyO3/maturin-action action to v1.47.3 by @renovate in #124
- Update astral-sh/setup-uv action to v5.4.1 by @renovate in #129
- Update actions/setup-python action to v5.5.0 by @renovate in #128
- Update actions/download-artifact action to v4.2.1 by @renovate in #127
- Update Swatinem/rust-cache action to v2.7.8 by @renovate in #125
- Update actions/upload-artifact action to v4.6.2 by @renovate in #126
- Update Rust crate pyo3 to v0.24.1 by @renovate in #130
- Lock file maintenance by @renovate in #131
- MNT: migrate typo-checker pre-commit hook (typos -> codespell) by @neutrinoceros in #133
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #132
- TYP: rename internal TypeVar (
FloatT->F) by @neutrinoceros in #134 - Update PyO3/maturin-action action to v1.49.1 by @renovate in #137
- Lock file maintenance by @renovate in #138
- REL: prepare release 0.3.4 by @neutrinoceros in #136
Full Changelog: v0.3.3...v0.3.4
v0.3.3
What's Changed
- BUG: fix a typo in a user visible error message by @neutrinoceros in #108
- ENH: report all exceptions instead of just the first one when validating inputs, on Python 3.11 and newer by @neutrinoceros in #107
- BUG: avoid returning early before all validators had a chance to run by @neutrinoceros in #109
- ENH: add a group-level exception message by @neutrinoceros in #110
- RFC: derive Clone instead of manually implementing it by @neutrinoceros in #111
- RFC: improve cohesion between PixelCoordinates and ImageDimensions structs by @neutrinoceros in #112
- REL: prepare release 0.3.3 by @neutrinoceros in #113
Full Changelog: v0.3.2...v0.3.3
v0.3.2
What's Changed
- TST: add a low level test for the advance function by @neutrinoceros in #92
- DOC: prefer using a convex kernel shape in examples by @neutrinoceros in #94
- WHL: make sure published artifacts are not polluted by @neutrinoceros in #98
- REL: add pre-publication checks by @neutrinoceros in #99
- ENH: terminate streamline integration when a NaN vector component is encountered by @neutrinoceros in #101
- ENH: explicitly forbid non-finite values in kernel by @neutrinoceros in #102
- Update Rust crate either to v1.15.0 by @renovate in #104
- REL: prepare release 0.3.2 by @neutrinoceros in #103
Full Changelog: v0.3.1...v0.3.2
v0.3.1
What's Changed
- RFC: simplify {
f32,f64}-compatible trait by @neutrinoceros in #82 - DOC: add an example script to documentation by @neutrinoceros in #83
- ENH: allow negative values in kernel by @neutrinoceros in #84
- ENH: allow kernels with arbitrary sizes by @neutrinoceros in #86
- DOC: improve docstring's description of the texture and kernel arguments" by @neutrinoceros in #87
- Lock file maintenance by @renovate in #89
- Update PyO3/maturin-action action to v1.47.2 by @renovate in #88
- REL: prepare release 0.3.1 by @neutrinoceros in #90
Full Changelog: v0.3.0...v0.3.1
v0.3.0
What's Changed
This release contains significant speedups (about 30 to 50% drops in calculation times), as well as a couple internal refactors.
- PERF: disable build parallelism, to the benefit of runtime performance by @neutrinoceros in #67
- RFC: name the current pixel inside main loop by @neutrinoceros in #68
- RFC: rewrite hot loops as for loops instead of while by @neutrinoceros in #70
- RFC: increase similarity between subloops by @neutrinoceros in #71
- RFC: avoid repetition between forward and backward subloops by @neutrinoceros in #56
- DOC: add missing notes and return section to
rlic.convolve's docstring by @neutrinoceros in #73 - TST: test against reference implementation by @neutrinoceros in #72
- RFC: move definitions to a private Python module by @neutrinoceros in #74
- RFC: move internal code around to keep only minimal line count in #[pymodule] func by @neutrinoceros in #75
- PERF: avoid conditional branching in pixel traversal time evaluation by @neutrinoceros in #76
- Update astral-sh/setup-uv action to v5.3.1 by @renovate in #77
- Lock file maintenance by @renovate in #78
- REL: prepare release 0.3.0 by @neutrinoceros in #79
Full Changelog: v0.2.2...v0.3.0