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