fast_kd/lib.rs
1#![doc(html_root_url = "https://docs.rs/kiddo/0.2.1")]
2#![doc(issue_tracker_base_url = "https://github.com/sdd/kiddo/issues/")]
3
4//! # kiddo
5//!
6//! K-dimensional tree library (bucket point-region implementation).
7//! A fork of kdtree. Refactored to use const generics, with some performance improvements and extra features.
8//! Thanks and kudos to mrhooray for the original kdtree library on which kiddo is based.
9//!
10//! Ideal for neareast-neighbour stype queries on astronomical and geospatial datasets.
11//!
12//! ## Installation
13//!
14//! Add `kiddo` to `Cargo.toml`
15//! ```toml
16//! [dependencies]
17//! kiddo = "0.2.1"
18//! ```
19//!
20//! ## Usage
21//! ```rust
22//! use kiddo::KdTree;
23//! use kiddo::ErrorKind;
24//! use kiddo::distance::squared_euclidean;
25//!
26//! let a: ([f64; 2], usize) = ([0f64, 0f64], 0);
27//! let b: ([f64; 2], usize) = ([1f64, 1f64], 1);
28//! let c: ([f64; 2], usize) = ([2f64, 2f64], 2);
29//! let d: ([f64; 2], usize) = ([3f64, 3f64], 3);
30//!
31//! let mut kdtree = KdTree::new();
32//!
33//! kdtree.add(&a.0, a.1)?;
34//! kdtree.add(&b.0, b.1)?;
35//! kdtree.add(&c.0, c.1)?;
36//! kdtree.add(&d.0, d.1)?;
37//!
38//! assert_eq!(kdtree.size(), 4);
39//! assert_eq!(
40//! kdtree.nearest(&a.0, 0, &squared_euclidean)?,
41//! vec![]
42//! );
43//! assert_eq!(
44//! kdtree.nearest(&a.0, 1, &squared_euclidean)?,
45//! vec![(0f64, &0)]
46//! );
47//! assert_eq!(
48//! kdtree.nearest(&a.0, 2, &squared_euclidean)?,
49//! vec![(0f64, &0), (2f64, &1)]
50//! );
51//! assert_eq!(
52//! kdtree.nearest(&a.0, 3, &squared_euclidean)?,
53//! vec![(0f64, &0), (2f64, &1), (8f64, &2)]
54//! );
55//! assert_eq!(
56//! kdtree.nearest(&a.0, 4, &squared_euclidean)?,
57//! vec![(0f64, &0), (2f64, &1), (8f64, &2), (18f64, &3)]
58//! );
59//! assert_eq!(
60//! kdtree.nearest(&a.0, 5, &squared_euclidean)?,
61//! vec![(0f64, &0), (2f64, &1), (8f64, &2), (18f64, &3)]
62//! );
63//! assert_eq!(
64//! kdtree.nearest(&b.0, 4, &squared_euclidean)?,
65//! vec![(0f64, &1), (2f64, &0), (2f64, &2), (8f64, &3)]
66//! );
67//! # Ok::<(), kiddo::ErrorKind>(())
68//! ```
69
70#[cfg(feature = "serialize")]
71extern crate serde;
72#[cfg(feature = "serialize")]
73#[cfg_attr(feature = "serialize", macro_use)]
74extern crate serde_derive;
75
76pub mod distance;
77mod heap_element;
78pub mod kdtree;
79mod util;
80
81pub use crate::kdtree::ErrorKind;
82pub use crate::kdtree::KdTree;