pub enum ArrowBorderStrategy {
DenseDirect,
ReducedIterative,
}Expand description
Factorization strategy for the arrow-Schur border (shared β) solve, chosen
from the shape of the joint system rather than a single fixed border-width
cut (ArrowSolverMode::automatic’s DIRECT_SOLVE_MAX_K = 2000).
The border width alone is a blunt selector: it cannot see that the data-fit
contribution to the k × k border is only rank Σ_i d_i ≈ n·d. For the
#1017 color arm (n = 180, per-row depth d = 2, border k = 15360) the
data information is rank 360 yet a dense Direct solve pays a full k³/3 ≈ 1.2e12-flop Cholesky — the measured 26-min-class fit. This maps cleanly onto
the two ArrowSolverMode variants the solver already implements.
Variants§
DenseDirect
Eliminate the per-row blocks, form the dense k × k reduced Schur, and
Cholesky-factor it (ArrowSolverMode::Direct). Appropriate for modest,
near-square borders where the k³/3 factorization is cheap and the
data-fit rank is comparable to k.
ReducedIterative
Solve the reduced Schur iteratively by matrix-free PCG
(ArrowSolverMode::InexactPCG), never materialising the k × k factor.
Appropriate when the dense k³ factorization dominates and/or the
data-fit contribution to the border is rank-deficient (n·d < k).
Trait Implementations§
Source§impl Clone for ArrowBorderStrategy
impl Clone for ArrowBorderStrategy
Source§fn clone(&self) -> ArrowBorderStrategy
fn clone(&self) -> ArrowBorderStrategy
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for ArrowBorderStrategy
Source§impl Debug for ArrowBorderStrategy
impl Debug for ArrowBorderStrategy
Source§impl<'de> Deserialize<'de> for ArrowBorderStrategy
impl<'de> Deserialize<'de> for ArrowBorderStrategy
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for ArrowBorderStrategy
Source§impl PartialEq for ArrowBorderStrategy
impl PartialEq for ArrowBorderStrategy
Source§fn eq(&self, other: &ArrowBorderStrategy) -> bool
fn eq(&self, other: &ArrowBorderStrategy) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for ArrowBorderStrategy
impl Serialize for ArrowBorderStrategy
impl StructuralPartialEq for ArrowBorderStrategy
Auto Trait Implementations§
impl Freeze for ArrowBorderStrategy
impl RefUnwindSafe for ArrowBorderStrategy
impl Send for ArrowBorderStrategy
impl Sync for ArrowBorderStrategy
impl Unpin for ArrowBorderStrategy
impl UnsafeUnpin for ArrowBorderStrategy
impl UnwindSafe for ArrowBorderStrategy
Blanket Implementations§
impl<T> Boilerplate 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
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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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 more