Skip to main content

InnerAssembly

Struct InnerAssembly 

Source
pub struct InnerAssembly<'dp> {
Show 23 fields pub log_likelihood: f64, pub penalty_quadratic: f64, pub beta: Array1<f64>, pub n_observations: usize, pub hessian_op: Arc<dyn HessianOperator>, pub penalty_coords: Vec<PenaltyCoordinate>, pub penalty_logdet: PenaltyLogdetDerivs, pub dispersion: DispersionHandling, pub rho_curvature_scale: f64, pub rho_prior: RhoPrior, pub hessian_logdet_correction: f64, pub penalty_subspace_trace: Option<Arc<PenaltySubspaceTrace>>, pub deriv_provider: Option<Box<dyn HessianDerivativeProvider + 'dp>>, pub firth: Option<ExactJeffreysTerm>, pub nullspace_dim: Option<f64>, pub barrier_config: Option<BarrierConfig>, pub kkt_residual: Option<ProjectedKktResidual>, pub active_constraints: Option<Arc<ActiveLinearConstraintBlock>>, pub ext_coords: Vec<HyperCoord>, pub ext_coord_pair_fn: Option<Box<dyn Fn(usize, usize) -> HyperCoordPair + Send + Sync>>, pub rho_ext_pair_fn: Option<Box<dyn Fn(usize, usize) -> HyperCoordPair + Send + Sync>>, pub fixed_drift_deriv: Option<FixedDriftDerivFn>, pub contracted_psi_second_order: Option<ContractedPsiSecondOrderFn>,
}
Expand description

All ingredients needed to assemble an InnerSolution.

Callers fill in the required fields and override optional ones as needed. The assembler builds the InnerSolution via InnerSolutionBuilder and calls reml_laml_evaluate — the only production code path that does so.

Fields§

§log_likelihood: f64§penalty_quadratic: f64§beta: Array1<f64>§n_observations: usize§hessian_op: Arc<dyn HessianOperator>§penalty_coords: Vec<PenaltyCoordinate>§penalty_logdet: PenaltyLogdetDerivs§dispersion: DispersionHandling§rho_curvature_scale: f64§rho_prior: RhoPrior§hessian_logdet_correction: f64§penalty_subspace_trace: Option<Arc<PenaltySubspaceTrace>>§deriv_provider: Option<Box<dyn HessianDerivativeProvider + 'dp>>§firth: Option<ExactJeffreysTerm>

Jeffreys/Firth scalar contribution to the LAML cost. Tier-A GLM callers construct it from the dense operator (ExactJeffreysTerm::new); the Tier-B coupled joint path installs the value-only carrier (ExactJeffreysTerm::value_only) so the cost subtracts the same gated Φ(β̂) its inner Newton optimized (gam#979).

§nullspace_dim: Option<f64>§barrier_config: Option<BarrierConfig>§kkt_residual: Option<ProjectedKktResidual>§active_constraints: Option<Arc<ActiveLinearConstraintBlock>>

Active linear-inequality constraint rows at the converged inner iterate. When Some, the unified evaluator builds the constraint-aware kernel K_T = K_S − K_S Aᵀ (A K_S Aᵀ)⁻¹ A K_S for per-coordinate mode responses v_k = ∂β/∂ρ_k.

§ext_coords: Vec<HyperCoord>§ext_coord_pair_fn: Option<Box<dyn Fn(usize, usize) -> HyperCoordPair + Send + Sync>>§rho_ext_pair_fn: Option<Box<dyn Fn(usize, usize) -> HyperCoordPair + Send + Sync>>§fixed_drift_deriv: Option<FixedDriftDerivFn>§contracted_psi_second_order: Option<ContractedPsiSecondOrderFn>

Direction-contracted ψψ second-order hook (#740). When set, the outer-Hessian operator builder skips the per-pair ψψ assembly and applies this once per matvec.

Implementations§

Source§

impl<'dp> InnerAssembly<'dp>

Source

pub fn build(self) -> InnerSolution<'dp>

Build the InnerSolution from these ingredients.

Source

pub fn evaluate( self, rho: &[f64], mode: EvalMode, prior: Option<(f64, Array1<f64>, Option<Array2<f64>>)>, ) -> Result<RemlLamlResult, String>

Build and evaluate in one step.

Auto Trait Implementations§

§

impl<'dp> !RefUnwindSafe for InnerAssembly<'dp>

§

impl<'dp> !UnwindSafe for InnerAssembly<'dp>

§

impl<'dp> Freeze for InnerAssembly<'dp>

§

impl<'dp> Send for InnerAssembly<'dp>

§

impl<'dp> Sync for InnerAssembly<'dp>

§

impl<'dp> Unpin for InnerAssembly<'dp>

§

impl<'dp> UnsafeUnpin for InnerAssembly<'dp>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> DistributionExt for T
where T: ?Sized,

Source§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V