pub struct ArchivedKdTree<A: Copy + Default, T, const K: usize, const B: usize, IDX>where
Vec<LeafNode<A, T, K, B, IDX>>: Archive,
Vec<StemNode<A, K, IDX>>: Archive,
IDX: Archive,
T: Archive + Copy + Default,{ /* private fields */ }Expand description
An archived KdTree
Implementations§
Source§impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
Source§impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
Sourcepub fn best_n_within<D>(
&self,
query: &[A; K],
dist: A,
max_qty: usize,
) -> impl Iterator<Item = BestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
pub fn best_n_within<D>(
&self,
query: &[A; K],
dist: A,
max_qty: usize,
) -> impl Iterator<Item = BestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
Finds the “best” n elements within dist of query.
Results are returned in arbitrary order. ‘Best’ is determined by
performing a comparison of the elements using < (ie, std::cmp::Ordering::is_lt). Returns an iterator.
Returns an iterator.
§Examples
use kiddo::KdTree;
use kiddo::best_neighbour::BestNeighbour;
use kiddo::SquaredEuclidean;
use std::fs::File;
use memmap::MmapOptions;
let mmap = unsafe { MmapOptions::new().map(&File::open("./examples/float-doctest-tree.rkyv").expect("./examples/float-doctest-tree.rkyv missing")).unwrap() };
let tree = unsafe { rkyv::archived_root::<KdTree<f64, 3>>(&mmap) };
let mut best_n_within = tree.best_n_within::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64, 1);
let first = best_n_within.next().unwrap();
assert_eq!(first, BestNeighbour { distance: 0.0, item: 100 });Source§impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
Sourcepub fn nearest_n<D>(
&self,
query: &[A; K],
qty: usize,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
pub fn nearest_n<D>(
&self,
query: &[A; K],
qty: usize,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
Finds the nearest qty elements to query, using the specified
distance metric function.
§Examples
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
use std::fs::File;
use memmap::MmapOptions;
let mmap = unsafe { MmapOptions::new().map(&File::open("./examples/float-doctest-tree.rkyv").expect("./examples/float-doctest-tree.rkyv missing")).unwrap() };
let tree = unsafe { rkyv::archived_root::<KdTree<f64, 3>>(&mmap) };
let nearest: Vec<_> = tree.nearest_n::<SquaredEuclidean>(&[1.0, 2.0, 5.1], 1);
assert_eq!(nearest.len(), 1);
assert!((nearest[0].distance - 0.01f64).abs() < f64::EPSILON);
assert_eq!(nearest[0].item, 100);Source§impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
Sourcepub fn nearest_n_within<D>(
&self,
query: &[A; K],
dist: A,
max_items: NonZero<usize>,
sorted: bool,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
pub fn nearest_n_within<D>(
&self,
query: &[A; K],
dist: A,
max_items: NonZero<usize>,
sorted: bool,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
Finds up to n elements within dist of query, using the specified
distance metric function.
Results are returned in as a ResultCollection, which can return a sorted or unsorted Vec.
§Examples
use std::num::NonZero;
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
use std::fs::File;
use memmap::MmapOptions;
let mmap = unsafe { MmapOptions::new().map(&File::open("./examples/float-doctest-tree.rkyv").expect("./examples/float-doctest-tree.rkyv missing")).unwrap() };
let tree = unsafe { rkyv::archived_root::<KdTree<f64, 3>>(&mmap) };
let max_qty = NonZero::new(1).unwrap();
let within = tree.nearest_n_within::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64, max_qty, true);
assert_eq!(within.len(), 1);Sourcepub fn nearest_n_within_exclusive<D>(
&self,
query: &[A; K],
dist: A,
max_items: NonZero<usize>,
sorted: bool,
inclusive: bool,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
pub fn nearest_n_within_exclusive<D>(
&self,
query: &[A; K],
dist: A,
max_items: NonZero<usize>,
sorted: bool,
inclusive: bool,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
Finds up to n elements within dist of query, using the specified
distance metric function.
Results are returned in as a ResultCollection, which can return a sorted or unsorted Vec.
§Examples
use std::num::NonZero;
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
use std::fs::File;
use memmap::MmapOptions;
let mmap = unsafe { MmapOptions::new().map(&File::open("./examples/float-doctest-tree.rkyv").expect("./examples/float-doctest-tree.rkyv missing")).unwrap() };
let tree = unsafe { rkyv::archived_root::<KdTree<f64, 3>>(&mmap) };
let max_qty = NonZero::new(1).unwrap();
let within = tree.nearest_n_within::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64, max_qty, true);
assert_eq!(within.len(), 1);Source§impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
Sourcepub fn nearest_one<D>(&self, query: &[A; K]) -> NearestNeighbour<A, T>where
D: DistanceMetric<A, K>,
pub fn nearest_one<D>(&self, query: &[A; K]) -> NearestNeighbour<A, T>where
D: DistanceMetric<A, K>,
Finds the nearest element to query, using the specified
distance metric function.
Faster than querying for nearest_n(point, 1, …) due to not needing to allocate memory or maintain sorted results.
§Examples
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
use std::fs::File;
use memmap::MmapOptions;
let mmap = unsafe { MmapOptions::new().map(&File::open("./examples/float-doctest-tree.rkyv").expect("./examples/float-doctest-tree.rkyv missing")).unwrap() };
let tree = unsafe { rkyv::archived_root::<KdTree<f64, 3>>(&mmap) };
let nearest = tree.nearest_one::<SquaredEuclidean>(&[1.0, 2.0, 5.1]);
assert!((nearest.distance - 0.01f64).abs() < f64::EPSILON);
assert_eq!(nearest.item, 100);Source§impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
Sourcepub fn within<D>(&self, query: &[A; K], dist: A) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
pub fn within<D>(&self, query: &[A; K], dist: A) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
Finds all elements within dist of query, using the specified
distance metric function.
Results are returned sorted nearest-first
§Examples
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
use std::fs::File;
use memmap::MmapOptions;
let mmap = unsafe { MmapOptions::new().map(&File::open("./examples/float-doctest-tree.rkyv").expect("./examples/float-doctest-tree.rkyv missing")).unwrap() };
let tree = unsafe { rkyv::archived_root::<KdTree<f64, 3>>(&mmap) };
let within = tree.within::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64);
assert_eq!(within.len(), 2);Sourcepub fn within_exclusive<D>(
&self,
query: &[A; K],
dist: A,
inclusive: bool,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
pub fn within_exclusive<D>(
&self,
query: &[A; K],
dist: A,
inclusive: bool,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
Finds all elements within dist of query, using the specified
distance metric function.
Results are returned sorted nearest-first
§Examples
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
use std::fs::File;
use memmap::MmapOptions;
let mmap = unsafe { MmapOptions::new().map(&File::open("./examples/float-doctest-tree.rkyv").expect("./examples/float-doctest-tree.rkyv missing")).unwrap() };
let tree = unsafe { rkyv::archived_root::<KdTree<f64, 3>>(&mmap) };
let within = tree.within::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64);
assert_eq!(within.len(), 2);Source§impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
impl<A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX>> ArchivedKdTree<A, T, K, B, IDX>
Sourcepub fn within_unsorted<D>(
&self,
query: &[A; K],
dist: A,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
pub fn within_unsorted<D>(
&self,
query: &[A; K],
dist: A,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
Finds all elements within dist of query, using the specified
distance metric function.
Results are returned in arbitrary order. Faster than within.
§Examples
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
use std::fs::File;
use memmap::MmapOptions;
let mmap = unsafe { MmapOptions::new().map(&File::open("./examples/float-doctest-tree.rkyv").expect("./examples/float-doctest-tree.rkyv missing")).unwrap() };
let tree = unsafe { rkyv::archived_root::<KdTree<f64, 3>>(&mmap) };
let within = tree.within_unsorted::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64);
assert_eq!(within.len(), 2);Sourcepub fn within_unsorted_exclusive<D>(
&self,
query: &[A; K],
dist: A,
inclusive: bool,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
pub fn within_unsorted_exclusive<D>(
&self,
query: &[A; K],
dist: A,
inclusive: bool,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
Finds all elements within dist of query, using the specified
distance metric function.
Results are returned in arbitrary order. Faster than within.
§Examples
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
use std::fs::File;
use memmap::MmapOptions;
let mmap = unsafe { MmapOptions::new().map(&File::open("./examples/float-doctest-tree.rkyv").expect("./examples/float-doctest-tree.rkyv missing")).unwrap() };
let tree = unsafe { rkyv::archived_root::<KdTree<f64, 3>>(&mmap) };
let within = tree.within_unsorted::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64);
assert_eq!(within.len(), 2);Source§impl<'a, 'query, A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX> + Send> ArchivedKdTree<A, T, K, B, IDX>
impl<'a, 'query, A: Axis + Archive<Archived = A>, T: Content + Archive<Archived = T>, const K: usize, const B: usize, IDX: Index<T = IDX> + Archive<Archived = IDX> + Send> ArchivedKdTree<A, T, K, B, IDX>
Sourcepub fn within_unsorted_iter<D>(
&'a self,
query: &'query [A; K],
dist: A,
) -> WithinUnsortedIter<'a, A, T> ⓘwhere
D: DistanceMetric<A, K>,
pub fn within_unsorted_iter<D>(
&'a self,
query: &'query [A; K],
dist: A,
) -> WithinUnsortedIter<'a, A, T> ⓘwhere
D: DistanceMetric<A, K>,
Finds all elements within dist of query, using the specified
distance metric function.
Returns an Iterator. Results are returned in arbitrary order.
§Examples
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
use std::fs::File;
use memmap::MmapOptions;
let mmap = unsafe { MmapOptions::new().map(&File::open("./examples/float-doctest-tree.rkyv").expect("./examples/float-doctest-tree.rkyv missing")).unwrap() };
let tree = unsafe { rkyv::archived_root::<KdTree<f64, 3>>(&mmap) };
let within = tree.within_unsorted_iter::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64).collect::<Vec<_>>();
assert_eq!(within.len(), 2);Sourcepub fn within_unsorted_iter_exclusive<D>(
&'a self,
query: &'query [A; K],
dist: A,
inclusive: bool,
) -> WithinUnsortedIter<'a, A, T> ⓘwhere
D: DistanceMetric<A, K>,
pub fn within_unsorted_iter_exclusive<D>(
&'a self,
query: &'query [A; K],
dist: A,
inclusive: bool,
) -> WithinUnsortedIter<'a, A, T> ⓘwhere
D: DistanceMetric<A, K>,
Finds all elements within dist of query, using the specified
distance metric function.
Returns an Iterator. Results are returned in arbitrary order.
§Examples
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
use std::fs::File;
use memmap::MmapOptions;
let mmap = unsafe { MmapOptions::new().map(&File::open("./examples/float-doctest-tree.rkyv").expect("./examples/float-doctest-tree.rkyv missing")).unwrap() };
let tree = unsafe { rkyv::archived_root::<KdTree<f64, 3>>(&mmap) };
let within = tree.within_unsorted_iter::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64).collect::<Vec<_>>();
assert_eq!(within.len(), 2);Auto Trait Implementations§
impl<A, T, const K: usize, const B: usize, IDX> !Freeze for ArchivedKdTree<A, T, K, B, IDX>
impl<A, T, const K: usize, const B: usize, IDX> !RefUnwindSafe for ArchivedKdTree<A, T, K, B, IDX>
impl<A, T, const K: usize, const B: usize, IDX> !Send for ArchivedKdTree<A, T, K, B, IDX>
impl<A, T, const K: usize, const B: usize, IDX> !Sync for ArchivedKdTree<A, T, K, B, IDX>
impl<A, T, const K: usize, const B: usize, IDX> !Unpin for ArchivedKdTree<A, T, K, B, IDX>
impl<A, T, const K: usize, const B: usize, IDX> !UnsafeUnpin for ArchivedKdTree<A, T, K, B, IDX>
impl<A, T, const K: usize, const B: usize, IDX> !UnwindSafe for ArchivedKdTree<A, T, K, B, IDX>
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Source§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
Dst: LosslessTryFrom<Src>,
impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
Dst: LosslessTryFrom<Src>,
Source§fn lossless_try_into(self) -> Option<Dst>
fn lossless_try_into(self) -> Option<Dst>
Source§impl<Src, Dst> LossyInto<Dst> for Srcwhere
Dst: LossyFrom<Src>,
impl<Src, Dst> LossyInto<Dst> for Srcwhere
Dst: LossyFrom<Src>,
Source§fn lossy_into(self) -> Dst
fn lossy_into(self) -> Dst
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.