include!(concat!(env!("OUT_DIR"), "/lint_errors.rs"));
extern crate self as gam;
#[macro_use]
mod macros;
const RAYON_WORKER_STACK_SIZE: usize = 64 << 20;
pub fn init_parallelism() {
static INIT: std::sync::Once = std::sync::Once::new();
INIT.call_once(|| {
gam_linalg::gpu_hook::register_gpu_dispatch(Box::new(
crate::gpu::linalg_dispatch::CudaGemmDispatch,
));
drop(
gam_problem::laplace_sampler_contract::set_laplace_marginal_sampler(Box::new(
gam_inference::hmc_io::HmcIoLaplaceMarginalSampler,
)),
);
drop(
gam_problem::laplace_sampler_contract::set_gaussian_mode_posterior_sampler(Box::new(
gam_inference::hmc_io::HmcIoGaussianModePosteriorSampler,
)),
);
drop(gam_problem::rho_posterior::set_rho_posterior_escalator(
Box::new(gam_inference::rho_posterior::HmcIoRhoPosteriorEscalator),
));
drop(
rayon::ThreadPoolBuilder::new()
.stack_size(RAYON_WORKER_STACK_SIZE)
.build_global(),
);
faer::set_global_parallelism(faer::Par::rayon(0));
});
}
#[cfg(test)]
mod gpu_dispatch_registration_tests {
#[test]
fn init_parallelism_registers_gpu_dispatch_hook() {
crate::init_parallelism();
assert!(gam_linalg::gpu_hook::gpu_dispatch().is_some());
}
}
pub use gam_config as config_resolve;
pub use gam_geometry as geometry;
pub use gam_gpu as gpu;
pub use gam_identifiability as identifiability;
pub use gam_inference as inference;
pub use gam_linalg as linalg;
pub use gam_models as families;
pub mod model_types;
pub mod outer_subsample;
pub use gam_report as report;
pub use gam_solve::psis;
pub use gam_solve::rho_uncertainty;
pub mod solver {
pub use gam_solve::*;
pub mod fit_orchestration {
pub use gam_models::fit_orchestration::*;
}
}
pub mod terms {
pub use gam_sae as sae;
pub use gam_terms::*;
pub use gam_sae::manifold::{
ArdSharing, AssignmentMode, CurvatureWalkReport, EuclideanPatchEvaluator,
PeriodicHarmonicEvaluator, SaeAssignment, SaeAtomBasisKind, SaeBasisEvaluator,
SaeManifoldAtom, SaeManifoldLoss, SaeManifoldOuterObjective, SaeManifoldRho,
SaeManifoldTerm, SphereChartEvaluator, StagewiseEventKind, StagewiseProgress,
StagewiseProgressCallback, TorusHarmonicEvaluator,
};
pub use gam_terms::latent::LatentManifold;
}
pub use gam_test_support as test_support;
pub use gam_test_support::gam_binary;
pub mod types;
pub mod util;
pub use gam_data as data;
pub use gam_data::{encode_recordswith_inferred_schema, load_csvwith_inferred_schema};
pub use geometry::{
CircleManifold, EuclideanManifold, GeodesicIntegrator, GeometryError, GeometryResult,
GrassmannManifold, ManifoldSpec, ProductManifold, RiemannianLBFGS, RiemannianManifold,
RiemannianObjective, RiemannianTrustRegion, SpdManifold, SphereManifold, StiefelManifold,
TorusManifold,
};
pub use gpu::GpuPolicy;
pub use inference::{
alo, generative, higher_order, model_comparison, polya_gamma, probability, quadrature,
rho_posterior, sample, smooth_test,
};
pub use gam_linalg::{faer_ndarray, matrix, utils};
pub use inference::hmc_io as hmc;
pub use solver::estimate::reml::atoms::{
BetaChannel, CriterionAtom, CriterionSum, HessianLogdetAtom, JeffreysLogdetAtom,
PenaltyQuadAtom, SampledBlockAtom, Sensitivity, StratumFingerprint, ThetaDirection,
};
pub use solver::estimate::reml::reml_outer_engine::PenaltySubspaceTrace;
pub use gam_problem::{
DeclaredHessianForm, Derivative, EfsEval, HessianResult, OuterEval,
OuterHessianMaterialization, OuterHessianOperator, OuterStrategyError,
};
pub use gam_runtime::resource::{
ByteLruCache, DerivativeStorageMode, MaterializationPolicy, MatrixMaterializationError,
ProblemHints, ResidentBytes, ResourcePolicy,
};
pub use gam_runtime::resource;
pub use gam_runtime::warm_start;
pub use outer_subsample::{OuterScoreSubsample, RowSet, WeightedOuterRow};
pub use solver::estimate::reml::per_atom_efs::{
PerAtomEfsConfig, SharedBorderTopology, run_per_atom_efs,
};
pub use solver::{
estimate, gaussian_reml, mixture_link, pirls, progress_log, seeding, topology_selector,
};
pub use terms::{basis, construction, term_builder};
pub mod smooth {
pub use crate::terms::smooth::*;
pub use gam_models::fit_orchestration::drivers::{
CurvatureInference, FittedTermCollectionWithSpec, SmoothLrCorrection,
SmoothTermLrInference, SpatialLengthScaleOptimizationTiming,
build_term_collection_designs_and_freeze_joint, build_term_collection_designs_joint,
curvature_inference_forspec, fit_term_collection_forspec,
fit_term_collection_with_coefficient_groups,
fit_term_collection_with_coefficient_groups_and_penalty_block_gamma_priors,
fit_term_collection_with_penalty_block_gamma_prior_callback,
fit_term_collection_with_penalty_block_gamma_priors,
fit_term_collectionwith_spatial_length_scale_optimization, fixed_kappa_profiled_reml_score,
get_constant_curvature_kappa, smooth_term_lr_inference_forspec,
};
}
pub use families::custom_family;
pub use families::gamlss;
pub use families::protocol::{
LatentScoreSemantics, MarginalSlopeCalibrationProtocol, SurvivalMarginalSlopeProtocol,
};
pub use families::transformation_normal;
pub use gam_models::fit_orchestration::{
BernoulliMarginalSlopeFitRequest, BinomialLocationScaleFitRequest, CrossFitScoreCalibration,
CtnStage1Recipe, DispersionLocationScaleFitRequest, DispersionLocationScaleFitResult,
FitConfig, FitRequest, FitResult, GaussianLocationScaleFitRequest, LatentBinaryFitRequest,
LatentSurvivalFitRequest, LinkWiggleConfig, MaterializedModel, PreparedSurvivalTimeStack,
ResidualCascadeInputs, SplineScanInputs, StandardBinomialWiggleConfig, StandardFitRequest,
StandardFitResult, SurvivalLocationScaleFitRequest, SurvivalLocationScaleFitResult,
SurvivalMarginalSlopeFitRequest, SurvivalTransformationFitRequest,
SurvivalTransformationFitResult, SurvivalTransformationTermSpec,
TransformationNormalFitRequest, WorkflowError, constant_curvature_profiled_reml_scores,
fit_from_formula, fit_model, fit_residual_cascade_from_formula, fit_spline_scan_from_formula,
is_binary_response, materialize, prepare_survival_time_stack, residual_cascade_fast_path,
resolve_family, resolve_offset_column, resolve_weight_column, spline_scan_fast_path,
};
pub use gpu::GpuDeviceInfo;