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 descriptive;
42pub mod histogram;
43pub mod hypothesis;
44pub mod parallel;
45pub mod reductions;
46pub mod searching;
47pub mod set_ops;
48pub mod sorting;
49
50// ---------------------------------------------------------------------------
51// Flat re-exports for ergonomic use
52// ---------------------------------------------------------------------------
53
54// Reductions
55pub use reductions::{
56    argmax, argmin, average, cumprod, cumsum, max, max_into, max_with, mean, mean_as_f64,
57    mean_into, mean_where, min, min_into, min_with, prod, prod_into, prod_with, ptp, std_,
58    std_into, sum, sum_as_f64, sum_into, sum_with, var, var_into,
59};
60
61// Quantile-based
62pub use reductions::quantile::{
63    QuantileMethod, median, nanmedian, nanpercentile, nanquantile, percentile,
64    percentile_with_method, quantile, quantile_with_method,
65};
66
67// NaN-aware reductions
68pub use reductions::nan_aware::{
69    nanargmax, nanargmin, nancumprod, nancumsum, nanmax, nanmean, nanmin, nanprod, nanstd, nansum,
70    nanvar,
71};
72
73// Correlation and covariance
74pub use correlation::{CorrelateMode, corrcoef, correlate, cov};
75
76// Histogram
77pub use histogram::{
78    Bins, bincount, bincount_u64, bincount_weighted, digitize, histogram, histogram_bin_edges,
79    histogram2d, histogramdd,
80};
81
82// Sorting
83pub use sorting::{
84    Side, SortKind, argpartition, argsort, lexsort, partition, searchsorted,
85    searchsorted_with_sorter, sort, sort_complex,
86};
87
88// Searching
89pub use searching::{
90    UniqueResult, count_nonzero, nonzero, unique, unique_all, unique_axis, unique_counts,
91    unique_inverse, unique_values, where_, where_broadcast, where_condition,
92};
93
94// Set operations
95pub use set_ops::{in1d, intersect1d, isin, setdiff1d, setxor1d, union1d};
96
97// Descriptive statistics — scipy.stats parity (#470)
98pub use descriptive::{ModeResult, gmean, hmean, iqr, kurtosis, mode, sem, skew, zscore};
99
100// Statistical-test functions — scipy.stats parity (#724, #743)
101pub use hypothesis::{
102    Chi2ContingencyResult, chi2_contingency, ks_2samp, pearsonr, spearmanr, ttest_1samp, ttest_ind,
103};