pub type MatMut<'a, T, Rows = usize, Cols = usize, RStride = isize, CStride = isize> = Mat<Mut<'a, T, Rows, Cols, RStride, CStride>>;Expand description
mutable view over a matrix, similar to a mutable reference to a 2d strided slice
§note
unlike a slice, the data pointed to by MatMut<'_, T> is allowed to be partially or fully
uninitialized under certain conditions. In this case, care must be taken to not perform any
operations that read the uninitialized values, either directly or indirectly through any of the
numerical library routines, unless it is explicitly permitted
§move semantics
since MatMut mutably borrows data, it cannot be Copy. this means that if we pass a
MatMut to a function that takes it by value, or use a method that consumes self like
MatMut::transpose_mut, this renders the original variable unusable
use faer::{Mat, MatMut};
fn takes_matmut(view: MatMut<'_, f64>) {}
let mut matrix = Mat::new();
let view = matrix.as_mut();
takes_matmut(view); // `view` is moved (passed by value)
takes_matmut(view); // this fails to compile since `view` was movedthe way to get around it is to use the reborrow::ReborrowMut trait, which allows us to
mutably borrow a MatMut to obtain another MatMut for the lifetime of the borrow.
it’s also similarly possible to immutably borrow a MatMut to obtain a MatRef for the
lifetime of the borrow, using reborrow::Reborrow
use faer::{Mat, MatMut, MatRef};
use reborrow::*;
fn takes_matmut(view: MatMut<'_, f64>) {}
fn takes_matref(view: MatRef<'_, f64>) {}
let mut matrix = Mat::new();
let mut view = matrix.as_mut();
takes_matmut(view.rb_mut());
takes_matmut(view.rb_mut());
takes_matref(view.rb());
// view is still usable hereAliased Type§
#[repr(transparent)]pub struct MatMut<'a, T, Rows = usize, Cols = usize, RStride = isize, CStride = isize>(pub Mut<'a, T, Rows, Cols, RStride, CStride>);Tuple Fields§
§0: Mut<'a, T, Rows, Cols, RStride, CStride>Implementations§
Source§impl<'a, T> MatMut<'a, T>
impl<'a, T> MatMut<'a, T>
Source§impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> MatMut<'a, T, Rows, Cols, RStride, CStride>
impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> MatMut<'a, T, Rows, Cols, RStride, CStride>
Sourcepub const unsafe fn from_raw_parts_mut(
ptr: *mut T,
nrows: Rows,
ncols: Cols,
row_stride: RStride,
col_stride: CStride,
) -> Self
pub const unsafe fn from_raw_parts_mut( ptr: *mut T, nrows: Rows, ncols: Cols, row_stride: RStride, col_stride: CStride, ) -> Self
creates a MatMut from a pointer to the matrix data, dimensions, and strides
the row (resp. column) stride is the offset from the memory address of a given matrix
element at index (row: i, col: j), to the memory address of the matrix element at
index (row: i + 1, col: 0) (resp. (row: 0, col: i + 1)). this offset is specified in
number of elements, not in bytes
§safety
the behavior is undefined if any of the following conditions are violated:
- for each matrix unit, the entire memory region addressed by the matrix must be contained
within a single allocation, accessible in its entirety by the corresponding pointer in
ptr - for each matrix unit, the corresponding pointer must be non null and properly aligned, even for a zero-sized matrix.
- the values accessible by the matrix must be initialized at some point before they are read, or references to them are formed
- no aliasing (including self aliasing) is allowed. in other words, none of the elements
accessible by any matrix unit may be accessed for reads or writes by any other means for
the duration of the lifetime
'a. no two elements within a single matrix unit may point to the same address (such a thing can be achieved with a zero stride, for example), and no two matrix units may point to the same address
§example
use faer::{MatMut, mat};
// row major matrix with 2 rows, 3 columns, with a column at the end that we want to skip.
// the row stride is the pointer offset from the address of 1.0 to the address of 4.0,
// which is 4
// the column stride is the pointer offset from the address of 1.0 to the address of 2.0,
// which is 1
let mut data = [[1.0, 2.0, 3.0, f64::NAN], [4.0, 5.0, 6.0, f64::NAN]];
let mut matrix =
unsafe { MatMut::from_raw_parts_mut(data.as_mut_ptr() as *mut f64, 2, 3, 4, 1) };
let expected = mat![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
assert_eq!(expected.as_ref(), matrix);Sourcepub fn shape(&self) -> (Rows, Cols)
pub fn shape(&self) -> (Rows, Cols)
returns the number of rows and columns of the matrix
Sourcepub fn row_stride(&self) -> RStride
pub fn row_stride(&self) -> RStride
returns the row stride of the matrix, specified in number of elements, not in bytes
Sourcepub fn col_stride(&self) -> CStride
pub fn col_stride(&self) -> CStride
returns the column stride of the matrix, specified in number of elements, not in bytes
Sourcepub fn ptr_at(&self, row: IdxInc<Rows>, col: IdxInc<Cols>) -> *const T
pub fn ptr_at(&self, row: IdxInc<Rows>, col: IdxInc<Cols>) -> *const T
returns a raw pointer to the element at the given index
Sourcepub unsafe fn ptr_inbounds_at(&self, row: Idx<Rows>, col: Idx<Cols>) -> *const T
pub unsafe fn ptr_inbounds_at(&self, row: Idx<Rows>, col: Idx<Cols>) -> *const T
returns a raw pointer to the element at the given index, assuming the provided index is within the matrix bounds
§safety
the behavior is undefined if any of the following conditions are violated:
row < self.nrows()col < self.ncols()
Sourcepub fn split_at(
self,
row: IdxInc<Rows>,
col: IdxInc<Cols>,
) -> (MatRef<'a, T, usize, usize, RStride, CStride>, MatRef<'a, T, usize, usize, RStride, CStride>, MatRef<'a, T, usize, usize, RStride, CStride>, MatRef<'a, T, usize, usize, RStride, CStride>)
pub fn split_at( self, row: IdxInc<Rows>, col: IdxInc<Cols>, ) -> (MatRef<'a, T, usize, usize, RStride, CStride>, MatRef<'a, T, usize, usize, RStride, CStride>, MatRef<'a, T, usize, usize, RStride, CStride>, MatRef<'a, T, usize, usize, RStride, CStride>)
see MatRef::split_at
Sourcepub fn split_at_row(
self,
row: IdxInc<Rows>,
) -> (MatRef<'a, T, usize, Cols, RStride, CStride>, MatRef<'a, T, usize, Cols, RStride, CStride>)
pub fn split_at_row( self, row: IdxInc<Rows>, ) -> (MatRef<'a, T, usize, Cols, RStride, CStride>, MatRef<'a, T, usize, Cols, RStride, CStride>)
Sourcepub fn split_at_col(
self,
col: IdxInc<Cols>,
) -> (MatRef<'a, T, Rows, usize, RStride, CStride>, MatRef<'a, T, Rows, usize, RStride, CStride>)
pub fn split_at_col( self, col: IdxInc<Cols>, ) -> (MatRef<'a, T, Rows, usize, RStride, CStride>, MatRef<'a, T, Rows, usize, RStride, CStride>)
Sourcepub fn conjugate(self) -> MatRef<'a, T::Conj, Rows, Cols, RStride, CStride>where
T: Conjugate,
pub fn conjugate(self) -> MatRef<'a, T::Conj, Rows, Cols, RStride, CStride>where
T: Conjugate,
Sourcepub fn canonical(self) -> MatRef<'a, T::Canonical, Rows, Cols, RStride, CStride>where
T: Conjugate,
pub fn canonical(self) -> MatRef<'a, T::Canonical, Rows, Cols, RStride, CStride>where
T: Conjugate,
Sourcepub fn adjoint(self) -> MatRef<'a, T::Conj, Cols, Rows, CStride, RStride>where
T: Conjugate,
pub fn adjoint(self) -> MatRef<'a, T::Conj, Cols, Rows, CStride, RStride>where
T: Conjugate,
see MatRef::adjoint
Sourcepub fn reverse_rows(self) -> MatRef<'a, T, Rows, Cols, RStride::Rev, CStride>
pub fn reverse_rows(self) -> MatRef<'a, T, Rows, Cols, RStride::Rev, CStride>
Sourcepub fn reverse_cols(self) -> MatRef<'a, T, Rows, Cols, RStride, CStride::Rev>
pub fn reverse_cols(self) -> MatRef<'a, T, Rows, Cols, RStride, CStride::Rev>
Sourcepub fn reverse_rows_and_cols(
self,
) -> MatRef<'a, T, Rows, Cols, RStride::Rev, CStride::Rev>
pub fn reverse_rows_and_cols( self, ) -> MatRef<'a, T, Rows, Cols, RStride::Rev, CStride::Rev>
Sourcepub fn submatrix<V: Shape, H: Shape>(
self,
row_start: IdxInc<Rows>,
col_start: IdxInc<Cols>,
nrows: V,
ncols: H,
) -> MatRef<'a, T, V, H, RStride, CStride>
pub fn submatrix<V: Shape, H: Shape>( self, row_start: IdxInc<Rows>, col_start: IdxInc<Cols>, nrows: V, ncols: H, ) -> MatRef<'a, T, V, H, RStride, CStride>
Sourcepub fn subrows<V: Shape>(
self,
row_start: IdxInc<Rows>,
nrows: V,
) -> MatRef<'a, T, V, Cols, RStride, CStride>
pub fn subrows<V: Shape>( self, row_start: IdxInc<Rows>, nrows: V, ) -> MatRef<'a, T, V, Cols, RStride, CStride>
see MatRef::subrows
Sourcepub fn subcols<H: Shape>(
self,
col_start: IdxInc<Cols>,
ncols: H,
) -> MatRef<'a, T, Rows, H, RStride, CStride>
pub fn subcols<H: Shape>( self, col_start: IdxInc<Cols>, ncols: H, ) -> MatRef<'a, T, Rows, H, RStride, CStride>
see MatRef::subcols
Sourcepub fn as_shape<V: Shape, H: Shape>(
self,
nrows: V,
ncols: H,
) -> MatRef<'a, T, V, H, RStride, CStride>
pub fn as_shape<V: Shape, H: Shape>( self, nrows: V, ncols: H, ) -> MatRef<'a, T, V, H, RStride, CStride>
see MatRef::as_shape
Sourcepub fn as_row_shape<V: Shape>(
self,
nrows: V,
) -> MatRef<'a, T, V, Cols, RStride, CStride>
pub fn as_row_shape<V: Shape>( self, nrows: V, ) -> MatRef<'a, T, V, Cols, RStride, CStride>
Sourcepub fn as_col_shape<H: Shape>(
self,
ncols: H,
) -> MatRef<'a, T, Rows, H, RStride, CStride>
pub fn as_col_shape<H: Shape>( self, ncols: H, ) -> MatRef<'a, T, Rows, H, RStride, CStride>
Sourcepub fn as_dyn_stride(self) -> MatRef<'a, T, Rows, Cols, isize, isize>
pub fn as_dyn_stride(self) -> MatRef<'a, T, Rows, Cols, isize, isize>
Sourcepub fn as_dyn_rows(self) -> MatRef<'a, T, usize, Cols, RStride, CStride>
pub fn as_dyn_rows(self) -> MatRef<'a, T, usize, Cols, RStride, CStride>
Sourcepub fn as_dyn_cols(self) -> MatRef<'a, T, Rows, usize, RStride, CStride>
pub fn as_dyn_cols(self) -> MatRef<'a, T, Rows, usize, RStride, CStride>
Sourcepub fn row(self, i: Idx<Rows>) -> RowRef<'a, T, Cols, CStride>
pub fn row(self, i: Idx<Rows>) -> RowRef<'a, T, Cols, CStride>
see MatRef::row
Sourcepub fn col(self, j: Idx<Cols>) -> ColRef<'a, T, Rows, RStride>
pub fn col(self, j: Idx<Cols>) -> ColRef<'a, T, Rows, RStride>
see MatRef::col
Sourcepub fn col_iter(
self,
) -> impl 'a + ExactSizeIterator + DoubleEndedIterator<Item = ColRef<'a, T, Rows, RStride>>where
Rows: 'a,
Cols: 'a,
pub fn col_iter(
self,
) -> impl 'a + ExactSizeIterator + DoubleEndedIterator<Item = ColRef<'a, T, Rows, RStride>>where
Rows: 'a,
Cols: 'a,
see MatRef::col_iter
Sourcepub fn row_iter(
self,
) -> impl 'a + ExactSizeIterator + DoubleEndedIterator<Item = RowRef<'a, T, Cols, CStride>>where
Rows: 'a,
Cols: 'a,
pub fn row_iter(
self,
) -> impl 'a + ExactSizeIterator + DoubleEndedIterator<Item = RowRef<'a, T, Cols, CStride>>where
Rows: 'a,
Cols: 'a,
see MatRef::row_iter
Sourcepub fn par_col_iter(
self,
) -> impl 'a + IndexedParallelIterator<Item = ColRef<'a, T, Rows, RStride>>where
T: Sync,
Rows: 'a,
Cols: 'a,
pub fn par_col_iter(
self,
) -> impl 'a + IndexedParallelIterator<Item = ColRef<'a, T, Rows, RStride>>where
T: Sync,
Rows: 'a,
Cols: 'a,
Sourcepub fn par_row_iter(
self,
) -> impl 'a + IndexedParallelIterator<Item = RowRef<'a, T, Cols, CStride>>where
T: Sync,
Rows: 'a,
Cols: 'a,
pub fn par_row_iter(
self,
) -> impl 'a + IndexedParallelIterator<Item = RowRef<'a, T, Cols, CStride>>where
T: Sync,
Rows: 'a,
Cols: 'a,
Sourcepub fn par_col_chunks(
self,
chunk_size: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatRef<'a, T, Rows, usize, RStride, CStride>>where
T: Sync,
Rows: 'a,
Cols: 'a,
pub fn par_col_chunks(
self,
chunk_size: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatRef<'a, T, Rows, usize, RStride, CStride>>where
T: Sync,
Rows: 'a,
Cols: 'a,
Sourcepub fn par_col_partition(
self,
count: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatRef<'a, T, Rows, usize, RStride, CStride>>where
T: Sync,
Rows: 'a,
Cols: 'a,
pub fn par_col_partition(
self,
count: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatRef<'a, T, Rows, usize, RStride, CStride>>where
T: Sync,
Rows: 'a,
Cols: 'a,
Sourcepub fn par_row_chunks(
self,
chunk_size: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatRef<'a, T, usize, Cols, RStride, CStride>>where
T: Sync,
Rows: 'a,
Cols: 'a,
pub fn par_row_chunks(
self,
chunk_size: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatRef<'a, T, usize, Cols, RStride, CStride>>where
T: Sync,
Rows: 'a,
Cols: 'a,
Sourcepub fn par_row_partition(
self,
count: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatRef<'a, T, usize, Cols, RStride, CStride>>where
T: Sync,
Rows: 'a,
Cols: 'a,
pub fn par_row_partition(
self,
count: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatRef<'a, T, usize, Cols, RStride, CStride>>where
T: Sync,
Rows: 'a,
Cols: 'a,
Sourcepub fn try_as_col_major(
self,
) -> Option<MatRef<'a, T, Rows, Cols, ContiguousFwd, CStride>>
pub fn try_as_col_major( self, ) -> Option<MatRef<'a, T, Rows, Cols, ContiguousFwd, CStride>>
Sourcepub fn try_as_row_major(
self,
) -> Option<MatRef<'a, T, Rows, Cols, RStride, ContiguousFwd>>
pub fn try_as_row_major( self, ) -> Option<MatRef<'a, T, Rows, Cols, RStride, ContiguousFwd>>
Sourcepub fn bind<'M, 'N>(
self,
row: Guard<'M>,
col: Guard<'N>,
) -> MatMut<'a, T, Dim<'M>, Dim<'N>, RStride, CStride>
pub fn bind<'M, 'N>( self, row: Guard<'M>, col: Guard<'N>, ) -> MatMut<'a, T, Dim<'M>, Dim<'N>, RStride, CStride>
see [MatRef::)]] #[doc(hidden)]
Sourcepub fn get<RowRange, ColRange>(
self,
row: RowRange,
col: ColRange,
) -> <MatRef<'a, T, Rows, Cols, RStride, CStride> as MatIndex<RowRange, ColRange>>::Target
pub fn get<RowRange, ColRange>( self, row: RowRange, col: ColRange, ) -> <MatRef<'a, T, Rows, Cols, RStride, CStride> as MatIndex<RowRange, ColRange>>::Target
see MatRef::get
Sourcepub unsafe fn get_unchecked<RowRange, ColRange>(
self,
row: RowRange,
col: ColRange,
) -> <MatRef<'a, T, Rows, Cols, RStride, CStride> as MatIndex<RowRange, ColRange>>::Target
pub unsafe fn get_unchecked<RowRange, ColRange>( self, row: RowRange, col: ColRange, ) -> <MatRef<'a, T, Rows, Cols, RStride, CStride> as MatIndex<RowRange, ColRange>>::Target
Sourcepub fn get_mut<RowRange, ColRange>(
self,
row: RowRange,
col: ColRange,
) -> <MatMut<'a, T, Rows, Cols, RStride, CStride> as MatIndex<RowRange, ColRange>>::Target
pub fn get_mut<RowRange, ColRange>( self, row: RowRange, col: ColRange, ) -> <MatMut<'a, T, Rows, Cols, RStride, CStride> as MatIndex<RowRange, ColRange>>::Target
see MatRef::get
Sourcepub unsafe fn get_mut_unchecked<RowRange, ColRange>(
self,
row: RowRange,
col: ColRange,
) -> <MatMut<'a, T, Rows, Cols, RStride, CStride> as MatIndex<RowRange, ColRange>>::Target
pub unsafe fn get_mut_unchecked<RowRange, ColRange>( self, row: RowRange, col: ColRange, ) -> <MatMut<'a, T, Rows, Cols, RStride, CStride> as MatIndex<RowRange, ColRange>>::Target
Source§impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> MatMut<'a, T, Rows, Cols, RStride, CStride>
impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> MatMut<'a, T, Rows, Cols, RStride, CStride>
Sourcepub fn as_ptr_mut(&self) -> *mut T
pub fn as_ptr_mut(&self) -> *mut T
see MatRef::as_ptr
Sourcepub fn ptr_at_mut(&self, row: IdxInc<Rows>, col: IdxInc<Cols>) -> *mut T
pub fn ptr_at_mut(&self, row: IdxInc<Rows>, col: IdxInc<Cols>) -> *mut T
see MatRef::ptr_at
Sourcepub unsafe fn ptr_inbounds_at_mut(
&self,
row: Idx<Rows>,
col: Idx<Cols>,
) -> *mut T
pub unsafe fn ptr_inbounds_at_mut( &self, row: Idx<Rows>, col: Idx<Cols>, ) -> *mut T
Sourcepub fn split_at_mut(
self,
row: IdxInc<Rows>,
col: IdxInc<Cols>,
) -> (MatMut<'a, T, usize, usize, RStride, CStride>, MatMut<'a, T, usize, usize, RStride, CStride>, MatMut<'a, T, usize, usize, RStride, CStride>, MatMut<'a, T, usize, usize, RStride, CStride>)
pub fn split_at_mut( self, row: IdxInc<Rows>, col: IdxInc<Cols>, ) -> (MatMut<'a, T, usize, usize, RStride, CStride>, MatMut<'a, T, usize, usize, RStride, CStride>, MatMut<'a, T, usize, usize, RStride, CStride>, MatMut<'a, T, usize, usize, RStride, CStride>)
see MatRef::split_at
Sourcepub fn split_at_row_mut(
self,
row: IdxInc<Rows>,
) -> (MatMut<'a, T, usize, Cols, RStride, CStride>, MatMut<'a, T, usize, Cols, RStride, CStride>)
pub fn split_at_row_mut( self, row: IdxInc<Rows>, ) -> (MatMut<'a, T, usize, Cols, RStride, CStride>, MatMut<'a, T, usize, Cols, RStride, CStride>)
Sourcepub fn split_at_col_mut(
self,
col: IdxInc<Cols>,
) -> (MatMut<'a, T, Rows, usize, RStride, CStride>, MatMut<'a, T, Rows, usize, RStride, CStride>)
pub fn split_at_col_mut( self, col: IdxInc<Cols>, ) -> (MatMut<'a, T, Rows, usize, RStride, CStride>, MatMut<'a, T, Rows, usize, RStride, CStride>)
Sourcepub fn transpose_mut(self) -> MatMut<'a, T, Cols, Rows, CStride, RStride>
pub fn transpose_mut(self) -> MatMut<'a, T, Cols, Rows, CStride, RStride>
Sourcepub fn conjugate_mut(self) -> MatMut<'a, T::Conj, Rows, Cols, RStride, CStride>where
T: Conjugate,
pub fn conjugate_mut(self) -> MatMut<'a, T::Conj, Rows, Cols, RStride, CStride>where
T: Conjugate,
Sourcepub fn canonical_mut(
self,
) -> MatMut<'a, T::Canonical, Rows, Cols, RStride, CStride>where
T: Conjugate,
pub fn canonical_mut(
self,
) -> MatMut<'a, T::Canonical, Rows, Cols, RStride, CStride>where
T: Conjugate,
Sourcepub fn adjoint_mut(self) -> MatMut<'a, T::Conj, Cols, Rows, CStride, RStride>where
T: Conjugate,
pub fn adjoint_mut(self) -> MatMut<'a, T::Conj, Cols, Rows, CStride, RStride>where
T: Conjugate,
see MatRef::adjoint
Sourcepub fn reverse_rows_mut(
self,
) -> MatMut<'a, T, Rows, Cols, RStride::Rev, CStride>
pub fn reverse_rows_mut( self, ) -> MatMut<'a, T, Rows, Cols, RStride::Rev, CStride>
Sourcepub fn reverse_cols_mut(
self,
) -> MatMut<'a, T, Rows, Cols, RStride, CStride::Rev>
pub fn reverse_cols_mut( self, ) -> MatMut<'a, T, Rows, Cols, RStride, CStride::Rev>
Sourcepub fn reverse_rows_and_cols_mut(
self,
) -> MatMut<'a, T, Rows, Cols, RStride::Rev, CStride::Rev>
pub fn reverse_rows_and_cols_mut( self, ) -> MatMut<'a, T, Rows, Cols, RStride::Rev, CStride::Rev>
Sourcepub fn submatrix_mut<V: Shape, H: Shape>(
self,
row_start: IdxInc<Rows>,
col_start: IdxInc<Cols>,
nrows: V,
ncols: H,
) -> MatMut<'a, T, V, H, RStride, CStride>
pub fn submatrix_mut<V: Shape, H: Shape>( self, row_start: IdxInc<Rows>, col_start: IdxInc<Cols>, nrows: V, ncols: H, ) -> MatMut<'a, T, V, H, RStride, CStride>
Sourcepub fn subrows_mut<V: Shape>(
self,
row_start: IdxInc<Rows>,
nrows: V,
) -> MatMut<'a, T, V, Cols, RStride, CStride>
pub fn subrows_mut<V: Shape>( self, row_start: IdxInc<Rows>, nrows: V, ) -> MatMut<'a, T, V, Cols, RStride, CStride>
see MatRef::subrows
Sourcepub fn subcols_mut<H: Shape>(
self,
col_start: IdxInc<Cols>,
ncols: H,
) -> MatMut<'a, T, Rows, H, RStride, CStride>
pub fn subcols_mut<H: Shape>( self, col_start: IdxInc<Cols>, ncols: H, ) -> MatMut<'a, T, Rows, H, RStride, CStride>
see MatRef::subcols
Sourcepub fn as_shape_mut<V: Shape, H: Shape>(
self,
nrows: V,
ncols: H,
) -> MatMut<'a, T, V, H, RStride, CStride>
pub fn as_shape_mut<V: Shape, H: Shape>( self, nrows: V, ncols: H, ) -> MatMut<'a, T, V, H, RStride, CStride>
see MatRef::as_shape
Sourcepub fn as_row_shape_mut<V: Shape>(
self,
nrows: V,
) -> MatMut<'a, T, V, Cols, RStride, CStride>
pub fn as_row_shape_mut<V: Shape>( self, nrows: V, ) -> MatMut<'a, T, V, Cols, RStride, CStride>
Sourcepub fn as_col_shape_mut<H: Shape>(
self,
ncols: H,
) -> MatMut<'a, T, Rows, H, RStride, CStride>
pub fn as_col_shape_mut<H: Shape>( self, ncols: H, ) -> MatMut<'a, T, Rows, H, RStride, CStride>
Sourcepub fn as_dyn_stride_mut(self) -> MatMut<'a, T, Rows, Cols, isize, isize>
pub fn as_dyn_stride_mut(self) -> MatMut<'a, T, Rows, Cols, isize, isize>
Sourcepub fn as_dyn_mut(self) -> MatMut<'a, T, usize, usize, RStride, CStride>
pub fn as_dyn_mut(self) -> MatMut<'a, T, usize, usize, RStride, CStride>
see MatRef::as_dyn
Sourcepub fn as_dyn_rows_mut(self) -> MatMut<'a, T, usize, Cols, RStride, CStride>
pub fn as_dyn_rows_mut(self) -> MatMut<'a, T, usize, Cols, RStride, CStride>
Sourcepub fn as_dyn_cols_mut(self) -> MatMut<'a, T, Rows, usize, RStride, CStride>
pub fn as_dyn_cols_mut(self) -> MatMut<'a, T, Rows, usize, RStride, CStride>
Sourcepub fn row_mut(self, i: Idx<Rows>) -> RowMut<'a, T, Cols, CStride>
pub fn row_mut(self, i: Idx<Rows>) -> RowMut<'a, T, Cols, CStride>
see MatRef::row
Sourcepub fn col_mut(self, j: Idx<Cols>) -> ColMut<'a, T, Rows, RStride>
pub fn col_mut(self, j: Idx<Cols>) -> ColMut<'a, T, Rows, RStride>
see MatRef::col
Sourcepub fn col_iter_mut(
self,
) -> impl 'a + ExactSizeIterator + DoubleEndedIterator<Item = ColMut<'a, T, Rows, RStride>>where
Rows: 'a,
Cols: 'a,
pub fn col_iter_mut(
self,
) -> impl 'a + ExactSizeIterator + DoubleEndedIterator<Item = ColMut<'a, T, Rows, RStride>>where
Rows: 'a,
Cols: 'a,
see MatRef::col_iter
Sourcepub fn row_iter_mut(
self,
) -> impl 'a + ExactSizeIterator + DoubleEndedIterator<Item = RowMut<'a, T, Cols, CStride>>where
Rows: 'a,
Cols: 'a,
pub fn row_iter_mut(
self,
) -> impl 'a + ExactSizeIterator + DoubleEndedIterator<Item = RowMut<'a, T, Cols, CStride>>where
Rows: 'a,
Cols: 'a,
see MatRef::row_iter
Sourcepub fn par_col_iter_mut(
self,
) -> impl 'a + IndexedParallelIterator<Item = ColMut<'a, T, Rows, RStride>>where
T: Send,
Rows: 'a,
Cols: 'a,
pub fn par_col_iter_mut(
self,
) -> impl 'a + IndexedParallelIterator<Item = ColMut<'a, T, Rows, RStride>>where
T: Send,
Rows: 'a,
Cols: 'a,
Sourcepub fn par_row_iter_mut(
self,
) -> impl 'a + IndexedParallelIterator<Item = RowMut<'a, T, Cols, CStride>>where
T: Send,
Rows: 'a,
Cols: 'a,
pub fn par_row_iter_mut(
self,
) -> impl 'a + IndexedParallelIterator<Item = RowMut<'a, T, Cols, CStride>>where
T: Send,
Rows: 'a,
Cols: 'a,
Sourcepub fn par_col_chunks_mut(
self,
chunk_size: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatMut<'a, T, Rows, usize, RStride, CStride>>where
T: Send,
Rows: 'a,
Cols: 'a,
pub fn par_col_chunks_mut(
self,
chunk_size: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatMut<'a, T, Rows, usize, RStride, CStride>>where
T: Send,
Rows: 'a,
Cols: 'a,
Sourcepub fn par_col_partition_mut(
self,
count: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatMut<'a, T, Rows, usize, RStride, CStride>>where
T: Send,
Rows: 'a,
Cols: 'a,
pub fn par_col_partition_mut(
self,
count: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatMut<'a, T, Rows, usize, RStride, CStride>>where
T: Send,
Rows: 'a,
Cols: 'a,
Sourcepub fn par_row_chunks_mut(
self,
chunk_size: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatMut<'a, T, usize, Cols, RStride, CStride>>where
T: Send,
Rows: 'a,
Cols: 'a,
pub fn par_row_chunks_mut(
self,
chunk_size: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatMut<'a, T, usize, Cols, RStride, CStride>>where
T: Send,
Rows: 'a,
Cols: 'a,
Sourcepub fn par_row_partition_mut(
self,
count: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatMut<'a, T, usize, Cols, RStride, CStride>>where
T: Send,
Rows: 'a,
Cols: 'a,
pub fn par_row_partition_mut(
self,
count: usize,
) -> impl 'a + IndexedParallelIterator<Item = MatMut<'a, T, usize, Cols, RStride, CStride>>where
T: Send,
Rows: 'a,
Cols: 'a,
Sourcepub fn split_first_row_mut(
self,
) -> Option<(RowMut<'a, T, Cols, CStride>, MatMut<'a, T, usize, Cols, RStride, CStride>)>
pub fn split_first_row_mut( self, ) -> Option<(RowMut<'a, T, Cols, CStride>, MatMut<'a, T, usize, Cols, RStride, CStride>)>
Sourcepub fn split_first_col_mut(
self,
) -> Option<(ColMut<'a, T, Rows, RStride>, MatMut<'a, T, Rows, usize, RStride, CStride>)>
pub fn split_first_col_mut( self, ) -> Option<(ColMut<'a, T, Rows, RStride>, MatMut<'a, T, Rows, usize, RStride, CStride>)>
Sourcepub fn split_last_row_mut(
self,
) -> Option<(RowMut<'a, T, Cols, CStride>, MatMut<'a, T, usize, Cols, RStride, CStride>)>
pub fn split_last_row_mut( self, ) -> Option<(RowMut<'a, T, Cols, CStride>, MatMut<'a, T, usize, Cols, RStride, CStride>)>
Sourcepub fn split_last_col_mut(
self,
) -> Option<(ColMut<'a, T, Rows, RStride>, MatMut<'a, T, Rows, usize, RStride, CStride>)>
pub fn split_last_col_mut( self, ) -> Option<(ColMut<'a, T, Rows, RStride>, MatMut<'a, T, Rows, usize, RStride, CStride>)>
Sourcepub fn split_first_row(
self,
) -> Option<(RowRef<'a, T, Cols, CStride>, MatRef<'a, T, usize, Cols, RStride, CStride>)>
pub fn split_first_row( self, ) -> Option<(RowRef<'a, T, Cols, CStride>, MatRef<'a, T, usize, Cols, RStride, CStride>)>
Sourcepub fn split_first_col(
self,
) -> Option<(ColRef<'a, T, Rows, RStride>, MatRef<'a, T, Rows, usize, RStride, CStride>)>
pub fn split_first_col( self, ) -> Option<(ColRef<'a, T, Rows, RStride>, MatRef<'a, T, Rows, usize, RStride, CStride>)>
Sourcepub fn split_last_row(
self,
) -> Option<(RowRef<'a, T, Cols, CStride>, MatRef<'a, T, usize, Cols, RStride, CStride>)>
pub fn split_last_row( self, ) -> Option<(RowRef<'a, T, Cols, CStride>, MatRef<'a, T, usize, Cols, RStride, CStride>)>
Sourcepub fn split_last_col(
self,
) -> Option<(ColRef<'a, T, Rows, RStride>, MatRef<'a, T, Rows, usize, RStride, CStride>)>
pub fn split_last_col( self, ) -> Option<(ColRef<'a, T, Rows, RStride>, MatRef<'a, T, Rows, usize, RStride, CStride>)>
Sourcepub fn try_as_col_major_mut(
self,
) -> Option<MatMut<'a, T, Rows, Cols, ContiguousFwd, CStride>>
pub fn try_as_col_major_mut( self, ) -> Option<MatMut<'a, T, Rows, Cols, ContiguousFwd, CStride>>
Sourcepub fn try_as_row_major_mut(
self,
) -> Option<MatMut<'a, T, Rows, Cols, RStride, ContiguousFwd>>
pub fn try_as_row_major_mut( self, ) -> Option<MatMut<'a, T, Rows, Cols, RStride, ContiguousFwd>>
Source§impl<'a, T, Rows: Shape, Cols: Shape> MatMut<'a, T, Rows, Cols>
impl<'a, T, Rows: Shape, Cols: Shape> MatMut<'a, T, Rows, Cols>
Sourcepub fn from_column_major_slice_mut(
slice: &'a mut [T],
nrows: Rows,
ncols: Cols,
) -> Selfwhere
T: Sized,
pub fn from_column_major_slice_mut(
slice: &'a mut [T],
nrows: Rows,
ncols: Cols,
) -> Selfwhere
T: Sized,
creates a MatMut from slice views over the matrix data, and the matrix dimensions.
the data is interpreted in a column-major format, so that the first chunk of nrows
values from the slices goes in the first column of the matrix, the second chunk of nrows
values goes in the second column, and so on
§panics
the function panics if any of the following conditions are violated:
nrows * ncols == slice.len()
§example
use faer::{MatMut, mat};
let mut slice = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0_f64];
let view = MatMut::from_column_major_slice_mut(&mut slice, 3, 2);
let expected = mat![[1.0, 4.0], [2.0, 5.0], [3.0, 6.0]];
assert_eq!(expected, view);Sourcepub fn from_column_major_slice_with_stride_mut(
slice: &'a mut [T],
nrows: Rows,
ncols: Cols,
col_stride: usize,
) -> Selfwhere
T: Sized,
pub fn from_column_major_slice_with_stride_mut(
slice: &'a mut [T],
nrows: Rows,
ncols: Cols,
col_stride: usize,
) -> Selfwhere
T: Sized,
creates a MatMut from slice views over the matrix data, and the matrix dimensions.
the data is interpreted in a column-major format, where the beginnings of two consecutive
columns are separated by col_stride elements.
Sourcepub fn from_row_major_slice_mut(
slice: &'a mut [T],
nrows: Rows,
ncols: Cols,
) -> Selfwhere
T: Sized,
pub fn from_row_major_slice_mut(
slice: &'a mut [T],
nrows: Rows,
ncols: Cols,
) -> Selfwhere
T: Sized,
creates a MatMut from slice views over the matrix data, and the matrix dimensions.
the data is interpreted in a row-major format, so that the first chunk of ncols
values from the slices goes in the first column of the matrix, the second chunk of ncols
values goes in the second column, and so on
§panics
the function panics if any of the following conditions are violated:
nrows * ncols == slice.len()
§example
use faer::{MatMut, mat};
let mut slice = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0_f64];
let view = MatMut::from_row_major_slice_mut(&mut slice, 3, 2);
let expected = mat![[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]];
assert_eq!(expected, view);Sourcepub fn from_row_major_slice_with_stride_mut(
slice: &'a mut [T],
nrows: Rows,
ncols: Cols,
row_stride: usize,
) -> Selfwhere
T: Sized,
pub fn from_row_major_slice_with_stride_mut(
slice: &'a mut [T],
nrows: Rows,
ncols: Cols,
row_stride: usize,
) -> Selfwhere
T: Sized,
creates a MatMut from slice views over the matrix data, and the matrix dimensions.
the data is interpreted in a row-major format, where the beginnings of two consecutive
rows are separated by row_stride elements.
Source§impl<'a, T, Dim: Shape, RStride: Stride, CStride: Stride> MatMut<'a, T, Dim, Dim, RStride, CStride>
impl<'a, T, Dim: Shape, RStride: Stride, CStride: Stride> MatMut<'a, T, Dim, Dim, RStride, CStride>
Sourcepub fn diagonal(self) -> DiagRef<'a, T, Dim, isize>
pub fn diagonal(self) -> DiagRef<'a, T, Dim, isize>
see MatRef::diagonal
Trait Implementations§
Source§impl<T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> AsMatMut for MatMut<'_, T, Rows, Cols, RStride, CStride>
impl<T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> AsMatMut for MatMut<'_, T, Rows, Cols, RStride, CStride>
Source§fn as_mat_mut(&mut self) -> MatMut<'_, T, Rows, Cols>
fn as_mat_mut(&mut self) -> MatMut<'_, T, Rows, Cols>
selfSource§impl<T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> AsMatRef for MatMut<'_, T, Rows, Cols, RStride, CStride>
impl<T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> AsMatRef for MatMut<'_, T, Rows, Cols, RStride, CStride>
Source§impl<T: ComplexField, ViewT: Conjugate<Canonical = T>> BiLinOp<T> for MatMut<'_, ViewT>
impl<T: ComplexField, ViewT: Conjugate<Canonical = T>> BiLinOp<T> for MatMut<'_, ViewT>
Source§fn transpose_apply_scratch(&self, rhs_ncols: usize, par: Par) -> StackReq
fn transpose_apply_scratch(&self, rhs_ncols: usize, par: Par) -> StackReq
self to a matrix with rhs_ncols columnsSource§impl<T: ComplexField, ViewT: Conjugate<Canonical = T>> BiPrecond<T> for MatMut<'_, ViewT>
impl<T: ComplexField, ViewT: Conjugate<Canonical = T>> BiPrecond<T> for MatMut<'_, ViewT>
Source§fn transpose_apply_in_place_scratch(
&self,
rhs_ncols: usize,
par: Par,
) -> StackReq
fn transpose_apply_in_place_scratch( &self, rhs_ncols: usize, par: Par, ) -> StackReq
self to a matrix with rhs_ncols columns in placeSource§impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> IntoView for &'a MatMut<'_, T, Rows, Cols, RStride, CStride>
impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> IntoView for &'a MatMut<'_, T, Rows, Cols, RStride, CStride>
Source§impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> IntoView for &'a mut MatMut<'_, T, Rows, Cols, RStride, CStride>
impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> IntoView for &'a mut MatMut<'_, T, Rows, Cols, RStride, CStride>
Source§impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> IntoView for MatMut<'a, T, Rows, Cols, RStride, CStride>
impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> IntoView for MatMut<'a, T, Rows, Cols, RStride, CStride>
Source§impl<T: ComplexField, ViewT: Conjugate<Canonical = T>> LinOp<T> for MatMut<'_, ViewT>
impl<T: ComplexField, ViewT: Conjugate<Canonical = T>> LinOp<T> for MatMut<'_, ViewT>
Source§fn apply_scratch(&self, rhs_ncols: usize, par: Par) -> StackReq
fn apply_scratch(&self, rhs_ncols: usize, par: Par) -> StackReq
self or the conjugate o
self to a matrix with rhs_ncols columnsSource§impl<'a, 'M, 'N, T, Rs: Stride, Cs: Stride> MatIndex<<Dim<'M> as ShapeIdx>::Idx<usize>, <Dim<'N> as ShapeIdx>::Idx<usize>> for MatMut<'a, T, Dim<'M>, Dim<'N>, Rs, Cs>
impl<'a, 'M, 'N, T, Rs: Stride, Cs: Stride> MatIndex<<Dim<'M> as ShapeIdx>::Idx<usize>, <Dim<'N> as ShapeIdx>::Idx<usize>> for MatMut<'a, T, Dim<'M>, Dim<'N>, Rs, Cs>
Source§impl<'a, 'M, T, Rs: Stride, Cs: Stride> MatIndex<<Dim<'M> as ShapeIdx>::Idx<usize>, <usize as ShapeIdx>::Idx<usize>> for MatMut<'a, T, Dim<'M>, usize, Rs, Cs>
impl<'a, 'M, T, Rs: Stride, Cs: Stride> MatIndex<<Dim<'M> as ShapeIdx>::Idx<usize>, <usize as ShapeIdx>::Idx<usize>> for MatMut<'a, T, Dim<'M>, usize, Rs, Cs>
Source§impl<'a, 'N, C: Shape, T, Rs: Stride, Cs: Stride, ColRange: IntoRange<IdxInc<C>, Len<C>: 'a>> MatIndex<<Dim<'N> as ShapeIdx>::Idx<usize>, ColRange> for MatMut<'a, T, Dim<'N>, C, Rs, Cs>
impl<'a, 'N, C: Shape, T, Rs: Stride, Cs: Stride, ColRange: IntoRange<IdxInc<C>, Len<C>: 'a>> MatIndex<<Dim<'N> as ShapeIdx>::Idx<usize>, ColRange> for MatMut<'a, T, Dim<'N>, C, Rs, Cs>
Source§impl<'a, 'N, T, Rs: Stride, Cs: Stride> MatIndex<<usize as ShapeIdx>::Idx<usize>, <Dim<'N> as ShapeIdx>::Idx<usize>> for MatMut<'a, T, usize, Dim<'N>, Rs, Cs>
impl<'a, 'N, T, Rs: Stride, Cs: Stride> MatIndex<<usize as ShapeIdx>::Idx<usize>, <Dim<'N> as ShapeIdx>::Idx<usize>> for MatMut<'a, T, usize, Dim<'N>, Rs, Cs>
Source§impl<'a, T, Rs: Stride, Cs: Stride> MatIndex<<usize as ShapeIdx>::Idx<usize>, <usize as ShapeIdx>::Idx<usize>> for MatMut<'a, T, usize, usize, Rs, Cs>
impl<'a, T, Rs: Stride, Cs: Stride> MatIndex<<usize as ShapeIdx>::Idx<usize>, <usize as ShapeIdx>::Idx<usize>> for MatMut<'a, T, usize, usize, Rs, Cs>
Source§impl<'a, C: Shape, T, Rs: Stride, Cs: Stride, ColRange: IntoRange<IdxInc<C>, Len<C>: 'a>> MatIndex<<usize as ShapeIdx>::Idx<usize>, ColRange> for MatMut<'a, T, usize, C, Rs, Cs>
impl<'a, C: Shape, T, Rs: Stride, Cs: Stride, ColRange: IntoRange<IdxInc<C>, Len<C>: 'a>> MatIndex<<usize as ShapeIdx>::Idx<usize>, ColRange> for MatMut<'a, T, usize, C, Rs, Cs>
Source§impl<'a, 'N, R: Shape, T, Rs: Stride, Cs: Stride, RowRange: IntoRange<IdxInc<R>, Len<R>: 'a>> MatIndex<RowRange, <Dim<'N> as ShapeIdx>::Idx<usize>> for MatMut<'a, T, R, Dim<'N>, Rs, Cs>
impl<'a, 'N, R: Shape, T, Rs: Stride, Cs: Stride, RowRange: IntoRange<IdxInc<R>, Len<R>: 'a>> MatIndex<RowRange, <Dim<'N> as ShapeIdx>::Idx<usize>> for MatMut<'a, T, R, Dim<'N>, Rs, Cs>
Source§impl<'a, R: Shape, T, Rs: Stride, Cs: Stride, RowRange: IntoRange<IdxInc<R>, Len<R>: 'a>> MatIndex<RowRange, <usize as ShapeIdx>::Idx<usize>> for MatMut<'a, T, R, usize, Rs, Cs>
impl<'a, R: Shape, T, Rs: Stride, Cs: Stride, RowRange: IntoRange<IdxInc<R>, Len<R>: 'a>> MatIndex<RowRange, <usize as ShapeIdx>::Idx<usize>> for MatMut<'a, T, R, usize, Rs, Cs>
Source§impl<'a, R: Shape, C: Shape, T, Rs: Stride, Cs: Stride, RowRange: IntoRange<IdxInc<R>, Len<R>: 'a>, ColRange: IntoRange<IdxInc<C>, Len<C>: 'a>> MatIndex<RowRange, ColRange> for MatMut<'a, T, R, C, Rs, Cs>
impl<'a, R: Shape, C: Shape, T, Rs: Stride, Cs: Stride, RowRange: IntoRange<IdxInc<R>, Len<R>: 'a>, ColRange: IntoRange<IdxInc<C>, Len<C>: 'a>> MatIndex<RowRange, ColRange> for MatMut<'a, T, R, C, Rs, Cs>
Source§type Target = Mat<Mut<'a, T, <RowRange as IntoRange<<R as ShapeIdx>::IdxInc<usize>>>::Len<R>, <ColRange as IntoRange<<C as ShapeIdx>::IdxInc<usize>>>::Len<C>, Rs, Cs>>
type Target = Mat<Mut<'a, T, <RowRange as IntoRange<<R as ShapeIdx>::IdxInc<usize>>>::Len<R>, <ColRange as IntoRange<<C as ShapeIdx>::IdxInc<usize>>>::Len<C>, Rs, Cs>>
Source§unsafe fn get_unchecked(
this: Self,
row: RowRange,
col: ColRange,
) -> Self::Target
unsafe fn get_unchecked( this: Self, row: RowRange, col: ColRange, ) -> Self::Target
this using row and col without bound checksSource§impl<'b, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> MatIndex for MatMut<'b, T, Rows, Cols, RStride, CStride>
impl<'b, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> MatIndex for MatMut<'b, T, Rows, Cols, RStride, CStride>
Source§type LayoutTransform = MatLayoutTransform
type LayoutTransform = MatLayoutTransform
type Slice = SliceMut<'b, T>
Source§unsafe fn get_slice_unchecked<'a>(
this: &'a mut Self,
idx: Self::Index,
n_elems: usize,
) -> <Self::Slice as SliceFamily<'a, Self::Item>>::Slice
unsafe fn get_slice_unchecked<'a>( this: &'a mut Self, idx: Self::Index, n_elems: usize, ) -> <Self::Slice as SliceFamily<'a, Self::Item>>::Slice
n_elemsSource§unsafe fn from_dyn_idx(idx: <Self::Dyn as MatIndex>::Index) -> Self::Index
unsafe fn from_dyn_idx(idx: <Self::Dyn as MatIndex>::Index) -> Self::Index
Source§unsafe fn get_unchecked(this: &mut Self, (i, j): Self::Index) -> Self::Item
unsafe fn get_unchecked(this: &mut Self, (i, j): Self::Index) -> Self::Item
Source§unsafe fn next_unchecked<'a>(
slice: &mut <Self::Slice as SliceFamily<'a, Self::Item>>::Slice,
) -> Self::Item
unsafe fn next_unchecked<'a>( slice: &mut <Self::Slice as SliceFamily<'a, Self::Item>>::Slice, ) -> Self::Item
Source§fn is_contiguous(this: &Self) -> bool
fn is_contiguous(this: &Self) -> bool
Source§fn preferred_layout(this: &Self) -> Self::LayoutTransform
fn preferred_layout(this: &Self) -> Self::LayoutTransform
Source§fn with_layout(this: Self, layout: Self::LayoutTransform) -> Self::Dyn
fn with_layout(this: Self, layout: Self::LayoutTransform) -> Self::Dyn
Source§impl<T: ComplexField, ViewT: Conjugate<Canonical = T>> Precond<T> for MatMut<'_, ViewT>
impl<T: ComplexField, ViewT: Conjugate<Canonical = T>> Precond<T> for MatMut<'_, ViewT>
Source§fn apply_in_place_scratch(&self, rhs_ncols: usize, par: Par) -> StackReq
fn apply_in_place_scratch(&self, rhs_ncols: usize, par: Par) -> StackReq
self or the conjugate of
self to a matrix with rhs_ncols columns in place