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 error;
31pub(crate) mod linalg;
32pub mod matrix;
33pub mod parallel;
34
35pub use error::FdarError;
36
37pub mod alignment;
38pub mod basis;
39pub mod classification;
40pub mod clustering;
41pub mod cv;
42pub mod depth;
43pub mod detrend;
44pub mod famm;
45pub mod fdata;
46pub mod function_on_scalar;
47pub mod function_on_scalar_2d;
48pub mod gmm;
49pub mod helpers;
50pub mod irreg_fdata;
51pub mod landmark;
52pub mod metric;
53pub mod outliers;
54pub mod regression;
55pub mod scalar_on_function;
56pub mod seasonal;
57pub mod simulation;
58pub mod smoothing;
59pub mod streaming_depth;
60pub mod tolerance;
61pub mod utility;
62pub mod warping;
63
64// Elastic analysis modules
65pub mod conformal;
66pub mod elastic;
67pub mod elastic_changepoint;
68pub mod elastic_explain;
69pub mod elastic_fpca;
70pub mod elastic_regression;
71pub mod explain;
72pub mod explain_generic;
73pub mod prelude;
74pub mod smooth_basis;
75
76// Re-export matrix types
77pub use matrix::{FdCurveSet, FdMatrix};
78
79// Re-export alignment types and functions
80pub use alignment::{
81    align_to_target, alignment_quality, amplitude_distance, amplitude_self_distance_matrix,
82    compose_warps, elastic_align_pair, elastic_align_pair_constrained, elastic_align_pair_nd,
83    elastic_align_pair_with_landmarks, elastic_cross_distance_matrix, elastic_decomposition,
84    elastic_distance, elastic_distance_nd, elastic_self_distance_matrix, karcher_mean,
85    pairwise_consistency, phase_distance_pair, phase_self_distance_matrix, reparameterize_curve,
86    srsf_inverse, srsf_inverse_nd, srsf_transform, srsf_transform_nd, tsrvf_from_alignment,
87    tsrvf_from_alignment_with_method, tsrvf_inverse, tsrvf_transform, tsrvf_transform_with_method,
88    warp_complexity, warp_smoothness, AlignmentQuality, AlignmentResult, AlignmentResultNd,
89    AlignmentSetResult, ConstrainedAlignmentResult, DecompositionResult, KarcherMeanResult,
90    TransportMethod, TsrvfResult,
91};
92
93// Re-export commonly used items
94pub use helpers::{
95    cumulative_trapz, extract_curves, gradient, gradient_nonuniform, gradient_uniform, l2_distance,
96    linear_interp, simpsons_weights, simpsons_weights_2d, trapz, DEFAULT_CONVERGENCE_TOL,
97    NUMERICAL_EPS,
98};
99
100// Re-export warping utilities
101pub use warping::{
102    exp_map_sphere, gam_to_psi, gam_to_psi_smooth, inner_product_l2, inv_exp_map_sphere,
103    invert_gamma, l2_norm_l2, normalize_warp, phase_distance, psi_to_gam,
104};
105
106// Re-export seasonal analysis types
107pub use seasonal::{
108    autoperiod, autoperiod_fdata, cfd_autoperiod, cfd_autoperiod_fdata, hilbert_transform, sazed,
109    sazed_fdata, AutoperiodCandidate, AutoperiodResult, CfdAutoperiodResult, ChangeDetectionResult,
110    ChangePoint, ChangeType, DetectedPeriod, InstantaneousPeriod, Peak, PeakDetectionResult,
111    PeriodEstimate, SazedComponents, SazedResult, StrengthMethod,
112};
113
114// Re-export landmark registration types
115pub use landmark::{
116    detect_and_register, detect_landmarks, landmark_register, Landmark, LandmarkKind,
117    LandmarkResult,
118};
119
120// Re-export detrending types
121pub use detrend::{DecomposeResult, StlConfig, StlResult, TrendResult};
122
123// Re-export simulation types
124pub use simulation::{EFunType, EValType};
125
126// Re-export irregular fdata types
127pub use irreg_fdata::{IrregFdata, KernelType};
128
129// Re-export tolerance band types
130pub use tolerance::{
131    conformal_prediction_band, elastic_tolerance_band, equivalence_test,
132    equivalence_test_one_sample, exponential_family_tolerance_band, fpca_tolerance_band,
133    scb_mean_degras, BandType, EquivalenceBootstrap, EquivalenceTestResult, ExponentialFamily,
134    MultiplierDistribution, NonConformityScore, ToleranceBand,
135};
136
137// Re-export FAMM types
138pub use famm::{fmm, fmm_predict, fmm_test_fixed, FmmResult, FmmTestResult};
139
140// Re-export function-on-scalar regression types
141pub use function_on_scalar::{
142    fanova, fosr, fosr_fpc, predict_fosr, FanovaResult, FosrFpcResult, FosrResult,
143};
144pub use function_on_scalar_2d::{fosr_2d, predict_fosr_2d, FosrResult2d, Grid2d};
145
146// Re-export scalar-on-function regression types
147pub use scalar_on_function::{
148    bootstrap_ci_fregre_lm, bootstrap_ci_functional_logistic, fregre_basis_cv, fregre_cv,
149    fregre_lm, fregre_np_cv, fregre_np_mixed, functional_logistic, model_selection_ncomp,
150    predict_fregre_lm, predict_fregre_np, predict_functional_logistic, BootstrapCiResult,
151    FregreBasisCvResult, FregreCvResult, FregreLmResult, FregreNpCvResult, FregreNpResult,
152    FunctionalLogisticResult, ModelSelectionResult, SelectionCriterion,
153};
154
155// Re-export generic explainability types
156pub use explain_generic::{
157    generic_ale, generic_anchor, generic_conditional_permutation_importance,
158    generic_counterfactual, generic_domain_selection, generic_friedman_h, generic_lime,
159    generic_pdp, generic_permutation_importance, generic_prototype_criticism, generic_saliency,
160    generic_shap_values, generic_sobol_indices, generic_stability, generic_vif, FpcPredictor,
161    TaskType,
162};
163
164// Re-export explainability types
165pub use elastic_explain::{elastic_pcr_attribution, ElasticAttributionResult};
166pub use explain::{
167    anchor_explanation, anchor_explanation_logistic, beta_decomposition,
168    beta_decomposition_logistic, calibration_diagnostics, conditional_permutation_importance,
169    conditional_permutation_importance_logistic, conformal_prediction_residuals,
170    counterfactual_logistic, counterfactual_regression, dfbetas_dffits, domain_selection,
171    domain_selection_logistic, expected_calibration_error, explanation_stability,
172    explanation_stability_logistic, fpc_ale, fpc_ale_logistic, fpc_permutation_importance,
173    fpc_permutation_importance_logistic, fpc_shap_values, fpc_shap_values_logistic, fpc_vif,
174    fpc_vif_logistic, friedman_h_statistic, friedman_h_statistic_logistic, functional_pdp,
175    functional_pdp_logistic, functional_saliency, functional_saliency_logistic,
176    influence_diagnostics, lime_explanation, lime_explanation_logistic, loo_cv_press,
177    pointwise_importance, pointwise_importance_logistic, prediction_intervals, prototype_criticism,
178    regression_depth, regression_depth_logistic, significant_regions, significant_regions_from_se,
179    sobol_indices, sobol_indices_logistic, AleResult, AnchorCondition, AnchorResult, AnchorRule,
180    BetaDecomposition, CalibrationDiagnosticsResult, ConditionalPermutationImportanceResult,
181    ConformalPredictionResult, CounterfactualResult, DepthType, DfbetasDffitsResult,
182    DomainSelectionResult, EceResult, FpcPermutationImportance, FpcShapValues, FriedmanHResult,
183    FunctionalPdpResult, FunctionalSaliencyResult, ImportantInterval, InfluenceDiagnostics,
184    LimeResult, LooCvResult, PointwiseImportanceResult, PredictionIntervalResult,
185    PrototypeCriticismResult, RegressionDepthResult, SignificanceDirection, SignificantRegion,
186    SobolIndicesResult, StabilityAnalysisResult, VifResult,
187};
188
189// Re-export classification types
190pub use classification::{
191    fclassif_cv, fclassif_cv_with_config, fclassif_dd, fclassif_kernel, fclassif_knn,
192    fclassif_knn_fit, fclassif_lda, fclassif_lda_fit, fclassif_qda, fclassif_qda_fit,
193    ClassifCvConfig, ClassifCvResult, ClassifFit, ClassifMethod, ClassifResult,
194};
195
196// Re-export conformal prediction types
197pub use conformal::{
198    conformal_classif, conformal_elastic_logistic, conformal_elastic_pcr,
199    conformal_elastic_pcr_with_config, conformal_elastic_regression,
200    conformal_elastic_regression_with_config, conformal_fregre_lm, conformal_fregre_np,
201    conformal_generic_classification, conformal_generic_regression, conformal_logistic,
202    cv_conformal_classification, cv_conformal_regression, jackknife_plus_regression,
203    ClassificationScore, ConformalClassificationResult, ConformalConfig, ConformalMethod,
204    ConformalRegressionResult,
205};
206
207// Re-export GMM clustering types
208pub use gmm::{
209    gmm_cluster, gmm_cluster_with_config, gmm_em, predict_gmm, CovType, GmmClusterConfig,
210    GmmClusterResult, GmmResult,
211};
212
213// Re-export streaming depth types
214pub use streaming_depth::{
215    FullReferenceState, RollingReference, SortedReferenceState, StreamingBd, StreamingDepth,
216    StreamingFraimanMuniz, StreamingMbd,
217};
218
219// Re-export smooth basis types
220pub use smooth_basis::{
221    basis_nbasis_cv, bspline_penalty_matrix, fourier_penalty_matrix, smooth_basis,
222    smooth_basis_gcv, BasisCriterion, BasisNbasisCvResult, BasisType, FdPar, SmoothBasisResult,
223};
224
225// Re-export elastic FPCA types
226pub use elastic_fpca::{
227    horiz_fpca, joint_fpca, vert_fpca, HorizFpcaResult, JointFpcaResult, VertFpcaResult,
228};
229
230// Re-export elastic regression types
231pub use elastic_regression::{
232    elastic_logistic, elastic_logistic_with_config, elastic_pcr, elastic_pcr_with_config,
233    elastic_regression, elastic_regression_with_config, predict_elastic_logistic,
234    predict_elastic_regression, ElasticConfig, ElasticLogisticResult, ElasticPcrConfig,
235    ElasticPcrResult, ElasticRegressionResult, PcaMethod,
236};
237
238// Re-export elastic changepoint types
239pub use elastic_changepoint::{
240    elastic_amp_changepoint, elastic_fpca_changepoint, elastic_ph_changepoint, ChangepointResult,
241    ChangepointType, FpcaChangepointMethod,
242};
243
244// Re-export cross-validation utilities
245pub use cv::{
246    create_folds, create_stratified_folds, cv_fdata, fold_indices, subset_rows, subset_vec,
247    CvFdataResult, CvMetrics, CvType,
248};
249
250// Re-export smoothing CV types
251pub use smoothing::{
252    cv_smoother, gcv_smoother, knn_gcv, knn_lcv, optim_bandwidth, CvCriterion, KnnCvResult,
253    OptimBandwidthResult,
254};
255
256// Re-export regression types
257pub use regression::{fdata_to_pc_1d, fdata_to_pls_1d, FpcaResult, PlsResult};
258#[cfg(feature = "linalg")]
259pub use regression::{ridge_regression_fit, RidgeResult};
260
261// Re-export clustering types
262pub use clustering::{
263    calinski_harabasz, fuzzy_cmeans_fd, kmeans_fd, silhouette_score, FuzzyCmeansResult,
264    KmeansResult,
265};
266
267// Re-export distance metric types and functions
268pub use metric::{
269    dtw_cross_1d, dtw_distance, dtw_self_1d, fourier_cross_1d, fourier_self_1d, hausdorff_3d,
270    hausdorff_cross_1d, hausdorff_cross_2d, hausdorff_self_1d, hausdorff_self_2d, hshift_cross_1d,
271    hshift_self_1d, lp_cross_1d, lp_cross_2d, lp_self_1d, lp_self_2d, soft_dtw_barycenter,
272    soft_dtw_cross_1d, soft_dtw_distance, soft_dtw_div_cross_1d, soft_dtw_div_self_1d,
273    soft_dtw_divergence, soft_dtw_self_1d, SoftDtwBarycenterResult,
274};
275
276// Re-export depth measure functions
277pub use depth::{
278    band_1d, fraiman_muniz_1d, fraiman_muniz_2d, functional_spatial_1d, functional_spatial_2d,
279    kernel_functional_spatial_1d, kernel_functional_spatial_2d, modal_1d, modal_2d,
280    modified_band_1d, modified_epigraph_index_1d, random_projection_1d,
281    random_projection_1d_seeded, random_projection_2d, random_tukey_1d, random_tukey_1d_seeded,
282    random_tukey_2d,
283};
284
285// Re-export outlier detection functions
286pub use outliers::{detect_outliers_lrt, outliers_threshold_lrt, outliers_threshold_lrt_with_dist};
287
288// Re-export utility functions
289pub use utility::{
290    compute_adot, inner_product, inner_product_matrix, integrate_simpson, knn_loocv, knn_predict,
291    pcvm_statistic, rp_stat, RpStatResult,
292};
293
294// Re-export functional data operation types and functions
295pub use fdata::{
296    center_1d, deriv_1d, deriv_2d, geometric_median_1d, geometric_median_2d, mean_1d, mean_2d,
297    norm_lp_1d, Deriv2DResult,
298};
299
300// Re-export basis representation types and functions
301pub use basis::{
302    basis_to_fdata, basis_to_fdata_1d, bspline_basis, difference_matrix, fdata_to_basis,
303    fdata_to_basis_1d, fourier_basis, fourier_basis_with_period, fourier_fit_1d, pspline_fit_1d,
304    select_basis_auto_1d, select_fourier_nbasis_gcv, BasisAutoSelectionResult,
305    BasisProjectionResult, FourierFitResult, ProjectionBasisType, PsplineFitResult,
306    SingleCurveSelection,
307};