Struct faer_core::Matrix

source ·
pub struct Matrix<M> { /* private fields */ }
Expand description

Generic matrix container.

Implementations§

source§

impl<I, E: Entity> Matrix<PermOwn<I, E>>

source

pub fn as_ref(&self) -> PermutationRef<'_, I, E>

source

pub fn as_mut(&mut self) -> PermutationMut<'_, I, E>

source§

impl<I: Index, E: Entity> Matrix<PermOwn<I, E>>

source

pub fn new_checked(forward: Box<[I]>, inverse: Box<[I]>) -> Self

Creates a new permutation, by checking the validity of the inputs.

Panics

The function panics if any of the following conditions are violated: forward and inverse must have the same length which must be less than or equal to I::Signed::MAX, be valid permutations, and be inverse permutations of each other.

source

pub unsafe fn new_unchecked(forward: Box<[I]>, inverse: Box<[I]>) -> Self

Creates a new permutation reference, without checking the validity of the inputs.

Safety

forward and inverse must have the same length which must be less than or equal to I::Signed::MAX, be valid permutations, and be inverse permutations of each other.

source

pub fn into_arrays(self) -> (Box<[I]>, Box<[I]>)

Returns the permutation as an array.

source

pub fn len(&self) -> usize

source

pub fn inverse(self) -> Self

Returns the inverse permutation.

source

pub fn cast<T: Entity>(self) -> Permutation<I, T>

source§

impl<'a, I: Index, E: Entity> Matrix<PermRef<'a, I, E>>

source

pub fn new_checked(forward: &'a [I], inverse: &'a [I]) -> Self

Creates a new permutation reference, by checking the validity of the inputs.

Panics

The function panics if any of the following conditions are violated: forward and inverse must have the same length which must be less than or equal to I::Signed::MAX, be valid permutations, and be inverse permutations of each other.

source

pub unsafe fn new_unchecked(forward: &'a [I], inverse: &'a [I]) -> Self

Creates a new permutation reference, without checking the validity of the inputs.

Safety

forward and inverse must have the same length which must be less than or equal to I::Signed::MAX, be valid permutations, and be inverse permutations of each other.

source

pub fn into_arrays(self) -> (&'a [I], &'a [I])

Returns the permutation as an array.

source

pub fn len(&self) -> usize

source

pub fn inverse(self) -> Self

Returns the inverse permutation.

source

pub fn cast<T: Entity>(self) -> PermutationRef<'a, I, T>

source

pub fn canonicalize(self) -> PermutationRef<'a, I::FixedWidth, E>

source

pub fn uncanonicalize<J: Index>(self) -> PermutationRef<'a, J, E>

source§

impl<'a, I: Index, E: Entity> Matrix<PermMut<'a, I, E>>

source

pub fn new_checked(forward: &'a mut [I], inverse: &'a mut [I]) -> Self

Creates a new permutation mutable reference, by checking the validity of the inputs.

Panics

The function panics if any of the following conditions are violated: forward and inverse must have the same length which must be less than or equal to I::Signed::MAX, be valid permutations, and be inverse permutations of each other.

source

pub unsafe fn new_unchecked(forward: &'a mut [I], inverse: &'a mut [I]) -> Self

Creates a new permutation mutable reference, without checking the validity of the inputs.

Safety

forward and inverse must have the same length which must be less than or equal to I::Signed::MAX, be valid permutations, and be inverse permutations of each other.

source

pub unsafe fn into_arrays(self) -> (&'a mut [I], &'a mut [I])

Returns the permutation as an array.

Safety

The behavior is undefined if the arrays are no longer inverse permutations of each other by the end of lifetime 'a.

source

pub fn len(&self) -> usize

source

pub fn inverse(self) -> Self

Returns the inverse permutation.

source

pub fn cast<T: Entity>(self) -> PermutationMut<'a, I, T>

source

pub fn canonicalize(self) -> PermutationMut<'a, I::FixedWidth, E>

source

pub fn uncanonicalize<J: Index>(self) -> PermutationMut<'a, J, E>

source§

impl<E: Entity> Matrix<Scale<E>>

source

pub fn new(value: E) -> Self

source

pub fn value(self) -> E

source§

impl<'a, E: Entity> Matrix<DiagRef<'a, E>>

source

pub fn into_column_vector(self) -> MatRef<'a, E>

source§

impl<'a, E: Entity> Matrix<DiagMut<'a, E>>

source

pub fn into_column_vector(self) -> MatMut<'a, E>

source§

impl<E: Entity> Matrix<DiagOwn<E>>

source

pub fn into_column_vector(self) -> Mat<E>

source

pub fn as_ref(&self) -> Matrix<DiagRef<'_, E>>

source

pub fn as_mut(&mut self) -> Matrix<DiagMut<'_, E>>

source§

impl<'a, E: Entity> Matrix<DenseRef<'a, E>>

source

pub fn from_column_major_slice( slice: GroupFor<E, &'a [E::Unit]>, nrows: usize, ncols: 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, 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_core::{mat, MatRef};

let slice = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0_f64];
let view = MatRef::<f64>::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);
source

pub fn from_row_major_slice( slice: GroupFor<E, &'a [E::Unit]>, nrows: usize, ncols: 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, 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_core::{mat, MatRef};

let slice = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0_f64];
let view = MatRef::<f64>::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);
source

pub unsafe fn from_raw_parts( ptr: GroupFor<E, *const E::Unit>, nrows: usize, ncols: usize, row_stride: isize, col_stride: isize ) -> Self

Creates a MatRef from pointers 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 indices (row: i, col: j), to the memory address of the matrix element at indices (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_core::{mat, MatRef};

// 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::<f64>::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);
source

pub fn nrows(&self) -> usize

source

pub fn ncols(&self) -> usize

source

pub fn as_ptr(self) -> GroupFor<E, *const E::Unit>

Returns pointers to the matrix data.

source

pub fn row_stride(&self) -> isize

Returns the row stride of the matrix, specified in number of elements, not in bytes.

source

pub fn col_stride(&self) -> isize

Returns the column stride of the matrix, specified in number of elements, not in bytes.

source

pub fn ptr_at(self, row: usize, col: usize) -> GroupFor<E, *const E::Unit>

Returns raw pointers to the element at the given indices.

source

pub unsafe fn ptr_inbounds_at( self, row: usize, col: usize ) -> GroupFor<E, *const E::Unit>

Returns raw pointers to the element at the given indices, assuming the provided indices are within the matrix dimensions.

Safety

The behavior is undefined if any of the following conditions are violated:

  • row < self.nrows().
  • col < self.ncols().
source

pub fn split_at(self, row: usize, col: usize) -> [Self; 4]

Splits the matrix horizontally and vertically at the given indices into four corners and returns an array of each submatrix, in the following order:

  • top left.
  • top right.
  • bottom left.
  • bottom right.
Panics

The function panics if any of the following conditions are violated:

  • row <= self.nrows().
  • col <= self.ncols().
source

pub fn split_at_row(self, row: usize) -> [Self; 2]

Splits the matrix horizontally at the given row into two parts and returns an array of each submatrix, in the following order:

  • top.
  • bottom.
source

pub fn split_at_col(self, col: usize) -> [Self; 2]

Splits the matrix vertically at the given row into two parts and returns an array of each submatrix, in the following order:

  • left.
  • right.
source

pub unsafe fn get_unchecked<RowRange, ColRange>( self, row: RowRange, col: ColRange ) -> <Self as MatIndex<RowRange, ColRange>>::Target
where Self: MatIndex<RowRange, ColRange>,

Returns references to the element at the given indices, or submatrices if either row or col is a range.

Note

The values pointed to by the references are expected to be initialized, even if the pointed-to value is not read, otherwise the behavior is undefined.

Safety

The behavior is undefined if any of the following conditions are violated:

  • row must be contained in [0, self.nrows()).
  • col must be contained in [0, self.ncols()).
source

pub fn get<RowRange, ColRange>( self, row: RowRange, col: ColRange ) -> <Self as MatIndex<RowRange, ColRange>>::Target
where Self: MatIndex<RowRange, ColRange>,

Returns references to the element at the given indices, or submatrices if either row or col is a range, with bound checks.

Note

The values pointed to by the references are expected to be initialized, even if the pointed-to value is not read, otherwise the behavior is undefined.

Panics

The function panics if any of the following conditions are violated:

  • row must be contained in [0, self.nrows()).
  • col must be contained in [0, self.ncols()).
source

pub unsafe fn read_unchecked(&self, row: usize, col: usize) -> E

Reads the value of the element at the given indices.

Safety

The behavior is undefined if any of the following conditions are violated:

  • row < self.nrows().
  • col < self.ncols().
source

pub fn read(&self, row: usize, col: usize) -> E

Reads the value of the element at the given indices, with bound checks.

Panics

The function panics if any of the following conditions are violated:

  • row < self.nrows().
  • col < self.ncols().
source

pub fn transpose(self) -> Self

Returns a view over the transpose of self.

Example
use faer_core::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);
source

pub fn conjugate(self) -> MatRef<'a, E::Conj>
where E: Conjugate,

Returns a view over the conjugate of self.

source

pub fn adjoint(self) -> MatRef<'a, E::Conj>
where E: Conjugate,

Returns a view over the conjugate transpose of self.

source

pub fn canonicalize(self) -> (MatRef<'a, E::Canonical>, Conj)
where E: Conjugate,

Returns a view over the canonical representation of self, as well as a flag declaring whether self is implicitly conjugated or not.

source

pub fn reverse_rows(self) -> Self

Returns a view over the self, with the rows in reversed order.

Example
use faer_core::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);
source

pub fn reverse_cols(self) -> Self

Returns a view over the self, with the columns in reversed order.

Example
use faer_core::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);
source

pub fn reverse_rows_and_cols(self) -> Self

Returns a view over the self, with the rows and the columns in reversed order.

Example
use faer_core::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);
source

pub fn submatrix( self, row_start: usize, col_start: usize, nrows: usize, ncols: usize ) -> Self

Returns a view over the submatrix starting at indices (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_start.
  • ncols <= self.ncols() - col_start.
Example
use faer_core::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(2, 1, 2, 2);

let expected = mat![[7.0, 11.0], [8.0, 12.0f64]];
assert_eq!(expected.as_ref(), submatrix);
source

pub fn subrows(self, row_start: usize, nrows: usize) -> Self

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_core::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(1, 2);

let expected = mat![[2.0, 6.0, 10.0], [3.0, 7.0, 11.0],];
assert_eq!(expected.as_ref(), subrows);
source

pub fn subcols(self, col_start: usize, ncols: usize) -> Self

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_core::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(2, 1);

let expected = mat![[9.0], [10.0], [11.0], [12.0f64]];
assert_eq!(expected.as_ref(), subcols);
source

pub fn row(self, row_idx: usize) -> Self

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().
source

pub fn col(self, col_idx: usize) -> Self

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().
source

pub fn column_vector_as_diagonal(self) -> Matrix<DiagRef<'a, E>>

Given a matrix with a single column, returns an object that interprets the column as a diagonal matrix, whoes diagonal elements are values in the column.

source

pub fn diagonal(self) -> Matrix<DiagRef<'a, E>>

source

pub fn to_owned(&self) -> Mat<E::Canonical>
where E: Conjugate,

Returns an owning Mat of the data.

source

pub fn has_nan(&self) -> bool
where E: ComplexField,

Returns true if any of the elements is NaN, otherwise returns false.

source

pub fn is_all_finite(&self) -> bool
where E: ComplexField,

Returns true if all of the elements are finite, otherwise returns false.

source

pub fn cwise(self) -> Zip<(Self,)>

Returns a thin wrapper that can be used to execute coefficient-wise operations on matrices.

source

pub fn as_ref(&self) -> MatRef<'_, E>

Returns a view over the matrix.

source

pub fn into_col_chunks( self, chunk_size: usize ) -> impl 'a + DoubleEndedIterator<Item = MatRef<'a, E>>

Returns an 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.

source

pub fn into_row_chunks( self, chunk_size: usize ) -> impl 'a + DoubleEndedIterator<Item = MatRef<'a, E>>

Returns an 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.

source

pub fn into_par_col_chunks( self, chunk_size: usize ) -> impl 'a + IndexedParallelIterator<Item = MatRef<'a, E>>

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.

source

pub fn into_par_row_chunks( self, chunk_size: usize ) -> impl 'a + IndexedParallelIterator<Item = MatRef<'a, E>>

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.

source§

impl<'a, E: Entity> Matrix<DenseMut<'a, E>>

source

pub fn from_column_major_slice( slice: GroupFor<E, &'a mut [E::Unit]>, nrows: usize, ncols: usize ) -> Self

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_core::{mat, MatMut};

let mut slice = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0_f64];
let view = MatMut::<f64>::from_column_major_slice(&mut slice, 3, 2);

let expected = mat![[1.0, 4.0], [2.0, 5.0], [3.0, 6.0]];
assert_eq!(expected, view);
source

pub fn from_row_major_slice( slice: GroupFor<E, &'a mut [E::Unit]>, nrows: usize, ncols: usize ) -> Self

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_core::{mat, MatMut};

let mut slice = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0_f64];
let view = MatMut::<f64>::from_row_major_slice(&mut slice, 3, 2);

let expected = mat![[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]];
assert_eq!(expected, view);
source

pub unsafe fn from_raw_parts( ptr: GroupFor<E, *mut E::Unit>, nrows: usize, ncols: usize, row_stride: isize, col_stride: isize ) -> Self

Creates a MatMut from pointers 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 indices (row: i, col: j), to the memory address of the matrix element at indices (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 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_core::{mat, MatMut};

// 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::<f64>::from_raw_parts(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);
source

pub fn nrows(&self) -> usize

source

pub fn ncols(&self) -> usize

source

pub fn as_ptr(self) -> GroupFor<E, *mut E::Unit>

Returns pointers to the matrix data.

source

pub fn row_stride(&self) -> isize

Returns the row stride of the matrix, specified in number of elements, not in bytes.

source

pub fn col_stride(&self) -> isize

Returns the column stride of the matrix, specified in number of elements, not in bytes.

source

pub fn ptr_at(self, row: usize, col: usize) -> GroupFor<E, *mut E::Unit>

Returns raw pointers to the element at the given indices.

source

pub unsafe fn ptr_inbounds_at( self, row: usize, col: usize ) -> GroupFor<E, *mut E::Unit>

Returns raw pointers to the element at the given indices, assuming the provided indices are within the matrix dimensions.

Safety

The behavior is undefined if any of the following conditions are violated:

  • row < self.nrows().
  • col < self.ncols().
source

pub fn split_at(self, row: usize, col: usize) -> [Self; 4]

Splits the matrix horizontally and vertically at the given indices into four corners and returns an array of each submatrix, in the following order:

  • top left.
  • top right.
  • bottom left.
  • bottom right.
Panics

The function panics if any of the following conditions are violated:

  • row <= self.nrows().
  • col <= self.ncols().
source

pub fn split_at_row(self, row: usize) -> [Self; 2]

Splits the matrix horizontally at the given row into two parts and returns an array of each submatrix, in the following order:

  • top.
  • bottom.
source

pub fn split_at_col(self, col: usize) -> [Self; 2]

Splits the matrix vertically at the given row into two parts and returns an array of each submatrix, in the following order:

  • left.
  • right.
source

pub unsafe fn get_unchecked<RowRange, ColRange>( self, row: RowRange, col: ColRange ) -> <Self as MatIndex<RowRange, ColRange>>::Target
where Self: MatIndex<RowRange, ColRange>,

Returns mutable references to the element at the given indices, or submatrices if either row or col is a range.

Note

The values pointed to by the references are expected to be initialized, even if the pointed-to value is not read, otherwise the behavior is undefined.

Safety

The behavior is undefined if any of the following conditions are violated:

  • row must be contained in [0, self.nrows()).
  • col must be contained in [0, self.ncols()).
source

pub fn get<RowRange, ColRange>( self, row: RowRange, col: ColRange ) -> <Self as MatIndex<RowRange, ColRange>>::Target
where Self: MatIndex<RowRange, ColRange>,

Returns mutable references to the element at the given indices, or submatrices if either row or col is a range, with bound checks.

Note

The values pointed to by the references are expected to be initialized, even if the pointed-to value is not read, otherwise the behavior is undefined.

Panics

The function panics if any of the following conditions are violated:

  • row must be contained in [0, self.nrows()).
  • col must be contained in [0, self.ncols()).
source

pub unsafe fn read_unchecked(&self, row: usize, col: usize) -> E

Reads the value of the element at the given indices.

Safety

The behavior is undefined if any of the following conditions are violated:

  • row < self.nrows().
  • col < self.ncols().
source

pub fn read(&self, row: usize, col: usize) -> E

Reads the value of the element at the given indices, with bound checks.

Panics

The function panics if any of the following conditions are violated:

  • row < self.nrows().
  • col < self.ncols().
source

pub unsafe fn write_unchecked(&mut self, row: usize, col: usize, value: E)

Writes the value to the element at the given indices.

Safety

The behavior is undefined if any of the following conditions are violated:

  • row < self.nrows().
  • col < self.ncols().
source

pub fn write(&mut self, row: usize, col: usize, value: E)

Writes the value to the element at the given indices, with bound checks.

Panics

The function panics if any of the following conditions are violated:

  • row < self.nrows().
  • col < self.ncols().
source

pub fn clone_from(&mut self, other: impl AsMatRef<E>)

Copies the values from other into self.

Panics

The function panics if any of the following conditions are violated:

  • self.nrows() == other.nrows().
  • self.ncols() == other.ncols().
source

pub fn fill_zeros(&mut self)
where E: ComplexField,

Fills the elements of self with zeros.

source

pub fn fill(&mut self, constant: E)

Fills the elements of self with copies of constant.

source

pub fn transpose(self) -> Self

Returns a view over the transpose of self.

Example
use faer_core::mat;

let mut matrix = mat![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
let view = matrix.as_mut();
let transpose = view.transpose();

let mut expected = mat![[1.0, 4.0], [2.0, 5.0], [3.0, 6.0]];
assert_eq!(expected.as_mut(), transpose);
source

pub fn conjugate(self) -> MatMut<'a, E::Conj>
where E: Conjugate,

Returns a view over the conjugate of self.

source

pub fn adjoint(self) -> MatMut<'a, E::Conj>
where E: Conjugate,

Returns a view over the conjugate transpose of self.

source

pub fn canonicalize(self) -> (MatMut<'a, E::Canonical>, Conj)
where E: Conjugate,

Returns a view over the canonical representation of self, as well as a flag declaring whether self is implicitly conjugated or not.

source

pub fn reverse_rows(self) -> Self

Returns a view over the self, with the rows in reversed order.

Example
use faer_core::mat;

let mut matrix = mat![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
let view = matrix.as_mut();
let reversed_rows = view.reverse_rows();

let mut expected = mat![[4.0, 5.0, 6.0], [1.0, 2.0, 3.0]];
assert_eq!(expected.as_mut(), reversed_rows);
source

pub fn reverse_cols(self) -> Self

Returns a view over the self, with the columns in reversed order.

Example
use faer_core::mat;

let mut matrix = mat![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
let view = matrix.as_mut();
let reversed_cols = view.reverse_cols();

let mut expected = mat![[3.0, 2.0, 1.0], [6.0, 5.0, 4.0]];
assert_eq!(expected.as_mut(), reversed_cols);
source

pub fn reverse_rows_and_cols(self) -> Self

Returns a view over the self, with the rows and the columns in reversed order.

Example
use faer_core::mat;

let mut matrix = mat![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
let view = matrix.as_mut();
let reversed = view.reverse_rows_and_cols();

let mut expected = mat![[6.0, 5.0, 4.0], [3.0, 2.0, 1.0]];
assert_eq!(expected.as_mut(), reversed);
source

pub fn submatrix( self, row_start: usize, col_start: usize, nrows: usize, ncols: usize ) -> Self

Returns a view over the submatrix starting at indices (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_start.
  • ncols <= self.ncols() - col_start.
Example
use faer_core::mat;

let mut 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_mut();
let submatrix = view.submatrix(2, 1, 2, 2);

let mut expected = mat![[7.0, 11.0], [8.0, 12.0f64]];
assert_eq!(expected.as_mut(), submatrix);
source

pub fn subrows(self, row_start: usize, nrows: usize) -> Self

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_core::mat;

let mut 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_mut();
let subrows = view.subrows(1, 2);

let mut expected = mat![[2.0, 6.0, 10.0], [3.0, 7.0, 11.0],];
assert_eq!(expected.as_mut(), subrows);
source

pub fn subcols(self, col_start: usize, ncols: usize) -> Self

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_core::mat;

let mut 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_mut();
let subcols = view.subcols(2, 1);

let mut expected = mat![[9.0], [10.0], [11.0], [12.0f64]];
assert_eq!(expected.as_mut(), subcols);
source

pub fn row(self, row_idx: usize) -> Self

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().
source

pub fn col(self, col_idx: usize) -> Self

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().
source

pub fn column_vector_as_diagonal(self) -> Matrix<DiagMut<'a, E>>

Given a matrix with a single column, returns an object that interprets the column as a diagonal matrix, whoes diagonal elements are values in the column.

source

pub fn diagonal(self) -> Matrix<DiagMut<'a, E>>

source

pub fn to_owned(&self) -> Mat<E::Canonical>
where E: Conjugate,

Returns an owning Mat of the data

source

pub fn has_nan(&self) -> bool
where E: ComplexField,

Returns true if any of the elements is NaN, otherwise returns false.

source

pub fn is_all_finite(&self) -> bool
where E: ComplexField,

Returns true if all of the elements are finite, otherwise returns false.

source

pub fn cwise(self) -> Zip<(Self,)>

Returns a thin wrapper that can be used to execute coefficient-wise operations on matrices.

source

pub fn as_ref(&self) -> MatRef<'_, E>

Returns a view over the matrix.

source

pub fn as_mut(&mut self) -> MatMut<'_, E>

Returns a mutable view over the matrix.

source

pub fn into_col_chunks( self, chunk_size: usize ) -> impl 'a + DoubleEndedIterator<Item = MatMut<'a, E>>

Returns an 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.

source

pub fn into_row_chunks( self, chunk_size: usize ) -> impl 'a + DoubleEndedIterator<Item = MatMut<'a, E>>

Returns an 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.

source

pub fn into_par_col_chunks( self, chunk_size: usize ) -> impl 'a + IndexedParallelIterator<Item = MatMut<'a, E>>

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.

source

pub fn into_par_row_chunks( self, chunk_size: usize ) -> impl 'a + IndexedParallelIterator<Item = MatMut<'a, E>>

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.

source§

impl<'a, E: RealField> Matrix<DenseRef<'a, Complex<E>>>

source

pub fn real_imag(self) -> Complex<MatRef<'a, E>>

source§

impl<'a, E: RealField> Matrix<DenseMut<'a, Complex<E>>>

source

pub fn real_imag(self) -> Complex<MatMut<'a, E>>

source§

impl<E: Entity> Matrix<DenseOwn<E>>

source

pub fn new() -> Self

source

pub fn with_capacity(row_capacity: usize, col_capacity: usize) -> Self

Returns a new matrix with dimensions (0, 0), with enough capacity to hold a maximum of row_capacity rows and col_capacity columns without reallocating. If either is 0, the matrix will not allocate.

Panics

The function panics if the total capacity in bytes exceeds isize::MAX.

source

pub fn from_fn( nrows: usize, ncols: usize, f: impl FnMut(usize, usize) -> E ) -> Self

Returns a new matrix with dimensions (nrows, ncols), filled with the provided function.

Panics

The function panics if the total capacity in bytes exceeds isize::MAX.

source

pub fn zeros(nrows: usize, ncols: usize) -> Self
where E: ComplexField,

Returns a new matrix with dimensions (nrows, ncols), filled with zeros.

Panics

The function panics if the total capacity in bytes exceeds isize::MAX.

source

pub fn identity(nrows: usize, ncols: usize) -> Self
where E: ComplexField,

Returns a new matrix with dimensions (nrows, ncols), filled with zeros, except the main diagonal which is filled with ones.

Panics

The function panics if the total capacity in bytes exceeds isize::MAX.

source

pub fn nrows(&self) -> usize

source

pub fn ncols(&self) -> usize

source

pub unsafe fn set_dims(&mut self, nrows: usize, ncols: usize)

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.
source

pub fn as_ptr(&self) -> GroupFor<E, *const E::Unit>

Returns a pointer to the data of the matrix.

source

pub fn as_mut_ptr(&mut self) -> GroupFor<E, *mut E::Unit>

Returns a mutable pointer to the data of the matrix.

source

pub fn row_capacity(&self) -> usize

Returns the row capacity, that is, the number of rows that the matrix is able to hold without needing to reallocate, excluding column insertions.

source

pub fn col_capacity(&self) -> usize

Returns the column capacity, that is, the number of columns that the matrix is able to hold without needing to reallocate, excluding row insertions.

source

pub fn row_stride(&self) -> isize

Returns the offset between the first elements of two successive rows in the matrix. Always returns 1 since the matrix is column major.

source

pub fn col_stride(&self) -> isize

Returns the offset between the first elements of two successive columns in the matrix.

source

pub fn reserve_exact(&mut self, row_capacity: usize, col_capacity: usize)

Reserves the minimum capacity for row_capacity rows and col_capacity columns without reallocating. Does nothing if the capacity is already sufficient.

Panics

The function panics if the new total capacity in bytes exceeds isize::MAX.

source

pub fn resize_with( &mut self, new_nrows: usize, new_ncols: usize, f: impl FnMut(usize, usize) -> E )

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 indices (i, j) are created by calling f(i, j).

source

pub fn col_ref(&self, col: usize) -> GroupFor<E, &[E::Unit]>

Returns a reference to a slice over the column at the given index.

source

pub fn col_mut(&mut self, col: usize) -> GroupFor<E, &mut [E::Unit]>

Returns a mutable reference to a slice over the column at the given index.

source

pub fn as_ref(&self) -> MatRef<'_, E>

Returns a view over the matrix.

source

pub fn as_mut(&mut self) -> MatMut<'_, E>

Returns a mutable view over the matrix.

source

pub unsafe fn get_unchecked<RowRange, ColRange>( &self, row: RowRange, col: ColRange ) -> <MatRef<'_, E> as MatIndex<RowRange, ColRange>>::Target
where for<'a> MatRef<'a, E>: MatIndex<RowRange, ColRange>,

Returns references to the element at the given indices, or submatrices if either row or col is a range.

Note

The values pointed to by the references are expected to be initialized, even if the pointed-to value is not read, otherwise the behavior is undefined.

Safety

The behavior is undefined if any of the following conditions are violated:

  • row must be contained in [0, self.nrows()).
  • col must be contained in [0, self.ncols()).
source

pub fn get<RowRange, ColRange>( &self, row: RowRange, col: ColRange ) -> <MatRef<'_, E> as MatIndex<RowRange, ColRange>>::Target
where for<'a> MatRef<'a, E>: MatIndex<RowRange, ColRange>,

Returns references to the element at the given indices, or submatrices if either row or col is a range, with bound checks.

Note

The values pointed to by the references are expected to be initialized, even if the pointed-to value is not read, otherwise the behavior is undefined.

Panics

The function panics if any of the following conditions are violated:

  • row must be contained in [0, self.nrows()).
  • col must be contained in [0, self.ncols()).
source

pub unsafe fn get_mut_unchecked<RowRange, ColRange>( &mut self, row: RowRange, col: ColRange ) -> <MatMut<'_, E> as MatIndex<RowRange, ColRange>>::Target
where for<'a> MatMut<'a, E>: MatIndex<RowRange, ColRange>,

Returns mutable references to the element at the given indices, or submatrices if either row or col is a range.

Note

The values pointed to by the references are expected to be initialized, even if the pointed-to value is not read, otherwise the behavior is undefined.

Safety

The behavior is undefined if any of the following conditions are violated:

  • row must be contained in [0, self.nrows()).
  • col must be contained in [0, self.ncols()).
source

pub fn get_mut<RowRange, ColRange>( &mut self, row: RowRange, col: ColRange ) -> <MatMut<'_, E> as MatIndex<RowRange, ColRange>>::Target
where for<'a> MatMut<'a, E>: MatIndex<RowRange, ColRange>,

Returns mutable references to the element at the given indices, or submatrices if either row or col is a range, with bound checks.

Note

The values pointed to by the references are expected to be initialized, even if the pointed-to value is not read, otherwise the behavior is undefined.

Panics

The function panics if any of the following conditions are violated:

  • row must be contained in [0, self.nrows()).
  • col must be contained in [0, self.ncols()).
source

pub unsafe fn read_unchecked(&self, row: usize, col: usize) -> E

Reads the value of the element at the given indices.

Safety

The behavior is undefined if any of the following conditions are violated:

  • row < self.nrows().
  • col < self.ncols().
source

pub fn read(&self, row: usize, col: usize) -> E

Reads the value of the element at the given indices, with bound checks.

Panics

The function panics if any of the following conditions are violated:

  • row < self.nrows().
  • col < self.ncols().
source

pub unsafe fn write_unchecked(&mut self, row: usize, col: usize, value: E)

Writes the value to the element at the given indices.

Safety

The behavior is undefined if any of the following conditions are violated:

  • row < self.nrows().
  • col < self.ncols().
source

pub fn write(&mut self, row: usize, col: usize, value: E)

Writes the value to the element at the given indices, with bound checks.

Panics

The function panics if any of the following conditions are violated:

  • row < self.nrows().
  • col < self.ncols().
source

pub fn clone_from(&mut self, other: impl AsMatRef<E>)

Copies the values from other into self.

source

pub fn fill_zeros(&mut self)
where E: ComplexField,

Fills the elements of self with zeros.

source

pub fn fill(&mut self, constant: E)

Fills the elements of self with copies of constant.

source

pub fn transpose(&self) -> MatRef<'_, E>

Returns a view over the transpose of self.

source

pub fn conjugate(&self) -> MatRef<'_, E::Conj>
where E: Conjugate,

Returns a view over the conjugate of self.

source

pub fn adjoint(&self) -> MatRef<'_, E::Conj>
where E: Conjugate,

Returns a view over the conjugate transpose of self.

source

pub fn diagonal(&self) -> Matrix<DiagRef<'_, E>>

source

pub fn to_owned(&self) -> Mat<E::Canonical>
where E: Conjugate,

Returns an owning Mat of the data

source

pub fn has_nan(&self) -> bool
where E: ComplexField,

Returns true if any of the elements is NaN, otherwise returns false.

source

pub fn is_all_finite(&self) -> bool
where E: ComplexField,

Returns true if all of the elements are finite, otherwise returns false.

source

pub fn col_chunks( &self, chunk_size: usize ) -> impl '_ + DoubleEndedIterator<Item = MatRef<'_, E>>

Returns an iterator that provides successive chunks of the columns of a view over 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.

source

pub fn col_chunks_mut( &mut self, chunk_size: usize ) -> impl '_ + DoubleEndedIterator<Item = MatMut<'_, E>>

Returns an iterator that provides successive chunks of the columns of a mutable view over 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.

source

pub fn par_col_chunks( &self, chunk_size: usize ) -> impl '_ + IndexedParallelIterator<Item = MatRef<'_, E>>

Returns a parallel iterator that provides successive chunks of the columns of a view over 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.

source

pub fn par_col_chunks_mut( &mut self, chunk_size: usize ) -> impl '_ + IndexedParallelIterator<Item = MatMut<'_, E>>

Returns a parallel iterator that provides successive chunks of the columns of a mutable view over 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.

source

pub fn row_chunks( &self, chunk_size: usize ) -> impl '_ + DoubleEndedIterator<Item = MatRef<'_, E>>

Returns an iterator that provides successive chunks of the rows of a view over 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.

source

pub fn row_chunks_mut( &mut self, chunk_size: usize ) -> impl '_ + DoubleEndedIterator<Item = MatMut<'_, E>>

Returns an iterator that provides successive chunks of the rows of a mutable view over 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.

source

pub fn par_row_chunks( &self, chunk_size: usize ) -> impl '_ + IndexedParallelIterator<Item = MatRef<'_, E>>

Returns a parallel iterator that provides successive chunks of the rows of a view over 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.

source

pub fn par_row_chunks_mut( &mut self, chunk_size: usize ) -> impl '_ + IndexedParallelIterator<Item = MatMut<'_, E>>

Returns a parallel iterator that provides successive chunks of the rows of a mutable view over 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.

Trait Implementations§

source§

impl<Lhs: GenericMatrix, Rhs: GenericMatrix> Add<&Matrix<Rhs>> for &Matrix<Lhs>
where Lhs::Elem: Conjugate, Rhs::Elem: Conjugate<Canonical = <Lhs::Elem as Conjugate>::Canonical>, <Lhs::Elem as Conjugate>::Canonical: ComplexField, Lhs::Kind: MatAdd<Rhs::Kind>,

§

type Output = <<<Lhs as GenericMatrix>::Kind as MatAdd<<Rhs as GenericMatrix>::Kind>>::Output as MatrixKind>::Own<<<Lhs as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the + operator.
source§

fn add(self, rhs: &Matrix<Rhs>) -> Self::Output

Performs the + operation. Read more
source§

impl<Lhs: GenericMatrix, Rhs: GenericMatrix> Add<&Matrix<Rhs>> for Matrix<Lhs>
where Lhs::Elem: Conjugate, Rhs::Elem: Conjugate<Canonical = <Lhs::Elem as Conjugate>::Canonical>, <Lhs::Elem as Conjugate>::Canonical: ComplexField, Lhs::Kind: MatAdd<Rhs::Kind>,

§

type Output = <<<Lhs as GenericMatrix>::Kind as MatAdd<<Rhs as GenericMatrix>::Kind>>::Output as MatrixKind>::Own<<<Lhs as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the + operator.
source§

fn add(self, rhs: &Matrix<Rhs>) -> Self::Output

Performs the + operation. Read more
source§

impl<Lhs: GenericMatrix, Rhs: GenericMatrix> Add<Matrix<Rhs>> for &Matrix<Lhs>
where Lhs::Elem: Conjugate, Rhs::Elem: Conjugate<Canonical = <Lhs::Elem as Conjugate>::Canonical>, <Lhs::Elem as Conjugate>::Canonical: ComplexField, Lhs::Kind: MatAdd<Rhs::Kind>,

§

type Output = <<<Lhs as GenericMatrix>::Kind as MatAdd<<Rhs as GenericMatrix>::Kind>>::Output as MatrixKind>::Own<<<Lhs as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the + operator.
source§

fn add(self, rhs: Matrix<Rhs>) -> Self::Output

Performs the + operation. Read more
source§

impl<Lhs: GenericMatrix, Rhs: GenericMatrix> Add<Matrix<Rhs>> for Matrix<Lhs>
where Lhs::Elem: Conjugate, Rhs::Elem: Conjugate<Canonical = <Lhs::Elem as Conjugate>::Canonical>, <Lhs::Elem as Conjugate>::Canonical: ComplexField, Lhs::Kind: MatAdd<Rhs::Kind>,

§

type Output = <<<Lhs as GenericMatrix>::Kind as MatAdd<<Rhs as GenericMatrix>::Kind>>::Output as MatrixKind>::Own<<<Lhs as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the + operator.
source§

fn add(self, rhs: Matrix<Rhs>) -> Self::Output

Performs the + operation. Read more
source§

impl<Lhs: GenericMatrixMut, Rhs: GenericMatrix> AddAssign<&Matrix<Rhs>> for Matrix<Lhs>
where Lhs::Elem: ComplexField, Rhs::Elem: Conjugate<Canonical = Lhs::Elem>, Lhs::Kind: MatAddAssign<Rhs::Kind>,

source§

fn add_assign(&mut self, rhs: &Matrix<Rhs>)

Performs the += operation. Read more
source§

impl<Lhs: GenericMatrixMut, Rhs: GenericMatrix> AddAssign<Matrix<Rhs>> for Matrix<Lhs>
where Lhs::Elem: ComplexField, Rhs::Elem: Conjugate<Canonical = Lhs::Elem>, Lhs::Kind: MatAddAssign<Rhs::Kind>,

source§

fn add_assign(&mut self, rhs: Matrix<Rhs>)

Performs the += operation. Read more
source§

impl<M: Clone> Clone for Matrix<M>

source§

fn clone(&self) -> Matrix<M>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, FromE: Entity, ToE: Entity> Coerce<Matrix<DenseMut<'a, ToE>>> for MatMut<'a, FromE>

source§

fn coerce(self) -> MatMut<'a, ToE>

source§

impl<'a, FromE: Entity, ToE: Entity> Coerce<Matrix<DenseRef<'a, ToE>>> for MatRef<'a, FromE>

source§

fn coerce(self) -> MatRef<'a, ToE>

source§

impl<'a, E: Entity> IntoConst for Matrix<DiagMut<'a, E>>

§

type Target = Matrix<DiagRef<'a, E>>

source§

fn into_const(self) -> Self::Target

source§

impl<'a, E: Entity> IntoConst for Matrix<DiagRef<'a, E>>

§

type Target = Matrix<DiagRef<'a, E>>

source§

fn into_const(self) -> Self::Target

source§

impl<Lhs: GenericMatrix, Rhs: GenericMatrix> Mul<&Matrix<Rhs>> for &Matrix<Lhs>
where Lhs::Elem: Conjugate, Rhs::Elem: Conjugate<Canonical = <Lhs::Elem as Conjugate>::Canonical>, <Lhs::Elem as Conjugate>::Canonical: ComplexField, Lhs::Kind: MatMul<Rhs::Kind>,

§

type Output = <<<Lhs as GenericMatrix>::Kind as MatMul<<Rhs as GenericMatrix>::Kind>>::Output as MatrixKind>::Own<<<Lhs as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &Matrix<Rhs>) -> Self::Output

Performs the * operation. Read more
source§

impl<Lhs: GenericMatrix, Rhs: GenericMatrix> Mul<&Matrix<Rhs>> for Matrix<Lhs>
where Lhs::Elem: Conjugate, Rhs::Elem: Conjugate<Canonical = <Lhs::Elem as Conjugate>::Canonical>, <Lhs::Elem as Conjugate>::Canonical: ComplexField, Lhs::Kind: MatMul<Rhs::Kind>,

§

type Output = <<<Lhs as GenericMatrix>::Kind as MatMul<<Rhs as GenericMatrix>::Kind>>::Output as MatrixKind>::Own<<<Lhs as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &Matrix<Rhs>) -> Self::Output

Performs the * operation. Read more
source§

impl<Lhs: GenericMatrix, Rhs: GenericMatrix> Mul<Matrix<Rhs>> for &Matrix<Lhs>
where Lhs::Elem: Conjugate, Rhs::Elem: Conjugate<Canonical = <Lhs::Elem as Conjugate>::Canonical>, <Lhs::Elem as Conjugate>::Canonical: ComplexField, Lhs::Kind: MatMul<Rhs::Kind>,

§

type Output = <<<Lhs as GenericMatrix>::Kind as MatMul<<Rhs as GenericMatrix>::Kind>>::Output as MatrixKind>::Own<<<Lhs as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Matrix<Rhs>) -> Self::Output

Performs the * operation. Read more
source§

impl<Lhs: GenericMatrix, Rhs: GenericMatrix> Mul<Matrix<Rhs>> for Matrix<Lhs>
where Lhs::Elem: Conjugate, Rhs::Elem: Conjugate<Canonical = <Lhs::Elem as Conjugate>::Canonical>, <Lhs::Elem as Conjugate>::Canonical: ComplexField, Lhs::Kind: MatMul<Rhs::Kind>,

§

type Output = <<<Lhs as GenericMatrix>::Kind as MatMul<<Rhs as GenericMatrix>::Kind>>::Output as MatrixKind>::Own<<<Lhs as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Matrix<Rhs>) -> Self::Output

Performs the * operation. Read more
source§

impl<Lhs: GenericMatrixMut, Rhs: GenericMatrix> MulAssign<&Matrix<Rhs>> for Matrix<Lhs>
where Lhs::Elem: ComplexField, Rhs::Elem: Conjugate<Canonical = Lhs::Elem>, Lhs::Kind: MatMulAssign<Rhs::Kind>,

source§

fn mul_assign(&mut self, rhs: &Matrix<Rhs>)

Performs the *= operation. Read more
source§

impl<Lhs: GenericMatrixMut, Rhs: GenericMatrix> MulAssign<Matrix<Rhs>> for Matrix<Lhs>
where Lhs::Elem: ComplexField, Rhs::Elem: Conjugate<Canonical = Lhs::Elem>, Lhs::Kind: MatMulAssign<Rhs::Kind>,

source§

fn mul_assign(&mut self, rhs: Matrix<Rhs>)

Performs the *= operation. Read more
source§

impl<Mat: GenericMatrix> Neg for &Matrix<Mat>
where Mat::Elem: Conjugate, <Mat::Elem as Conjugate>::Canonical: ComplexField, Mat::Kind: MatNeg,

§

type Output = <<<Mat as GenericMatrix>::Kind as MatNeg>::Output as MatrixKind>::Own<<<Mat as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the - operator.
source§

fn neg(self) -> Self::Output

Performs the unary - operation. Read more
source§

impl<Mat: GenericMatrix> Neg for Matrix<Mat>
where Mat::Elem: Conjugate, <Mat::Elem as Conjugate>::Canonical: ComplexField, Mat::Kind: MatNeg,

§

type Output = <<<Mat as GenericMatrix>::Kind as MatNeg>::Output as MatrixKind>::Own<<<Mat as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the - operator.
source§

fn neg(self) -> Self::Output

Performs the unary - operation. Read more
source§

impl<Lhs: GenericMatrix, Rhs: GenericMatrix> PartialEq<Matrix<Rhs>> for Matrix<Lhs>
where Lhs::Elem: Conjugate, Rhs::Elem: Conjugate<Canonical = <Lhs::Elem as Conjugate>::Canonical>, <Lhs::Elem as Conjugate>::Canonical: ComplexField, Lhs::Kind: MatEq<Rhs::Kind>,

source§

fn eq(&self, rhs: &Matrix<Rhs>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<'short, 'a, E: Entity> Reborrow<'short> for Matrix<DiagMut<'a, E>>

§

type Target = Matrix<DiagRef<'short, E>>

source§

fn rb(&'short self) -> Self::Target

source§

impl<'short, 'a, E: Entity> Reborrow<'short> for Matrix<DiagRef<'a, E>>

§

type Target = Matrix<DiagRef<'short, E>>

source§

fn rb(&'short self) -> Self::Target

source§

impl<'short, 'a, E: Entity> ReborrowMut<'short> for Matrix<DiagMut<'a, E>>

§

type Target = Matrix<DiagMut<'short, E>>

source§

fn rb_mut(&'short mut self) -> Self::Target

source§

impl<'short, 'a, E: Entity> ReborrowMut<'short> for Matrix<DiagRef<'a, E>>

§

type Target = Matrix<DiagRef<'short, E>>

source§

fn rb_mut(&'short mut self) -> Self::Target

source§

impl<Lhs: GenericMatrix, Rhs: GenericMatrix> Sub<&Matrix<Rhs>> for &Matrix<Lhs>
where Lhs::Elem: Conjugate, Rhs::Elem: Conjugate<Canonical = <Lhs::Elem as Conjugate>::Canonical>, <Lhs::Elem as Conjugate>::Canonical: ComplexField, Lhs::Kind: MatSub<Rhs::Kind>,

§

type Output = <<<Lhs as GenericMatrix>::Kind as MatSub<<Rhs as GenericMatrix>::Kind>>::Output as MatrixKind>::Own<<<Lhs as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: &Matrix<Rhs>) -> Self::Output

Performs the - operation. Read more
source§

impl<Lhs: GenericMatrix, Rhs: GenericMatrix> Sub<&Matrix<Rhs>> for Matrix<Lhs>
where Lhs::Elem: Conjugate, Rhs::Elem: Conjugate<Canonical = <Lhs::Elem as Conjugate>::Canonical>, <Lhs::Elem as Conjugate>::Canonical: ComplexField, Lhs::Kind: MatSub<Rhs::Kind>,

§

type Output = <<<Lhs as GenericMatrix>::Kind as MatSub<<Rhs as GenericMatrix>::Kind>>::Output as MatrixKind>::Own<<<Lhs as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: &Matrix<Rhs>) -> Self::Output

Performs the - operation. Read more
source§

impl<Lhs: GenericMatrix, Rhs: GenericMatrix> Sub<Matrix<Rhs>> for &Matrix<Lhs>
where Lhs::Elem: Conjugate, Rhs::Elem: Conjugate<Canonical = <Lhs::Elem as Conjugate>::Canonical>, <Lhs::Elem as Conjugate>::Canonical: ComplexField, Lhs::Kind: MatSub<Rhs::Kind>,

§

type Output = <<<Lhs as GenericMatrix>::Kind as MatSub<<Rhs as GenericMatrix>::Kind>>::Output as MatrixKind>::Own<<<Lhs as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Matrix<Rhs>) -> Self::Output

Performs the - operation. Read more
source§

impl<Lhs: GenericMatrix, Rhs: GenericMatrix> Sub<Matrix<Rhs>> for Matrix<Lhs>
where Lhs::Elem: Conjugate, Rhs::Elem: Conjugate<Canonical = <Lhs::Elem as Conjugate>::Canonical>, <Lhs::Elem as Conjugate>::Canonical: ComplexField, Lhs::Kind: MatSub<Rhs::Kind>,

§

type Output = <<<Lhs as GenericMatrix>::Kind as MatSub<<Rhs as GenericMatrix>::Kind>>::Output as MatrixKind>::Own<<<Lhs as GenericMatrix>::Elem as Conjugate>::Canonical>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Matrix<Rhs>) -> Self::Output

Performs the - operation. Read more
source§

impl<Lhs: GenericMatrixMut, Rhs: GenericMatrix> SubAssign<&Matrix<Rhs>> for Matrix<Lhs>
where Lhs::Elem: ComplexField, Rhs::Elem: Conjugate<Canonical = Lhs::Elem>, Lhs::Kind: MatSubAssign<Rhs::Kind>,

source§

fn sub_assign(&mut self, rhs: &Matrix<Rhs>)

Performs the -= operation. Read more
source§

impl<Lhs: GenericMatrixMut, Rhs: GenericMatrix> SubAssign<Matrix<Rhs>> for Matrix<Lhs>
where Lhs::Elem: ComplexField, Rhs::Elem: Conjugate<Canonical = Lhs::Elem>, Lhs::Kind: MatSubAssign<Rhs::Kind>,

source§

fn sub_assign(&mut self, rhs: Matrix<Rhs>)

Performs the -= operation. Read more
source§

impl<M: Copy> Copy for Matrix<M>

Auto Trait Implementations§

§

impl<M> RefUnwindSafe for Matrix<M>
where M: RefUnwindSafe,

§

impl<M> Send for Matrix<M>
where M: Send,

§

impl<M> Sync for Matrix<M>
where M: Sync,

§

impl<M> Unpin for Matrix<M>
where M: Unpin,

§

impl<M> UnwindSafe for Matrix<M>
where M: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Boilerplate for T
where T: Copy + Send + Sync + Debug + PartialEq + 'static,