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;
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};
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(crate) 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.
393pub use function_on_scalar::{
394    fanova_seeded, fosr, fosr_fpc, predict_fosr, FanovaResult, FosrFpcResult, FosrResult,
395};
396pub use function_on_scalar_2d::{fosr_2d, predict_fosr_2d, Fosr2dResult, Grid2d};
397
398// Re-export scalar-on-function regression types
399pub use scalar_on_function::{
400    bootstrap_ci_fregre_lm, bootstrap_ci_functional_logistic, fam, fregre_basis_cv, fregre_cv,
401    fregre_gkam, fregre_gsam, fregre_huber, fregre_l1, fregre_lm, fregre_lm_multi,
402    fregre_lm_multi_cv, fregre_np_cv, fregre_np_from_distances, fregre_np_mixed, fregre_pls,
403    functional_glm, functional_logistic, history_index, model_selection_ncomp,
404    permutation_test_fam, predict_fregre_lm, predict_fregre_lm_multi, predict_fregre_np,
405    predict_fregre_np_from_distances, predict_fregre_pls, predict_fregre_robust,
406    predict_functional_glm, predict_functional_logistic, variable_selection, BootstrapCiResult,
407    FamConfig, FamResult, FregreBasisCvResult, FregreCvResult, FregreLmResult, FregreNpCvResult,
408    FregreNpResult, FregreRobustResult, FunctionalGlmResult, FunctionalLogisticResult, GkamConfig,
409    GkamResult, GlmFamily, GsamConfig, GsamResult, HistoryIndexConfig, HistoryIndexResult,
410    ModelSelectionResult, MultiCvResult, MultiFregreLmResult, PermTestConfig, PermTestResult,
411    PermTestStatistic, PlsRegressionResult, SelectionCriterion, VarSelectConfig, VarSelectPenalty,
412    VarSelectResult,
413};
414
415// Re-export generic explainability types
416pub use explain_generic::{
417    generic_ale, generic_anchor, generic_conditional_permutation_importance,
418    generic_counterfactual, generic_domain_selection, generic_friedman_h, generic_lime,
419    generic_pdp, generic_permutation_importance, generic_prototype_criticism, generic_saliency,
420    generic_shap_values, generic_sobol_indices, generic_stability, generic_vif, FpcPredictor,
421    TaskType,
422};
423
424// Re-export explainability types
425pub use elastic_explain::{elastic_pcr_attribution, ElasticAttributionResult};
426pub use explain::{
427    anchor_explanation, anchor_explanation_logistic, beta_decomposition,
428    beta_decomposition_logistic, calibration_diagnostics, conditional_permutation_importance,
429    conditional_permutation_importance_logistic, conformal_prediction_residuals,
430    counterfactual_logistic, counterfactual_regression, dfbetas_dffits, domain_selection,
431    domain_selection_logistic, expected_calibration_error, explanation_stability,
432    explanation_stability_logistic, fpc_ale, fpc_ale_logistic, fpc_permutation_importance,
433    fpc_permutation_importance_logistic, fpc_shap_values, fpc_shap_values_logistic, fpc_vif,
434    fpc_vif_logistic, friedman_h_statistic, friedman_h_statistic_logistic, functional_pdp,
435    functional_pdp_logistic, functional_saliency, functional_saliency_logistic,
436    influence_diagnostics, lime_explanation, lime_explanation_logistic, loo_cv_press,
437    pointwise_importance, pointwise_importance_logistic, prediction_intervals, prototype_criticism,
438    regression_depth, regression_depth_logistic, significant_regions, significant_regions_from_se,
439    sobol_indices, sobol_indices_logistic, AleResult, AnchorCondition, AnchorResult, AnchorRule,
440    BetaDecomposition, CalibrationDiagnosticsResult, ConditionalPermutationImportanceResult,
441    ConformalPredictionResult, CounterfactualResult, DepthType, DfbetasDffitsResult,
442    DomainSelectionResult, EceResult, FpcPermutationImportance, FpcShapValues, FriedmanHResult,
443    FunctionalPdpResult, FunctionalSaliencyResult, ImportantInterval, InfluenceDiagnostics,
444    LimeResult, LooCvResult, PointwiseImportanceResult, PredictionIntervalResult,
445    PrototypeCriticismResult, RegressionDepthResult, SignificanceDirection, SignificantRegion,
446    SobolIndicesResult, StabilityAnalysisResult, VifResult,
447};
448
449// Re-export classification types
450pub use classification::{
451    fclassif_cv, fclassif_cv_with_config, fclassif_dd, fclassif_kernel, fclassif_knn,
452    fclassif_knn_fit, fclassif_lda, fclassif_lda_fit, fclassif_qda, fclassif_qda_fit,
453    kernel_classify_from_distances, knn_classify_from_distances, ClassifCvConfig, ClassifCvResult,
454    ClassifFit, ClassifMethod, ClassifResult,
455};
456
457// Re-export shapelet transform & classification types (finalized public surface)
458pub use shapelet::{
459    discover_shapelets, shapelet_classifier_fit, shapelet_distance, shapelet_transform,
460    shapelet_transform_fit, z_normalize_into, z_normalize_window, QualityMeasure, Shapelet,
461    ShapeletClassifier, ShapeletClassifierConfig, ShapeletClassifierFit, ShapeletDiscoveryConfig,
462    ShapeletSet, ShapeletTransformFit,
463};
464
465// Re-export conformal prediction types
466pub use conformal::{
467    conformal_classif, conformal_elastic_logistic, conformal_elastic_pcr,
468    conformal_elastic_pcr_with_config, conformal_elastic_regression,
469    conformal_elastic_regression_with_config, conformal_fregre_lm, conformal_fregre_np,
470    conformal_generic_classification, conformal_generic_regression, conformal_logistic,
471    cv_conformal_classification, cv_conformal_regression, jackknife_plus_regression,
472    ClassificationScore, ConformalClassificationResult, ConformalConfig, ConformalMethod,
473    ConformalRegressionResult,
474};
475
476// Re-export GMM clustering types
477pub use gmm::{
478    fun_hddc_cluster, gmm_cluster, gmm_cluster_with_config, gmm_em, predict_gmm, CovType,
479    FunHddcConfig, FunHddcResult, GmmClusterConfig, GmmClusterResult, GmmFitResult,
480};
481
482// Re-export streaming depth types
483pub use streaming_depth::{
484    FullReferenceState, RollingReference, SortedReferenceState, StreamingBd, StreamingDepth,
485    StreamingFraimanMuniz, StreamingMbd,
486};
487
488// Re-export FEM smoothing types (wave-1 + wave-2: mesh assembly, basis evaluation, SR-PDE smoothing)
489pub use fem_smoothing::{
490    assemble_fem_matrices, fem_basis_eval, fem_predict, fem_smooth, fem_smooth_gcv, FemSmoothResult,
491};
492
493// Re-export smooth basis types
494pub use smooth_basis::{
495    basis_nbasis_cv, basis_nbasis_cv_with_config, bspline_penalty_matrix, fourier_penalty_matrix,
496    smooth_basis, smooth_basis_aic, smooth_basis_gcv, smooth_basis_gcv_with_config,
497    smooth_monotone, smooth_positive, BasisCriterion, BasisNbasisCvConfig, BasisNbasisCvResult,
498    BasisType, FdPar, SmoothBasisGcvConfig, SmoothBasisResult, SmoothMonotoneResult,
499    SmoothPositiveResult,
500};
501
502// Re-export elastic FPCA types
503pub use elastic_fpca::{
504    horiz_fpca, horiz_fpca_from_alignment, joint_fpca, joint_fpca_from_alignment, vert_fpca,
505    vert_fpca_from_alignment, HorizFpcaResult, JointFpcaResult, VertFpcaResult,
506};
507
508// Re-export jfPCA fit/transform seam
509pub use jfpca_model::{jfpca_fit, JfpcaModel, JfpcaTransform};
510
511// Re-export VEESA explainability (Phase 73)
512pub use elastic_pfi::{
513    elastic_pfi, veesa_pipeline, ElasticPfiResult, PfiMetric, VeesaPipelineResult,
514};
515pub use jfpca_model::PrincipalDirections;
516
517// Re-export elastic regression types
518pub use elastic_regression::{
519    elastic_logistic, elastic_logistic_with_config, elastic_multinomial, elastic_pcr,
520    elastic_pcr_with_config, elastic_regression, elastic_regression_with_config,
521    predict_elastic_logistic, predict_elastic_multinomial, predict_elastic_regression,
522    predict_scalar_on_shape, scalar_on_shape, ElasticConfig, ElasticLogisticResult,
523    ElasticMultinomialResult, ElasticPcrConfig, ElasticPcrResult, ElasticRegressionResult,
524    IndexMethod, PcaMethod, ScalarOnShapeConfig, ScalarOnShapeResult,
525};
526
527// Re-export SPM types
528pub use spm::{
529    arl0_ewma_t2, arl0_spe, arl0_t2, arl1_t2, elastic_spm_monitor, elastic_spm_phase1,
530    evaluate_rules, ewma_scores, frcc_monitor, frcc_phase1, hotelling_t2, hotelling_t2_regularized,
531    mf_spm_monitor, mf_spm_phase1, mfpca, nelson_rules, profile_monitor, profile_phase1,
532    select_ncomp, spe_contributions, spe_control_limit, spe_limit_robust,
533    spe_moment_match_diagnostic, spe_multivariate, spe_univariate, spm_amewma_monitor,
534    spm_cusum_monitor, spm_cusum_monitor_with_restart, spm_ewma_monitor, spm_mewma_monitor,
535    spm_monitor, spm_monitor_from_fields, spm_monitor_partial, spm_monitor_partial_batch,
536    spm_phase1, spm_phase1_iterative, t2_contributions, t2_contributions_mfpca, t2_control_limit,
537    t2_limit_robust, t2_pc_contributions, t2_pc_significance, western_electric_rules, AmewmaConfig,
538    AmewmaMonitorResult, ArlConfig, ArlResult, ChartRule, ControlLimit, ControlLimitMethod,
539    CusumConfig, CusumMonitorResult, DomainCompletion, ElasticSpmChart, ElasticSpmConfig,
540    ElasticSpmMonitorResult, EwmaConfig, EwmaMonitorResult, FrccChart, FrccConfig,
541    FrccMonitorResult, IterativePhase1Config, IterativePhase1Result, MewmaConfig,
542    MewmaMonitorResult, MfSpmChart, MfpcaConfig, MfpcaResult, NcompMethod, PartialDomainConfig,
543    PartialMonitorResult, ProfileChart, ProfileMonitorConfig, ProfileMonitorResult, RuleViolation,
544    SpmChart, SpmConfig, SpmMonitorResult,
545};
546
547// Re-export elastic changepoint types
548pub use elastic_changepoint::{
549    elastic_amp_changepoint, elastic_fpca_changepoint, elastic_ph_changepoint, ChangepointResult,
550    ChangepointType, FpcaChangepointMethod,
551};
552
553// Re-export cross-validation utilities
554pub use cv::{
555    classification_metrics, create_folds, create_stratified_folds, cv_fdata, cv_fdata_with_metrics,
556    fold_indices, metric_accuracy, metric_f1, metric_mae, metric_precision, metric_r_squared,
557    metric_recall, metric_rmse, regression_metrics, subset_rows, subset_vec, CvFdataResult,
558    CvMetrics, CvSelectionResult, CvType, MetricFn,
559};
560
561// Re-export distance utilities
562pub use distance::{
563    cross_distance_matrix, euclidean_distance_matrix, l2_distance_matrix, pairwise_distance_matrix,
564};
565
566// Re-export validation utilities
567pub use validation::{
568    validate_dist_mat, validate_fdata, validate_labels, validate_ncomp, validate_response,
569};
570
571// Re-export smoothing CV types
572pub use smoothing::{
573    aic_smoother, cv_smoother, gcv_smoother, knn_gcv, knn_lcv, optim_bandwidth, CvCriterion,
574    KnnCvResult, OptimBandwidthResult,
575};
576
577// Re-export regression types
578pub use regression::{fdata_to_pc, fdata_to_pls, project_scores_generic, FpcaResult, PlsResult};
579// Re-export the forward-mode automatic-differentiation core (v0.39.0 DIF-04).
580pub use autodiff::{diff, directional_derivative, grad, jacobian, Dual, Scalar};
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, LocalPeerResult, 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    basis_coef_cross, basis_coef_self, deriv_cross, deriv_self, dtw_cross, dtw_distance, dtw_self,
632    fourier_cross, fourier_self, gak, gak_gram_matrix, gak_gram_predict, gak_gram_train,
633    hausdorff_3d, hausdorff_cross, hausdorff_self, hshift_cross, hshift_self, kl_cross, kl_self,
634    lp_cross, lp_self, pca_cross, pca_self, sbd, sbd_distance_matrix, sigma_gak,
635    soft_dtw_barycenter, soft_dtw_cross, soft_dtw_distance, soft_dtw_distance_generic,
636    soft_dtw_div_cross, soft_dtw_div_self, soft_dtw_divergence, soft_dtw_self, GakConfig,
637    GakGramTrain, LpDomain, 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
644pub use depth::{
645    band, epigraph_index, extremal_depth, extreme_rank_length_depth, fraiman_muniz,
646    functional_boxplot, functional_depth, functional_spatial, half_region_depth, hypograph_index,
647    kernel_functional_spatial, linfinity_depth, modal, modified_band, modified_epigraph_index,
648    modified_half_region_depth, modified_hypograph_index, random_projection,
649    random_projection_1d_seeded, random_tukey, random_tukey_1d_seeded, rpd_depth,
650    total_variation_depth, DepthMethod, FunctionalBoxplotResult, TvdMssResult,
651};
652
653// Re-export outlier detection functions
654pub use outliers::{
655    depthgram, detect_outliers_lrt, magnitude_shape_outlyingness, muod, outliergram,
656    outliers_threshold_lrt, outliers_threshold_lrt_with_dist, sequential_transform_outliers,
657    tvdmss, DepthgramConfig, DepthgramResult, MagnitudeShapeResult, MuodConfig, MuodResult,
658    OutligramResult, SeqTransform, SeqTransformConfig, SeqTransformOutliers, TvdMssConfig,
659    TvdMssOutliers,
660};
661
662// Re-export utility functions
663pub use utility::{
664    compute_adot, inner_product, inner_product_matrix, integrate_simpson, knn_loocv, knn_predict,
665    pcvm_statistic, rp_stat, RpStatResult,
666};
667
668// Re-export functional data operation types and functions.
669pub use fdata::{
670    center, depth_based_median, deriv, functional_covariance, functional_std, functional_variance,
671    geometric_median, mean, norm_lp, normalize, normalize_with_argvals, trim_mean, Deriv2DResult,
672    DerivDomain, DerivResult, NormalizationMethod,
673};
674
675// Re-export basis representation types and functions
676pub use basis::{
677    basis_to_fdata, basis_to_fdata_1d, bspline_basis, bspline_basis_from_knots, constant_basis,
678    construct_bspline_knots, difference_matrix, exponential_basis, fdata_to_basis,
679    fdata_to_basis_1d, fourier_basis, fourier_basis_with_period, fourier_fit, monomial_basis,
680    polygonal_basis, power_basis, pspline_evaluate, pspline_fit, pspline_fit_gcv,
681    select_basis_auto, select_fourier_nbasis_gcv, BasisAutoSelectionResult, BasisProjectionResult,
682    BasisSystem, FourierFitResult, ProjectionBasisType, PsplineFitResult, SingleCurveSelection,
683};
684
685// Re-export functional scoring metrics
686pub use scoring::{
687    functional_explained_variance, functional_mae, functional_mape, functional_mse, functional_msle,
688};
689
690// Re-export boosting and Bayesian functional regression types (Phase 43 REG-06)
691pub use boosting_regression::{
692    bayesian_fosr, boost_fofr, boost_fosr, gamlss_fosr, stability_selection, BayesianConfig,
693    BayesianFosrResult, BoostFofrResult, BoostFosrResult, BoostingConfig, GamlssResult,
694    StabilityConfig, StabilityResult,
695};