========= Changelog ========= Version 2.1.0 (2026-03-12) ========================== **Changed:** * Improved ``rpack.pack()`` search behavior for thin-rectangle pathological inputs by adding staged coarse candidate stepping with bounded local refinement. * Documented the thin-rectangle performance benchmark results in the documentation. * ``rpack.pack()`` now retries overflowing inputs via bigint preprocessing: exact axis-wise ``gcd`` normalization first, then conservative power-of-two scaling when needed so very large Python integers can still be packed. The conservative fallback can still return false negatives (``PackingImpossibleError`` for feasible inputs), including some cases where explicit bounds are mathematically non-binding, due to quantization and final bound revalidation. * Public helpers ``rpack.bbox_size()``, ``rpack.overlapping()`` and ``rpack.packing_density()`` now transparently handle bigint packings by falling back to Python integer arithmetic when C ``long`` conversion overflows. **Bugfixes:** * Restored the public helper docstrings after wrapping ``rpack.bbox_size()``, ``rpack.overlapping()`` and ``rpack.packing_density()`` for bigint fallback support, so ``help()`` and the generated API reference stay populated. Version 2.0.6 (2026-02-14) ========================== **Removed:** * Extension module ``rpack._rpack`` along with the legacy ``rpack.group`` implementation and deprecated ``rpack._rpack.pack`` entry point. **Bugfixes:** * Guarded area and total-area arithmetic against ``long`` overflow in the core packing path. * Hardened jump-matrix allocation math and split-index bounds checks to prevent overflow and out-of-bounds access. * Updated overflow-focused tests to behave consistently across platforms. **Other changes:** * Improved packaging/release tooling by tightening sdist inputs and hardening release workflow checks. * Added a benchmark CLI and refreshed documentation/build metadata. Version 2.0.5 (2025-11-07) ========================== **Added:** * Binary wheels and packaging metadata for Python 3.14. **Bugfixes:** * ``rpack.pack()`` now preserves ``max_width``/``max_height`` values of zero so that impossible packings raise ``PackingImpossibleError`` correctly instead of being treated as unbounded. Version 2.0.4 (2025-03-30) ========================== **Other changes:** * Publishing a release on GitHub now uploads the built distribution to PyPI automatically. Version 2.0.3 (2025-03-30) ========================== **Changed:** * Documentation builds target HTML only, removing the LaTeX toolchain and updating the Read the Docs configuration accordingly. * Reformatted the Python sources and documentation helpers with ``black`` to standardize code style across the project. * Improved the release workflow to handle PyPI uploads reliably, including fixing the long description metadata and skipping artefacts that were already published. **Bugfixes:** * Removed unused bookkeeping in ``taskpack.c`` to silence compiler warnings. Version 2.0.2 (2023-10-10) ========================== **Added:** * Declared support for Python 3.12 in the package metadata. **Changed:** * Adopted GitHub Actions (cibuildwheel) for building release artefacts across supported platforms. * Updated hosted documentation assets and build configuration. * Relaxed the Cython build configuration to stay compatible with newer Cython releases while silencing future ``nogil`` signature warnings. **Bugfixes:** * Restored compatibility with Cython 3 when compiling the extension module. Version 2.0.1 (2021-05-13) ========================== **Bugfixes:** * ``rpack.pack()`` behaved incorrectly when the arguments ``max_width`` and/or ``max_height`` were used. For instance, it could return incorrect rectangle positions which made the rectangles overlap. Version 2.0.0 (2020-12-29) ========================== **Added:** * Two new keyword arguments to ``rpack.pack()`` named ``max_width`` and ``max_height`` used to optionally set restrictions on the resulting bounding box. * Exception ``PackingImpossibleError``. * Function ``rpack.bbox_size``. * Function ``rpack.packing_density``. * Function ``rpack.overlapping``. * Build dependency to Cython. **Changed:** * Improved ``rpack.pack()`` algorithm to yield higher packing density. * Improved ``rpack.pack()`` time complexity; ~x100 faster compared to version 1.1.0. * The rectangles are sorted internally in ``rpack.pack()`` so the input ordering does no longer matter. * Renamed ``rpack.enclosing_size`` to ``rpack.bbox_size``. **Removed/deprecated:** * Function ``rpack.group()``. It is still available at ``rpack._rpack.group()`` but will be removed completely in the future. * Old implementation of ``rpack.pack()``. It is still available at ``rpack._rpack.pack()`` but will be removed in the future. **Other changes:** * Updated Sphinx documentation. Version 1.1.0 (2019-01-26) ========================== **Added:** * New function ``rpack.group()``. * Sphinx docs. **Changed:** * Improved test cases. * Improved error handling. Version 1.0.0 (2017-07-23) ========================== **Added:** * First implementation.