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 classification;
80pub mod clustering;
81pub mod cv;
82pub mod depth;
83pub mod detrend;
84pub mod distance;
85pub mod famm;
86pub mod fdata;
87pub mod fof_regression;
88pub mod function_on_scalar;
89pub mod function_on_scalar_2d;
90pub mod gmm;
91pub mod helpers;
92pub mod inference;
93pub mod irreg_fdata;
94pub mod landmark;
95pub mod metric;
96pub mod outliers;
97pub mod regression;
98pub mod scalar_on_function;
99pub mod seasonal;
100pub mod simulation;
101pub mod smoothing;
102pub mod streaming_depth;
103pub mod tolerance;
104pub mod utility;
105pub mod validation;
106pub mod warping;
107pub mod wire;
108
109// Covariance kernels and Gaussian processes
110pub mod covariance;
111
112// Statistical Process Monitoring
113pub mod spm;
114
115// Elastic analysis modules
116pub mod conformal;
117pub mod elastic;
118pub mod elastic_changepoint;
119pub mod elastic_explain;
120pub mod elastic_fpca;
121pub mod elastic_regression;
122pub mod explain;
123pub mod explain_generic;
124pub mod prelude;
125pub mod scoring;
126pub mod smooth_basis;
127
128// Re-export matrix types
129pub use matrix::{FdCurveSet, FdMatrix};
130
131// Re-export Andrews curves types
132pub use andrews::{andrews_loadings, andrews_transform, AndrewsLoadings, AndrewsResult};
133
134// Re-export covariance kernel types
135pub use covariance::{
136    covariance_matrix, generate_gaussian_process, CovKernel, GaussianProcessResult,
137};
138
139// Re-export alignment types and functions
140pub use alignment::{
141    align_to_target, alignment_quality, amplitude_distance, amplitude_self_distance_matrix,
142    bayesian_align_pair, compose_warps, curve_geodesic, curve_geodesic_nd, cut_dendrogram,
143    diagnose_alignment, diagnose_pairwise, elastic_align_pair, elastic_align_pair_closed,
144    elastic_align_pair_constrained, elastic_align_pair_multires, elastic_align_pair_nd,
145    elastic_align_pair_penalized, elastic_align_pair_with_landmarks, elastic_cross_distance_matrix,
146    elastic_cross_distance_matrix_banded, elastic_cross_distance_matrix_with_band,
147    elastic_decomposition, elastic_depth, elastic_distance, elastic_distance_closed,
148    elastic_distance_nd, elastic_outlier_detection, elastic_partial_match,
149    elastic_self_distance_matrix, elastic_self_distance_matrix_banded,
150    elastic_self_distance_matrix_with_band, gauss_model, hierarchical_from_distances, horiz_fpns,
151    invert_warp, joint_gauss_model, karcher_covariance_nd, karcher_mean, karcher_mean_banded,
152    karcher_mean_closed, karcher_mean_nd, karcher_mean_with_band, karcher_median,
153    kmedoids_from_distances, lambda_cv, least_squares_score, least_squares_shift_registration,
154    orbit_representative, pairwise_consistency, pairwise_correlation_score, pca_nd,
155    peak_persistence, phase_boxplot, phase_distance_pair, phase_self_distance_matrix,
156    reparameterize_curve, robust_karcher_mean, shape_confidence_interval, shape_distance,
157    shape_mean, shape_self_distance_matrix, sobolev_least_squares_score, srsf_inverse,
158    srsf_inverse_nd, srsf_transform, srsf_transform_nd, transfer_alignment, tsrvf_from_alignment,
159    tsrvf_from_alignment_with_method, tsrvf_inverse, tsrvf_transform, tsrvf_transform_with_method,
160    warp_complexity, warp_inverse_error, warp_smoothness, warp_statistics, AlignmentDiagnostic,
161    AlignmentDiagnosticSummary, AlignmentQuality, AlignmentResult, AlignmentResultNd,
162    AlignmentSetResult, BayesianAlignConfig, BayesianAlignmentResult, ClosedAlignmentResult,
163    ClosedKarcherMeanResult, ConstrainedAlignmentResult, DecompositionResult, Dendrogram,
164    DiagnosticConfig, ElasticDepthResult, ElasticOutlierConfig, ElasticOutlierResult, FpnsResult,
165    GenerativeModelResult, GeodesicPath, GeodesicPathNd, KMedoidsConfig, KMedoidsResult,
166    KarcherMeanResult, KarcherMeanResultNd, LambdaCvConfig, LambdaCvResult, Linkage,
167    MultiresConfig, OrbitRepresentative, PartialMatchConfig, PartialMatchResult, PcaNdResult,
168    PersistenceDiagramResult, PhaseBoxplot, RobustKarcherConfig, RobustKarcherResult,
169    ShapeCiConfig, ShapeCiResult, ShapeDistanceResult, ShapeMeanResult, ShapeQuotient,
170    ShiftRegistrationResult, TransferAlignConfig, TransferAlignResult, TransportMethod,
171    TsrvfResult, WarpPenaltyType, WarpStatistics,
172};
173
174// Re-export commonly used items
175pub use helpers::{
176    aic, bandwidth_candidates_from_dists, bic, cumulative_trapz, extract_curves, fdata_interpolate,
177    fdata_interpolate_with_policy, gaussian_kernel, gradient, gradient_nonuniform,
178    gradient_uniform, impute_missing_values, l2_distance, linear_interp, quantile_sorted,
179    r_squared, r_squared_adj, simpsons_weights, simpsons_weights_2d, spline_interpolate,
180    spline_interpolate_with_policy, trapz, ExtrapolationPolicy, ImputationMethod,
181    InterpolationMethod, DEFAULT_CONVERGENCE_TOL, NUMERICAL_EPS,
182};
183
184// Re-export warping utilities
185pub use warping::{
186    exp_map_sphere, gam_to_psi, gam_to_psi_smooth, inner_product_l2, inv_exp_map_sphere,
187    invert_gamma, l2_norm_l2, normalize_warp, phase_distance, psi_to_gam,
188};
189
190// Re-export seasonal analysis types
191pub use seasonal::{
192    autoperiod, autoperiod_fdata, cfd_autoperiod, cfd_autoperiod_fdata, hilbert_transform, sazed,
193    sazed_fdata, AutoperiodCandidate, AutoperiodResult, CfdAutoperiodResult, ChangeDetectionResult,
194    ChangePoint, ChangeType, DetectedPeriod, InstantaneousPeriod, Peak, PeakDetectionResult,
195    PeriodEstimate, SazedComponents, SazedResult, StrengthMethod,
196};
197
198// Re-export landmark registration types
199pub use landmark::{
200    detect_and_register, detect_landmarks, landmark_register, Landmark, LandmarkKind,
201    LandmarkResult,
202};
203
204// Re-export detrending types
205pub use detrend::{DecomposeResult, StlConfig, StlResult, TrendResult};
206
207// Re-export simulation types
208pub use simulation::{EFunType, EValType};
209
210// Re-export irregular fdata types
211pub use irreg_fdata::{IrregFdata, KernelType};
212
213// Re-export tolerance band types
214pub use tolerance::{
215    conformal_prediction_band, elastic_tolerance_band, elastic_tolerance_band_with_config,
216    equivalence_test, equivalence_test_one_sample, exponential_family_tolerance_band,
217    fpca_tolerance_band, phase_tolerance_band, scb_mean_degras, BandType,
218    ElasticToleranceBandResult, ElasticToleranceConfig, EquivalenceBootstrap,
219    EquivalenceTestResult, ExponentialFamily, MultiplierDistribution, NonConformityScore,
220    PhaseToleranceBand, ToleranceBand,
221};
222
223// Re-export functional inference types and two-sample tests
224pub use inference::{
225    f_perm_test, flm_f_test, flm_gof_test, mean_scb, oneway_anova_vstat, scb_two_sample_test,
226    t_perm_test, two_sample_mean_test, TestResult, DEFAULT_N_PERM,
227};
228
229// Re-export FAMM types
230pub use famm::{fmm, fmm_predict, fmm_test_fixed, FmmResult, FmmTestResult};
231
232// Re-export function-on-function regression types
233pub use fof_regression::{fof_cv, fof_regression, predict_fof, FofCvResult, FofResult};
234
235// Re-export function-on-scalar regression types
236pub use function_on_scalar::{
237    fanova, fosr, fosr_fpc, predict_fosr, FanovaResult, FosrFpcResult, FosrResult,
238};
239pub use function_on_scalar_2d::{fosr_2d, predict_fosr_2d, FosrResult2d, Grid2d};
240
241// Re-export scalar-on-function regression types
242pub use scalar_on_function::{
243    bootstrap_ci_fregre_lm, bootstrap_ci_functional_logistic, fregre_basis_cv, fregre_cv,
244    fregre_huber, fregre_l1, fregre_lm, fregre_lm_multi, fregre_lm_multi_cv, fregre_np_cv,
245    fregre_np_from_distances, fregre_np_mixed, fregre_pls, functional_logistic,
246    model_selection_ncomp, predict_fregre_lm, predict_fregre_lm_multi, predict_fregre_np,
247    predict_fregre_np_from_distances, predict_fregre_pls, predict_fregre_robust,
248    predict_functional_logistic, BootstrapCiResult, FregreBasisCvResult, FregreCvResult,
249    FregreLmResult, FregreNpCvResult, FregreNpResult, FregreRobustResult, FunctionalLogisticResult,
250    ModelSelectionResult, MultiCvResult, MultiFregreLmResult, PlsRegressionResult,
251    SelectionCriterion,
252};
253
254// Re-export generic explainability types
255pub use explain_generic::{
256    generic_ale, generic_anchor, generic_conditional_permutation_importance,
257    generic_counterfactual, generic_domain_selection, generic_friedman_h, generic_lime,
258    generic_pdp, generic_permutation_importance, generic_prototype_criticism, generic_saliency,
259    generic_shap_values, generic_sobol_indices, generic_stability, generic_vif, FpcPredictor,
260    TaskType,
261};
262
263// Re-export explainability types
264pub use elastic_explain::{elastic_pcr_attribution, ElasticAttributionResult};
265pub use explain::{
266    anchor_explanation, anchor_explanation_logistic, beta_decomposition,
267    beta_decomposition_logistic, calibration_diagnostics, conditional_permutation_importance,
268    conditional_permutation_importance_logistic, conformal_prediction_residuals,
269    counterfactual_logistic, counterfactual_regression, dfbetas_dffits, domain_selection,
270    domain_selection_logistic, expected_calibration_error, explanation_stability,
271    explanation_stability_logistic, fpc_ale, fpc_ale_logistic, fpc_permutation_importance,
272    fpc_permutation_importance_logistic, fpc_shap_values, fpc_shap_values_logistic, fpc_vif,
273    fpc_vif_logistic, friedman_h_statistic, friedman_h_statistic_logistic, functional_pdp,
274    functional_pdp_logistic, functional_saliency, functional_saliency_logistic,
275    influence_diagnostics, lime_explanation, lime_explanation_logistic, loo_cv_press,
276    pointwise_importance, pointwise_importance_logistic, prediction_intervals, prototype_criticism,
277    regression_depth, regression_depth_logistic, significant_regions, significant_regions_from_se,
278    sobol_indices, sobol_indices_logistic, AleResult, AnchorCondition, AnchorResult, AnchorRule,
279    BetaDecomposition, CalibrationDiagnosticsResult, ConditionalPermutationImportanceResult,
280    ConformalPredictionResult, CounterfactualResult, DepthType, DfbetasDffitsResult,
281    DomainSelectionResult, EceResult, FpcPermutationImportance, FpcShapValues, FriedmanHResult,
282    FunctionalPdpResult, FunctionalSaliencyResult, ImportantInterval, InfluenceDiagnostics,
283    LimeResult, LooCvResult, PointwiseImportanceResult, PredictionIntervalResult,
284    PrototypeCriticismResult, RegressionDepthResult, SignificanceDirection, SignificantRegion,
285    SobolIndicesResult, StabilityAnalysisResult, VifResult,
286};
287
288// Re-export classification types
289pub use classification::{
290    fclassif_cv, fclassif_cv_with_config, fclassif_dd, fclassif_kernel, fclassif_knn,
291    fclassif_knn_fit, fclassif_lda, fclassif_lda_fit, fclassif_qda, fclassif_qda_fit,
292    kernel_classify_from_distances, knn_classify_from_distances, ClassifCvConfig, ClassifCvResult,
293    ClassifFit, ClassifMethod, ClassifResult,
294};
295
296// Re-export conformal prediction types
297pub use conformal::{
298    conformal_classif, conformal_elastic_logistic, conformal_elastic_pcr,
299    conformal_elastic_pcr_with_config, conformal_elastic_regression,
300    conformal_elastic_regression_with_config, conformal_fregre_lm, conformal_fregre_np,
301    conformal_generic_classification, conformal_generic_regression, conformal_logistic,
302    cv_conformal_classification, cv_conformal_regression, jackknife_plus_regression,
303    ClassificationScore, ConformalClassificationResult, ConformalConfig, ConformalMethod,
304    ConformalRegressionResult,
305};
306
307// Re-export GMM clustering types
308pub use gmm::{
309    gmm_cluster, gmm_cluster_with_config, gmm_em, predict_gmm, CovType, GmmClusterConfig,
310    GmmClusterResult, GmmResult,
311};
312
313// Re-export streaming depth types
314pub use streaming_depth::{
315    FullReferenceState, RollingReference, SortedReferenceState, StreamingBd, StreamingDepth,
316    StreamingFraimanMuniz, StreamingMbd,
317};
318
319// Re-export smooth basis types
320pub use smooth_basis::{
321    basis_nbasis_cv, basis_nbasis_cv_with_config, bspline_penalty_matrix, fourier_penalty_matrix,
322    smooth_basis, smooth_basis_aic, smooth_basis_gcv, smooth_basis_gcv_with_config, BasisCriterion,
323    BasisNbasisCvConfig, BasisNbasisCvResult, BasisType, FdPar, SmoothBasisGcvConfig,
324    SmoothBasisResult,
325};
326
327// Re-export elastic FPCA types
328pub use elastic_fpca::{
329    horiz_fpca, horiz_fpca_from_alignment, joint_fpca, joint_fpca_from_alignment, vert_fpca,
330    vert_fpca_from_alignment, HorizFpcaResult, JointFpcaResult, VertFpcaResult,
331};
332
333// Re-export elastic regression types
334pub use elastic_regression::{
335    elastic_logistic, elastic_logistic_with_config, elastic_pcr, elastic_pcr_with_config,
336    elastic_regression, elastic_regression_with_config, predict_elastic_logistic,
337    predict_elastic_regression, predict_scalar_on_shape, scalar_on_shape, ElasticConfig,
338    ElasticLogisticResult, ElasticPcrConfig, ElasticPcrResult, ElasticRegressionResult,
339    IndexMethod, PcaMethod, ScalarOnShapeConfig, ScalarOnShapeResult,
340};
341
342// Re-export SPM types
343pub use spm::{
344    arl0_ewma_t2, arl0_spe, arl0_t2, arl1_t2, elastic_spm_monitor, elastic_spm_phase1,
345    evaluate_rules, ewma_scores, frcc_monitor, frcc_phase1, hotelling_t2, hotelling_t2_regularized,
346    mf_spm_monitor, mf_spm_phase1, mfpca, nelson_rules, profile_monitor, profile_phase1,
347    select_ncomp, spe_contributions, spe_control_limit, spe_limit_robust,
348    spe_moment_match_diagnostic, spe_multivariate, spe_univariate, spm_amewma_monitor,
349    spm_cusum_monitor, spm_cusum_monitor_with_restart, spm_ewma_monitor, spm_mewma_monitor,
350    spm_monitor, spm_monitor_from_fields, spm_monitor_partial, spm_monitor_partial_batch,
351    spm_phase1, spm_phase1_iterative, t2_contributions, t2_contributions_mfpca, t2_control_limit,
352    t2_limit_robust, t2_pc_contributions, t2_pc_significance, western_electric_rules, AmewmaConfig,
353    AmewmaMonitorResult, ArlConfig, ArlResult, ChartRule, ControlLimit, ControlLimitMethod,
354    CusumConfig, CusumMonitorResult, DomainCompletion, ElasticSpmChart, ElasticSpmConfig,
355    ElasticSpmMonitorResult, EwmaConfig, EwmaMonitorResult, FrccChart, FrccConfig,
356    FrccMonitorResult, IterativePhase1Config, IterativePhase1Result, MewmaConfig,
357    MewmaMonitorResult, MfSpmChart, MfpcaConfig, MfpcaResult, NcompMethod, PartialDomainConfig,
358    PartialMonitorResult, ProfileChart, ProfileMonitorConfig, ProfileMonitorResult, RuleViolation,
359    SpmChart, SpmConfig, SpmMonitorResult,
360};
361
362// Re-export elastic changepoint types
363pub use elastic_changepoint::{
364    elastic_amp_changepoint, elastic_fpca_changepoint, elastic_ph_changepoint, ChangepointResult,
365    ChangepointType, FpcaChangepointMethod,
366};
367
368// Re-export cross-validation utilities
369pub use cv::{
370    classification_metrics, create_folds, create_stratified_folds, cv_fdata, cv_fdata_with_metrics,
371    fold_indices, metric_accuracy, metric_f1, metric_mae, metric_precision, metric_r_squared,
372    metric_recall, metric_rmse, regression_metrics, subset_rows, subset_vec, CvFdataResult,
373    CvMetrics, CvSelectionResult, CvType, MetricFn,
374};
375
376// Re-export distance utilities
377pub use distance::{
378    cross_distance_matrix, euclidean_distance_matrix, l2_distance_matrix, pairwise_distance_matrix,
379};
380
381// Re-export validation utilities
382pub use validation::{
383    validate_dist_mat, validate_fdata, validate_labels, validate_ncomp, validate_response,
384};
385
386// Re-export smoothing CV types
387pub use smoothing::{
388    aic_smoother, cv_smoother, gcv_smoother, knn_gcv, knn_lcv, optim_bandwidth, CvCriterion,
389    KnnCvResult, OptimBandwidthResult,
390};
391
392// Re-export regression types
393pub use regression::{fdata_to_pc_1d, fdata_to_pls_1d, FpcaResult, PlsResult};
394#[cfg(feature = "linalg")]
395pub use regression::{ridge_regression_fit, RidgeResult};
396
397// Re-export clustering types
398pub use clustering::{
399    calinski_harabasz, calinski_harabasz_from_distances, fuzzy_cmeans_fd, kmeans_fd,
400    silhouette_score, silhouette_score_from_distances, FuzzyCmeansResult, KmeansResult,
401};
402
403// Re-export distance metric types and functions
404pub use metric::{
405    dtw_cross_1d, dtw_distance, dtw_self_1d, fourier_cross_1d, fourier_self_1d, hausdorff_3d,
406    hausdorff_cross_1d, hausdorff_cross_2d, hausdorff_self_1d, hausdorff_self_2d, hshift_cross_1d,
407    hshift_self_1d, lp_cross_1d, lp_cross_2d, lp_self_1d, lp_self_2d, soft_dtw_barycenter,
408    soft_dtw_cross_1d, soft_dtw_distance, soft_dtw_div_cross_1d, soft_dtw_div_self_1d,
409    soft_dtw_divergence, soft_dtw_self_1d, SoftDtwBarycenterResult,
410};
411
412// Re-export depth measure functions
413pub use depth::{
414    band_1d, fraiman_muniz_1d, fraiman_muniz_2d, functional_boxplot, functional_depth,
415    functional_spatial_1d, functional_spatial_2d, kernel_functional_spatial_1d,
416    kernel_functional_spatial_2d, modal_1d, modal_2d, modified_band_1d, modified_epigraph_index_1d,
417    random_projection_1d, random_projection_1d_seeded, random_projection_2d, random_tukey_1d,
418    random_tukey_1d_seeded, random_tukey_2d, DepthMethod, FunctionalBoxplotResult,
419};
420
421// Re-export outlier detection functions
422pub use outliers::{
423    detect_outliers_lrt, magnitude_shape_outlyingness, outliergram, outliers_threshold_lrt,
424    outliers_threshold_lrt_with_dist, MagnitudeShapeResult, OutligramResult,
425};
426
427// Re-export utility functions
428pub use utility::{
429    compute_adot, inner_product, inner_product_matrix, integrate_simpson, knn_loocv, knn_predict,
430    pcvm_statistic, rp_stat, RpStatResult,
431};
432
433// Re-export functional data operation types and functions
434pub use fdata::{
435    center_1d, depth_based_median, deriv_1d, deriv_2d, functional_covariance, functional_std,
436    functional_variance, geometric_median_1d, geometric_median_2d, mean_1d, mean_2d, norm_lp_1d,
437    normalize, normalize_with_argvals, trim_mean, Deriv2DResult, NormalizationMethod,
438};
439
440// Re-export basis representation types and functions
441pub use basis::{
442    basis_to_fdata, basis_to_fdata_1d, bspline_basis, bspline_basis_from_knots, constant_basis,
443    construct_bspline_knots, difference_matrix, fdata_to_basis, fdata_to_basis_1d, fourier_basis,
444    fourier_basis_with_period, fourier_fit_1d, pspline_evaluate, pspline_fit_1d, pspline_fit_gcv,
445    select_basis_auto_1d, select_fourier_nbasis_gcv, BasisAutoSelectionResult,
446    BasisProjectionResult, FourierFitResult, ProjectionBasisType, PsplineFitResult,
447    SingleCurveSelection,
448};
449
450// Re-export functional scoring metrics
451pub use scoring::{
452    functional_explained_variance, functional_mae, functional_mape, functional_mse, functional_msle,
453};