gam-problem 0.3.157

Neutral solver/criterion contract types for the gam penalized-likelihood engine
Documentation
/// How the penalized Hessian's log-determinant and derivatives treat the
/// spectrum below the stability floor.
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum PseudoLogdetMode {
    /// Keep every eigenpair in the smooth spectral regularizer.
    #[default]
    Smooth,
    /// Exclude numerical null-space directions consistently from pseudo-logdet
    /// and derivative traces.
    HardPseudo,
    /// Require a genuine positive-definite Hessian and use its unregularized
    /// log-determinant, inverse, and derivative kernels. This is the Laplace
    /// contract at a certified local mode: an indefinite stationary point is
    /// rejected instead of being converted into a different objective.
    PositiveDefinite,
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn default_is_smooth() {
        assert_eq!(PseudoLogdetMode::default(), PseudoLogdetMode::Smooth);
    }

    #[test]
    fn variants_are_distinct() {
        assert_ne!(PseudoLogdetMode::Smooth, PseudoLogdetMode::HardPseudo);
        assert_ne!(
            PseudoLogdetMode::HardPseudo,
            PseudoLogdetMode::PositiveDefinite
        );
        assert_ne!(PseudoLogdetMode::PositiveDefinite, PseudoLogdetMode::Smooth);
    }
}