use arrow::array::Array;
pub trait SortedUniqueKernel: Array {
fn unique_fold<'a>(fst: &'a Self, others: impl Iterator<Item = &'a Self>) -> Self;
fn unique(&self) -> Self;
fn n_unique(&self) -> usize;
fn n_unique_non_null(&self) -> usize;
}
pub trait RangedUniqueKernel {
type Array: Array;
fn has_seen_all(&self) -> bool;
fn append(&mut self, array: &Self::Array);
fn append_state(&mut self, other: &Self);
fn finalize_unique(self) -> Self::Array;
fn finalize_n_unique(&self) -> usize;
fn finalize_n_unique_non_null(&self) -> usize;
}
pub trait GenericUniqueKernel {
fn unique(&self) -> Self;
fn n_unique(&self) -> usize;
fn n_unique_non_null(&self) -> usize;
}
mod boolean;
mod dictionary;
mod distinct;
mod primitive;
pub use boolean::BooleanUniqueKernelState;
pub use dictionary::DictionaryRangedUniqueState;
pub use distinct::{AmortizedUnique, amortized_unique_from_dtype};
pub use primitive::PrimitiveRangedUniqueState;