pub struct SpMat<R> { /* private fields */ }Expand description
Sparse matrix in compressed sparse column (CSC) format, backed by
nalgebra_sparse::CscMatrix.
The fundamental matrix type for all differential maps in the homology
pipeline. Generic over the element ring R; bounds are applied per-method.
Note: the underlying CSC may carry explicit zero entries (e.g. after an
in-place subtraction). iter walks all stored triplets;
iter_nz filters them.
Implementations§
Source§impl<R> SpMat<R>
impl<R> SpMat<R>
pub fn try_from_csc_data( num_rows: usize, num_cols: usize, col_offsets: Vec<usize>, row_indices: Vec<usize>, values: Vec<R>, ) -> Option<Self>
pub fn csc_data(&self) -> (&[usize], &[usize], &[R])
pub fn disassemble(self) -> (Vec<usize>, Vec<usize>, Vec<R>)
pub fn zero(shape: (usize, usize)) -> Self
pub fn is_zero(&self) -> boolwhere
R: Zero,
pub fn id(n: usize) -> Self
pub fn is_id(&self) -> bool
pub fn is_triang(&self, t: TriangularType) -> boolwhere
R: Zero,
Sourcepub fn iter(&self) -> impl Iterator<Item = (usize, usize, &R)>
pub fn iter(&self) -> impl Iterator<Item = (usize, usize, &R)>
Iterates the stored (row, col, value) triplets — may include explicit zeros.
Sourcepub fn iter_nz(&self) -> impl Iterator<Item = (usize, usize, &R)>where
R: Zero,
pub fn iter_nz(&self) -> impl Iterator<Item = (usize, usize, &R)>where
R: Zero,
iter, filtered to non-zero values.
pub fn into_dense(self) -> Mat<R>
pub fn nnz(&self) -> usize
pub fn density(&self) -> f64
pub fn redundancy(&self) -> f64where
R: Zero,
pub fn mean_weight(&self) -> f64
pub fn block_diag<I>(blocks: I) -> SpMat<R>where
I: IntoIterator<Item = SpMat<R>>,
pub fn map<F, S>(self, f: F) -> SpMat<S>where
F: Fn(R) -> S,
Source§impl<R> SpMat<R>
impl<R> SpMat<R>
Sourcepub fn from_entries<T>(shape: (usize, usize), entries: T) -> Self
pub fn from_entries<T>(shape: (usize, usize), entries: T) -> Self
Builds an SpMat of shape from (row, col, value) triplets. Zero
values are skipped; duplicates at the same position are summed.
pub fn from_col_vecs<I>(nrows: usize, vecs: I) -> Selfwhere
I: IntoIterator<Item = SpVec<R>>,
pub fn from_row_major<I>(shape: (usize, usize), data: I) -> Selfwhere
I: IntoIterator<Item = R>,
pub fn scalar(n: usize, a: &R) -> Self
pub fn diag<I>(shape: (usize, usize), entries: I) -> Selfwhere
I: IntoIterator<Item = R>,
pub fn is_diag(&self) -> bool
pub fn col_vec(&self, j: usize) -> SpVec<R>
pub fn transpose(&self) -> Self
Sourcepub fn extract<F>(&self, shape: (usize, usize), f: F) -> SpMat<R>
pub fn extract<F>(&self, shape: (usize, usize), f: F) -> SpMat<R>
New shape-d matrix whose entry at f(i, j) (if Some) is self[(i, j)].
Entries where f returns None are dropped.
pub fn permute(&self, p: &Perm, q: &Perm) -> SpMat<R>
pub fn permute_rows(&self, p: &Perm) -> SpMat<R>
pub fn permute_cols(&self, q: &Perm) -> SpMat<R>
Sourcepub fn permute_and_split(&self, p: &Perm, q: &Perm, r: usize) -> [SpMat<R>; 4]
pub fn permute_and_split(&self, p: &Perm, q: &Perm, r: usize) -> [SpMat<R>; 4]
Applies the permutations (p, q) to self and partitions the result
into four blocks at row/col r:
paq = [[a0 | a1], a0: r×r, a1: r×(n-r)
[a2 | a3]] a2: (m-r)×r, a3: (m-r)×(n-r)pub fn submat(&self, rows: Range<usize>, cols: Range<usize>) -> SpMat<R>
pub fn submat_rows(&self, rows: Range<usize>) -> SpMat<R>
pub fn submat_cols(&self, cols: Range<usize>) -> SpMat<R>
pub fn block_split(self, point: (usize, usize)) -> [SpMat<R>; 4]
pub fn h_split(self, k: usize) -> [SpMat<R>; 2]
pub fn v_split(self, k: usize) -> [SpMat<R>; 2]
pub fn block_combine(blocks: [SpMat<R>; 4]) -> SpMat<R>
pub fn h_stack(left: Self, right: Self) -> Self
pub fn v_stack(top: Self, bot: Self) -> Self
pub fn extend_by_zero(&mut self, add_rows: usize, add_cols: usize)
pub fn row_perm_mat(p: &Perm) -> Selfwhere
R: One,
pub fn col_perm_mat(p: &Perm) -> Selfwhere
R: One,
Trait Implementations§
Source§impl<R> Add for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> Add for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§impl<R> Add<&SpMat<R>> for &SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> Add<&SpMat<R>> for &SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§impl<R> Add<&SpMat<R>> for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> Add<&SpMat<R>> for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§impl<R> Add<SpMat<R>> for &SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> Add<SpMat<R>> for &SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§impl<R> AddAssign for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> AddAssign for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§fn add_assign(&mut self, rhs: SpMat<R>)
fn add_assign(&mut self, rhs: SpMat<R>)
+= operation. Read moreSource§impl<R> AddAssign<&SpMat<R>> for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> AddAssign<&SpMat<R>> for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§fn add_assign(&mut self, rhs: &SpMat<R>)
fn add_assign(&mut self, rhs: &SpMat<R>)
+= operation. Read moreimpl<R: Eq + Zero> Eq for SpMat<R>
Source§impl<R> From<SpMat<R>> for SpPluq<R>
Converts a into the trivial PLUQ whose Schur complement is a itself
impl<R> From<SpMat<R>> for SpPluq<R>
Converts a into the trivial PLUQ whose Schur complement is a itself
Source§impl<R> Mul for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> Mul for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§impl<R> Mul<&SpMat<R>> for &SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> Mul<&SpMat<R>> for &SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§impl<R> Mul<&SpMat<R>> for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> Mul<&SpMat<R>> for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§impl<R> Mul<SpMat<R>> for &SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> Mul<SpMat<R>> for &SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§impl<R> MulAssign for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> MulAssign for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§fn mul_assign(&mut self, rhs: SpMat<R>)
fn mul_assign(&mut self, rhs: SpMat<R>)
*= operation. Read moreSource§impl<R> MulAssign<&SpMat<R>> for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> MulAssign<&SpMat<R>> for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§fn mul_assign(&mut self, rhs: &SpMat<R>)
fn mul_assign(&mut self, rhs: &SpMat<R>)
*= operation. Read moreSource§impl<R> Sub for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> Sub for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§impl<R> Sub<&SpMat<R>> for &SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> Sub<&SpMat<R>> for &SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§impl<R> Sub<&SpMat<R>> for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> Sub<&SpMat<R>> for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§impl<R> Sub<SpMat<R>> for &SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> Sub<SpMat<R>> for &SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§impl<R> SubAssign for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> SubAssign for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§fn sub_assign(&mut self, rhs: SpMat<R>)
fn sub_assign(&mut self, rhs: SpMat<R>)
-= operation. Read moreSource§impl<R> SubAssign<&SpMat<R>> for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
impl<R> SubAssign<&SpMat<R>> for SpMat<R>where
R: Scalar + ClosedAddAssign + ClosedSubAssign + ClosedMulAssign + Zero + One + Neg<Output = R>,
Source§fn sub_assign(&mut self, rhs: &SpMat<R>)
fn sub_assign(&mut self, rhs: &SpMat<R>)
-= operation. Read moreAuto Trait Implementations§
impl<R> Freeze for SpMat<R>
impl<R> RefUnwindSafe for SpMat<R>where
R: RefUnwindSafe,
impl<R> Send for SpMat<R>where
R: Send,
impl<R> Sync for SpMat<R>where
R: Sync,
impl<R> Unpin for SpMat<R>where
R: Unpin,
impl<R> UnsafeUnpin for SpMat<R>
impl<R> UnwindSafe for SpMat<R>where
R: UnwindSafe,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T, Right> ClosedAdd<Right> for T
impl<T, Right> ClosedAddAssign<Right> for T
impl<T, Right> ClosedMul<Right> for T
impl<T, Right> ClosedMulAssign<Right> for T
impl<T> ClosedNeg for Twhere
T: Neg<Output = T>,
impl<T, Right> ClosedSub<Right> for T
impl<T, Right> ClosedSubAssign<Right> for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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> Scalar for T
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.