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