Skip to main content

ferray_stats/
lib.rs

1// ferray-stats: Statistical functions, reductions, sorting, searching,
2// set operations, histograms, correlations, and covariance.
3//
4// This crate provides NumPy-equivalent statistical functions as free functions
5// operating on ferray-core's `Array<T, D>` type. All public functions return
6// `FerrayResult<T>` and never panic.
7//
8// # Modules
9// - `reductions`: sum, prod, min, max, argmin, argmax, mean, var, std, median,
10//   percentile, quantile, cumsum, cumprod, and NaN-aware variants.
11// - `correlation`: correlate, corrcoef, cov.
12// - `histogram`: histogram, histogram2d, histogramdd, bincount, digitize.
13// - `sorting`: sort, argsort, searchsorted.
14// - `searching`: unique, nonzero, where_, count_nonzero.
15// - `set_ops`: union1d, intersect1d, setdiff1d, setxor1d, in1d, isin.
16// - `parallel`: Rayon threshold dispatch for large array operations.
17
18// Statistical kernels divide running sums by sample counts (`n as f64`),
19// truncate `f64` results to histogram bins, and rely on exact float
20// equality for argmin/argmax tie-breaking and unique/set ops on bit
21// patterns. All of these are part of the spec, not bugs.
22#![allow(
23    clippy::cast_possible_truncation,
24    clippy::cast_possible_wrap,
25    clippy::cast_precision_loss,
26    clippy::cast_sign_loss,
27    clippy::cast_lossless,
28    clippy::float_cmp,
29    clippy::missing_errors_doc,
30    clippy::missing_panics_doc,
31    clippy::many_single_char_names,
32    clippy::similar_names,
33    clippy::items_after_statements,
34    clippy::option_if_let_else,
35    clippy::too_long_first_doc_paragraph,
36    clippy::needless_pass_by_value,
37    clippy::match_same_arms
38)]
39
40pub mod correlation;
41pub mod histogram;
42pub mod parallel;
43pub mod reductions;
44pub mod searching;
45pub mod set_ops;
46pub mod sorting;
47
48// ---------------------------------------------------------------------------
49// Flat re-exports for ergonomic use
50// ---------------------------------------------------------------------------
51
52// Reductions
53pub use reductions::{
54    argmax, argmin, cumprod, cumsum, max, max_into, max_with, mean, mean_as_f64, mean_into,
55    mean_where, min, min_into, min_with, prod, prod_into, prod_with, std_, std_into, sum,
56    sum_as_f64, sum_into, sum_with, var, var_into,
57};
58
59// Quantile-based
60pub use reductions::quantile::{
61    QuantileMethod, median, nanmedian, nanpercentile, nanquantile, percentile,
62    percentile_with_method, quantile, quantile_with_method,
63};
64
65// NaN-aware reductions
66pub use reductions::nan_aware::{
67    nancumprod, nancumsum, nanmax, nanmean, nanmin, nanprod, nanstd, nansum, nanvar,
68};
69
70// Correlation and covariance
71pub use correlation::{CorrelateMode, corrcoef, correlate, cov};
72
73// Histogram
74pub use histogram::{
75    Bins, bincount, bincount_u64, bincount_weighted, digitize, histogram, histogram2d, histogramdd,
76};
77
78// Sorting
79pub use sorting::{
80    Side, SortKind, argpartition, argsort, lexsort, partition, searchsorted,
81    searchsorted_with_sorter, sort,
82};
83
84// Searching
85pub use searching::{UniqueResult, count_nonzero, nonzero, unique, where_, where_condition};
86
87// Set operations
88pub use set_ops::{in1d, intersect1d, isin, setdiff1d, setxor1d, union1d};