Struct SymbolicSparseRowMatRef
pub struct SymbolicSparseRowMatRef<'a, I>where
I: Index,{
pub(crate) nrows: usize,
pub(crate) ncols: usize,
pub(crate) row_ptr: &'a [I],
pub(crate) row_nnz: Option<&'a [I]>,
pub(crate) col_ind: &'a [I],
}
Expand description
Symbolic view structure of sparse matrix in row format, either compressed or uncompressed.
Requires:
-
nrows <= I::Signed::MAX
(always checked) -
ncols <= I::Signed::MAX
(always checked) -
row_ptrs
has lengthnrows + 1
(always checked) -
row_ptrs
is non-decreasing -
row_ptrs[0]..row_ptrs[nrows]
is a valid range in row_indices (always checked, assuming non-decreasing) -
if
nnz_per_row
isNone
, elements ofcol_indices[row_ptrs[i]..row_ptrs[i + 1]]
are less thanncols
-
nnz_per_row[i] <= row_ptrs[i+1] - row_ptrs[i]
-
if
nnz_per_row
isSome(_)
, elements ofcol_indices[row_ptrs[i]..][..nnz_per_row[i]]
are less thanncols
-
Within each row, column indices are sorted in non-decreasing order.
§Note
Some algorithms allow working with matrices containing unsorted row indices per column.
Passing such a matrix to an algorithm that does not explicitly permit this is unspecified (though not undefined) behavior.
Fields§
§nrows: usize
§ncols: usize
§row_ptr: &'a [I]
§row_nnz: Option<&'a [I]>
§col_ind: &'a [I]
Implementations§
§impl<'a, I> SymbolicSparseRowMatRef<'a, I>where
I: Index,
impl<'a, I> SymbolicSparseRowMatRef<'a, I>where
I: Index,
pub fn new_checked(
nrows: usize,
ncols: usize,
row_ptrs: &'a [I],
nnz_per_row: Option<&'a [I]>,
col_indices: &'a [I],
) -> SymbolicSparseRowMatRef<'a, I>
pub fn new_checked( nrows: usize, ncols: usize, row_ptrs: &'a [I], nnz_per_row: Option<&'a [I]>, col_indices: &'a [I], ) -> SymbolicSparseRowMatRef<'a, I>
Creates a new symbolic matrix view after asserting its invariants.
§Panics
See type level documentation.
pub fn new_unsorted_checked(
nrows: usize,
ncols: usize,
row_ptrs: &'a [I],
nnz_per_row: Option<&'a [I]>,
col_indices: &'a [I],
) -> SymbolicSparseRowMatRef<'a, I>
pub fn new_unsorted_checked( nrows: usize, ncols: usize, row_ptrs: &'a [I], nnz_per_row: Option<&'a [I]>, col_indices: &'a [I], ) -> SymbolicSparseRowMatRef<'a, I>
Creates a new symbolic matrix view from data containing duplicate and/or unsorted column indices per row, after asserting its other invariants.
§Panics
See type level documentation.
pub unsafe fn new_unchecked(
nrows: usize,
ncols: usize,
row_ptrs: &'a [I],
nnz_per_row: Option<&'a [I]>,
col_indices: &'a [I],
) -> SymbolicSparseRowMatRef<'a, I>
pub unsafe fn new_unchecked( nrows: usize, ncols: usize, row_ptrs: &'a [I], nnz_per_row: Option<&'a [I]>, col_indices: &'a [I], ) -> SymbolicSparseRowMatRef<'a, I>
Creates a new symbolic matrix view without asserting its invariants.
§Safety
See type level documentation.
pub fn transpose(self) -> SymbolicSparseColMatRef<'a, I>
pub fn transpose(self) -> SymbolicSparseColMatRef<'a, I>
Returns a view over the transpose of self
in column-major format.
pub fn to_owned(&self) -> Result<SymbolicSparseRowMat<I>, FaerError>
pub fn to_owned(&self) -> Result<SymbolicSparseRowMat<I>, FaerError>
Copies the current matrix into a newly allocated matrix.
§Note
Allows unsorted matrices, producing an unsorted output.
pub fn to_col_major(&self) -> Result<SymbolicSparseColMat<I>, FaerError>
pub fn to_col_major(&self) -> Result<SymbolicSparseColMat<I>, FaerError>
Copies the current matrix into a newly allocated matrix, with column-major order.
§Note
Allows unsorted matrices, producing a sorted output. Duplicate entries are kept, however.
pub fn compute_nnz(&self) -> usize
pub fn compute_nnz(&self) -> usize
Returns the number of symbolic non-zeros in the matrix.
The value is guaranteed to be less than I::Signed::MAX
.
§Note
Allows unsorted matrices, but the output is a count of all the entries, including the duplicate ones.
pub fn nnz_per_row(&self) -> Option<&'a [I]>
pub fn nnz_per_row(&self) -> Option<&'a [I]>
Returns the count of non-zeros per column of the matrix.
pub fn col_indices(&self) -> &'a [I]
pub fn col_indices(&self) -> &'a [I]
Returns the column indices.
pub fn col_indices_of_row_raw(&self, i: usize) -> &'a [I]
pub fn col_indices_of_row_raw(&self, i: usize) -> &'a [I]
pub fn col_indices_of_row(
&self,
i: usize,
) -> impl ExactSizeIterator + DoubleEndedIterator + 'a
pub fn col_indices_of_row( &self, i: usize, ) -> impl ExactSizeIterator + DoubleEndedIterator + 'a
pub fn row_range(&self, i: usize) -> Range<usize>
pub fn row_range(&self, i: usize) -> Range<usize>
Returns the range that the row i
occupies in self.col_indices()
.
§Panics
Panics if i >= self.nrows()
.
pub unsafe fn row_range_unchecked(&self, i: usize) -> Range<usize>
pub unsafe fn row_range_unchecked(&self, i: usize) -> Range<usize>
Returns the range that the row i
occupies in self.col_indices()
.
§Safety
The behavior is undefined if i >= self.nrows()
.
Trait Implementations§
§impl<I> Clone for SymbolicSparseRowMatRef<'_, I>where
I: Index,
impl<I> Clone for SymbolicSparseRowMatRef<'_, I>where
I: Index,
§fn clone(&self) -> SymbolicSparseRowMatRef<'_, I>
fn clone(&self) -> SymbolicSparseRowMatRef<'_, I>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl<I> Debug for SymbolicSparseRowMatRef<'_, I>where
I: Index,
impl<I> Debug for SymbolicSparseRowMatRef<'_, I>where
I: Index,
§impl<'a, I> IntoConst for SymbolicSparseRowMatRef<'a, I>where
I: Index,
impl<'a, I> IntoConst for SymbolicSparseRowMatRef<'a, I>where
I: Index,
type Target = SymbolicSparseRowMatRef<'a, I>
fn into_const(self) -> <SymbolicSparseRowMatRef<'a, I> as IntoConst>::Target
§impl<'short, I> Reborrow<'short> for SymbolicSparseRowMatRef<'_, I>where
I: Index,
impl<'short, I> Reborrow<'short> for SymbolicSparseRowMatRef<'_, I>where
I: Index,
type Target = SymbolicSparseRowMatRef<'short, I>
fn rb(&self) -> <SymbolicSparseRowMatRef<'_, I> as Reborrow<'short>>::Target
§impl<'short, I> ReborrowMut<'short> for SymbolicSparseRowMatRef<'_, I>where
I: Index,
impl<'short, I> ReborrowMut<'short> for SymbolicSparseRowMatRef<'_, I>where
I: Index,
type Target = SymbolicSparseRowMatRef<'short, I>
fn rb_mut( &mut self, ) -> <SymbolicSparseRowMatRef<'_, I> as ReborrowMut<'short>>::Target
impl<I> Copy for SymbolicSparseRowMatRef<'_, I>where
I: Index,
Auto Trait Implementations§
impl<'a, I> Freeze for SymbolicSparseRowMatRef<'a, I>
impl<'a, I> RefUnwindSafe for SymbolicSparseRowMatRef<'a, I>where
I: RefUnwindSafe,
impl<'a, I> Send for SymbolicSparseRowMatRef<'a, I>
impl<'a, I> Sync for SymbolicSparseRowMatRef<'a, I>
impl<'a, I> Unpin for SymbolicSparseRowMatRef<'a, I>
impl<'a, I> UnwindSafe for SymbolicSparseRowMatRef<'a, I>where
I: RefUnwindSafe,
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,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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