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