#![allow(unused_imports)]
use gam_terms::basis::{
BSplineIdentifiability, BSplineKnotSpec, BasisError, BasisMetadata, BasisPsiDerivativeResult,
BasisPsiSecondDerivativeResult, BasisWorkspace, CenterStrategy, ConstantCurvatureBasisSpec,
ConstantCurvatureIdentifiability, DuchonBasisSpec, MaternIdentifiability,
MeasureJetFrozenQuadrature, MeasureJetIdentifiability, OneDimensionalBoundary, PenaltyCandidate,
PenaltyInfo, PenaltySource, SpatialIdentifiability, SphericalSplineBasisSpec,
SphericalSplineIdentifiability, apply_sum_to_zero_constraint, build_bspline_basis_1d,
build_constant_curvature_basis_kappa_derivatives,
build_matern_basis_log_kappa_aniso_derivatives, build_matern_basis_log_kappa_derivatives,
build_matern_collocation_operator_matrices, build_measure_jet_basis_psi_derivatives,
build_spherical_spline_basis, build_thin_plate_basis_log_kappa_derivatives,
estimate_penalty_nullity, filter_active_penalty_candidates, initial_aniso_contrasts,
orthogonality_transform_for_design, select_centers_by_strategy,
};
use gam_custom_family::{
BlockEffectiveJacobian, BlockGeometryDirectionalDerivative, BlockWorkingSet, BlockwiseFitOptions,
CustomFamily, CustomFamilyBlockPsiDerivative, CustomFamilyWarmStart, ExactNewtonJointPsiTerms,
ExactNewtonOuterObjective, FamilyEvaluation, FamilyLinearizationState, ParameterBlockSpec,
ParameterBlockState, PenaltyMatrix, evaluate_custom_family_joint_hyper,
evaluate_custom_family_joint_hyper_efs, fit_custom_family,
};
use gam_solve::estimate::{
EstimationError, ExternalOptimOptions, FitInference, FitOptions, FittedLinkState, PenaltySpec,
UnifiedFitResult, UnifiedFitResultParts, fit_gamwith_heuristic_lambdas,
};
use gam_solve::estimate::reml::DirectionalHyperParam;
pub use gam_terms::smooth::freeze_term_collection_from_design;
use crate::family_runtime::{FamilyStrategy, strategy_for_spec};
use gam_solve::mixture_link::{
logit_inverse_link_jet5, state_from_beta_logisticspec, state_from_sasspec, state_fromspec,
};
use gam_math::quantile::quantile_from_sorted;
use gam_linalg::faer_ndarray::{fast_ab, fast_atb, fast_atv};
use gam_linalg::matrix::{
BlockDesignOperator, CoefficientTransformOperator, DesignBlock, DesignMatrix,
RandomEffectOperator, SymmetricMatrix,
};
use gam_problem::LinearInequalityConstraints;
use gam_spec::{
InverseLink, LatentCLogLogState, LikelihoodSpec, MixtureLinkState, ResponseFamily, SasLinkState,
StandardLink,
};
use gam_terms::smooth::input_standardization::{
apply_input_standardization, compensate_length_scale_for_standardization,
compensate_optional_length_scale_for_standardization, compute_spatial_input_scales,
};
use gam_terms::smooth::penalty_priors::{
realize_coefficient_groups, realize_keyed_penalty_block_gamma_priors,
realize_penalty_block_gamma_priors,
};
use gam_terms::smooth::shape_constraints::{
linear_constraints_from_lower_bounds_global, merge_linear_constraints_global,
shape_lower_bounds_local,
};
use gam_terms::smooth::structure_analysis::smooth_has_frozen_identifiability;
use gam_terms::smooth::*;
use ndarray::{Array1, Array2, ArrayView1, ArrayView2, Axis, s};
use std::collections::BTreeSet;
use std::ops::Range;
use std::sync::atomic::AtomicUsize;
use std::sync::{Arc, Mutex};
#[derive(Clone)]
pub struct FittedTermCollection {
pub fit: UnifiedFitResult,
pub design: TermCollectionDesign,
pub adaptive_diagnostics: Option<AdaptiveRegularizationDiagnostics>,
}
#[derive(Clone, Copy, Debug, Default)]
pub struct SpatialLengthScaleOptimizationTiming {
pub log_kappa_dim: usize,
pub cost_calls: usize,
pub cost_total_s: f64,
pub eval_calls: usize,
pub eval_total_s: f64,
pub efs_calls: usize,
pub efs_total_s: f64,
pub slow_path_resets: u64,
pub design_revision_delta: u64,
pub nfree_miss_shape: u64,
pub nfree_miss_value: u64,
pub nfree_miss_gradient: u64,
pub nfree_miss_penalty: u64,
pub nfree_miss_revision: u64,
pub nfree_miss_second_order: u64,
pub nfree_miss_other: u64,
pub optim_total_s: f64,
}
impl SpatialLengthScaleOptimizationTiming {
pub fn trial_total_s(self) -> f64 {
self.cost_total_s + self.eval_total_s + self.efs_total_s
}
}
#[derive(Clone)]
pub struct FittedTermCollectionWithSpec {
pub fit: UnifiedFitResult,
pub design: TermCollectionDesign,
pub resolvedspec: TermCollectionSpec,
pub adaptive_diagnostics: Option<AdaptiveRegularizationDiagnostics>,
pub kappa_timing: Option<SpatialLengthScaleOptimizationTiming>,
}
include!("design_construction.rs");
include!("spatial_optimization.rs");