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