pub struct BlockPenaltyOp {
pub k: usize,
pub blocks: Vec<(usize, Array2<f64>)>,
}Expand description
Block-local penalty operator: applies per-block penalty matrices
(matching ParameterBlockSpec boundaries) without materialising a
full K×K dense matrix.
Each entry is (global_offset, local_matrix) where global_offset
is the start of that block in the full β vector.
Fields§
§k: usizeFull β dimension K.
blocks: Vec<(usize, Array2<f64>)>(global_start, local_matrix) for each atom/block.
Trait Implementations§
Source§impl BetaPenaltyOp for BlockPenaltyOp
impl BetaPenaltyOp for BlockPenaltyOp
Source§fn matvec(&self, x: &[f64], y: &mut [f64])
fn matvec(&self, x: &[f64], y: &mut [f64])
y += P x — penalty Hessian-vector product (length K).Source§fn diagonal(&self, diag: &mut [f64])
fn diagonal(&self, diag: &mut [f64])
diag += diag(P) — diagonal entries used by Jacobi preconditioner.Source§fn block(
&self,
id: BetaBlockId,
offsets: &[Range<usize>],
out: &mut Array2<f64>,
)
fn block( &self, id: BetaBlockId, offsets: &[Range<usize>], out: &mut Array2<f64>, )
Add the
b×b dense penalty sub-block for block id into out
(row-major, block size b = offsets[id.0].len()).
Used by the block-Jacobi Schur preconditioner (#287).Source§fn to_dense(&self) -> Array2<f64>
fn to_dense(&self) -> Array2<f64>
Materialize the full
K×K dense penalty matrix (needed by
Direct / SqrtBA modes that form the Schur complement explicitly).Source§fn fingerprint(&self, hasher: &mut Fingerprinter)
fn fingerprint(&self, hasher: &mut Fingerprinter)
Mix the operator’s defining state into
hasher for cache-validity
fingerprinting. Must change whenever matvec / to_dense would change,
so the factorization / evidence cache (cache_matches_system) is
invalidated when the β-block content changes. Implementations hash their
own compact defining data (e.g. Kronecker factors, block matrices)
rather than the full K×K dense form, which would defeat the structured
operator’s storage savings.Source§fn row_abs_sums(&self) -> Array1<f64>
fn row_abs_sums(&self) -> Array1<f64>
Per-row absolute-value sums
out[r] = Σ_c |P[r,c]|, the row contribution
to the operator’s ∞-norm. The default folds to_dense(), which costs an
O(K²) materialization; structured operators override this to fold their
compact factors directly so the backward-error certificate’s
arrow_operator_infinity_norm never builds a dense K×K matrix on the
SAE LLM-border critical path (#1017). Overrides MUST agree bit-for-bit with
the to_dense() row sums (verified by the cross-check tests).Auto Trait Implementations§
impl Freeze for BlockPenaltyOp
impl RefUnwindSafe for BlockPenaltyOp
impl Send for BlockPenaltyOp
impl Sync for BlockPenaltyOp
impl Unpin for BlockPenaltyOp
impl UnsafeUnpin for BlockPenaltyOp
impl UnwindSafe for BlockPenaltyOp
Blanket Implementations§
impl<T> Allocation for T
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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>
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 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>
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 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>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
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
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
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.