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