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