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