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, average, cumprod, cumsum, max, max_into, max_with, mean, mean_as_f64,
55    mean_into, mean_where, min, min_into, min_with, prod, prod_into, prod_with, ptp, std_,
56    std_into, sum, 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    nanargmax, nanargmin, nancumprod, nancumsum, nanmax, nanmean, nanmin, nanprod, nanstd, nansum,
68    nanvar,
69};
70
71// Correlation and covariance
72pub use correlation::{CorrelateMode, corrcoef, correlate, cov};
73
74// Histogram
75pub use histogram::{
76    Bins, bincount, bincount_u64, bincount_weighted, digitize, histogram, histogram_bin_edges,
77    histogram2d, histogramdd,
78};
79
80// Sorting
81pub use sorting::{
82    Side, SortKind, argpartition, argsort, lexsort, partition, searchsorted,
83    searchsorted_with_sorter, sort, sort_complex,
84};
85
86// Searching
87pub use searching::{
88    UniqueResult, count_nonzero, nonzero, unique, unique_all, unique_counts, unique_inverse,
89    unique_values, where_, where_condition,
90};
91
92// Set operations
93pub use set_ops::{in1d, intersect1d, isin, setdiff1d, setxor1d, union1d};