Matrix

Struct Matrix 

Source
pub struct Matrix<Set: Clone> { /* private fields */ }

Implementations§

Source§

impl<F: MetaType> Matrix<F>

Source§

impl<F: MetaType> Matrix<F>

Source§

impl<R: MetaType> Matrix<R>

Source

pub fn row_hermite_algorithm(&self) -> (Self, Self, R, Vec<usize>)

Source

pub fn col_hermite_algorithm(&self) -> (Self, Self, R, Vec<usize>)

Source

pub fn det(&self) -> Result<R, MatOppErr>

Source

pub fn rank(&self) -> usize

Source§

impl<R: MetaType> Matrix<R>

Source§

impl<Set: Clone> Matrix<Set>

Source

pub fn full(rows: usize, cols: usize, elem: &Set) -> Self

Source

pub fn construct( rows: usize, cols: usize, make_entry: impl Fn(usize, usize) -> Set, ) -> Self

Construct a matrix from a closure.

use algebraeon_nzq::Integer;
use algebraeon_rings::matrix::Matrix;
let a = Matrix::<Integer>::construct(2, 3, |r, c| if (r + c) % 2 == 0 { Integer::ZERO } else { Integer::ONE });
let b = Matrix::<Integer>::from_rows(
    vec![
        vec![Integer::ZERO, Integer::ONE, Integer::ZERO],
        vec![Integer::ONE, Integer::ZERO, Integer::ONE]
    ]
);
assert_eq!(a, b);
Source

pub fn from_rows(rows_elems: Vec<Vec<impl Into<Set> + Clone>>) -> Self

Construct a matrix from a list of rows.

Source

pub fn from_cols(cols_elems: Vec<Vec<impl Into<Set> + Clone>>) -> Self

Construct a matrix from a list of columns.

Source

pub fn from_row(elems: Vec<impl Into<Set> + Clone>) -> Self

Construct a matrix from a row.

Source

pub fn from_col(elems: Vec<impl Into<Set> + Clone>) -> Self

Construct a matrix from a column.

Source

pub fn at(&self, r: usize, c: usize) -> Result<&Set, MatOppErr>

Get a reference to the entry at row r and column c.

Source

pub fn at_mut(&mut self, r: usize, c: usize) -> Result<&mut Set, MatOppErr>

Get a mutable reference to the entry at row r and column c.

Source

pub fn rows(&self) -> usize

Source

pub fn cols(&self) -> usize

Source

pub fn submatrix(&self, rows: Vec<usize>, cols: Vec<usize>) -> Self

Return the submatrix given by the intersection of the rows defined by rows and the columns defined by cols.

Source

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

Source

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

Source

pub fn get_row_refs(&self, row: usize) -> Vec<&Set>

Source

pub fn get_col_refs(&self, col: usize) -> Vec<&Set>

Source

pub fn get_row(&self, row: usize) -> Vec<Set>

Source

pub fn get_col(&self, col: usize) -> Vec<Set>

Source

pub fn apply_map<NewSet: Clone>( &self, f: impl Fn(&Set) -> NewSet, ) -> Matrix<NewSet>

Apply a function f to the entries of this matrix, producing a new matrix.

Source

pub fn transpose(self) -> Self

Source

pub fn transpose_ref(&self) -> Self

Source

pub fn transpose_mut(&mut self)

Source

pub fn flip_rows(self) -> Self

Source

pub fn flip_rows_ref(&self) -> Self

Source

pub fn flip_rows_mut(&mut self)

Source

pub fn flip_cols(self) -> Self

Source

pub fn flip_cols_ref(&self) -> Self

Source

pub fn flip_cols_mut(&mut self)

Source

pub fn join_rows<MatT: Borrow<Matrix<Set>>>( cols: usize, mats: Vec<MatT>, ) -> Matrix<Set>

Concatenate the rows of the matrices in mats into a single matrix.

cols must match the number of columns of every matrix in mats. The purpose of this input is to produce an empty matrix of the correct dimension when mats is empty.

§Panics

This function panics if cols does not match the number of columns of every matrix in mats.

Source

pub fn join_cols<MatT: Borrow<Matrix<Set>>>( rows: usize, mats: Vec<MatT>, ) -> Matrix<Set>

Concatenate the columns of the matrices in mats into a single matrix.

rows must match the number of rows of every matrix in mats. The purpose of this input is to produce an empty matrix of the correct dimension when mats is empty.

§Panics

This function panics if rows does not match the number of rows of every matrix in mats.

Source

pub fn entries_list(&self) -> Vec<&Set>

Return a vector containing the entries of this matrix.

Most useful when this matrix is a row vector or a column vector.

Source§

impl<R: MetaType> Matrix<R>

Source

pub fn pprint(&self)

Source§

impl<R: MetaType> Matrix<R>

Source

pub fn zero(rows: usize, cols: usize) -> Self

Source

pub fn ident(n: usize) -> Self

Source

pub fn diag(diag: &[R]) -> Self

Source

pub fn dot(a: &Self, b: &Self) -> R

Source

pub fn add_mut(&mut self, b: &Self) -> Result<(), MatOppErr>

Source

pub fn add(a: &Self, b: &Self) -> Result<Self, MatOppErr>

Source

pub fn neg_mut(&mut self)

Source

pub fn neg(&self) -> Self

Source

pub fn mul(a: &Self, b: &Self) -> Result<Self, MatOppErr>

Source

pub fn apply_row(&self, row: &[R]) -> Vec<R>

Source

pub fn apply_col(&self, col: &[R]) -> Vec<R>

Source

pub fn mul_scalar(&self, scalar: &R) -> Matrix<R>

Source

pub fn mul_scalar_ref(&self, scalar: &R) -> Matrix<R>

Source

pub fn det_naive(&self) -> Result<R, MatOppErr>

Source

pub fn trace(&self) -> Result<R, MatOppErr>

Source§

impl<F: MetaType> Matrix<F>

Source§

impl<R: MetaType> Matrix<R>

Source

pub fn factor_primitive(self) -> Option<(R, Matrix<R>)>

Source

pub fn primitive_part(self) -> Option<Matrix<R>>

Source§

impl<Field: MetaType> Matrix<Field>

Source

pub fn factor_primitive_fof(&self) -> (Field, Matrix<Integer>)

Source§

impl<R: MetaType> Matrix<R>

Source

pub fn smith_algorithm(&self) -> (Self, Self, Self, usize)

Trait Implementations§

Source§

impl<Set: Clone + Clone> Clone for Matrix<Set>

Source§

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

Returns a duplicate 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<Set: Debug + Clone> Debug for Matrix<Set>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<R: MetaType> MetaType for Matrix<R>

Source§

impl<R: MetaType> PartialEq for Matrix<R>

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<R: MetaType> Eq for Matrix<R>

Auto Trait Implementations§

§

impl<Set> Freeze for Matrix<Set>

§

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

§

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

§

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

§

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

§

impl<Set> UnwindSafe for Matrix<Set>
where Set: 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

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

Source§

fn exact_from(value: T) -> U

Source§

impl<T, U> ExactInto<U> for T
where U: ExactFrom<T>,

Source§

fn exact_into(self) -> U

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.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoErgonomic for T
where T: MetaType,

Source§

impl<T, U> OverflowingInto<U> for T
where U: OverflowingFrom<T>,

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

impl<T, U> RoundingInto<U> for T
where U: RoundingFrom<T>,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> SaturatingInto<U> for T
where U: SaturatingFrom<T>,

Source§

impl<T> ToDebugString for T
where T: Debug,

Source§

fn to_debug_string(&self) -> String

Returns the String produced by Ts Debug implementation.

§Examples
use malachite_base::strings::ToDebugString;

assert_eq!([1, 2, 3].to_debug_string(), "[1, 2, 3]");
assert_eq!(
    [vec![2, 3], vec![], vec![4]].to_debug_string(),
    "[[2, 3], [], [4]]"
);
assert_eq!(Some(5).to_debug_string(), "Some(5)");
Source§

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

Source§

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>,

Source§

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>,

Source§

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T, U> WrappingInto<U> for T
where U: WrappingFrom<T>,

Source§

fn wrapping_into(self) -> U

Source§

impl<Domain, Range, M, BM> BorrowedMorphism<Domain, Range, M> for BM
where Domain: Signature, Range: Signature, M: Morphism<Domain, Range>, BM: Borrow<M> + Clone + Debug + Send + Sync,

Source§

impl<S, BS> BorrowedSet<S> for BS
where BS: Borrow<S> + Clone + Debug + Send + Sync,

Source§

impl<S, BS> BorrowedStructure<S> for BS
where S: Signature, BS: Borrow<S> + Clone + Debug + Eq + Send + Sync,