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