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_uniform, l2_distance, linear_interp,
89    simpsons_weights, simpsons_weights_2d, trapz, DEFAULT_CONVERGENCE_TOL, NUMERICAL_EPS,
90};
91
92// Re-export warping utilities
93pub use warping::{
94    exp_map_sphere, gam_to_psi, gam_to_psi_smooth, inner_product_l2, inv_exp_map_sphere,
95    invert_gamma, l2_norm_l2, normalize_warp, phase_distance, psi_to_gam,
96};
97
98// Re-export seasonal analysis types
99pub use seasonal::{
100    autoperiod, autoperiod_fdata, cfd_autoperiod, cfd_autoperiod_fdata, hilbert_transform, sazed,
101    sazed_fdata, AutoperiodCandidate, AutoperiodResult, CfdAutoperiodResult, ChangeDetectionResult,
102    ChangePoint, ChangeType, DetectedPeriod, InstantaneousPeriod, Peak, PeakDetectionResult,
103    PeriodEstimate, SazedComponents, SazedResult, StrengthMethod,
104};
105
106// Re-export landmark registration types
107pub use landmark::{
108    detect_and_register, detect_landmarks, landmark_register, Landmark, LandmarkKind,
109    LandmarkResult,
110};
111
112// Re-export detrending types
113pub use detrend::{DecomposeResult, TrendResult};
114
115// Re-export simulation types
116pub use simulation::{EFunType, EValType};
117
118// Re-export irregular fdata types
119pub use irreg_fdata::{IrregFdata, KernelType};
120
121// Re-export tolerance band types
122pub use tolerance::{
123    conformal_prediction_band, elastic_tolerance_band, equivalence_test,
124    equivalence_test_one_sample, exponential_family_tolerance_band, fpca_tolerance_band,
125    scb_mean_degras, BandType, EquivalenceBootstrap, EquivalenceTestResult, ExponentialFamily,
126    MultiplierDistribution, NonConformityScore, ToleranceBand,
127};
128
129// Re-export FAMM types
130pub use famm::{fmm, fmm_predict, fmm_test_fixed, FmmResult, FmmTestResult};
131
132// Re-export function-on-scalar regression types
133pub use function_on_scalar::{
134    fanova, fosr, fosr_fpc, predict_fosr, FanovaResult, FosrFpcResult, FosrResult,
135};
136
137// Re-export scalar-on-function regression types
138pub use scalar_on_function::{
139    bootstrap_ci_fregre_lm, bootstrap_ci_functional_logistic, fregre_basis_cv, fregre_cv,
140    fregre_lm, fregre_np_cv, fregre_np_mixed, functional_logistic, predict_fregre_lm,
141    predict_fregre_np, BootstrapCiResult, FregreBasisCvResult, FregreCvResult, FregreLmResult,
142    FregreNpCvResult, FregreNpResult, FunctionalLogisticResult,
143};
144
145// Re-export generic explainability types
146pub use explain_generic::{
147    generic_ale, generic_anchor, generic_conditional_permutation_importance,
148    generic_counterfactual, generic_domain_selection, generic_friedman_h, generic_lime,
149    generic_pdp, generic_permutation_importance, generic_prototype_criticism, generic_saliency,
150    generic_shap_values, generic_sobol_indices, generic_stability, generic_vif, FpcPredictor,
151    TaskType,
152};
153
154// Re-export explainability types
155pub use elastic_explain::{elastic_pcr_attribution, ElasticAttributionResult};
156pub use explain::{
157    anchor_explanation, anchor_explanation_logistic, beta_decomposition,
158    beta_decomposition_logistic, calibration_diagnostics, conditional_permutation_importance,
159    conditional_permutation_importance_logistic, conformal_prediction_residuals,
160    counterfactual_logistic, counterfactual_regression, dfbetas_dffits, domain_selection,
161    domain_selection_logistic, expected_calibration_error, explanation_stability,
162    explanation_stability_logistic, fpc_ale, fpc_ale_logistic, fpc_permutation_importance,
163    fpc_permutation_importance_logistic, fpc_shap_values, fpc_shap_values_logistic, fpc_vif,
164    fpc_vif_logistic, friedman_h_statistic, friedman_h_statistic_logistic, functional_pdp,
165    functional_pdp_logistic, functional_saliency, functional_saliency_logistic,
166    influence_diagnostics, lime_explanation, lime_explanation_logistic, loo_cv_press,
167    pointwise_importance, pointwise_importance_logistic, prediction_intervals, prototype_criticism,
168    regression_depth, regression_depth_logistic, significant_regions, significant_regions_from_se,
169    sobol_indices, sobol_indices_logistic, AleResult, AnchorCondition, AnchorResult, AnchorRule,
170    BetaDecomposition, CalibrationDiagnosticsResult, ConditionalPermutationImportanceResult,
171    ConformalPredictionResult, CounterfactualResult, DepthType, DfbetasDffitsResult,
172    DomainSelectionResult, EceResult, FpcPermutationImportance, FpcShapValues, FriedmanHResult,
173    FunctionalPdpResult, FunctionalSaliencyResult, ImportantInterval, InfluenceDiagnostics,
174    LimeResult, LooCvResult, PointwiseImportanceResult, PredictionIntervalResult,
175    PrototypeCriticismResult, RegressionDepthResult, SignificanceDirection, SignificantRegion,
176    SobolIndicesResult, StabilityAnalysisResult, VifResult,
177};
178
179// Re-export classification types
180pub use classification::{
181    fclassif_cv, fclassif_dd, fclassif_kernel, fclassif_knn, fclassif_knn_fit, fclassif_lda,
182    fclassif_lda_fit, fclassif_qda, fclassif_qda_fit, ClassifCvResult, ClassifFit, ClassifMethod,
183    ClassifResult,
184};
185
186// Re-export conformal prediction types
187pub use conformal::{
188    conformal_classif, conformal_elastic_logistic, conformal_elastic_pcr,
189    conformal_elastic_regression, conformal_fregre_lm, conformal_fregre_np,
190    conformal_generic_classification, conformal_generic_regression, conformal_logistic,
191    cv_conformal_classification, cv_conformal_regression, jackknife_plus_regression,
192    ClassificationScore, ConformalClassificationResult, ConformalMethod, ConformalRegressionResult,
193};
194
195// Re-export GMM clustering types
196pub use gmm::{gmm_cluster, gmm_em, predict_gmm, CovType, GmmClusterResult, GmmResult};
197
198// Re-export streaming depth types
199pub use streaming_depth::{
200    FullReferenceState, RollingReference, SortedReferenceState, StreamingBd, StreamingDepth,
201    StreamingFraimanMuniz, StreamingMbd,
202};
203
204// Re-export smooth basis types
205pub use smooth_basis::{
206    basis_nbasis_cv, bspline_penalty_matrix, fourier_penalty_matrix, smooth_basis,
207    smooth_basis_gcv, BasisCriterion, BasisNbasisCvResult, BasisType, FdPar, SmoothBasisResult,
208};
209
210// Re-export elastic FPCA types
211pub use elastic_fpca::{
212    horiz_fpca, joint_fpca, vert_fpca, HorizFpcaResult, JointFpcaResult, VertFpcaResult,
213};
214
215// Re-export elastic regression types
216pub use elastic_regression::{
217    elastic_logistic, elastic_pcr, elastic_regression, ElasticLogisticResult, ElasticPcrResult,
218    ElasticRegressionResult, PcaMethod,
219};
220
221// Re-export elastic changepoint types
222pub use elastic_changepoint::{
223    elastic_amp_changepoint, elastic_fpca_changepoint, elastic_ph_changepoint, ChangepointResult,
224    ChangepointType, CovKernel, FpcaChangepointMethod,
225};
226
227// Re-export cross-validation utilities
228pub use cv::{
229    create_folds, create_stratified_folds, cv_fdata, fold_indices, subset_rows, subset_vec,
230    CvFdataResult, CvMetrics, CvType,
231};
232
233// Re-export smoothing CV types
234pub use smoothing::{
235    cv_smoother, gcv_smoother, knn_gcv, knn_lcv, optim_bandwidth, CvCriterion, KnnCvResult,
236    OptimBandwidthResult,
237};