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