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