pub struct EfsEval {
pub cost: f64,
pub steps: Vec<f64>,
pub beta: Option<Array1<f64>>,
pub psi_gradient: Option<Array1<f64>>,
pub psi_indices: Option<Vec<usize>>,
pub inner_hessian_scale: Option<f64>,
pub logdet_enclosure_gap: Option<f64>,
}Expand description
Result bundle returned by the EFS (extended Fellner–Schall) evaluation path. Pure data: families compute the additive step and the optional curvature/gradient diagnostics; the solver consumes them.
Fields§
§cost: f64REML/LAML cost at the current rho (for convergence monitoring and comparing candidates).
steps: Vec<f64>Additive steps. Length = n_rho + n_ext_coords.
For pure EFS: steps for non-penalty-like coordinates are 0.0.
For hybrid EFS: ρ-coords get standard EFS multiplicative steps,
ψ-coords get preconditioned gradient steps Δψ = -α G⁺ g_ψ.
beta: Option<Array1<f64>>Current coefficient vector β̂ from the inner P-IRLS solve. Used by the EFS loop for the runtime barrier-curvature significance check when monotonicity constraints are present.
psi_gradient: Option<Array1<f64>>Raw REML/LAML gradient restricted to the ψ block (design-moving coords).
Present only when the hybrid EFS strategy is active. Used by the outer iteration for backtracking on the ψ step: if the combined (ρ-EFS, ψ-gradient) step does not decrease V(θ), the ψ step size α is halved while keeping the ρ-EFS step fixed.
This avoids re-evaluating the gradient during backtracking since the gradient was already computed as part of the hybrid EFS eval.
psi_indices: Option<Vec<usize>>Indices into the full θ vector that correspond to ψ (design-moving) coordinates. Used by the backtracking logic to selectively scale only the ψ portion of the step.
inner_hessian_scale: Option<f64>Inner-Hessian curvature scale captured during the EFS eval, used to condition the ψ preconditioner across outer iterations.
logdet_enclosure_gap: Option<f64>Logdet enclosure gap diagnostic (lower/upper bound spread) captured at this EFS evaluation when the bounded-logdet path is active.
Implementations§
Trait Implementations§
Auto Trait Implementations§
impl Freeze for EfsEval
impl RefUnwindSafe for EfsEval
impl Send for EfsEval
impl Sync for EfsEval
impl Unpin for EfsEval
impl UnsafeUnpin for EfsEval
impl UnwindSafe for EfsEval
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.