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