mod prelude;
pub use prelude::*;
mod convergence;
mod curvature;
mod damping;
mod deviance;
mod dispersion;
mod edf;
mod family_state;
mod gam_working_model;
mod glm_update;
mod log_link_working_state;
pub(crate) mod loop_driver;
mod low_rank;
mod newton_solve;
mod penalty;
mod pls_solver;
mod reweight;
mod sparse_system;
mod state;
mod working_model_trait;
mod workspace;
#[cfg(test)]
mod tests;
pub use curvature::*;
pub use deviance::*;
pub(crate) use dispersion::*;
pub use family_state::*;
pub(crate) use gam_working_model::*;
pub use glm_update::*;
pub use low_rank::*;
pub use newton_solve::*;
pub(crate) use sparse_system::*;
pub(crate) use working_model_trait::*;
pub use workspace::*;
use convergence::effective_kkt_tolerance;
use damping::{
add_scaled_diagonal_to_upper_sparse, compute_lm_d2, update_scaled_diagonal_in_place,
};
pub use edf::StablePLSResult;
use edf::{
calculate_edf_from_sparse_factor, calculate_edf_with_penalty,
calculate_edfwithworkspace_from_factor, calculate_edfwithworkspace_with_penalty,
};
use log_link_working_state::ETA_CLAMP;
pub(crate) use penalty::PirlsPenalty;
use penalty::{
KroneckerQsTransform, WorkingCoordinateDesign, WorkingReparamTransform, attach_penalty_shift,
};
use pls_solver::solve_penalized_least_squares_implicit;
pub use pls_solver::{GaussianFixedCache, SparseXtwxPrecomputed};
pub use sparse_system::{SparsePenalizedSystem, assemble_and_factor_sparse_penalized_system};
pub use reweight::runworking_model_pirls;
pub(crate) use state::array1_l2_norm;
pub use state::{
AdaptiveKktTolerance, ExportedLaplaceCurvature, FirthDiagnostics, HessianCurvatureKind,
PirlsCoordinateFrame, PirlsLinearSolvePath, PirlsResult, PirlsStatus,
WorkingModelIterationInfo, WorkingModelPirlsResult, WorkingState,
};
use loop_driver::assert_symmetric_tol;
pub(crate) use loop_driver::fit_model_for_fixed_rho_with_adaptive_kkt;
pub use loop_driver::{PenaltyConfig, PirlsConfig, PirlsProblem, fit_model_for_fixed_rho};
pub(crate) const PIRLS_CACHE_BYTE_BUDGET: usize = 128 * 1024 * 1024;