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//! ## Imports
18//!
19//! Items are organized into domain-specific submodules. Prefer importing from
20//! the submodule for clarity:
21//!
22//! ```rust,no_run
23//! use fdars_core::matrix::FdMatrix;
24//! use fdars_core::alignment::{karcher_mean, elastic_align_pair, AlignmentOutput};
25//! use fdars_core::spm::{spm_phase1, spm_monitor, SpmConfig};
26//! use fdars_core::regression::fdata_to_pc_1d;
27//! use fdars_core::scalar_on_function::{fregre_lm, fregre_pls};
28//! use fdars_core::cv::{cv_fdata_with_metrics, regression_metrics};
29//! use fdars_core::distance::pairwise_distance_matrix;
30//! ```
31//!
32//! All public items are also re-exported at the crate root for convenience:
33//! ```rust,no_run
34//! use fdars_core::{FdMatrix, karcher_mean, spm_phase1, fdata_to_pc_1d};
35//! ```
36//!
37//! The [`prelude`] module provides the most commonly used types:
38//! ```rust,no_run
39//! use fdars_core::prelude::*;
40//! ```
41//!
42//! ## Feature Flags
43//!
44//! | Feature | Default | Description |
45//! |---------|---------|-------------|
46//! | `parallel` | **yes** | Enables rayon-based parallelism via `iter_maybe_parallel!` macro |
47//! | `linalg` | no | Enables `faer` and `anofox-regression` dependencies (requires Rust 1.84+). Gates `ridge_regression_fit`. Not WASM-compatible. |
48//! | `serde` | no | Adds `Serialize`/`Deserialize` to core types (`FdMatrix`, `FpcaResult`, `SpmChart`, etc.) and enables `serde_json::Value` in `ExplainLayer.extra`. |
49//! | `js` | no | Enables `getrandom/js` for WASM builds. |
50//!
51//! ## Data Layout
52//!
53//! Functional data is represented using the [`FdMatrix`] type, a column-major matrix
54//! wrapping a flat `Vec<f64>` with safe `(i, j)` indexing and dimension tracking:
55//! - For n observations with m evaluation points: `data[(i, j)]` gives observation i at point j
56//! - 2D surfaces (n observations, m1 x m2 grid): stored as n x (m1*m2) matrices
57//! - Zero-copy column access via `data.column(j)`, row gather via `data.row(i)`
58//! - nalgebra interop via `to_dmatrix()` / `from_dmatrix()` for SVD operations
59
60#![allow(clippy::needless_range_loop)]
61#![allow(clippy::too_many_arguments)]
62#![allow(clippy::type_complexity)]
63
64pub mod error;
65pub(crate) mod linalg;
66pub mod matrix;
67pub mod parallel;
68
69pub use error::FdarError;
70
71#[cfg(test)]
72pub(crate) mod test_helpers;
73
74pub mod alignment;
75pub mod andrews;
76
77// Shared utility modules
78pub mod basis;
79pub mod boosting_regression;
80pub mod classification;
81pub mod clustering;
82pub mod clustering_advanced;
83pub mod coclustering;
84pub mod concurrent_regression;
85pub mod cv;
86pub mod density_fda;
87pub mod depth;
88pub mod detrend;
89pub mod dim;
90pub mod distance;
91pub(crate) mod distributions;
92pub mod famm;
93pub mod fdata;
94pub mod fem_smoothing;
95pub mod fof_regression;
96pub mod fpca_variants;
97pub mod frechet;
98pub mod fts;
99pub mod function_on_scalar;
100pub mod function_on_scalar_2d;
101pub mod gmm;
102pub mod helpers;
103pub mod inference;
104pub mod irreg_fdata;
105pub mod kernel_kmeans;
106pub mod landmark;
107pub mod metric;
108pub mod outliers;
109pub mod regression;
110pub mod scalar_on_function;
111pub mod seasonal;
112pub mod simulation;
113pub mod smoothing;
114pub mod streaming_depth;
115pub mod tolerance;
116pub mod utility;
117pub mod validation;
118pub mod warping;
119pub mod wire;
120
121// Covariance kernels and Gaussian processes
122pub mod covariance;
123
124// Statistical Process Monitoring
125pub mod spm;
126
127// Elastic analysis modules
128pub mod conformal;
129pub mod elastic;
130pub mod elastic_changepoint;
131pub mod elastic_explain;
132pub mod elastic_fpca;
133pub mod elastic_regression;
134pub mod explain;
135pub mod explain_generic;
136pub mod multi_fdata;
137pub mod pace_fpca;
138pub mod pda;
139pub(crate) mod permutation_test;
140pub mod prelude;
141pub mod scoring;
142pub mod smooth_basis;
143
144/// Hidden test-support surface used ONLY by the crate's integration
145/// equivalence tests (`tests/equivalence_phase49.rs`). NOT part of the public
146/// API — it exists solely so the behavior-preservation goldens can reach the
147/// `pub(crate)` numerical primitives and the current `inference`/`spm` tail
148/// functions from an external test crate. `#[doc(hidden)]` keeps it out of the
149/// rendered docs; these are thin forwarding `fn`s (not `pub use` re-exports,
150/// which cannot escape `pub(crate)`), so no existing signature is widened and
151/// no stable guarantee is made about this module.
152#[doc(hidden)]
153pub mod __equivalence_test_support {
154    /// Forwards to the CURRENT (pre-consolidation) `inference`/`spm` tail
155    /// functions — the goldens assert these stay bit-identical across the
156    /// call-site migration.
157    pub mod current {
158        #[inline]
159        pub fn chi_square_sf(x: f64, k: usize) -> f64 {
160            crate::inference::dist::chi_square_sf(x, k)
161        }
162        #[inline]
163        pub fn chi_square_sf_df(x: f64, df: f64) -> f64 {
164            crate::inference::dist::chi_square_sf_df(x, df)
165        }
166        #[inline]
167        pub fn f_sf(f: f64, d1: f64, d2: f64) -> f64 {
168            crate::inference::dist::f_sf(f, d1, d2)
169        }
170        #[inline]
171        pub fn chi2_cdf(x: f64, k: usize) -> f64 {
172            crate::spm::chi_squared::chi2_cdf(x, k)
173        }
174        #[inline]
175        pub fn chi2_quantile(p: f64, k: usize) -> f64 {
176            crate::spm::chi_squared::chi2_quantile(p, k)
177        }
178        #[inline]
179        pub fn regularized_gamma_p(a: f64, x: f64) -> f64 {
180            crate::spm::chi_squared::regularized_gamma_p(a, x)
181        }
182    }
183
184    /// Forwards to the NEW consolidated `crate::distributions::*` surface — the goldens assert the
185    /// shared module reproduces the pre-refactor bits directly.
186    pub mod distributions {
187        #[inline]
188        pub fn chi2_sf(x: f64, df: f64) -> f64 {
189            crate::distributions::chi2_sf(x, df)
190        }
191        #[inline]
192        pub fn chi2_cdf(x: f64, k: usize) -> f64 {
193            crate::distributions::chi2_cdf(x, k)
194        }
195        #[inline]
196        pub fn chi2_quantile(p: f64, k: usize) -> f64 {
197            crate::distributions::chi2_quantile(p, k)
198        }
199        #[inline]
200        pub fn reg_gamma_p(a: f64, x: f64) -> f64 {
201            crate::distributions::reg_gamma_p(a, x)
202        }
203        #[inline]
204        pub fn reg_gamma_q(a: f64, x: f64) -> f64 {
205            crate::distributions::reg_gamma_q(a, x)
206        }
207        #[inline]
208        pub fn ln_gamma(x: f64) -> f64 {
209            crate::distributions::ln_gamma(x)
210        }
211    }
212
213    /// Forwards to the `pub(crate)` per-thread RNG-seeding helper (CONS-02) so
214    /// the `rng_stream` golden can prove the consolidated
215    /// `helpers::seed_for_thread` draws are bit-identical to the pre-refactor
216    /// `StdRng::seed_from_u64(seed + k)` formula from an external test crate.
217    pub mod helpers {
218        /// Returns the first `n` `u64` draws produced by
219        /// `crate::helpers::seed_for_thread(seed, k)`. Returning drawn `u64`s
220        /// (rather than the `pub(crate)` `StdRng` itself) keeps the crate-private
221        /// RNG type from escaping while still exercising the exact stream.
222        #[inline]
223        pub fn seed_for_thread_draws(seed: u64, k: usize, n: usize) -> Vec<u64> {
224            use rand::RngCore;
225            let mut rng = crate::helpers::seed_for_thread(seed, k);
226            (0..n).map(|_| rng.next_u64()).collect()
227        }
228    }
229}
230
231// Re-export matrix types
232pub use matrix::{FdCurveSet, FdMatrix};
233
234// Re-export multi-domain functional data container
235pub use multi_fdata::{FdComponent, MultiFunData};
236
237// Re-export linear differential operator and principal differential analysis
238pub use pda::{principal_differential_analysis, Lfd, PdaResult};
239
240// Re-export density-valued FDA entry points
241pub use density_fda::{
242    inverse_lqd, lqd_fpca, lqd_transform, normalize_density, wasserstein_barycenter, LqdFpcaResult,
243};
244
245// Re-export Fréchet / object-data regression types (FRE-01 + FRE-02 object spaces)
246pub use frechet::{
247    frechet_anova, frechet_anova_space, frechet_global_reg, frechet_global_reg_space,
248    frechet_local_reg, frechet_local_reg_space, frechet_mean, frechet_variance,
249    wasserstein2_distance, CorrelationMatrixSpace, FrechetAnovaResult, FrechetGlobalRegResult,
250    FrechetLocalRegResult, MetricSpace, NetworkSpace, PointProcessSpace, SpdMatrixSpace, SpdMetric,
251    SphericalSpace, WassersteinDensitySpace,
252};
253
254// Re-export Andrews curves types
255pub use andrews::{andrews_loadings, andrews_transform, AndrewsLoadings, AndrewsResult};
256
257// Re-export covariance kernel types
258pub use covariance::{
259    covariance_matrix, generate_gaussian_process, CovKernel, GaussianProcessResult,
260};
261
262// Re-export alignment types and functions
263pub use alignment::{
264    align_to_target, alignment_quality, amplitude_distance, amplitude_self_distance_matrix,
265    bayesian_align_pair, compose_warps, curve_geodesic, curve_geodesic_nd, cut_dendrogram,
266    diagnose_alignment, diagnose_pairwise, elastic_align_pair, elastic_align_pair_closed,
267    elastic_align_pair_constrained, elastic_align_pair_multires, elastic_align_pair_nd,
268    elastic_align_pair_penalized, elastic_align_pair_with_landmarks, elastic_cross_distance_matrix,
269    elastic_cross_distance_matrix_banded, elastic_cross_distance_matrix_with_band,
270    elastic_decomposition, elastic_depth, elastic_distance, elastic_distance_closed,
271    elastic_distance_nd, elastic_outlier_detection, elastic_partial_match,
272    elastic_self_distance_matrix, elastic_self_distance_matrix_banded,
273    elastic_self_distance_matrix_with_band, gauss_model, hierarchical_from_distances, horiz_fpns,
274    invert_warp, joint_gauss_model, karcher_covariance_nd, karcher_mean, karcher_mean_banded,
275    karcher_mean_closed, karcher_mean_nd, karcher_mean_with_band, karcher_median,
276    kmedoids_from_distances, lambda_cv, least_squares_score, least_squares_shift_registration,
277    orbit_representative, pairwise_consistency, pairwise_correlation_score, pca_nd,
278    peak_persistence, phase_boxplot, phase_distance_pair, phase_self_distance_matrix,
279    reparameterize_curve, robust_karcher_mean, shape_confidence_interval, shape_distance,
280    shape_mean, shape_self_distance_matrix, sobolev_least_squares_score, srsf_inverse,
281    srsf_inverse_nd, srsf_transform, srsf_transform_nd, transfer_alignment, tsrvf_from_alignment,
282    tsrvf_from_alignment_with_method, tsrvf_inverse, tsrvf_transform, tsrvf_transform_with_method,
283    warp_complexity, warp_inverse_error, warp_smoothness, warp_statistics, AlignmentDiagnostic,
284    AlignmentDiagnosticSummary, AlignmentQuality, AlignmentResult, AlignmentResultNd,
285    AlignmentSetResult, BayesianAlignConfig, BayesianAlignmentResult, ClosedAlignmentResult,
286    ClosedKarcherMeanResult, ConstrainedAlignmentResult, DecompositionResult, Dendrogram,
287    DiagnosticConfig, ElasticDepthResult, ElasticOutlierConfig, ElasticOutlierResult, FpnsResult,
288    GenerativeModelResult, GeodesicPath, GeodesicPathNd, KMedoidsConfig, KMedoidsResult,
289    KarcherMeanResult, KarcherMeanResultNd, LambdaCvConfig, LambdaCvResult, Linkage,
290    MultiresConfig, OrbitRepresentative, PartialMatchConfig, PartialMatchResult, PcaNdResult,
291    PersistenceDiagramResult, PhaseBoxplot, RobustKarcherConfig, RobustKarcherResult,
292    ShapeCiConfig, ShapeCiResult, ShapeDistanceResult, ShapeMeanResult, ShapeQuotient,
293    ShiftRegistrationResult, TransferAlignConfig, TransferAlignResult, TransportMethod,
294    TsrvfResult, WarpPenaltyType, WarpStatistics,
295};
296
297// Re-export commonly used items
298pub use helpers::{
299    aic, bandwidth_candidates_from_dists, bic, cumulative_trapz, extract_curves, fdata_interpolate,
300    fdata_interpolate_with_policy, gaussian_kernel, gradient, gradient_nonuniform,
301    gradient_uniform, impute_missing_values, l2_distance, linear_interp, quantile_sorted,
302    r_squared, r_squared_adj, simpsons_weights, simpsons_weights_2d, spline_interpolate,
303    spline_interpolate_with_policy, trapz, ExtrapolationPolicy, ImputationMethod,
304    InterpolationMethod, DEFAULT_CONVERGENCE_TOL, NUMERICAL_EPS,
305};
306
307// Re-export warping utilities
308pub use warping::{
309    exp_map_sphere, gam_to_psi, gam_to_psi_smooth, inner_product_l2, inv_exp_map_sphere,
310    invert_gamma, l2_norm_l2, normalize_warp, phase_distance, psi_to_gam,
311};
312
313// Re-export seasonal analysis types
314pub use seasonal::{
315    autoperiod, autoperiod_fdata, cfd_autoperiod, cfd_autoperiod_fdata, hilbert_transform, sazed,
316    sazed_fdata, AutoperiodCandidate, AutoperiodResult, CfdAutoperiodResult, ChangeDetectionResult,
317    ChangePoint, ChangeType, DetectedPeriod, InstantaneousPeriod, Peak, PeakDetectionResult,
318    PeriodEstimate, SazedComponents, SazedResult, StrengthMethod,
319};
320
321// Re-export landmark registration types
322pub use landmark::{
323    detect_and_register, detect_landmarks, landmark_register, Landmark, LandmarkKind,
324    LandmarkResult,
325};
326
327// Re-export detrending types
328pub use detrend::{DecomposeResult, StlConfig, StlResult, TrendResult};
329
330// Re-export simulation types (incl. FTS-03-04/05 functional VAR/VMA + FARMA simulators, plan 41-02)
331pub use simulation::{sim_farma, sim_fvarma, EFunType, EValType, FarmaResult, FvarmaResult};
332
333// Re-export irregular fdata types
334pub use irreg_fdata::{IrregFdata, KernelType};
335// Re-export FACE sparse covariance (Phase 38)
336pub use irreg_fdata::{face_covariance, face_trajectory, mface_covariance, MfaceCovResult};
337
338// Re-export tolerance band types
339pub use tolerance::{
340    conformal_prediction_band, elastic_tolerance_band, elastic_tolerance_band_with_config,
341    equivalence_test, equivalence_test_one_sample, exponential_family_tolerance_band,
342    fpca_tolerance_band, phase_tolerance_band, scb_mean_degras, BandType,
343    ElasticToleranceBandResult, ElasticToleranceConfig, EquivalenceBootstrap,
344    EquivalenceTestResult, ExponentialFamily, MultiplierDistribution, NonConformityScore,
345    PhaseToleranceBand, ToleranceBand,
346};
347
348// Re-export functional inference types and two-sample tests
349pub use inference::{
350    f_perm_test, flm_f_test, flm_gof_test, itp_flm, itp_one_pop, itp_two_pop, mean_scb,
351    oneway_anova_vstat, scb_two_sample_test, t_perm_test, two_sample_mean_test, ItpResult,
352    TestResult, DEFAULT_N_PERM,
353};
354
355// Re-export functional time series serial-dependence types (FTS-02) and
356// spectral / dynamic-FPCA types (FTS-03, plan 41-01)
357pub use fts::{
358    dpca, dpca_reconstruct, fplsr, ftsm, ftsm_forecast, ftsm_forecast_multistep, ftsm_update,
359    functional_acf, functional_difference, functional_pacf, long_run_covariance, spectral_density,
360    stationarity_test, ArModelResult, DpcaReconstruction, DpcaResult, FacfResult, FplsrResult,
361    FtsmForecastResult, FtsmResult, LongRunCovResult, SpectralDensityResult, StationarityResult,
362};
363
364// Re-export FAMM types
365pub use famm::{
366    dense_flmm, fast_fmm, fmm, fmm_predict, fmm_test_fixed, multi_famm, DenseFlmmConfig,
367    DenseFlmmResult, FastFmmConfig, FastFmmResult, FmmResult, FmmTestResult, MultiFammConfig,
368    MultiFammResult,
369};
370
371// Re-export concurrent (varying-coefficient) regression types
372pub use concurrent_regression::{concurrent_regression, ConcurrentRegrResult};
373
374// Re-export PACE sparse FPCA types
375pub use pace_fpca::{pace_fpca, PaceFpcaConfig, PaceFpcaResult};
376
377// Re-export function-on-function regression types
378pub use fof_regression::{
379    fof_cv, fof_re_regression, fof_regression, predict_fof, predict_fof_re, FofCvResult,
380    FofReConfig, FofReResult, FofResult,
381};
382
383// Re-export function-on-scalar regression types.
384// `fanova` is deprecated (delegates to `fanova_seeded`) but must stay re-exported for external
385// back-compat; this compiler warns on re-exporting a deprecated item, so allow it on this line only.
386#[allow(deprecated)]
387pub use function_on_scalar::{
388    fanova, fanova_seeded, fosr, fosr_fpc, predict_fosr, FanovaResult, FosrFpcResult, FosrResult,
389};
390pub use function_on_scalar_2d::{fosr_2d, predict_fosr_2d, FosrResult2d, Grid2d};
391
392// Re-export scalar-on-function regression types
393pub use scalar_on_function::{
394    bootstrap_ci_fregre_lm, bootstrap_ci_functional_logistic, fam, fregre_basis_cv, fregre_cv,
395    fregre_gkam, fregre_gsam, fregre_huber, fregre_l1, fregre_lm, fregre_lm_multi,
396    fregre_lm_multi_cv, fregre_np_cv, fregre_np_from_distances, fregre_np_mixed, fregre_pls,
397    functional_glm, functional_logistic, history_index, model_selection_ncomp,
398    permutation_test_fam, predict_fregre_lm, predict_fregre_lm_multi, predict_fregre_np,
399    predict_fregre_np_from_distances, predict_fregre_pls, predict_fregre_robust,
400    predict_functional_glm, predict_functional_logistic, variable_selection, BootstrapCiResult,
401    FamConfig, FamResult, FregreBasisCvResult, FregreCvResult, FregreLmResult, FregreNpCvResult,
402    FregreNpResult, FregreRobustResult, FunctionalGlmResult, FunctionalLogisticResult, GkamConfig,
403    GkamResult, GlmFamily, GsamConfig, GsamResult, HistoryIndexConfig, HistoryIndexResult,
404    ModelSelectionResult, MultiCvResult, MultiFregreLmResult, PermTestConfig, PermTestResult,
405    PermTestStatistic, PlsRegressionResult, SelectionCriterion, VarSelectConfig, VarSelectPenalty,
406    VarSelectResult,
407};
408
409// Re-export generic explainability types
410pub use explain_generic::{
411    generic_ale, generic_anchor, generic_conditional_permutation_importance,
412    generic_counterfactual, generic_domain_selection, generic_friedman_h, generic_lime,
413    generic_pdp, generic_permutation_importance, generic_prototype_criticism, generic_saliency,
414    generic_shap_values, generic_sobol_indices, generic_stability, generic_vif, FpcPredictor,
415    TaskType,
416};
417
418// Re-export explainability types
419pub use elastic_explain::{elastic_pcr_attribution, ElasticAttributionResult};
420pub use explain::{
421    anchor_explanation, anchor_explanation_logistic, beta_decomposition,
422    beta_decomposition_logistic, calibration_diagnostics, conditional_permutation_importance,
423    conditional_permutation_importance_logistic, conformal_prediction_residuals,
424    counterfactual_logistic, counterfactual_regression, dfbetas_dffits, domain_selection,
425    domain_selection_logistic, expected_calibration_error, explanation_stability,
426    explanation_stability_logistic, fpc_ale, fpc_ale_logistic, fpc_permutation_importance,
427    fpc_permutation_importance_logistic, fpc_shap_values, fpc_shap_values_logistic, fpc_vif,
428    fpc_vif_logistic, friedman_h_statistic, friedman_h_statistic_logistic, functional_pdp,
429    functional_pdp_logistic, functional_saliency, functional_saliency_logistic,
430    influence_diagnostics, lime_explanation, lime_explanation_logistic, loo_cv_press,
431    pointwise_importance, pointwise_importance_logistic, prediction_intervals, prototype_criticism,
432    regression_depth, regression_depth_logistic, significant_regions, significant_regions_from_se,
433    sobol_indices, sobol_indices_logistic, AleResult, AnchorCondition, AnchorResult, AnchorRule,
434    BetaDecomposition, CalibrationDiagnosticsResult, ConditionalPermutationImportanceResult,
435    ConformalPredictionResult, CounterfactualResult, DepthType, DfbetasDffitsResult,
436    DomainSelectionResult, EceResult, FpcPermutationImportance, FpcShapValues, FriedmanHResult,
437    FunctionalPdpResult, FunctionalSaliencyResult, ImportantInterval, InfluenceDiagnostics,
438    LimeResult, LooCvResult, PointwiseImportanceResult, PredictionIntervalResult,
439    PrototypeCriticismResult, RegressionDepthResult, SignificanceDirection, SignificantRegion,
440    SobolIndicesResult, StabilityAnalysisResult, VifResult,
441};
442
443// Re-export classification types
444pub use classification::{
445    fclassif_cv, fclassif_cv_with_config, fclassif_dd, fclassif_kernel, fclassif_knn,
446    fclassif_knn_fit, fclassif_lda, fclassif_lda_fit, fclassif_qda, fclassif_qda_fit,
447    kernel_classify_from_distances, knn_classify_from_distances, ClassifCvConfig, ClassifCvResult,
448    ClassifFit, ClassifMethod, ClassifResult,
449};
450
451// Re-export conformal prediction types
452pub use conformal::{
453    conformal_classif, conformal_elastic_logistic, conformal_elastic_pcr,
454    conformal_elastic_pcr_with_config, conformal_elastic_regression,
455    conformal_elastic_regression_with_config, conformal_fregre_lm, conformal_fregre_np,
456    conformal_generic_classification, conformal_generic_regression, conformal_logistic,
457    cv_conformal_classification, cv_conformal_regression, jackknife_plus_regression,
458    ClassificationScore, ConformalClassificationResult, ConformalConfig, ConformalMethod,
459    ConformalRegressionResult,
460};
461
462// Re-export GMM clustering types
463pub use gmm::{
464    funhddC_cluster, gmm_cluster, gmm_cluster_with_config, gmm_em, predict_gmm, CovType,
465    FunHddcConfig, FunHddcResult, GmmClusterConfig, GmmClusterResult, GmmResult,
466};
467
468// Re-export streaming depth types
469pub use streaming_depth::{
470    FullReferenceState, RollingReference, SortedReferenceState, StreamingBd, StreamingDepth,
471    StreamingFraimanMuniz, StreamingMbd,
472};
473
474// Re-export FEM smoothing types (wave-1 + wave-2: mesh assembly, basis evaluation, SR-PDE smoothing)
475pub use fem_smoothing::{
476    assemble_fem_matrices, fem_basis_eval, fem_predict, fem_smooth, fem_smooth_gcv, FemSmoothResult,
477};
478
479// Re-export smooth basis types
480pub use smooth_basis::{
481    basis_nbasis_cv, basis_nbasis_cv_with_config, bspline_penalty_matrix, fourier_penalty_matrix,
482    smooth_basis, smooth_basis_aic, smooth_basis_gcv, smooth_basis_gcv_with_config,
483    smooth_monotone, smooth_positive, BasisCriterion, BasisNbasisCvConfig, BasisNbasisCvResult,
484    BasisType, FdPar, SmoothBasisGcvConfig, SmoothBasisResult, SmoothMonotoneResult,
485    SmoothPositiveResult,
486};
487
488// Re-export elastic FPCA types
489pub use elastic_fpca::{
490    horiz_fpca, horiz_fpca_from_alignment, joint_fpca, joint_fpca_from_alignment, vert_fpca,
491    vert_fpca_from_alignment, HorizFpcaResult, JointFpcaResult, VertFpcaResult,
492};
493
494// Re-export elastic regression types
495pub use elastic_regression::{
496    elastic_logistic, elastic_logistic_with_config, elastic_multinomial, elastic_pcr,
497    elastic_pcr_with_config, elastic_regression, elastic_regression_with_config,
498    predict_elastic_logistic, predict_elastic_multinomial, predict_elastic_regression,
499    predict_scalar_on_shape, scalar_on_shape, ElasticConfig, ElasticLogisticResult,
500    ElasticMultinomialResult, ElasticPcrConfig, ElasticPcrResult, ElasticRegressionResult,
501    IndexMethod, PcaMethod, ScalarOnShapeConfig, ScalarOnShapeResult,
502};
503
504// Re-export SPM types
505pub use spm::{
506    arl0_ewma_t2, arl0_spe, arl0_t2, arl1_t2, elastic_spm_monitor, elastic_spm_phase1,
507    evaluate_rules, ewma_scores, frcc_monitor, frcc_phase1, hotelling_t2, hotelling_t2_regularized,
508    mf_spm_monitor, mf_spm_phase1, mfpca, nelson_rules, profile_monitor, profile_phase1,
509    select_ncomp, spe_contributions, spe_control_limit, spe_limit_robust,
510    spe_moment_match_diagnostic, spe_multivariate, spe_univariate, spm_amewma_monitor,
511    spm_cusum_monitor, spm_cusum_monitor_with_restart, spm_ewma_monitor, spm_mewma_monitor,
512    spm_monitor, spm_monitor_from_fields, spm_monitor_partial, spm_monitor_partial_batch,
513    spm_phase1, spm_phase1_iterative, t2_contributions, t2_contributions_mfpca, t2_control_limit,
514    t2_limit_robust, t2_pc_contributions, t2_pc_significance, western_electric_rules, AmewmaConfig,
515    AmewmaMonitorResult, ArlConfig, ArlResult, ChartRule, ControlLimit, ControlLimitMethod,
516    CusumConfig, CusumMonitorResult, DomainCompletion, ElasticSpmChart, ElasticSpmConfig,
517    ElasticSpmMonitorResult, EwmaConfig, EwmaMonitorResult, FrccChart, FrccConfig,
518    FrccMonitorResult, IterativePhase1Config, IterativePhase1Result, MewmaConfig,
519    MewmaMonitorResult, MfSpmChart, MfpcaConfig, MfpcaResult, NcompMethod, PartialDomainConfig,
520    PartialMonitorResult, ProfileChart, ProfileMonitorConfig, ProfileMonitorResult, RuleViolation,
521    SpmChart, SpmConfig, SpmMonitorResult,
522};
523
524// Re-export elastic changepoint types
525pub use elastic_changepoint::{
526    elastic_amp_changepoint, elastic_fpca_changepoint, elastic_ph_changepoint, ChangepointResult,
527    ChangepointType, FpcaChangepointMethod,
528};
529
530// Re-export cross-validation utilities
531pub use cv::{
532    classification_metrics, create_folds, create_stratified_folds, cv_fdata, cv_fdata_with_metrics,
533    fold_indices, metric_accuracy, metric_f1, metric_mae, metric_precision, metric_r_squared,
534    metric_recall, metric_rmse, regression_metrics, subset_rows, subset_vec, CvFdataResult,
535    CvMetrics, CvSelectionResult, CvType, MetricFn,
536};
537
538// Re-export distance utilities
539pub use distance::{
540    cross_distance_matrix, euclidean_distance_matrix, l2_distance_matrix, pairwise_distance_matrix,
541};
542
543// Re-export validation utilities
544pub use validation::{
545    validate_dist_mat, validate_fdata, validate_labels, validate_ncomp, validate_response,
546};
547
548// Re-export smoothing CV types
549pub use smoothing::{
550    aic_smoother, cv_smoother, gcv_smoother, knn_gcv, knn_lcv, optim_bandwidth, CvCriterion,
551    KnnCvResult, OptimBandwidthResult,
552};
553
554// Re-export regression types
555pub use regression::{fdata_to_pc_1d, fdata_to_pls_1d, FpcaResult, PlsResult};
556// Re-export specialized FPCA variants (Phase 37)
557pub use fpca_variants::{
558    cross_covariance, dynamical_correlation, fpca_der, fsvd, ssvd, FsvdResult,
559};
560#[cfg(feature = "linalg")]
561pub use regression::{ridge_regression_fit, RidgeResult};
562
563// Re-export co-clustering types (funLBM latent block model)
564pub use coclustering::{
565    co_cluster, co_cluster_select, BlockParams, CoClusterConfig, CoClusterResult,
566    CoClusterSelectResult,
567};
568
569// Re-export clustering types
570pub use clustering::{
571    calinski_harabasz, calinski_harabasz_from_distances, fuzzy_cmeans_fd, kmeans_fd,
572    silhouette_score, silhouette_score_from_distances, FuzzyCmeansResult, KmeansResult,
573};
574
575// Re-export kernel-k-means clustering (GAK-backed, no centroid)
576pub use kernel_kmeans::{kernel_kmeans_fd, KernelKmeansConfig, KernelKmeansResult};
577
578// Re-export advanced clustering types (DBSCAN, kCFC, funFEM, align-cluster)
579pub use clustering_advanced::{
580    align_cluster_fd, dbscan_fd, funfem_cluster, kcfc_cluster, AlignClusterConfig,
581    AlignClusterResult, DbscanConfig, DbscanResult, FunFemConfig, FunFemResult, KcfcConfig,
582    KcfcResult,
583};
584
585// Re-export distance metric types and functions
586pub use metric::{
587    dtw_cross_1d, dtw_distance, dtw_self_1d, fourier_cross_1d, fourier_self_1d, gak,
588    gak_gram_matrix, gak_gram_predict, gak_gram_train, hausdorff_3d, hausdorff_cross_1d,
589    hausdorff_cross_2d, hausdorff_self_1d, hausdorff_self_2d, hshift_cross_1d, hshift_self_1d,
590    lp_cross_1d, lp_cross_2d, lp_self_1d, lp_self_2d, sigma_gak, soft_dtw_barycenter,
591    soft_dtw_cross_1d, soft_dtw_distance, soft_dtw_div_cross_1d, soft_dtw_div_self_1d,
592    soft_dtw_divergence, soft_dtw_self_1d, GakConfig, GakGramTrain, SoftDtwBarycenterResult,
593};
594
595// Re-export depth measure functions
596// Re-export the shared dimensionality selector for the unified depth/fdata dispatchers.
597pub use dim::Dim;
598
599// The deprecated `_2d` shims are still re-exported for back-compat (API-03); re-exporting a
600// deprecated item emits a deprecation warning, so allow it on this back-compat re-export block.
601#[allow(deprecated)]
602pub use depth::{
603    band_1d, epigraph_index_1d, extremal_depth_1d, extreme_rank_length_depth_1d, fraiman_muniz,
604    fraiman_muniz_1d, fraiman_muniz_2d, functional_boxplot, functional_depth,
605    functional_spatial_1d, functional_spatial_2d, half_region_depth_1d, hypograph_index_1d,
606    kernel_functional_spatial_1d, kernel_functional_spatial_2d, linfinity_depth_1d, modal,
607    modal_1d, modal_2d, modified_band_1d, modified_epigraph_index_1d,
608    modified_half_region_depth_1d, modified_hypograph_index_1d, random_projection,
609    random_projection_1d, random_projection_1d_seeded, random_projection_2d, random_tukey,
610    random_tukey_1d, random_tukey_1d_seeded, random_tukey_2d, total_variation_depth_1d,
611    DepthMethod, FunctionalBoxplotResult, TvdMssResult,
612};
613
614// Re-export outlier detection functions
615pub use outliers::{
616    depthgram, detect_outliers_lrt, magnitude_shape_outlyingness, muod, outliergram,
617    outliers_threshold_lrt, outliers_threshold_lrt_with_dist, sequential_transform_outliers,
618    tvdmss, DepthgramConfig, DepthgramResult, MagnitudeShapeResult, MuodConfig, MuodResult,
619    OutligramResult, SeqTransform, SeqTransformConfig, SeqTransformOutliers, TvdMssConfig,
620    TvdMssOutliers,
621};
622
623// Re-export utility functions
624pub use utility::{
625    compute_adot, inner_product, inner_product_matrix, integrate_simpson, knn_loocv, knn_predict,
626    pcvm_statistic, rp_stat, RpStatResult,
627};
628
629// Re-export functional data operation types and functions.
630// `mean_2d` is a deprecated back-compat shim (API-03); allow the deprecation on this re-export block.
631#[allow(deprecated)]
632pub use fdata::{
633    center_1d, depth_based_median, deriv_1d, deriv_2d, functional_covariance, functional_std,
634    functional_variance, geometric_median_1d, geometric_median_2d, mean, mean_1d, mean_2d,
635    norm_lp_1d, normalize, normalize_with_argvals, trim_mean, Deriv2DResult, NormalizationMethod,
636};
637
638// Re-export basis representation types and functions
639pub use basis::{
640    basis_to_fdata, basis_to_fdata_1d, bspline_basis, bspline_basis_from_knots, constant_basis,
641    construct_bspline_knots, difference_matrix, exponential_basis, fdata_to_basis,
642    fdata_to_basis_1d, fourier_basis, fourier_basis_with_period, fourier_fit_1d, monomial_basis,
643    polygonal_basis, power_basis, pspline_evaluate, pspline_fit_1d, pspline_fit_gcv,
644    select_basis_auto_1d, select_fourier_nbasis_gcv, BasisAutoSelectionResult,
645    BasisProjectionResult, BasisSystem, FourierFitResult, ProjectionBasisType, PsplineFitResult,
646    SingleCurveSelection,
647};
648
649// Re-export functional scoring metrics
650pub use scoring::{
651    functional_explained_variance, functional_mae, functional_mape, functional_mse, functional_msle,
652};
653
654// Re-export boosting and Bayesian functional regression types (Phase 43 REG-06)
655pub use boosting_regression::{
656    bayesian_fosr, boost_fofr, boost_fosr, gamlss_fosr, stability_selection, BayesianConfig,
657    BayesianFosrResult, BoostFofrResult, BoostFosrResult, BoostingConfig, GamlssResult,
658    StabilityConfig, StabilityResult,
659};