Skip to main content

fdars_core/
lib.rs

1//! # fdars-core
2//!
3//! Core algorithms for Functional Data Analysis in Rust.
4//!
5//! This crate provides pure Rust implementations of various FDA methods including:
6//! - Functional data operations (mean, derivatives, norms)
7//! - Depth measures (Fraiman-Muniz, modal, band, random projection, etc.)
8//! - Distance metrics (Lp, Hausdorff, DTW, Fourier, etc.)
9//! - Basis representations (B-splines, P-splines, Fourier)
10//! - Clustering (k-means, fuzzy c-means)
11//! - Smoothing (Nadaraya-Watson, local linear/polynomial regression)
12//! - Outlier detection
13//! - Regression (PCA, PLS, ridge)
14//! - Seasonal analysis (period estimation, peak detection, seasonal strength)
15//! - Detrending and decomposition for non-stationary data
16//!
17//! ## Data Layout
18//!
19//! Functional data is represented using the [`FdMatrix`] type, a column-major matrix
20//! wrapping a flat `Vec<f64>` with safe `(i, j)` indexing and dimension tracking:
21//! - For n observations with m evaluation points: `data[(i, j)]` gives observation i at point j
22//! - 2D surfaces (n observations, m1 x m2 grid): stored as n x (m1*m2) matrices
23//! - Zero-copy column access via `data.column(j)`, row gather via `data.row(i)`
24//! - nalgebra interop via `to_dmatrix()` / `from_dmatrix()` for SVD operations
25
26#![allow(clippy::needless_range_loop)]
27#![allow(clippy::too_many_arguments)]
28#![allow(clippy::type_complexity)]
29
30pub mod matrix;
31pub mod parallel;
32
33pub mod alignment;
34pub mod basis;
35pub mod classification;
36pub mod clustering;
37pub mod cv;
38pub mod depth;
39pub mod detrend;
40pub mod famm;
41pub mod fdata;
42pub mod function_on_scalar;
43pub mod gmm;
44pub mod helpers;
45pub mod irreg_fdata;
46pub mod landmark;
47pub mod metric;
48pub mod outliers;
49pub mod regression;
50pub mod scalar_on_function;
51pub mod seasonal;
52pub mod simulation;
53pub mod smoothing;
54pub mod streaming_depth;
55pub mod tolerance;
56pub mod utility;
57pub mod warping;
58
59// Elastic analysis modules
60pub mod conformal;
61pub mod elastic_changepoint;
62pub mod elastic_explain;
63pub mod elastic_fpca;
64pub mod elastic_regression;
65pub mod explain;
66pub mod explain_generic;
67pub mod smooth_basis;
68
69// Re-export matrix types
70pub use matrix::{FdCurveSet, FdMatrix};
71
72// Re-export alignment types and functions
73pub use alignment::{
74    align_to_target, alignment_quality, amplitude_distance, amplitude_self_distance_matrix,
75    compose_warps, elastic_align_pair, elastic_align_pair_constrained, elastic_align_pair_nd,
76    elastic_align_pair_with_landmarks, elastic_cross_distance_matrix, elastic_decomposition,
77    elastic_distance, elastic_distance_nd, elastic_self_distance_matrix, karcher_mean,
78    pairwise_consistency, phase_distance_pair, phase_self_distance_matrix, reparameterize_curve,
79    srsf_inverse, srsf_inverse_nd, srsf_transform, srsf_transform_nd, tsrvf_from_alignment,
80    tsrvf_from_alignment_with_method, tsrvf_inverse, tsrvf_transform, tsrvf_transform_with_method,
81    warp_complexity, warp_smoothness, AlignmentQuality, AlignmentResult, AlignmentResultNd,
82    AlignmentSetResult, ConstrainedAlignmentResult, DecompositionResult, KarcherMeanResult,
83    TransportMethod, TsrvfResult,
84};
85
86// Re-export commonly used items
87pub use helpers::{
88    cumulative_trapz, extract_curves, gradient, gradient_nonuniform, gradient_uniform, l2_distance,
89    linear_interp, simpsons_weights, simpsons_weights_2d, trapz, DEFAULT_CONVERGENCE_TOL,
90    NUMERICAL_EPS,
91};
92
93// Re-export warping utilities
94pub use warping::{
95    exp_map_sphere, gam_to_psi, gam_to_psi_smooth, inner_product_l2, inv_exp_map_sphere,
96    invert_gamma, l2_norm_l2, normalize_warp, phase_distance, psi_to_gam,
97};
98
99// Re-export seasonal analysis types
100pub use seasonal::{
101    autoperiod, autoperiod_fdata, cfd_autoperiod, cfd_autoperiod_fdata, hilbert_transform, sazed,
102    sazed_fdata, AutoperiodCandidate, AutoperiodResult, CfdAutoperiodResult, ChangeDetectionResult,
103    ChangePoint, ChangeType, DetectedPeriod, InstantaneousPeriod, Peak, PeakDetectionResult,
104    PeriodEstimate, SazedComponents, SazedResult, StrengthMethod,
105};
106
107// Re-export landmark registration types
108pub use landmark::{
109    detect_and_register, detect_landmarks, landmark_register, Landmark, LandmarkKind,
110    LandmarkResult,
111};
112
113// Re-export detrending types
114pub use detrend::{DecomposeResult, TrendResult};
115
116// Re-export simulation types
117pub use simulation::{EFunType, EValType};
118
119// Re-export irregular fdata types
120pub use irreg_fdata::{IrregFdata, KernelType};
121
122// Re-export tolerance band types
123pub use tolerance::{
124    conformal_prediction_band, elastic_tolerance_band, equivalence_test,
125    equivalence_test_one_sample, exponential_family_tolerance_band, fpca_tolerance_band,
126    scb_mean_degras, BandType, EquivalenceBootstrap, EquivalenceTestResult, ExponentialFamily,
127    MultiplierDistribution, NonConformityScore, ToleranceBand,
128};
129
130// Re-export FAMM types
131pub use famm::{fmm, fmm_predict, fmm_test_fixed, FmmResult, FmmTestResult};
132
133// Re-export function-on-scalar regression types
134pub use function_on_scalar::{
135    fanova, fosr, fosr_fpc, predict_fosr, FanovaResult, FosrFpcResult, FosrResult,
136};
137
138// Re-export scalar-on-function regression types
139pub use scalar_on_function::{
140    bootstrap_ci_fregre_lm, bootstrap_ci_functional_logistic, fregre_basis_cv, fregre_cv,
141    fregre_lm, fregre_np_cv, fregre_np_mixed, functional_logistic, model_selection_ncomp,
142    predict_fregre_lm, predict_fregre_np, predict_functional_logistic, BootstrapCiResult,
143    FregreBasisCvResult, FregreCvResult, FregreLmResult, FregreNpCvResult, FregreNpResult,
144    FunctionalLogisticResult, ModelSelectionResult, SelectionCriterion,
145};
146
147// Re-export generic explainability types
148pub use explain_generic::{
149    generic_ale, generic_anchor, generic_conditional_permutation_importance,
150    generic_counterfactual, generic_domain_selection, generic_friedman_h, generic_lime,
151    generic_pdp, generic_permutation_importance, generic_prototype_criticism, generic_saliency,
152    generic_shap_values, generic_sobol_indices, generic_stability, generic_vif, FpcPredictor,
153    TaskType,
154};
155
156// Re-export explainability types
157pub use elastic_explain::{elastic_pcr_attribution, ElasticAttributionResult};
158pub use explain::{
159    anchor_explanation, anchor_explanation_logistic, beta_decomposition,
160    beta_decomposition_logistic, calibration_diagnostics, conditional_permutation_importance,
161    conditional_permutation_importance_logistic, conformal_prediction_residuals,
162    counterfactual_logistic, counterfactual_regression, dfbetas_dffits, domain_selection,
163    domain_selection_logistic, expected_calibration_error, explanation_stability,
164    explanation_stability_logistic, fpc_ale, fpc_ale_logistic, fpc_permutation_importance,
165    fpc_permutation_importance_logistic, fpc_shap_values, fpc_shap_values_logistic, fpc_vif,
166    fpc_vif_logistic, friedman_h_statistic, friedman_h_statistic_logistic, functional_pdp,
167    functional_pdp_logistic, functional_saliency, functional_saliency_logistic,
168    influence_diagnostics, lime_explanation, lime_explanation_logistic, loo_cv_press,
169    pointwise_importance, pointwise_importance_logistic, prediction_intervals, prototype_criticism,
170    regression_depth, regression_depth_logistic, significant_regions, significant_regions_from_se,
171    sobol_indices, sobol_indices_logistic, AleResult, AnchorCondition, AnchorResult, AnchorRule,
172    BetaDecomposition, CalibrationDiagnosticsResult, ConditionalPermutationImportanceResult,
173    ConformalPredictionResult, CounterfactualResult, DepthType, DfbetasDffitsResult,
174    DomainSelectionResult, EceResult, FpcPermutationImportance, FpcShapValues, FriedmanHResult,
175    FunctionalPdpResult, FunctionalSaliencyResult, ImportantInterval, InfluenceDiagnostics,
176    LimeResult, LooCvResult, PointwiseImportanceResult, PredictionIntervalResult,
177    PrototypeCriticismResult, RegressionDepthResult, SignificanceDirection, SignificantRegion,
178    SobolIndicesResult, StabilityAnalysisResult, VifResult,
179};
180
181// Re-export classification types
182pub use classification::{
183    fclassif_cv, fclassif_dd, fclassif_kernel, fclassif_knn, fclassif_knn_fit, fclassif_lda,
184    fclassif_lda_fit, fclassif_qda, fclassif_qda_fit, ClassifCvResult, ClassifFit, ClassifMethod,
185    ClassifResult,
186};
187
188// Re-export conformal prediction types
189pub use conformal::{
190    conformal_classif, conformal_elastic_logistic, conformal_elastic_pcr,
191    conformal_elastic_regression, conformal_fregre_lm, conformal_fregre_np,
192    conformal_generic_classification, conformal_generic_regression, conformal_logistic,
193    cv_conformal_classification, cv_conformal_regression, jackknife_plus_regression,
194    ClassificationScore, ConformalClassificationResult, ConformalMethod, ConformalRegressionResult,
195};
196
197// Re-export GMM clustering types
198pub use gmm::{gmm_cluster, gmm_em, predict_gmm, CovType, GmmClusterResult, GmmResult};
199
200// Re-export streaming depth types
201pub use streaming_depth::{
202    FullReferenceState, RollingReference, SortedReferenceState, StreamingBd, StreamingDepth,
203    StreamingFraimanMuniz, StreamingMbd,
204};
205
206// Re-export smooth basis types
207pub use smooth_basis::{
208    basis_nbasis_cv, bspline_penalty_matrix, fourier_penalty_matrix, smooth_basis,
209    smooth_basis_gcv, BasisCriterion, BasisNbasisCvResult, BasisType, FdPar, SmoothBasisResult,
210};
211
212// Re-export elastic FPCA types
213pub use elastic_fpca::{
214    horiz_fpca, joint_fpca, vert_fpca, HorizFpcaResult, JointFpcaResult, VertFpcaResult,
215};
216
217// Re-export elastic regression types
218pub use elastic_regression::{
219    elastic_logistic, elastic_pcr, elastic_regression, predict_elastic_logistic,
220    predict_elastic_regression, ElasticLogisticResult, ElasticPcrResult, ElasticRegressionResult,
221    PcaMethod,
222};
223
224// Re-export elastic changepoint types
225pub use elastic_changepoint::{
226    elastic_amp_changepoint, elastic_fpca_changepoint, elastic_ph_changepoint, ChangepointResult,
227    ChangepointType, CovKernel, FpcaChangepointMethod,
228};
229
230// Re-export cross-validation utilities
231pub use cv::{
232    create_folds, create_stratified_folds, cv_fdata, fold_indices, subset_rows, subset_vec,
233    CvFdataResult, CvMetrics, CvType,
234};
235
236// Re-export smoothing CV types
237pub use smoothing::{
238    cv_smoother, gcv_smoother, knn_gcv, knn_lcv, optim_bandwidth, CvCriterion, KnnCvResult,
239    OptimBandwidthResult,
240};