Download Latest Version 0.12.6 source code.zip (43.7 MB) Google Add to Preferred Sources
Home / 0.12.6
Name Modified Size InfoDownloads / Week
Parent folder
0.12.6 source code.tar.gz 2026-08-16 43.5 MB
0.12.6 source code.zip 2026-08-16 43.7 MB
README.md 2026-08-16 1.7 kB
Totals: 3 Items   87.3 MB 2

A patch release with one performance fix. NMM postprocessing no longer slows down as its merge groups grow, which is the shape crowded scenes produce.

NMM merge time before and after, on crowded scenes

⚡ Performance

  • NMM stops rescanning merge lists it has already filled (https://github.com/obss/sahi/pull/1422). Every candidate box was first searched for in the Python list of boxes already merged into the current keeper, and only then checked against the merge_to_keep array. That search costs one step per box already in the group, so a crowded scene, which ends up with a few very large groups, paid it on almost every candidate. A box is appended to a merge list and recorded in merge_to_keep in the same step, so the array lookup on its own already answers the question and the list search only repeated it. Removing it leaves every group exactly as it was and turns the merge bookkeeping from quadratic in the size of a group into linear. The dense, stored-pair and streaming paths share this bookkeeping, so all three improve, and the numba backend inherits the change through the dense one.

NMM on a crowded layout, IOS / 0.3:

boxes before after speedup
2000 324 ms 199 ms 1.6x
5000 2132 ms 896 ms 2.4x
10000 13303 ms 3531 ms 3.8x
20000 80153 ms 14625 ms 5.5x
33337 297170 ms 48926 ms 6.1x

📚 Documentation

Full Changelog: https://github.com/obss/sahi/compare/0.12.5...0.12.6

Source: README.md, updated 2026-08-16