Skip to content

Releases: Jaybro/pico_tree

v0.6.0

13 Feb 17:37
Compare
Choose a tag to compare

PicoTree v0.6.0 changes:

  • Replaced std::pair<> with pico_tree::Neighbor<>.
    • Better readability of the type itself and its variables (first, second vs. index, distance).
    • std::pair<> is not a POD type or trivially copyable. This practically means it can't easily be mapped to memory (such as with pybind11).
  • Added various typedefs (usings) to the public interface of the KdTree: IndexType, ScalarType, PointsType, etc. Updated the examples to follow the same typedef style.
  • Replaced the std::deque based dynamic memory manager with a custom ListPool one.
    • At the time of writing, the performance of using an std::deque can vary quite a bit across implementations of the C++ standard. This is because (at least in part) the internal chunk sizes differ across those implementations.
    • Benchmarking on the Würzburg marketplace dataset shows that the new ListPool gives a small overall performance improvement of about 2-3%.
  • Renamed the custom visitor version of SearchNn to SearchNearest to disambiguate it from the SearchNn that looks for a single nearest neighbor.
  • The EigenAdaptor has received some updates.
    • C++11 compliant.
    • The Eigen example will now be build when the workflow is triggered.
    • Added unit tests.
  • Added PicoTree Python bindings using pybind11.
    • Supports all KdTree query types.
    • Added examples, unit tests and a GitHub workflow for the bindings.
    • Performed a mini benchmark to compare vs. the KdTrees of SciPy and Scikit-learn.

v0.5.2

14 Dec 23:54
Compare
Choose a tag to compare

PicoTree v0.5.2 changes:

  • SearchKnn and SearchAknn performance increased. A priority queue is now maintained using an Insertion Sort instead of a Max Heap. The sorted queue resulting from Insertion Sort performs faster than the unsorted Max Heap in practice.
  • Sort option removed from SearchKnn and SearchAknn. The output is now always sorted.
  • EigenAdaptor now explicitly disallows fixed size matrices.
  • Updated the Eigen example.

v0.5.1

06 Dec 13:56
Compare
Choose a tag to compare

PicoTree v0.5.1 changes:

  • EigenAdaptor compiles with Clang.
  • KdTree.SearchKnn and SearchAknn now also accept random access iterators as output arguments. This adds flexibility to how the results can be stored in memory. E.g., storing the results of different searches in aligned memory.

v0.5.0

25 Nov 23:25
Compare
Choose a tag to compare

PicoTree v0.5.0 changes:

  • Input handling of the KdTree has been improved (see the examples for possible implementations):
    • Test and query points are no longer expected to provide their coordinates through a single adaptor or point set interface. This has been split.
    • The input interface for adaptors or point sets has been simplified and is expected to provide points (instead of point coordinates).
    • Query points and test points should implement the parenthesis operator for providing coordinates.
    • It is now possible to store the test point set as part of the KdTree.
    • EigenAdaptor has been updated to support all the previously mentioned bullets.
  • The interface for Metric classes has been improved:
    • Reduced the amount of template arguments.
    • The point to point distance function now expects two points instead of a test index and a query point.
    • Added EigenMetricL1 and EigenMetricL2.
  • Added support for approximate nearest neighbor searches.

v0.4.0

24 Oct 20:08
651bd13
Compare
Choose a tag to compare

PicoTree v0.4.0 is the first release of this repository. It provides:

  • C++11 compliant KdTree template class:
    • Nearest neighbors, radius, and box searches.
    • Customizable nearest neighbor searches, metrics and tree splitting techniques.
    • Compile time and run time known dimensions.
    • Static tree builds.
    • Thread safe queries.
  • CMake based build and installation.
  • Doxygen generated documentation.
  • Examples showing how to use the KdTree.
  • Comparison benchmark with respect to Nanoflann.