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 depth;
38pub mod detrend;
39pub mod famm;
40pub mod fdata;
41pub mod function_on_scalar;
42pub mod gmm;
43pub mod helpers;
44pub mod irreg_fdata;
45pub mod landmark;
46pub mod metric;
47pub mod outliers;
48pub mod regression;
49pub mod scalar_on_function;
50pub mod seasonal;
51pub mod simulation;
52pub mod smoothing;
53pub mod streaming_depth;
54pub mod tolerance;
55pub mod utility;
56pub mod warping;
57
58// Elastic analysis modules
59pub mod elastic_changepoint;
60pub mod elastic_explain;
61pub mod elastic_fpca;
62pub mod elastic_regression;
63pub mod explain;
64pub mod smooth_basis;
65
66// Re-export matrix types
67pub use matrix::{FdCurveSet, FdMatrix};
68
69// Re-export alignment types and functions
70pub use alignment::{
71    align_to_target, alignment_quality, amplitude_distance, amplitude_self_distance_matrix,
72    compose_warps, elastic_align_pair, elastic_align_pair_constrained, elastic_align_pair_nd,
73    elastic_align_pair_with_landmarks, elastic_cross_distance_matrix, elastic_decomposition,
74    elastic_distance, elastic_distance_nd, elastic_self_distance_matrix, karcher_mean,
75    pairwise_consistency, phase_distance_pair, phase_self_distance_matrix, reparameterize_curve,
76    srsf_inverse, srsf_inverse_nd, srsf_transform, srsf_transform_nd, tsrvf_from_alignment,
77    tsrvf_from_alignment_with_method, tsrvf_inverse, tsrvf_transform, tsrvf_transform_with_method,
78    warp_complexity, warp_smoothness, AlignmentQuality, AlignmentResult, AlignmentResultNd,
79    AlignmentSetResult, ConstrainedAlignmentResult, DecompositionResult, KarcherMeanResult,
80    TransportMethod, TsrvfResult,
81};
82
83// Re-export commonly used items
84pub use helpers::{
85    cumulative_trapz, extract_curves, gradient_uniform, l2_distance, linear_interp,
86    simpsons_weights, simpsons_weights_2d, trapz, DEFAULT_CONVERGENCE_TOL, NUMERICAL_EPS,
87};
88
89// Re-export warping utilities
90pub use warping::{
91    exp_map_sphere, gam_to_psi, gam_to_psi_smooth, inner_product_l2, inv_exp_map_sphere,
92    invert_gamma, l2_norm_l2, normalize_warp, phase_distance, psi_to_gam,
93};
94
95// Re-export seasonal analysis types
96pub use seasonal::{
97    autoperiod, autoperiod_fdata, cfd_autoperiod, cfd_autoperiod_fdata, hilbert_transform, sazed,
98    sazed_fdata, AutoperiodCandidate, AutoperiodResult, CfdAutoperiodResult, ChangeDetectionResult,
99    ChangePoint, ChangeType, DetectedPeriod, InstantaneousPeriod, Peak, PeakDetectionResult,
100    PeriodEstimate, SazedComponents, SazedResult, StrengthMethod,
101};
102
103// Re-export landmark registration types
104pub use landmark::{
105    detect_and_register, detect_landmarks, landmark_register, Landmark, LandmarkKind,
106    LandmarkResult,
107};
108
109// Re-export detrending types
110pub use detrend::{DecomposeResult, TrendResult};
111
112// Re-export simulation types
113pub use simulation::{EFunType, EValType};
114
115// Re-export irregular fdata types
116pub use irreg_fdata::{IrregFdata, KernelType};
117
118// Re-export tolerance band types
119pub use tolerance::{
120    conformal_prediction_band, elastic_tolerance_band, equivalence_test,
121    equivalence_test_one_sample, exponential_family_tolerance_band, fpca_tolerance_band,
122    scb_mean_degras, BandType, EquivalenceBootstrap, EquivalenceTestResult, ExponentialFamily,
123    MultiplierDistribution, NonConformityScore, ToleranceBand,
124};
125
126// Re-export FAMM types
127pub use famm::{fmm, fmm_predict, fmm_test_fixed, FmmResult, FmmTestResult};
128
129// Re-export function-on-scalar regression types
130pub use function_on_scalar::{
131    fanova, fosr, fosr_fpc, predict_fosr, FanovaResult, FosrFpcResult, FosrResult,
132};
133
134// Re-export scalar-on-function regression types
135pub use scalar_on_function::{
136    bootstrap_ci_fregre_lm, bootstrap_ci_functional_logistic, fregre_cv, fregre_lm,
137    fregre_np_mixed, functional_logistic, predict_fregre_lm, predict_fregre_np, BootstrapCiResult,
138    FregreCvResult, FregreLmResult, FregreNpResult, FunctionalLogisticResult,
139};
140
141// Re-export explainability types
142pub use elastic_explain::{elastic_pcr_attribution, ElasticAttributionResult};
143pub use explain::{
144    anchor_explanation, anchor_explanation_logistic, beta_decomposition,
145    beta_decomposition_logistic, calibration_diagnostics, conditional_permutation_importance,
146    conditional_permutation_importance_logistic, conformal_prediction_residuals,
147    counterfactual_logistic, counterfactual_regression, dfbetas_dffits, domain_selection,
148    domain_selection_logistic, expected_calibration_error, explanation_stability,
149    explanation_stability_logistic, fpc_ale, fpc_ale_logistic, fpc_permutation_importance,
150    fpc_permutation_importance_logistic, fpc_shap_values, fpc_shap_values_logistic, fpc_vif,
151    fpc_vif_logistic, friedman_h_statistic, friedman_h_statistic_logistic, functional_pdp,
152    functional_pdp_logistic, functional_saliency, functional_saliency_logistic,
153    influence_diagnostics, lime_explanation, lime_explanation_logistic, loo_cv_press,
154    pointwise_importance, pointwise_importance_logistic, prediction_intervals, prototype_criticism,
155    regression_depth, regression_depth_logistic, significant_regions, significant_regions_from_se,
156    sobol_indices, sobol_indices_logistic, AleResult, AnchorCondition, AnchorResult, AnchorRule,
157    BetaDecomposition, CalibrationDiagnosticsResult, ConditionalPermutationImportanceResult,
158    ConformalPredictionResult, CounterfactualResult, DepthType, DfbetasDffitsResult,
159    DomainSelectionResult, EceResult, FpcPermutationImportance, FpcShapValues, FriedmanHResult,
160    FunctionalPdpResult, FunctionalSaliencyResult, ImportantInterval, InfluenceDiagnostics,
161    LimeResult, LooCvResult, PointwiseImportanceResult, PredictionIntervalResult,
162    PrototypeCriticismResult, RegressionDepthResult, SignificanceDirection, SignificantRegion,
163    SobolIndicesResult, StabilityAnalysisResult, VifResult,
164};
165
166// Re-export classification types
167pub use classification::{
168    fclassif_cv, fclassif_dd, fclassif_kernel, fclassif_knn, fclassif_lda, fclassif_qda,
169    ClassifCvResult, ClassifResult,
170};
171
172// Re-export GMM clustering types
173pub use gmm::{gmm_cluster, gmm_em, predict_gmm, CovType, GmmClusterResult, GmmResult};
174
175// Re-export streaming depth types
176pub use streaming_depth::{
177    FullReferenceState, RollingReference, SortedReferenceState, StreamingBd, StreamingDepth,
178    StreamingFraimanMuniz, StreamingMbd,
179};
180
181// Re-export smooth basis types
182pub use smooth_basis::{
183    bspline_penalty_matrix, fourier_penalty_matrix, smooth_basis, smooth_basis_gcv, BasisType,
184    FdPar, SmoothBasisResult,
185};
186
187// Re-export elastic FPCA types
188pub use elastic_fpca::{
189    horiz_fpca, joint_fpca, vert_fpca, HorizFpcaResult, JointFpcaResult, VertFpcaResult,
190};
191
192// Re-export elastic regression types
193pub use elastic_regression::{
194    elastic_logistic, elastic_pcr, elastic_regression, ElasticLogisticResult, ElasticPcrResult,
195    ElasticRegressionResult, PcaMethod,
196};
197
198// Re-export elastic changepoint types
199pub use elastic_changepoint::{
200    elastic_amp_changepoint, elastic_fpca_changepoint, elastic_ph_changepoint, ChangepointResult,
201    ChangepointType, CovKernel, FpcaChangepointMethod,
202};