#[repr(transparent)]pub struct Mat<Inner>(pub Inner);Expand description
generic Mat wrapper
Tuple Fields§
§0: InnerImplementations§
Source§impl<'a, T> Mat<Mut<'a, T>>
impl<'a, T> Mat<Mut<'a, T>>
Source§impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> Mat<Mut<'a, T, Rows, Cols, RStride, CStride>>
impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> Mat<Mut<'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<T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride, Inner: for<'short> ReborrowMut<'short, Target = Mut<'short, T, Rows, Cols, RStride, CStride>>> Mat<Inner>
impl<T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride, Inner: for<'short> ReborrowMut<'short, Target = Mut<'short, T, Rows, Cols, RStride, CStride>>> Mat<Inner>
Sourcepub fn as_mut(&mut self) -> MatMut<'_, T, Rows, Cols, RStride, CStride>
pub fn as_mut(&mut self) -> MatMut<'_, T, Rows, Cols, RStride, CStride>
returns a view over self
Sourcepub fn copy_from_triangular_lower<RhsT: Conjugate<Canonical = T>>(
&mut self,
other: impl AsMatRef<T = RhsT, Rows = Rows, Cols = Cols>,
)where
T: ComplexField,
pub fn copy_from_triangular_lower<RhsT: Conjugate<Canonical = T>>(
&mut self,
other: impl AsMatRef<T = RhsT, Rows = Rows, Cols = Cols>,
)where
T: ComplexField,
copies the lower triangular half of other, including the diagonal, into self
Sourcepub fn copy_from_triangular_upper<RhsT: Conjugate<Canonical = T>>(
&mut self,
other: impl AsMatRef<T = RhsT, Rows = Rows, Cols = Cols>,
)where
T: ComplexField,
pub fn copy_from_triangular_upper<RhsT: Conjugate<Canonical = T>>(
&mut self,
other: impl AsMatRef<T = RhsT, Rows = Rows, Cols = Cols>,
)where
T: ComplexField,
copies the upper triangular half of other, including the diagonal, into self
Sourcepub fn copy_from<RhsT: Conjugate<Canonical = T>>(
&mut self,
other: impl AsMatRef<T = RhsT, Rows = Rows, Cols = Cols>,
)where
T: ComplexField,
pub fn copy_from<RhsT: Conjugate<Canonical = T>>(
&mut self,
other: impl AsMatRef<T = RhsT, Rows = Rows, Cols = Cols>,
)where
T: ComplexField,
copies other into self
Sourcepub fn copy_from_strict_triangular_lower<RhsT: Conjugate<Canonical = T>>(
&mut self,
other: impl AsMatRef<T = RhsT, Rows = Rows, Cols = Cols>,
)where
T: ComplexField,
pub fn copy_from_strict_triangular_lower<RhsT: Conjugate<Canonical = T>>(
&mut self,
other: impl AsMatRef<T = RhsT, Rows = Rows, Cols = Cols>,
)where
T: ComplexField,
copies the lower triangular half of other, excluding the diagonal, into self
Sourcepub fn copy_from_strict_triangular_upper<RhsT: Conjugate<Canonical = T>>(
&mut self,
other: impl AsMatRef<T = RhsT, Rows = Rows, Cols = Cols>,
)where
T: ComplexField,
pub fn copy_from_strict_triangular_upper<RhsT: Conjugate<Canonical = T>>(
&mut self,
other: impl AsMatRef<T = RhsT, Rows = Rows, Cols = Cols>,
)where
T: ComplexField,
copies the upper triangular half of other, excluding the diagonal, into self
Source§impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> Mat<Mut<'a, T, Rows, Cols, RStride, CStride>>
impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> Mat<Mut<'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> Mat<Mut<'a, T, Rows, Cols>>
impl<'a, T, Rows: Shape, Cols: Shape> Mat<Mut<'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> Mat<Mut<'a, T, Dim, Dim, RStride, CStride>>
impl<'a, T, Dim: Shape, RStride: Stride, CStride: Stride> Mat<Mut<'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
Source§impl<'a, T, Dim: Shape, RStride: Stride, CStride: Stride> Mat<Mut<'a, T, Dim, Dim, RStride, CStride>>
impl<'a, T, Dim: Shape, RStride: Stride, CStride: Stride> Mat<Mut<'a, T, Dim, Dim, RStride, CStride>>
Sourcepub fn diagonal_mut(self) -> DiagMut<'a, T, Dim, isize>
pub fn diagonal_mut(self) -> DiagMut<'a, T, Dim, isize>
see MatRef::diagonal
Source§impl<'a, T, Rows: Shape, Cols: Shape> Mat<Mut<'a, T, Rows, Cols>>where
T: RealField,
impl<'a, T, Rows: Shape, Cols: Shape> Mat<Mut<'a, T, Rows, Cols>>where
T: RealField,
Sourcepub fn min(self) -> Option<T>
pub fn min(self) -> Option<T>
see MatRef::min
Sourcepub fn max(self) -> Option<T>
pub fn max(self) -> Option<T>
see MatRef::min
Source§impl<T, Rows: Shape, Cols: Shape> Mat<Own<T, Rows, Cols>>
impl<T, Rows: Shape, Cols: Shape> Mat<Own<T, Rows, Cols>>
Sourcepub fn from_fn(
nrows: Rows,
ncols: Cols,
f: impl FnMut(Idx<Rows>, Idx<Cols>) -> T,
) -> Self
pub fn from_fn( nrows: Rows, ncols: Cols, f: impl FnMut(Idx<Rows>, Idx<Cols>) -> T, ) -> Self
returns a new matrix with dimensions (nrows, ncols), filled with the provided function
Sourcepub fn zeros(nrows: Rows, ncols: Cols) -> Selfwhere
T: ComplexField,
pub fn zeros(nrows: Rows, ncols: Cols) -> Selfwhere
T: ComplexField,
returns a new matrix with dimensions (nrows, ncols), filled with zeros
Sourcepub fn ones(nrows: Rows, ncols: Cols) -> Selfwhere
T: ComplexField,
pub fn ones(nrows: Rows, ncols: Cols) -> Selfwhere
T: ComplexField,
returns a new matrix with dimensions (nrows, ncols), filled with ones
Sourcepub fn identity(nrows: Rows, ncols: Cols) -> Selfwhere
T: ComplexField,
pub fn identity(nrows: Rows, ncols: Cols) -> Selfwhere
T: ComplexField,
returns a new identity matrix, with ones on the diagonal and zeros everywhere else
Sourcepub fn full(nrows: Rows, ncols: Cols, value: T) -> Selfwhere
T: Clone,
pub fn full(nrows: Rows, ncols: Cols, value: T) -> Selfwhere
T: Clone,
returns a new matrix with dimensions (nrows, ncols), filled with value
Sourcepub fn try_reserve(
&mut self,
new_row_capacity: usize,
new_col_capacity: usize,
) -> Result<(), TryReserveError>
pub fn try_reserve( &mut self, new_row_capacity: usize, new_col_capacity: usize, ) -> Result<(), TryReserveError>
reserves the minimum capacity for new_row_capacity rows and new_col_capacity
columns without reallocating, or returns an error in case of failure. does nothing if the
capacity is already sufficient
Sourcepub fn reserve(&mut self, new_row_capacity: usize, new_col_capacity: usize)
pub fn reserve(&mut self, new_row_capacity: usize, new_col_capacity: usize)
reserves the minimum capacity for new_row_capacity rows and new_col_capacity
columns without reallocating. does nothing if the capacity is already sufficient
Sourcepub fn resize_with(
&mut self,
new_nrows: Rows,
new_ncols: Cols,
f: impl FnMut(Idx<Rows>, Idx<Cols>) -> T,
)
pub fn resize_with( &mut self, new_nrows: Rows, new_ncols: Cols, f: impl FnMut(Idx<Rows>, Idx<Cols>) -> T, )
resizes the matrix in-place so that the new dimensions are (new_nrows, new_ncols).
new elements are created with the given function f, so that elements at index (i, j)
are created by calling f(i, j).
Sourcepub fn truncate(&mut self, new_nrows: Rows, new_ncols: Cols)
pub fn truncate(&mut self, new_nrows: Rows, new_ncols: Cols)
truncates the matrix so that its new dimensions are new_nrows and new_ncols.
both of the new dimensions must be smaller than or equal to the current dimensions
§panics
the function panics if any of the following conditions are violated:
new_nrows > self.nrows()new_ncols > self.ncols()
Sourcepub fn into_shape<V: Shape, H: Shape>(self, nrows: V, ncols: H) -> Mat<T, V, H>
pub fn into_shape<V: Shape, H: Shape>(self, nrows: V, ncols: H) -> Mat<T, V, H>
see MatRef::as_shape
Sourcepub unsafe fn set_dims(&mut self, nrows: Rows, ncols: Cols)
pub unsafe fn set_dims(&mut self, nrows: Rows, ncols: Cols)
set the dimensions of the matrix.
§safety
the behavior is undefined if any of the following conditions are violated:
nrows < self.row_capacity()ncols < self.col_capacity()- the elements that were previously out of bounds but are now in bounds must be initialized
Sourcepub fn col_as_slice(&self, j: Idx<Cols>) -> &[T]
pub fn col_as_slice(&self, j: Idx<Cols>) -> &[T]
returns a reference to a slice over the column at the given index
Sourcepub fn col_as_slice_mut(&mut self, j: Idx<Cols>) -> &mut [T]
pub fn col_as_slice_mut(&mut self, j: Idx<Cols>) -> &mut [T]
returns a reference to a slice over the column at the given index
Source§impl<T, Rows: Shape, Cols: Shape> Mat<Own<T, Rows, Cols>>
impl<T, Rows: Shape, Cols: Shape> Mat<Own<T, Rows, Cols>>
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) -> isize
pub fn row_stride(&self) -> isize
returns the row stride of the matrix, specified in number of elements, not in bytes
Sourcepub fn col_stride(&self) -> isize
pub fn col_stride(&self) -> isize
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<'_, T, usize, usize>, MatRef<'_, T, usize, usize>, MatRef<'_, T, usize, usize>, MatRef<'_, T, usize, usize>)
pub fn split_at( &self, row: IdxInc<Rows>, col: IdxInc<Cols>, ) -> (MatRef<'_, T, usize, usize>, MatRef<'_, T, usize, usize>, MatRef<'_, T, usize, usize>, MatRef<'_, T, usize, usize>)
see MatRef::split_at
Sourcepub fn split_at_row(
&self,
row: IdxInc<Rows>,
) -> (MatRef<'_, T, usize, Cols>, MatRef<'_, T, usize, Cols>)
pub fn split_at_row( &self, row: IdxInc<Rows>, ) -> (MatRef<'_, T, usize, Cols>, MatRef<'_, T, usize, Cols>)
Sourcepub fn split_at_col(
&self,
col: IdxInc<Cols>,
) -> (MatRef<'_, T, Rows, usize>, MatRef<'_, T, Rows, usize>)
pub fn split_at_col( &self, col: IdxInc<Cols>, ) -> (MatRef<'_, T, Rows, usize>, MatRef<'_, T, Rows, usize>)
Sourcepub fn adjoint(&self) -> MatRef<'_, T::Conj, Cols, Rows>where
T: Conjugate,
pub fn adjoint(&self) -> MatRef<'_, T::Conj, Cols, Rows>where
T: Conjugate,
see MatRef::adjoint
Sourcepub fn reverse_rows(&self) -> MatRef<'_, T, Rows, Cols>
pub fn reverse_rows(&self) -> MatRef<'_, T, Rows, Cols>
Sourcepub fn reverse_cols(&self) -> MatRef<'_, T, Rows, Cols>
pub fn reverse_cols(&self) -> MatRef<'_, T, Rows, Cols>
Sourcepub fn reverse_rows_and_cols(&self) -> MatRef<'_, T, Rows, Cols>
pub fn reverse_rows_and_cols(&self) -> MatRef<'_, T, Rows, Cols>
Sourcepub fn submatrix<V: Shape, H: Shape>(
&self,
row_start: IdxInc<Rows>,
col_start: IdxInc<Cols>,
nrows: V,
ncols: H,
) -> MatRef<'_, T, V, H>
pub fn submatrix<V: Shape, H: Shape>( &self, row_start: IdxInc<Rows>, col_start: IdxInc<Cols>, nrows: V, ncols: H, ) -> MatRef<'_, T, V, H>
Sourcepub fn subrows<V: Shape>(
&self,
row_start: IdxInc<Rows>,
nrows: V,
) -> MatRef<'_, T, V, Cols>
pub fn subrows<V: Shape>( &self, row_start: IdxInc<Rows>, nrows: V, ) -> MatRef<'_, T, V, Cols>
see MatRef::subrows
Sourcepub fn subcols<H: Shape>(
&self,
col_start: IdxInc<Cols>,
ncols: H,
) -> MatRef<'_, T, Rows, H>
pub fn subcols<H: Shape>( &self, col_start: IdxInc<Cols>, ncols: H, ) -> MatRef<'_, T, Rows, H>
see MatRef::subcols
Sourcepub fn as_shape<V: Shape, H: Shape>(
&self,
nrows: V,
ncols: H,
) -> MatRef<'_, T, V, H>
pub fn as_shape<V: Shape, H: Shape>( &self, nrows: V, ncols: H, ) -> MatRef<'_, T, V, H>
see MatRef::as_shape
Sourcepub fn as_row_shape<V: Shape>(&self, nrows: V) -> MatRef<'_, T, V, Cols>
pub fn as_row_shape<V: Shape>(&self, nrows: V) -> MatRef<'_, T, V, Cols>
Sourcepub fn as_col_shape<H: Shape>(&self, ncols: H) -> MatRef<'_, T, Rows, H>
pub fn as_col_shape<H: Shape>(&self, ncols: H) -> MatRef<'_, T, Rows, H>
Sourcepub fn as_dyn_stride(&self) -> MatRef<'_, T, Rows, Cols, isize, isize>
pub fn as_dyn_stride(&self) -> MatRef<'_, T, Rows, Cols, isize, isize>
Sourcepub fn as_dyn_rows(&self) -> MatRef<'_, T, usize, Cols>
pub fn as_dyn_rows(&self) -> MatRef<'_, T, usize, Cols>
Sourcepub fn as_dyn_cols(&self) -> MatRef<'_, T, Rows, usize>
pub fn as_dyn_cols(&self) -> MatRef<'_, T, Rows, usize>
Sourcepub fn row(&self, i: Idx<Rows>) -> RowRef<'_, T, Cols>
pub fn row(&self, i: Idx<Rows>) -> RowRef<'_, T, Cols>
see MatRef::row
Sourcepub fn col(&self, j: Idx<Cols>) -> ColRef<'_, T, Rows>
pub fn col(&self, j: Idx<Cols>) -> ColRef<'_, T, Rows>
see MatRef::col
Sourcepub fn col_iter(
&self,
) -> impl '_ + ExactSizeIterator + DoubleEndedIterator<Item = ColRef<'_, T, Rows>>
pub fn col_iter( &self, ) -> impl '_ + ExactSizeIterator + DoubleEndedIterator<Item = ColRef<'_, T, Rows>>
see MatRef::col_iter
Sourcepub fn row_iter(
&self,
) -> impl '_ + ExactSizeIterator + DoubleEndedIterator<Item = RowRef<'_, T, Cols>>
pub fn row_iter( &self, ) -> impl '_ + ExactSizeIterator + DoubleEndedIterator<Item = RowRef<'_, T, Cols>>
see MatRef::row_iter
Sourcepub fn par_col_iter(
&self,
) -> impl '_ + IndexedParallelIterator<Item = ColRef<'_, T, Rows>>where
T: Sync,
pub fn par_col_iter(
&self,
) -> impl '_ + IndexedParallelIterator<Item = ColRef<'_, T, Rows>>where
T: Sync,
Sourcepub fn par_row_iter(
&self,
) -> impl '_ + IndexedParallelIterator<Item = RowRef<'_, T, Cols>>where
T: Sync,
pub fn par_row_iter(
&self,
) -> impl '_ + IndexedParallelIterator<Item = RowRef<'_, T, Cols>>where
T: Sync,
Sourcepub fn par_col_chunks(
&self,
chunk_size: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatRef<'_, T, Rows, usize>>where
T: Sync,
pub fn par_col_chunks(
&self,
chunk_size: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatRef<'_, T, Rows, usize>>where
T: Sync,
Sourcepub fn par_col_partition(
&self,
count: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatRef<'_, T, Rows, usize>>where
T: Sync,
pub fn par_col_partition(
&self,
count: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatRef<'_, T, Rows, usize>>where
T: Sync,
Sourcepub fn par_row_chunks(
&self,
chunk_size: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatRef<'_, T, usize, Cols>>where
T: Sync,
pub fn par_row_chunks(
&self,
chunk_size: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatRef<'_, T, usize, Cols>>where
T: Sync,
Sourcepub fn par_row_partition(
&self,
count: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatRef<'_, T, usize, Cols>>where
T: Sync,
pub fn par_row_partition(
&self,
count: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatRef<'_, T, usize, Cols>>where
T: Sync,
Sourcepub fn try_as_col_major(
&self,
) -> Option<MatRef<'_, T, Rows, Cols, ContiguousFwd>>
pub fn try_as_col_major( &self, ) -> Option<MatRef<'_, T, Rows, Cols, ContiguousFwd>>
Sourcepub fn try_as_row_major(
&self,
) -> Option<MatRef<'_, T, Rows, Cols, isize, ContiguousFwd>>
pub fn try_as_row_major( &self, ) -> Option<MatRef<'_, T, Rows, Cols, isize, ContiguousFwd>>
Sourcepub fn get<RowRange, ColRange>(
&self,
row: RowRange,
col: ColRange,
) -> <MatRef<'_, T, Rows, Cols> as MatIndex<RowRange, ColRange>>::Target
pub fn get<RowRange, ColRange>( &self, row: RowRange, col: ColRange, ) -> <MatRef<'_, T, Rows, Cols> as MatIndex<RowRange, ColRange>>::Target
see MatRef::get
Sourcepub unsafe fn get_unchecked<RowRange, ColRange>(
&self,
row: RowRange,
col: ColRange,
) -> <MatRef<'_, T, Rows, Cols> as MatIndex<RowRange, ColRange>>::Target
pub unsafe fn get_unchecked<RowRange, ColRange>( &self, row: RowRange, col: ColRange, ) -> <MatRef<'_, T, Rows, Cols> as MatIndex<RowRange, ColRange>>::Target
Sourcepub fn get_mut<RowRange, ColRange>(
&mut self,
row: RowRange,
col: ColRange,
) -> <MatMut<'_, T, Rows, Cols> as MatIndex<RowRange, ColRange>>::Target
pub fn get_mut<RowRange, ColRange>( &mut self, row: RowRange, col: ColRange, ) -> <MatMut<'_, T, Rows, Cols> as MatIndex<RowRange, ColRange>>::Target
see MatMut::get_mut
Sourcepub unsafe fn get_mut_unchecked<RowRange, ColRange>(
&mut self,
row: RowRange,
col: ColRange,
) -> <MatMut<'_, T, Rows, Cols> as MatIndex<RowRange, ColRange>>::Target
pub unsafe fn get_mut_unchecked<RowRange, ColRange>( &mut self, row: RowRange, col: ColRange, ) -> <MatMut<'_, T, Rows, Cols> as MatIndex<RowRange, ColRange>>::Target
Source§impl<T, Rows: Shape, Cols: Shape> Mat<Own<T, Rows, Cols>>
impl<T, Rows: Shape, Cols: Shape> Mat<Own<T, Rows, Cols>>
Sourcepub fn as_ptr_mut(&mut self) -> *mut T
pub fn as_ptr_mut(&mut self) -> *mut T
returns a pointer to the matrix data
Sourcepub fn ptr_at_mut(&mut self, row: IdxInc<Rows>, col: IdxInc<Cols>) -> *mut T
pub fn ptr_at_mut(&mut self, row: IdxInc<Rows>, col: IdxInc<Cols>) -> *mut T
returns a raw pointer to the element at the given index
Sourcepub unsafe fn ptr_inbounds_at_mut(
&mut self,
row: Idx<Rows>,
col: Idx<Cols>,
) -> *mut T
pub unsafe fn ptr_inbounds_at_mut( &mut self, row: Idx<Rows>, col: Idx<Cols>, ) -> *mut 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_mut(
&mut self,
row: IdxInc<Rows>,
col: IdxInc<Cols>,
) -> (MatMut<'_, T, usize, usize>, MatMut<'_, T, usize, usize>, MatMut<'_, T, usize, usize>, MatMut<'_, T, usize, usize>)
pub fn split_at_mut( &mut self, row: IdxInc<Rows>, col: IdxInc<Cols>, ) -> (MatMut<'_, T, usize, usize>, MatMut<'_, T, usize, usize>, MatMut<'_, T, usize, usize>, MatMut<'_, T, usize, usize>)
Sourcepub fn split_at_row_mut(
&mut self,
row: IdxInc<Rows>,
) -> (MatMut<'_, T, usize, Cols>, MatMut<'_, T, usize, Cols>)
pub fn split_at_row_mut( &mut self, row: IdxInc<Rows>, ) -> (MatMut<'_, T, usize, Cols>, MatMut<'_, T, usize, Cols>)
Sourcepub fn split_at_col_mut(
&mut self,
col: IdxInc<Cols>,
) -> (MatMut<'_, T, Rows, usize>, MatMut<'_, T, Rows, usize>)
pub fn split_at_col_mut( &mut self, col: IdxInc<Cols>, ) -> (MatMut<'_, T, Rows, usize>, MatMut<'_, T, Rows, usize>)
Sourcepub fn transpose_mut(&mut self) -> MatMut<'_, T, Cols, Rows>
pub fn transpose_mut(&mut self) -> MatMut<'_, T, Cols, Rows>
Sourcepub fn conjugate_mut(&mut self) -> MatMut<'_, T::Conj, Rows, Cols>where
T: Conjugate,
pub fn conjugate_mut(&mut self) -> MatMut<'_, T::Conj, Rows, Cols>where
T: Conjugate,
Sourcepub fn canonical_mut(&mut self) -> MatMut<'_, T::Canonical, Rows, Cols>where
T: Conjugate,
pub fn canonical_mut(&mut self) -> MatMut<'_, T::Canonical, Rows, Cols>where
T: Conjugate,
Sourcepub fn adjoint_mut(&mut self) -> MatMut<'_, T::Conj, Cols, Rows>where
T: Conjugate,
pub fn adjoint_mut(&mut self) -> MatMut<'_, T::Conj, Cols, Rows>where
T: Conjugate,
Sourcepub fn reverse_rows_mut(&mut self) -> MatMut<'_, T, Rows, Cols>
pub fn reverse_rows_mut(&mut self) -> MatMut<'_, T, Rows, Cols>
Sourcepub fn reverse_cols_mut(&mut self) -> MatMut<'_, T, Rows, Cols>
pub fn reverse_cols_mut(&mut self) -> MatMut<'_, T, Rows, Cols>
Sourcepub fn reverse_rows_and_cols_mut(&mut self) -> MatMut<'_, T, Rows, Cols>
pub fn reverse_rows_and_cols_mut(&mut self) -> MatMut<'_, T, Rows, Cols>
Sourcepub fn submatrix_mut<V: Shape, H: Shape>(
&mut self,
row_start: IdxInc<Rows>,
col_start: IdxInc<Cols>,
nrows: V,
ncols: H,
) -> MatMut<'_, T, V, H>
pub fn submatrix_mut<V: Shape, H: Shape>( &mut self, row_start: IdxInc<Rows>, col_start: IdxInc<Cols>, nrows: V, ncols: H, ) -> MatMut<'_, T, V, H>
Sourcepub fn subrows_mut<V: Shape>(
&mut self,
row_start: IdxInc<Rows>,
nrows: V,
) -> MatMut<'_, T, V, Cols>
pub fn subrows_mut<V: Shape>( &mut self, row_start: IdxInc<Rows>, nrows: V, ) -> MatMut<'_, T, V, Cols>
Sourcepub fn subcols_mut<H: Shape>(
&mut self,
col_start: IdxInc<Cols>,
ncols: H,
) -> MatMut<'_, T, Rows, H>
pub fn subcols_mut<H: Shape>( &mut self, col_start: IdxInc<Cols>, ncols: H, ) -> MatMut<'_, T, Rows, H>
Sourcepub fn as_shape_mut<V: Shape, H: Shape>(
&mut self,
nrows: V,
ncols: H,
) -> MatMut<'_, T, V, H>
pub fn as_shape_mut<V: Shape, H: Shape>( &mut self, nrows: V, ncols: H, ) -> MatMut<'_, T, V, H>
Sourcepub fn as_row_shape_mut<V: Shape>(&mut self, nrows: V) -> MatMut<'_, T, V, Cols>
pub fn as_row_shape_mut<V: Shape>(&mut self, nrows: V) -> MatMut<'_, T, V, Cols>
Sourcepub fn as_col_shape_mut<H: Shape>(&mut self, ncols: H) -> MatMut<'_, T, Rows, H>
pub fn as_col_shape_mut<H: Shape>(&mut self, ncols: H) -> MatMut<'_, T, Rows, H>
Sourcepub fn as_dyn_stride_mut(&mut self) -> MatMut<'_, T, Rows, Cols, isize, isize>
pub fn as_dyn_stride_mut(&mut self) -> MatMut<'_, T, Rows, Cols, isize, isize>
Sourcepub fn as_dyn_mut(&mut self) -> MatMut<'_, T, usize, usize>
pub fn as_dyn_mut(&mut self) -> MatMut<'_, T, usize, usize>
Sourcepub fn as_dyn_rows_mut(&mut self) -> MatMut<'_, T, usize, Cols>
pub fn as_dyn_rows_mut(&mut self) -> MatMut<'_, T, usize, Cols>
Sourcepub fn as_dyn_cols_mut(&mut self) -> MatMut<'_, T, Rows, usize>
pub fn as_dyn_cols_mut(&mut self) -> MatMut<'_, T, Rows, usize>
Sourcepub fn row_mut(&mut self, i: Idx<Rows>) -> RowMut<'_, T, Cols>
pub fn row_mut(&mut self, i: Idx<Rows>) -> RowMut<'_, T, Cols>
see MatMut::row_mut
Sourcepub fn col_mut(&mut self, j: Idx<Cols>) -> ColMut<'_, T, Rows>
pub fn col_mut(&mut self, j: Idx<Cols>) -> ColMut<'_, T, Rows>
see MatMut::col_mut
Sourcepub fn col_iter_mut(
&mut self,
) -> impl '_ + ExactSizeIterator + DoubleEndedIterator<Item = ColMut<'_, T, Rows>>
pub fn col_iter_mut( &mut self, ) -> impl '_ + ExactSizeIterator + DoubleEndedIterator<Item = ColMut<'_, T, Rows>>
Sourcepub fn row_iter_mut(
&mut self,
) -> impl '_ + ExactSizeIterator + DoubleEndedIterator<Item = RowMut<'_, T, Cols>>
pub fn row_iter_mut( &mut self, ) -> impl '_ + ExactSizeIterator + DoubleEndedIterator<Item = RowMut<'_, T, Cols>>
Sourcepub fn par_col_iter_mut(
&mut self,
) -> impl '_ + IndexedParallelIterator<Item = ColMut<'_, T, Rows>>where
T: Send,
pub fn par_col_iter_mut(
&mut self,
) -> impl '_ + IndexedParallelIterator<Item = ColMut<'_, T, Rows>>where
T: Send,
Sourcepub fn par_row_iter_mut(
&mut self,
) -> impl '_ + IndexedParallelIterator<Item = RowMut<'_, T, Cols>>where
T: Send,
pub fn par_row_iter_mut(
&mut self,
) -> impl '_ + IndexedParallelIterator<Item = RowMut<'_, T, Cols>>where
T: Send,
Sourcepub fn par_col_chunks_mut(
&mut self,
chunk_size: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatMut<'_, T, Rows, usize>>where
T: Send,
pub fn par_col_chunks_mut(
&mut self,
chunk_size: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatMut<'_, T, Rows, usize>>where
T: Send,
Sourcepub fn par_col_partition_mut(
&mut self,
count: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatMut<'_, T, Rows, usize>>where
T: Send,
pub fn par_col_partition_mut(
&mut self,
count: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatMut<'_, T, Rows, usize>>where
T: Send,
Sourcepub fn par_row_chunks_mut(
&mut self,
chunk_size: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatMut<'_, T, usize, Cols>>where
T: Send,
pub fn par_row_chunks_mut(
&mut self,
chunk_size: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatMut<'_, T, usize, Cols>>where
T: Send,
Sourcepub fn par_row_partition_mut(
&mut self,
count: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatMut<'_, T, usize, Cols>>where
T: Send,
pub fn par_row_partition_mut(
&mut self,
count: usize,
) -> impl '_ + IndexedParallelIterator<Item = MatMut<'_, T, usize, Cols>>where
T: Send,
Sourcepub fn split_first_row_mut(
&mut self,
) -> Option<(RowMut<'_, T, Cols>, MatMut<'_, T, usize, Cols>)>
pub fn split_first_row_mut( &mut self, ) -> Option<(RowMut<'_, T, Cols>, MatMut<'_, T, usize, Cols>)>
Sourcepub fn try_as_col_major_mut(
&mut self,
) -> Option<MatMut<'_, T, Rows, Cols, ContiguousFwd>>
pub fn try_as_col_major_mut( &mut self, ) -> Option<MatMut<'_, T, Rows, Cols, ContiguousFwd>>
Sourcepub fn try_as_row_major_mut(
&mut self,
) -> Option<MatMut<'_, T, Rows, Cols, isize, ContiguousFwd>>
pub fn try_as_row_major_mut( &mut self, ) -> Option<MatMut<'_, T, Rows, Cols, isize, ContiguousFwd>>
Sourcepub fn two_cols_mut(
&mut self,
i0: Idx<Cols>,
i1: Idx<Cols>,
) -> (ColMut<'_, T, Rows>, ColMut<'_, T, Rows>)
pub fn two_cols_mut( &mut self, i0: Idx<Cols>, i1: Idx<Cols>, ) -> (ColMut<'_, T, Rows>, ColMut<'_, T, Rows>)
Source§impl<T, Dim: Shape> Mat<Own<T, Dim, Dim>>
impl<T, Dim: Shape> Mat<Own<T, Dim, Dim>>
Sourcepub fn diagonal(&self) -> DiagRef<'_, T, Dim, isize>
pub fn diagonal(&self) -> DiagRef<'_, T, Dim, isize>
see MatRef::diagonal
Sourcepub fn diagonal_mut(&mut self) -> DiagMut<'_, T, Dim, isize>
pub fn diagonal_mut(&mut self) -> DiagMut<'_, T, Dim, isize>
Source§impl<T, Rows: Shape, Cols: Shape> Mat<Own<T, Rows, Cols>>where
T: RealField,
impl<T, Rows: Shape, Cols: Shape> Mat<Own<T, Rows, Cols>>where
T: RealField,
Sourcepub fn min(self) -> Option<T>
pub fn min(self) -> Option<T>
see MatRef::min
Sourcepub fn max(self) -> Option<T>
pub fn max(self) -> Option<T>
see MatRef::min
Source§impl<'a, T> Mat<Ref<'a, T>>
impl<'a, T> Mat<Ref<'a, T>>
Sourcepub fn from_row_major_array<const ROWS: usize, const COLS: usize>(
array: &'a [[T; COLS]; ROWS],
) -> Self
pub fn from_row_major_array<const ROWS: usize, const COLS: usize>( array: &'a [[T; COLS]; ROWS], ) -> Self
equivalent to MatRef::from_row_major_slice(array.as_flattened(), ROWS, COLS)
Source§impl<'a, T, Rows: Shape, Cols: Shape> Mat<Ref<'a, T, Rows, Cols>>
impl<'a, T, Rows: Shape, Cols: Shape> Mat<Ref<'a, T, Rows, Cols>>
Sourcepub fn from_repeated_ref(value: &'a T, nrows: Rows, ncols: Cols) -> Self
pub fn from_repeated_ref(value: &'a T, nrows: Rows, ncols: Cols) -> Self
creates a MatRef from a view over a single element, repeated nrows×ncols times
Sourcepub fn from_column_major_slice(slice: &'a [T], nrows: Rows, ncols: Cols) -> Self
pub fn from_column_major_slice(slice: &'a [T], nrows: Rows, ncols: Cols) -> Self
creates a MatRef 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::{MatRef, mat};
let slice = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0_f64];
let view = MatRef::from_column_major_slice(&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(
slice: &'a [T],
nrows: Rows,
ncols: Cols,
col_stride: usize,
) -> Self
pub fn from_column_major_slice_with_stride( slice: &'a [T], nrows: Rows, ncols: Cols, col_stride: usize, ) -> Self
creates a MatRef 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(slice: &'a [T], nrows: Rows, ncols: Cols) -> Self
pub fn from_row_major_slice(slice: &'a [T], nrows: Rows, ncols: Cols) -> Self
creates a MatRef 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::{MatRef, mat};
let slice = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0_f64];
let view = MatRef::from_row_major_slice(&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(
slice: &'a [T],
nrows: Rows,
ncols: Cols,
row_stride: usize,
) -> Self
pub fn from_row_major_slice_with_stride( slice: &'a [T], nrows: Rows, ncols: Cols, row_stride: usize, ) -> Self
creates a MatRef 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, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> Mat<Ref<'a, T, Rows, Cols, RStride, CStride>>
impl<'a, T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride> Mat<Ref<'a, T, Rows, Cols, RStride, CStride>>
Sourcepub const unsafe fn from_raw_parts(
ptr: *const T,
nrows: Rows,
ncols: Cols,
row_stride: RStride,
col_stride: CStride,
) -> Self
pub const unsafe fn from_raw_parts( ptr: *const T, nrows: Rows, ncols: Cols, row_stride: RStride, col_stride: CStride, ) -> Self
creates a MatRef 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 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 mutable aliasing is allowed. in other words, none of the elements accessible by any
matrix unit may be accessed for writes by any other means for the duration of the lifetime
'a
§example
use faer::{MatRef, 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 data = [[1.0, 2.0, 3.0, f64::NAN], [4.0, 5.0, 6.0, f64::NAN]];
let matrix = unsafe { MatRef::from_raw_parts(data.as_ptr() as *const 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>)
splits the matrix horizontally and vertically at the given index into four corners and returns an array of each submatrix, in the following order:
- top left
- top right
- bottom left
- bottom right
§safety
the function panics if any of the following conditions are violated:
row <= self.nrows()col <= self.ncols()
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>)
splits the matrix horizontally at the given row into two parts and returns an array of each submatrix, in the following order:
- top
- bottom
§panics
the function panics if the following condition is violated:
row <= self.nrows()
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>)
splits the matrix vertically at the given column into two parts and returns an array of each submatrix, in the following order:
- left
- right
§panics
the function panics if the following condition is violated:
col <= self.ncols()
Sourcepub fn transpose(self) -> MatRef<'a, T, Cols, Rows, CStride, RStride>
pub fn transpose(self) -> MatRef<'a, T, Cols, Rows, CStride, RStride>
returns a view over the transpose of self
§example
use faer::mat;
let matrix = mat![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
let view = matrix.as_ref();
let transpose = view.transpose();
let expected = mat![[1.0, 4.0], [2.0, 5.0], [3.0, 6.0]];
assert_eq!(expected.as_ref(), transpose);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,
returns a view over the conjugate of self
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,
returns an unconjugated view over self
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,
returns a view over the conjugate transpose of self.
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>
returns a view over the self, with the rows in reversed order
§example
use faer::mat;
let matrix = mat![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
let view = matrix.as_ref();
let reversed_rows = view.reverse_rows();
let expected = mat![[4.0, 5.0, 6.0], [1.0, 2.0, 3.0]];
assert_eq!(expected.as_ref(), reversed_rows);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>
returns a view over the self, with the columns in reversed order
§example
use faer::mat;
let matrix = mat![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
let view = matrix.as_ref();
let reversed_cols = view.reverse_cols();
let expected = mat![[3.0, 2.0, 1.0], [6.0, 5.0, 4.0]];
assert_eq!(expected.as_ref(), reversed_cols);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>
returns a view over the self, with the rows and the columns in reversed order
§example
use faer::mat;
let matrix = mat![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
let view = matrix.as_ref();
let reversed = view.reverse_rows_and_cols();
let expected = mat![[6.0, 5.0, 4.0], [3.0, 2.0, 1.0]];
assert_eq!(expected.as_ref(), reversed);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>
returns a view over the submatrix starting at index (row_start, col_start), and with
dimensions (nrows, ncols)
§panics
the function panics if any of the following conditions are violated:
row_start <= self.nrows()col_start <= self.ncols()nrows <= self.nrows() - row_startncols <= self.ncols() - col_start
§example
use faer::mat;
let matrix = mat![
[1.0, 5.0, 9.0], //
[2.0, 6.0, 10.0],
[3.0, 7.0, 11.0],
[4.0, 8.0, 12.0f64],
];
let view = matrix.as_ref();
let submatrix = view.submatrix(
/* row_start: */ 2, /* col_start: */ 1, /* nrows: */ 2, /* ncols: */ 2,
);
let expected = mat![[7.0, 11.0], [8.0, 12.0f64]];
assert_eq!(expected.as_ref(), submatrix);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>
returns a view over the submatrix starting at row row_start, and with number of rows
nrows
§panics
the function panics if any of the following conditions are violated:
row_start <= self.nrows()nrows <= self.nrows() - row_start
§example
use faer::mat;
let matrix = mat![
[1.0, 5.0, 9.0], //
[2.0, 6.0, 10.0],
[3.0, 7.0, 11.0],
[4.0, 8.0, 12.0f64],
];
let view = matrix.as_ref();
let subrows = view.subrows(/* row_start: */ 1, /* nrows: */ 2);
let expected = mat![[2.0, 6.0, 10.0], [3.0, 7.0, 11.0],];
assert_eq!(expected.as_ref(), 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>
returns a view over the submatrix starting at column col_start, and with number of
columns ncols
§panics
the function panics if any of the following conditions are violated:
col_start <= self.ncols()ncols <= self.ncols() - col_start
§example
use faer::mat;
let matrix = mat![
[1.0, 5.0, 9.0], //
[2.0, 6.0, 10.0],
[3.0, 7.0, 11.0],
[4.0, 8.0, 12.0f64],
];
let view = matrix.as_ref();
let subcols = view.subcols(/* col_start: */ 2, /* ncols: */ 1);
let expected = mat![[9.0], [10.0], [11.0], [12.0f64]];
assert_eq!(expected.as_ref(), 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>
returns the input matrix with the given shape after checking that it matches the current 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>
returns the input matrix with the given row shape after checking that it matches the current row shape
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>
returns the input matrix with the given column shape after checking that it matches the current column shape
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>
returns the input matrix with dynamic stride
Sourcepub fn as_dyn(self) -> MatRef<'a, T, usize, usize, RStride, CStride>
pub fn as_dyn(self) -> MatRef<'a, T, usize, usize, RStride, CStride>
returns the input matrix with dynamic shape
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>
returns the input matrix with dynamic row shape
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>
returns the input matrix with dynamic column shape
Sourcepub fn row(self, i: Idx<Rows>) -> RowRef<'a, T, Cols, CStride>
pub fn row(self, i: Idx<Rows>) -> RowRef<'a, T, Cols, CStride>
returns a view over the row at the given index
§panics
the function panics if any of the following conditions are violated:
row_idx < self.nrows()
Sourcepub fn col(self, j: Idx<Cols>) -> ColRef<'a, T, Rows, RStride>
pub fn col(self, j: Idx<Cols>) -> ColRef<'a, T, Rows, RStride>
returns a view over the column at the given index
§panics
the function panics if any of the following conditions are violated:
col_idx < self.ncols()
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,
returns an iterator over the columns of the matrix
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,
returns an iterator over the rows of the matrix
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,
returns a parallel iterator over the columns of the matrix
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,
returns a parallel iterator over the rows of the matrix
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,
returns a parallel iterator that provides successive chunks of the columns of this
matrix, with each having at most chunk_size columns
if the number of columns is a multiple of chunk_size, then all chunks have
chunk_size columns
only available with the rayon feature
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,
returns a parallel iterator that provides exactly count successive chunks of the columns
of this matrix
only available with the rayon feature
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,
returns a parallel iterator that provides successive chunks of the rows of this matrix,
with each having at most chunk_size rows
if the number of rows is a multiple of chunk_size, then all chunks have chunk_size
rows
only available with the rayon feature
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,
returns a parallel iterator that provides exactly count successive chunks of the rows
of this matrix
only available with the rayon feature
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>)>
returns a reference to the first row and a view over the remaining ones if the matrix has
at least one row, otherwise None
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>)>
returns a reference to the first column and a view over the remaining ones if the matrix has
at least one column, otherwise None
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>)>
returns a reference to the last row and a view over the remaining ones if the matrix has
at least one row, otherwise None
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>)>
returns a reference to the last column and a view over the remaining ones if the matrix has
at least one column, otherwise None
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>>
returns a view over the matrix with a static column stride equal to +1, or None
otherwise
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>>
returns a view over the matrix with a static row stride equal to +1, or None otherwise
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
returns references to the element at the given index, or submatrices if either row
or col is a range, with bound checks
§panics
the function panics if any of the following conditions are violated:
rowmust be contained in[0, self.nrows())colmust be contained in[0, self.ncols())
Sourcepub fn get_r<RowRange>(
self,
row: RowRange,
) -> <MatRef<'a, T, Rows, Cols, RStride, CStride> as MatIndex<RowRange, RangeFull>>::Target
pub fn get_r<RowRange>( self, row: RowRange, ) -> <MatRef<'a, T, Rows, Cols, RStride, CStride> as MatIndex<RowRange, RangeFull>>::Target
equivalent to self.get(row, ..)
Sourcepub fn get_c<ColRange>(
self,
col: ColRange,
) -> <MatRef<'a, T, Rows, Cols, RStride, CStride> as MatIndex<RangeFull, ColRange>>::Target
pub fn get_c<ColRange>( self, col: ColRange, ) -> <MatRef<'a, T, Rows, Cols, RStride, CStride> as MatIndex<RangeFull, ColRange>>::Target
equivalent to self.get(.., col)
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
returns references to the element at the given index, or submatrices if either row
or col is a range, without bound checks
§safety
the behavior is undefined if any of the following conditions are violated:
rowmust be contained in[0, self.nrows())colmust be contained in[0, self.ncols())
Source§impl<T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride, Inner: for<'short> Reborrow<'short, Target = Ref<'short, T, Rows, Cols, RStride, CStride>>> Mat<Inner>
impl<T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride, Inner: for<'short> Reborrow<'short, Target = Ref<'short, T, Rows, Cols, RStride, CStride>>> Mat<Inner>
Sourcepub fn cloned(&self) -> Mat<T, Rows, Cols>where
T: Clone,
pub fn cloned(&self) -> Mat<T, Rows, Cols>where
T: Clone,
returns a newly allocated matrix holding the cloned values of self
Sourcepub fn to_owned(&self) -> Mat<T::Canonical, Rows, Cols>where
T: Conjugate,
pub fn to_owned(&self) -> Mat<T::Canonical, Rows, Cols>where
T: Conjugate,
returns a newly allocated matrix holding the (possibly conjugated) values of self
Sourcepub fn squared_norm_l2(&self) -> Real<T>where
T: Conjugate,
pub fn squared_norm_l2(&self) -> Real<T>where
T: Conjugate,
returns the squared l2 norm of self
Sourcepub fn determinant(&self) -> T::Canonicalwhere
T: Conjugate,
pub fn determinant(&self) -> T::Canonicalwhere
T: Conjugate,
returns the determinant of self
Sourcepub fn kron(
&self,
rhs: impl AsMatRef<T: Conjugate<Canonical = T::Canonical>>,
) -> Mat<T::Canonical>where
T: Conjugate,
pub fn kron(
&self,
rhs: impl AsMatRef<T: Conjugate<Canonical = T::Canonical>>,
) -> Mat<T::Canonical>where
T: Conjugate,
kronecker product of two matrices
the kronecker product of two matrices $A$ and $B$ is a block matrix $B$ with the following structure:
C = [ a[(0, 0)] * B , a[(0, 1)] * B , ... , a[(0, n-1)] * B ]
[ a[(1, 0)] * B , a[(1, 1)] * B , ... , a[(1, n-1)] * B ]
[ ... , ... , ... , ... ]
[ a[(m-1, 0)] * B , a[(m-1, 1)] * B , ... , a[(m-1, n-1)] * B ]§panics
panics if dst does not have the correct dimensions. the dimensions
of dst must be A.nrows() * B.nrows() by A.ncols() * B.ncols().
§example
use faer::linalg::kron::kron;
use faer::{Mat, mat};
let a = mat![[1.0, 2.0], [3.0, 4.0]];
let b = mat![[0.0, 5.0], [6.0, 7.0]];
let c = mat![
[0.0, 5.0, 0.0, 10.0],
[6.0, 7.0, 12.0, 14.0],
[0.0, 15.0, 0.0, 20.0],
[18.0, 21.0, 24.0, 28.0],
];
let mut dst = Mat::zeros(4, 4);
kron(dst.as_mut(), a.as_ref(), b.as_ref());
assert_eq!(dst, c);Sourcepub fn is_all_finite(&self) -> boolwhere
T: Conjugate,
pub fn is_all_finite(&self) -> boolwhere
T: Conjugate,
returns true if all of the elements of self are finite.
otherwise returns false.
Sourcepub fn is_identity(&self) -> boolwhere
T: Conjugate,
pub fn is_identity(&self) -> boolwhere
T: Conjugate,
returns true if self is the identity matrix.
otherwise returns false.
Source§impl<'a, T, Dim: Shape, RStride: Stride, CStride: Stride> Mat<Ref<'a, T, Dim, Dim, RStride, CStride>>
impl<'a, T, Dim: Shape, RStride: Stride, CStride: Stride> Mat<Ref<'a, T, Dim, Dim, RStride, CStride>>
Source§impl<'a, T, Rows: Shape, Cols: Shape> Mat<Ref<'a, T, Rows, Cols>>where
T: RealField,
impl<'a, T, Rows: Shape, Cols: Shape> Mat<Ref<'a, T, Rows, Cols>>where
T: RealField,
Sourcepub fn max(self) -> Option<T>
pub fn max(self) -> Option<T>
Returns the maximum element in the matrix
§Returns
Option<T>- The maximum element in the matrix, orNoneif the matrix is empty
§Examples
use faer::{Mat, mat};
let m = mat![[1.0, 5.0, 3.0], [4.0, 2.0, 9.0], [7.0, 8.0, 6.0],];
assert_eq!(m.max(), Some(9.0));
let empty: Mat<f64> = Mat::new();
assert_eq!(empty.max(), None);Sourcepub fn min(self) -> Option<T>
pub fn min(self) -> Option<T>
Returns the minimum element in the matrix
§Returns
Option<T>- The minimum element in the matrix, orNoneif the matrix is empty
§Examples
use faer::{Mat, mat};
let m = mat![[1.0, 5.0, 3.0], [4.0, 2.0, 9.0], [7.0, 8.0, 6.0],];
assert_eq!(m.min(), Some(1.0));
let empty: Mat<f64> = Mat::new();
assert_eq!(empty.min(), None);Source§impl<Inner> Mat<Inner>
impl<Inner> Mat<Inner>
Sourcepub fn from_inner_ref(inner: &Inner) -> &Self
pub fn from_inner_ref(inner: &Inner) -> &Self
wrap by reference
Sourcepub fn from_inner_mut(inner: &mut Inner) -> &mut Self
pub fn from_inner_mut(inner: &mut Inner) -> &mut Self
wrap by mutable reference
Source§impl<C: Conjugate, Inner: for<'short> Reborrow<'short, Target = Ref<'short, C>>> Mat<Inner>
impl<C: Conjugate, Inner: for<'short> Reborrow<'short, Target = Ref<'short, C>>> Mat<Inner>
Sourcepub fn partial_piv_lu(&self) -> PartialPivLu<C::Canonical>
pub fn partial_piv_lu(&self) -> PartialPivLu<C::Canonical>
returns the $LU$ decomposition of self with partial (row) pivoting
Sourcepub fn full_piv_lu(&self) -> FullPivLu<C::Canonical>
pub fn full_piv_lu(&self) -> FullPivLu<C::Canonical>
returns the $LU$ decomposition of self with full pivoting
Sourcepub fn col_piv_qr(&self) -> ColPivQr<C::Canonical>
pub fn col_piv_qr(&self) -> ColPivQr<C::Canonical>
returns the $QR$ decomposition of self with column pivoting
Sourcepub fn svd(&self) -> Result<Svd<C::Canonical>, SvdError>
pub fn svd(&self) -> Result<Svd<C::Canonical>, SvdError>
returns the svd of self
singular values are nonnegative and sorted in nonincreasing order
Sourcepub fn thin_svd(&self) -> Result<Svd<C::Canonical>, SvdError>
pub fn thin_svd(&self) -> Result<Svd<C::Canonical>, SvdError>
returns the thin svd of self
singular values are nonnegative and sorted in nonincreasing order
Sourcepub fn llt(&self, side: Side) -> Result<Llt<C::Canonical>, LltError>
pub fn llt(&self, side: Side) -> Result<Llt<C::Canonical>, LltError>
returns the $L L^\top$ decomposition of self
Sourcepub fn ldlt(&self, side: Side) -> Result<Ldlt<C::Canonical>, LdltError>
pub fn ldlt(&self, side: Side) -> Result<Ldlt<C::Canonical>, LdltError>
returns the $L D L^\top$ decomposition of self
Sourcepub fn lblt(&self, side: Side) -> Lblt<C::Canonical>
pub fn lblt(&self, side: Side) -> Lblt<C::Canonical>
returns the $LBL^\top$ decomposition of self
Sourcepub fn self_adjoint_eigen(
&self,
side: Side,
) -> Result<SelfAdjointEigen<C::Canonical>, EvdError>
pub fn self_adjoint_eigen( &self, side: Side, ) -> Result<SelfAdjointEigen<C::Canonical>, EvdError>
returns the eigendecomposition of self, assuming it is self-adjoint
eigenvalues sorted in nondecreasing order
Trait Implementations§
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Add<&Mat<R>> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Add<&Mat<R>> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Add<&Mat<R>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Add<&Mat<R>> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Add<Mat<R>> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Add<Mat<R>> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Add<Mat<R>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Add<Mat<R>> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> AddAssign<&Mat<R>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> AddAssign<&Mat<R>> for Mat<L>
Source§fn add_assign(&mut self, rhs: &Mat<R>)
fn add_assign(&mut self, rhs: &Mat<R>)
+= operation. Read moreSource§impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> AddAssign<Mat<R>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> AddAssign<Mat<R>> for Mat<L>
Source§fn add_assign(&mut self, rhs: Mat<R>)
fn add_assign(&mut self, rhs: Mat<R>)
+= operation. Read moreSource§impl<T: ComplexField, D: Distribution<T>> Distribution<Mat<Own<T>>> for UnitaryMat<usize, D>
impl<T: ComplexField, D: Distribution<T>> Distribution<Mat<Own<T>>> for UnitaryMat<usize, D>
Source§impl<T, Rows: Shape, Cols: Shape, D: Distribution<T>> Distribution<Mat<Own<T, Rows, Cols>>> for CwiseMatDistribution<Rows, Cols, D>
impl<T, Rows: Shape, Cols: Shape, D: Distribution<T>> Distribution<Mat<Own<T, Rows, Cols>>> for CwiseMatDistribution<Rows, Cols, D>
Source§fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Mat<T, Rows, Cols>
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Mat<T, Rows, Cols>
T, using rng as the source of randomness.Source§fn sample_iter<R>(self, rng: R) -> Iter<Self, R, T>
fn sample_iter<R>(self, rng: R) -> Iter<Self, R, T>
T, using rng as
the source of randomness. Read moreSource§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<&Scale<T>> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<&Scale<T>> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<&Scale<T>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<&Scale<T>> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<&f64> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<&f64> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<&f64> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<&f64> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<Scale<T>> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<Scale<T>> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<Scale<T>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<Scale<T>> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<f64> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<f64> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<f64> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Div<f64> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> DivAssign<&Scale<T>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> DivAssign<&Scale<T>> for Mat<L>
Source§fn div_assign(&mut self, rhs: &Scale<T>)
fn div_assign(&mut self, rhs: &Scale<T>)
/= operation. Read moreSource§impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> DivAssign<&f64> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> DivAssign<&f64> for Mat<L>
Source§fn div_assign(&mut self, rhs: &f64)
fn div_assign(&mut self, rhs: &f64)
/= operation. Read moreSource§impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> DivAssign<Scale<T>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> DivAssign<Scale<T>> for Mat<L>
Source§fn div_assign(&mut self, rhs: Scale<T>)
fn div_assign(&mut self, rhs: Scale<T>)
/= operation. Read moreSource§impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> DivAssign<f64> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> DivAssign<f64> for Mat<L>
Source§fn div_assign(&mut self, rhs: f64)
fn div_assign(&mut self, rhs: f64)
/= operation. Read moreSource§impl<T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride, Inner: for<'short> Reborrow<'short, Target = Ref<'short, T, Rows, Cols, RStride, CStride>>> Index<(<Rows as ShapeIdx>::Idx<usize>, <Cols as ShapeIdx>::Idx<usize>)> for Mat<Inner>
impl<T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride, Inner: for<'short> Reborrow<'short, Target = Ref<'short, T, Rows, Cols, RStride, CStride>>> Index<(<Rows as ShapeIdx>::Idx<usize>, <Cols as ShapeIdx>::Idx<usize>)> for Mat<Inner>
Source§impl<T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride, Inner: for<'short> Reborrow<'short, Target = Ref<'short, T, Rows, Cols, RStride, CStride>> + for<'short> ReborrowMut<'short, Target = Mut<'short, T, Rows, Cols, RStride, CStride>>> IndexMut<(<Rows as ShapeIdx>::Idx<usize>, <Cols as ShapeIdx>::Idx<usize>)> for Mat<Inner>
impl<T, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride, Inner: for<'short> Reborrow<'short, Target = Ref<'short, T, Rows, Cols, RStride, CStride>> + for<'short> ReborrowMut<'short, Target = Mut<'short, T, Rows, Cols, RStride, CStride>>> IndexMut<(<Rows as ShapeIdx>::Idx<usize>, <Cols as ShapeIdx>::Idx<usize>)> for Mat<Inner>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Cols, RRStride>>> Mul<&Col<R>> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Cols, RRStride>>> Mul<&Col<R>> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Cols, RRStride>>> Mul<&Col<R>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Cols, RRStride>>> Mul<&Col<R>> for Mat<L>
Source§impl<T: ComplexField, Dim: Shape, Rows: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Dim, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, RStride>>> Mul<&Diag<R>> for &Mat<L>
impl<T: ComplexField, Dim: Shape, Rows: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Dim, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, RStride>>> Mul<&Diag<R>> for &Mat<L>
Source§impl<T: ComplexField, Dim: Shape, Rows: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Dim, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, RStride>>> Mul<&Diag<R>> for Mat<L>
impl<T: ComplexField, Dim: Shape, Rows: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Dim, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, RStride>>> Mul<&Diag<R>> for Mat<L>
Source§impl<T: ComplexField, Dim: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Dim, LStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &Diag<L>
impl<T: ComplexField, Dim: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Dim, LStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &Diag<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, Rows>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &Perm<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, Rows>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &Perm<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &Row<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &Row<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &Scale<T>
impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &Scale<T>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &SparseColMat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &SparseColMat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &SparseRowMat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &SparseRowMat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &f64
impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for &f64
Source§impl<T: ComplexField, Dim: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Dim, LStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for Diag<L>
impl<T: ComplexField, Dim: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Dim, LStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for Diag<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, Rows>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for Perm<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, Rows>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for Perm<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for Row<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for Row<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for Scale<T>
impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for Scale<T>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for SparseColMat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for SparseColMat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for SparseRowMat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for SparseRowMat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for f64
impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<&Mat<R>> for f64
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, Cols>>> Mul<&Perm<R>> for &Mat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, Cols>>> Mul<&Perm<R>> for &Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, Cols>>> Mul<&Perm<R>> for Mat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, Cols>>> Mul<&Perm<R>> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<&Scale<T>> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<&Scale<T>> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<&Scale<T>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<&Scale<T>> for Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<&SparseColMat<R>> for &Mat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<&SparseColMat<R>> for &Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<&SparseColMat<R>> for Mat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<&SparseColMat<R>> for Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<&SparseRowMat<R>> for &Mat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<&SparseRowMat<R>> for &Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<&SparseRowMat<R>> for Mat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<&SparseRowMat<R>> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<&f64> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<&f64> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<&f64> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<&f64> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Cols, RRStride>>> Mul<Col<R>> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Cols, RRStride>>> Mul<Col<R>> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Cols, RRStride>>> Mul<Col<R>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Cols, RRStride>>> Mul<Col<R>> for Mat<L>
Source§impl<T: ComplexField, Dim: Shape, Rows: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Dim, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, RStride>>> Mul<Diag<R>> for &Mat<L>
impl<T: ComplexField, Dim: Shape, Rows: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Dim, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, RStride>>> Mul<Diag<R>> for &Mat<L>
Source§impl<T: ComplexField, Dim: Shape, Rows: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Dim, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, RStride>>> Mul<Diag<R>> for Mat<L>
impl<T: ComplexField, Dim: Shape, Rows: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Dim, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, RStride>>> Mul<Diag<R>> for Mat<L>
Source§impl<T: ComplexField, Dim: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Dim, LStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &Diag<L>
impl<T: ComplexField, Dim: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Dim, LStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &Diag<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, Rows>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &Perm<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, Rows>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &Perm<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &Row<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &Row<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &Scale<T>
impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &Scale<T>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &SparseColMat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &SparseColMat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &SparseRowMat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &SparseRowMat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &f64
impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for &f64
Source§impl<T: ComplexField, Dim: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Dim, LStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, Cols, RRStride, RCStride>>> Mul<Mat<R>> for Diag<L>
impl<T: ComplexField, Dim: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Dim, LStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Dim, Cols, RRStride, RCStride>>> Mul<Mat<R>> for Diag<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<Mat<R>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<Mat<R>> for Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, Rows>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for Perm<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, Rows>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for Perm<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for Row<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for Row<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for Scale<T>
impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for Scale<T>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<Mat<R>> for SparseColMat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<Mat<R>> for SparseColMat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<Mat<R>> for SparseRowMat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, I, LT, Rows, Depth>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Depth, Cols, RRStride, RCStride>>> Mul<Mat<R>> for SparseRowMat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for f64
impl<T: ComplexField, Rows: Shape, Cols: Shape, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Mul<Mat<R>> for f64
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, Cols>>> Mul<Perm<R>> for &Mat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, Cols>>> Mul<Perm<R>> for &Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, Cols>>> Mul<Perm<R>> for Mat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, Cols>>> Mul<Perm<R>> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<Scale<T>> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<Scale<T>> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<Scale<T>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<Scale<T>> for Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<SparseColMat<R>> for &Mat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<SparseColMat<R>> for &Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<SparseColMat<R>> for Mat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<SparseColMat<R>> for Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<SparseRowMat<R>> for &Mat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<SparseRowMat<R>> for &Mat<L>
Source§impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<SparseRowMat<R>> for Mat<L>
impl<I: Index, T: ComplexField, Rows: Shape, Cols: Shape, Depth: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Depth, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, I, RT, Depth, Cols>>> Mul<SparseRowMat<R>> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<f64> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<f64> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<f64> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>> Mul<f64> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> MulAssign<&Scale<T>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> MulAssign<&Scale<T>> for Mat<L>
Source§fn mul_assign(&mut self, rhs: &Scale<T>)
fn mul_assign(&mut self, rhs: &Scale<T>)
*= operation. Read moreSource§impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> MulAssign<&f64> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> MulAssign<&f64> for Mat<L>
Source§fn mul_assign(&mut self, rhs: &f64)
fn mul_assign(&mut self, rhs: &f64)
*= operation. Read moreSource§impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> MulAssign<Scale<T>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> MulAssign<Scale<T>> for Mat<L>
Source§fn mul_assign(&mut self, rhs: Scale<T>)
fn mul_assign(&mut self, rhs: Scale<T>)
*= operation. Read moreSource§impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> MulAssign<f64> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>> MulAssign<f64> for Mat<L>
Source§fn mul_assign(&mut self, rhs: f64)
fn mul_assign(&mut self, rhs: f64)
*= operation. Read moreSource§impl<T: Conjugate, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride, Inner: for<'a> Reborrow<'a, Target = Ref<'a, T, Rows, Cols, RStride, CStride>>> Neg for &Mat<Inner>
impl<T: Conjugate, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride, Inner: for<'a> Reborrow<'a, Target = Ref<'a, T, Rows, Cols, RStride, CStride>>> Neg for &Mat<Inner>
Source§impl<T: Conjugate, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride, Inner: for<'a> Reborrow<'a, Target = Ref<'a, T, Rows, Cols, RStride, CStride>>> Neg for Mat<Inner>
impl<T: Conjugate, Rows: Shape, Cols: Shape, RStride: Stride, CStride: Stride, Inner: for<'a> Reborrow<'a, Target = Ref<'a, T, Rows, Cols, RStride, CStride>>> Neg for Mat<Inner>
Source§impl<LT: PartialEq<RT>, LRows: Shape, LCols: Shape, LRStride: Stride, LCStride: Stride, RT, RRows: Shape, RCols: Shape, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, LRows, LCols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, RRows, RCols, RRStride, RCStride>>> PartialEq<Mat<R>> for Mat<L>
impl<LT: PartialEq<RT>, LRows: Shape, LCols: Shape, LRStride: Stride, LCStride: Stride, RT, RRows: Shape, RCols: Shape, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, LRows, LCols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, RRows, RCols, RRStride, RCStride>>> PartialEq<Mat<R>> for Mat<L>
Source§impl<'short, Inner: ReborrowMut<'short>> ReborrowMut<'short> for Mat<Inner>
impl<'short, Inner: ReborrowMut<'short>> ReborrowMut<'short> for Mat<Inner>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Sub<&Mat<R>> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Sub<&Mat<R>> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Sub<&Mat<R>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Sub<&Mat<R>> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Sub<Mat<R>> for &Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Sub<Mat<R>> for &Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Sub<Mat<R>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LT: Conjugate<Canonical = T>, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> Reborrow<'a, Target = Ref<'a, LT, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> Sub<Mat<R>> for Mat<L>
Source§impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> SubAssign<&Mat<R>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> SubAssign<&Mat<R>> for Mat<L>
Source§fn sub_assign(&mut self, rhs: &Mat<R>)
fn sub_assign(&mut self, rhs: &Mat<R>)
-= operation. Read moreSource§impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> SubAssign<Mat<R>> for Mat<L>
impl<T: ComplexField, Rows: Shape, Cols: Shape, LRStride: Stride, LCStride: Stride, RT: Conjugate<Canonical = T>, RRStride: Stride, RCStride: Stride, L: for<'a> ReborrowMut<'a, Target = Mut<'a, T, Rows, Cols, LRStride, LCStride>>, R: for<'a> Reborrow<'a, Target = Ref<'a, RT, Rows, Cols, RRStride, RCStride>>> SubAssign<Mat<R>> for Mat<L>
Source§fn sub_assign(&mut self, rhs: Mat<R>)
fn sub_assign(&mut self, rhs: Mat<R>)
-= operation. Read moreimpl<Inner: Copy> Copy for Mat<Inner>
Auto Trait Implementations§
impl<Inner> Freeze for Mat<Inner>where
Inner: Freeze,
impl<Inner> RefUnwindSafe for Mat<Inner>where
Inner: RefUnwindSafe,
impl<Inner> Send for Mat<Inner>where
Inner: Send,
impl<Inner> Sync for Mat<Inner>where
Inner: Sync,
impl<Inner> Unpin for Mat<Inner>where
Inner: Unpin,
impl<Inner> UnwindSafe for Mat<Inner>where
Inner: 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,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
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
Source§impl<R> Rng for R
impl<R> Rng for R
Source§fn random<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
fn random<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
StandardUniform distribution. Read moreSource§fn random_iter<T>(self) -> Iter<StandardUniform, Self, T>
fn random_iter<T>(self) -> Iter<StandardUniform, Self, T>
Source§fn random_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
fn random_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
Source§fn random_bool(&mut self, p: f64) -> bool
fn random_bool(&mut self, p: f64) -> bool
p of being true. Read moreSource§fn random_ratio(&mut self, numerator: u32, denominator: u32) -> bool
fn random_ratio(&mut self, numerator: u32, denominator: u32) -> bool
numerator/denominator of being
true. Read moreSource§fn sample<T, D>(&mut self, distr: D) -> Twhere
D: Distribution<T>,
fn sample<T, D>(&mut self, distr: D) -> Twhere
D: Distribution<T>,
Source§fn sample_iter<T, D>(self, distr: D) -> Iter<D, Self, T>where
D: Distribution<T>,
Self: Sized,
fn sample_iter<T, D>(self, distr: D) -> Iter<D, Self, T>where
D: Distribution<T>,
Self: Sized,
Source§fn gen<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
fn gen<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
random to avoid conflict with the new gen keyword in Rust 2024.Rng::random.Source§fn gen_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
fn gen_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
random_rangeRng::random_range.Source§impl<R> TryRngCore for R
impl<R> TryRngCore for R
Source§type Error = Infallible
type Error = Infallible
Source§fn try_next_u32(&mut self) -> Result<u32, <R as TryRngCore>::Error>
fn try_next_u32(&mut self) -> Result<u32, <R as TryRngCore>::Error>
u32.Source§fn try_next_u64(&mut self) -> Result<u64, <R as TryRngCore>::Error>
fn try_next_u64(&mut self) -> Result<u64, <R as TryRngCore>::Error>
u64.Source§fn try_fill_bytes(
&mut self,
dst: &mut [u8],
) -> Result<(), <R as TryRngCore>::Error>
fn try_fill_bytes( &mut self, dst: &mut [u8], ) -> Result<(), <R as TryRngCore>::Error>
dest entirely with random data.Source§fn unwrap_mut(&mut self) -> UnwrapMut<'_, Self>
fn unwrap_mut(&mut self) -> UnwrapMut<'_, Self>
UnwrapMut wrapper.Source§fn read_adapter(&mut self) -> RngReadAdapter<'_, Self>where
Self: Sized,
fn read_adapter(&mut self) -> RngReadAdapter<'_, Self>where
Self: Sized,
RngCore to a RngReadAdapter.