Skip to main content

gam_terms/basis/
mod.rs

1//! Spline / spatial / spherical basis construction, penalties, and the
2//! hyperparameter (`ψ`) derivative machinery that the smooth terms build on.
3//!
4//! The module is decomposed into single-concern submodules. Shared crate
5//! imports live in [`prelude.rs`](prelude.rs) and are pulled into this module's
6//! namespace; every submodule re-imports them (together with the sibling
7//! re-exports below) through `use super::*`. The `pub use <module>::*`
8//! re-exports flatten each concern back onto the `basis::` path so external
9//! callers keep referring to e.g. `basis::CenterStrategy` regardless of which
10//! submodule now owns the item.
11
12// Crate-wide imports, shared by every submodule via `use super::*`.
13include!("prelude.rs");
14
15// ---- Manifold / geometric smooth specifications and kernels ----
16mod constant_curvature_smooth;
17mod cyclic;
18mod sphere_half_angle;
19mod sphere_kernels;
20mod sphere_spec;
21mod sphere_spectral;
22
23// ---- Measure-jet smooth (V0 / V∞) ----
24mod measure_jet_anisotropy;
25mod measure_jet_moments;
26mod measure_jet_predict;
27mod measure_jet_smooth;
28
29// ---- Scalar math primitives ----
30mod polylog;
31
32// ---- Core types, evaluation, planning, and the (ψ) derivative engine ----
33mod bspline_build;
34mod bspline_eval;
35mod center_selection;
36pub mod closed_form_operator;
37mod cubic_regression;
38mod derivative_penalty;
39mod duchon_kernel_math;
40mod duchon_psi_derivatives;
41mod duchon_thinplate;
42mod implicit_psi_derivative;
43pub mod input_loc_derivatives;
44pub mod ispline_boundary;
45pub mod ispline_ramp;
46mod internal;
47mod invariant_tie_break;
48pub mod matern_gradient;
49mod matern_kernel;
50mod periodic_duchon;
51mod radial_jets_nd;
52mod sphere_basis;
53pub mod sphere_gpu;
54mod spline_eval_scalar;
55mod streaming_design;
56mod types;
57mod workspace_cache;
58
59/// Closed-form scalar building blocks for Riesz, Matérn, and isotropic
60/// hybrid Duchon kernels.
61///
62/// Fourier convention: f̂(ω) = ∫ e^{-iω·x} f(x) dx,
63/// f(x) = (2π)^{-d} ∫ e^{iω·x} f̂(ω) dω.
64///
65/// Riesz kernel:  R_j^d(r) = F^{-1}{|ρ|^{-2j}}(r).
66/// Matérn block:  M_ℓ^d(r; κ) = F^{-1}{(|ρ|² + κ²)^{-ℓ}}(r).
67pub mod closed_form_penalty;
68
69pub mod radial_profile;
70
71// ---- Flat re-exports: preserve the external `basis::X` path surface ----
72
73pub use constant_curvature_smooth::{
74    ConstantCurvatureBasisSpec, ConstantCurvatureIdentifiability, ConstantCurvatureKernelPsiJets,
75    ConstantCurvaturePsiJets, build_constant_curvature_basis,
76    build_constant_curvature_basis_kappa_derivatives,
77    build_constant_curvature_basis_psi_derivatives, constant_curvature_center_chart_radius2,
78    constant_curvature_data_chart_radius2, constant_curvature_evaluated_scale_span,
79    constant_curvature_kernel_kappa_jets,
80    constant_curvature_kernel_matrix, constant_curvature_kernel_psi_jets,
81    constant_curvature_length_scale_bounds, constant_curvature_realized_centers,
82    realized_constant_curvature_length_scale,
83};
84
85pub use measure_jet_moments::{
86    MeasureJetJetStats, MeasureJetMomentTable, accumulate_moment_table, jet_sufficient_stats,
87    merge_moment_tables, recenter_moment_table,
88};
89
90pub use measure_jet_predict::{
91    MeasureJetExtrapolationSpectrum, measure_jet_ambient_gradient,
92    measure_jet_extrapolation_variance,
93};
94
95pub use measure_jet_smooth::{
96    MeasureJetBand, MeasureJetBasisSpec, MeasureJetEnergyJets, MeasureJetFrozenQuadrature,
97    MeasureJetIdentifiability, MeasureJetRangeBracket, build_measure_jet_basis,
98    build_measure_jet_basis_psi_derivatives, measure_jet_affine_head_block,
99    measure_jet_affine_head_lift, measure_jet_affine_head_transform, measure_jet_band,
100    measure_jet_center_masses, measure_jet_design_matrix, measure_jet_energy_form,
101    measure_jet_energy_form_with_jets, measure_jet_energy_forms_per_scale,
102    measure_jet_input_noise_scale, measure_jet_ln_range_window, measure_jet_multiscale_mode,
103    measure_jet_quadrature_nodes, measure_jet_range_bracket,
104    measure_jet_range_feasibility_ceiling, measure_jet_scale_spectrum,
105    measure_jet_support_curve,
106    realized_measure_jet_length_scale,
107};
108
109pub use measure_jet_anisotropy::{
110    LIndex, MeasureJetAnisotropyJets, lower_triangular_indices, measure_jet_anisotropy_energy_form,
111    measure_jet_anisotropy_energy_form_with_jets,
112};
113
114pub use sphere_spec::{
115    SphereMethod, SphereWahbaKernel, SphericalSplineBasisSpec, SphericalSplineIdentifiability,
116};
117
118pub(crate) use cyclic::{
119    create_cyclic_bspline_basis_dense, cyclic_knot_anchor, cyclic_uniform_knot_vector,
120    wrap_to_period,
121};
122
123// Concern modules: flatten each onto `basis::` so external paths are unchanged.
124pub use bspline_build::*;
125pub use bspline_eval::*;
126pub use center_selection::*;
127pub use closed_form_operator::ClosedFormPenaltyOperator;
128pub use cubic_regression::*;
129pub use derivative_penalty::*;
130pub use duchon_kernel_math::*;
131pub use duchon_psi_derivatives::*;
132pub use duchon_thinplate::*;
133pub use implicit_psi_derivative::*;
134pub use ispline_boundary::*;
135pub use ispline_ramp::*;
136pub use matern_kernel::*;
137pub use periodic_duchon::*;
138pub use radial_jets_nd::*;
139pub use sphere_basis::*;
140pub use spline_eval_scalar::*;
141pub use streaming_design::*;
142pub use types::*;
143pub use workspace_cache::*;
144
145#[cfg(test)]
146mod tests;
147
148#[cfg(test)]
149mod zz_measure_2638_tests;
150
151#[cfg(test)]
152mod zz_measure_2445_tests;
153
154#[cfg(test)]
155mod zz_measure_2475_tests;
156
157#[cfg(test)]
158mod zz_measure_2489_tests;
159
160#[cfg(test)]
161mod zz_measure_polar_harmonic_jet_tests;
162
163#[cfg(test)]
164mod zz_basis_is_capacity_determined_2684_tests;
165
166#[cfg(test)]
167mod zz_duchon_axis_psi_2735_tests;