Repository navigation
Releases: jlblancoc/nanoflann
Releases · jlblancoc/nanoflann
Release list
nanoflann 2.0.1
- Merge pull request #322 from jlblancoc/fix/planesplit-build-regression
Fix single-thread build regression: restore two-pass partition in planeSplit() - Restore two-pass Hoare partition in planeSplit()
The one-pass three-way partition introduced in 1.9.0 swaps almost every
element it visits, while the previous two-pass scheme only swaps misplaced
pairs (about 7x fewer swaps on LiDAR data). This made the single-thread
KD-tree build 9-12% slower than in 1.8.0.
The two-pass version is restored over half-open ranges, so it stays safe
for unsigned Offset types, and keeps comparing coordinates in DistanceType.
Results are unchanged. A new test exercises heavy ties on the split planes,
where all three partition regions are populated. - fix test warnings for ignored return values
- Contributors: Jose Luis Blanco Claraco, Jose Luis Blanco-Claraco
nanoflann 2.0.0
- Add compile-time product-manifold metrics (SO2, SO3, SE2, SE3, S^N, tori and products) for exact non-Euclidean nearest-neighbor search (C++17, opt out with
NANOFLANN_NO_MANIFOLDS). Supported by the static and the incremental KD-trees. - Tighter block-level pruning bound for SO(3), up to ~28x faster queries on rotation-heavy data.
- Add
NANOFLANN_INCREMENTAL_NO_FREELIST(ablation-only) switch. - Breaking: remove the legacy
SO2_Adaptor/SO3_Adaptormetrics, superseded byManifold_Adaptor. SO(2) and SO(3) now require C++17; C++11 users needing the old metrics should stay on nanoflann 1.x. - Honor
NANOFLANN_NODE_ALIGNMENT> 16 in the node array before C++17 and inPooledAllocator(#321). - Robustness and performance: reject corrupt vector sizes in
load_value(), cheaper post-deletion rebalancing in the incremental index, radius results sorted once in the dynamic adaptor. KDTreeEigenMatrixAdaptornow owns its index viastd::unique_ptr.- New examples (SE3, S2, incremental Euclidean and manifold) and tests (Eigen adaptor, radius boundary, incremental manifolds); CI matrix for the compile-time macros.
- Docs: README and Doxygen refresh, clarify that
chord_sq_to_anglereturns an arc angle. - Remove dead Travis CI files; add a release helper script.
- Contributors: Jose Luis Blanco-Claraco
nanoflann 1.14.0
- Store kd-tree nodes in one contiguous std::vector instead of pointer-linked
allocations, shrinking Node and speeding up kNN queries and builds
(#319). - Gather split coordinates once into a scratch array reused across builds,
avoiding a second pass over the dataset in middleSplit_(). - Release node memory in freeIndex() and cap the node reservation at 2N.
- loadIndex() now validates the loaded node array and rejects corrupt files.
- Concurrent build: splice only the subtrees actually built by a task,
avoiding unnecessary memmoves. - Prefetch the right child while descending the tree, improving kNN
query speed. - CI Linux: do not upgrade runner packages before installing build tools
(#320). - Contributors: Jose Luis Blanco-Claraco, Luca Bartoli
nanoflann 1.13.0
- Merge pull request #318 from spyridon97/improve-build-multithreading
Rewrite nanoflann's concurrent index build
At 16 threads, index build time drops ~3.5x on uniform data
(79ms -> 23ms) and ~3.8x on clustered data (108ms -> 29ms). - Merge pull request #317 from jschueller/mtune
CMake: Check for mtune=native flag
For some archs like ppc64 this is not always available - Merge pull request #315 from jlblancoc/fix/unsigned-elementtype-crash
Fix crash and wrong results with unsigned ElementType (alternative to #314) - fix: compute all coordinate differences in DistanceType
- Contributors: Jose Luis Blanco-Claraco, Julien Schueller, Spiros Tsalikis
nanoflann 1.12.1
- docs: badges updates to use nanoflann_vendor
- Merge pull request #313 from jlblancoc/chore/rename-ros-package-to-nanoflann-vendor
chore(ros): rename the ROS package to nanoflann_vendor
Only the ROS package name changes. The CMake package name comes from the
CMake project, so find_package(nanoflann) keeps working unchanged. - Contributors: Jose Luis Blanco-Claraco
nanoflann 1.12.0
- Merge pull request #312 from jlblancoc/feat/automate-release-script
automate release to ensure consistency - automate release to ensure consistency
- fix: stop asserting exact NN index in bruteforce comparison tests
Two points can be equidistant (or within float rounding) from a query;
nanoflann does not guarantee a tie-break order unless
NANOFLANN_FIRST_MATCH is defined, so comparing indices makes these
tests flaky whenever a near-tie occurs. Checking the returned distance
against the brute-force minimum already fully validates correctness. - Merge pull request #311 from jlblancoc/fix-potential-ram-run
fix: ensure background rebuild spans one single thread - address review
- fix: ensure background rebuild spans one single thread
- Merge pull request #310 from jlblancoc/feat/install-examples-option
Add opt-in NANOFLANN_INSTALL_EXAMPLES option - Add opt-in NANOFLANN_INSTALL_EXAMPLES option
Lets users who need the example binaries installed opt in via CMake,
without changing default behavior for the header-only library. - Contributors: Jose Luis Blanco-Claraco
Release of v1.10.1
What's Changed
- refactor: unit tests into smaller files by @jlblancoc in #303
Full Changelog: v1.10.0...1.10.1
Release of V1.10.0
What's Changed
- Fix an invalid read. by @drwells in #282
- Fix divideTree assertion failure with KDTreeSingleIndexDynamicAdaptor removePoint/addPoints by @nh2 in #283
- Fix duplicate-entry growth on removePoint/addPoints re-add cycles by @jlblancoc in #285
- Fix loadIndex reading past EOF for empty indices (#286) by @jlblancoc in #287
- fix flaky kdtree.L1_vs_bruteforce_rknn test by @jschueller in #288
- Fix KDTreeSingleIndexDynamicAdaptor_ saveIndex/loadIndex infinite recursion by @jlblancoc in #290
- Remove dead worst_dist branch from L1/L2_Adaptor::evalMetric by @jlblancoc in #291
- Fix three type/correctness bugs (operator=, First0Bit, findWithinBox) by @jlblancoc in #292
- Polish docs warnings attrs by @jlblancoc in #293
- Efficiency: remove middleSplit_ heap alloc (§6.2) + else-if in computeInitialDistances (§6.7) by @jlblancoc in #294
- saveIndex/loadIndex: add magic+version+type-size header, throw on mismatch by @jlblancoc in #295
- CI: extend tested C++ standards, and increase warning levels by @jlblancoc in #296
- Deduplicate addPoint, computeBoundingBox, and searchLevel by @jlblancoc in #297
- Minor internal cleanups: allocateBytes, has_flag(), noexcept by @jlblancoc in #298
- Centralize DIM dispatch in veclen() with if constexpr; widen nodiscard by @jlblancoc in #299
- Refactor tree builders and harden Eigen adaptor ownership by @jlblancoc in #300
- Hoist point-length computation out of search inner loops by @jlblancoc in #301
- Incremental self-balancing dynamic k-d tree index (sync + multithreaded) by @jlblancoc in #302
New Contributors
Full Changelog: v1.9.0...v1.10.0
Release of v1.9.0
What's Changed
- fix: respect SearchParameters::sorted in dynamic index radius search by @LeonardEyer in #276
- Optimizations of L1 & L2 distance functors and miscellaneous improvements by @mlourakis in #277
- Performance optimizations suggested by Claude.ai by @jlblancoc in #279
- Update clang-format style: 100 columns, and forbid one-line braces by @jlblancoc in #281
New Contributors
- @LeonardEyer made their first contribution in #276
- @mlourakis made their first contribution in #277
Full Changelog: v1.8.0...v1.9.0
Release of v1.8.0
What's Changed
- Additional comments about indexing phase, no functional change by @nigels-com in #259
- github workflows: Migrate Ubuntu 20.04 (focal) build coverage to 24.04 (noble) by @nigels-com in #261
- do not write to stderr by @szhorvat in #263
- fix: use size_t as the default IndexType in metric adaptor classes by @szhorvat in #266
- Fix typo in member variable name by @jlblancoc in #268
- nanoflann: faster check in searchLevel by @lucabart97 in #270
- feat: implement findWithinBox by @algol83 in #272
- Feat/add code cov by @jlblancoc in #273
New Contributors
- @lucabart97 made their first contribution in #270
- @algol83 made their first contribution in #272
Full Changelog: v1.7.1...v1.8.0