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