matrix-sized-0.1.1: Haskell matrix library with interface to C++ linear algebra libraries.

Safe HaskellNone
LanguageHaskell2010

Data.Matrix.Static.Generic

Contents

Synopsis

Documentation

type family Mutable (mat :: MatrixKind) = (mmat :: MMatrixKind) | mmat -> mat Source #

Instances
type Mutable Matrix Source # 
Instance details

Defined in Data.Matrix.Static.Dense

type Mutable SparseMatrix Source # 
Instance details

Defined in Data.Matrix.Static.Sparse

class (MMatrix (Mutable mat) (Mutable v) a, Vector v a) => Matrix (mat :: MatrixKind) v a where Source #

Methods

dim :: mat r c v a -> (Int, Int) Source #

unsafeIndex :: mat r c v a -> (Int, Int) -> a Source #

unsafeFromVector :: (SingI r, SingI c) => v a -> mat r c v a Source #

flatten :: mat r c v a -> v a Source #

Convert matrix to vector in column order. Default algorithm is O((m*n) * O(unsafeIndex)).

unsafeTakeRow :: mat r c v a -> Int -> v a Source #

Extract a row. Default algorithm is O(n * O(unsafeIndex)).

unsafeTakeColumn :: mat r c v a -> Int -> v a Source #

Extract a column. Default algorithm is O(m * O(unsafeIndex)).

takeDiag :: mat r c v a -> v a Source #

Extract the diagonal. Default algorithm is O(min(m,n) * O(unsafeIndex)).

transpose :: (SingI r, SingI c) => mat r c v a -> mat c r v a Source #

thaw :: PrimMonad s => mat r c v a -> s (Mutable mat r c (Mutable v) (PrimState s) a) Source #

unsafeThaw :: PrimMonad s => mat r c v a -> s (Mutable mat r c (Mutable v) (PrimState s) a) Source #

freeze :: PrimMonad s => Mutable mat r c (Mutable v) (PrimState s) a -> s (mat r c v a) Source #

unsafeFreeze :: PrimMonad s => Mutable mat r c (Mutable v) (PrimState s) a -> s (mat r c v a) Source #

map :: Vector v b => (a -> b) -> mat r c v a -> mat r c v b Source #

imap :: Vector v b => ((Int, Int) -> a -> b) -> mat r c v a -> mat r c v b Source #

imapM_ :: (Monad monad, Matrix mat v a) => ((Int, Int) -> a -> monad b) -> mat r c v a -> monad () Source #

sequence :: (Vector v (monad a), Monad monad) => mat r c v (monad a) -> monad (mat r c v a) Source #

sequence_ :: (Vector v (monad a), Monad monad) => mat r c v (monad a) -> monad () Source #

Instances
Vector v a => Matrix Matrix v a Source # 
Instance details

Defined in Data.Matrix.Static.Dense

Methods

dim :: Matrix r c v a -> (Int, Int) Source #

unsafeIndex :: Matrix r c v a -> (Int, Int) -> a Source #

unsafeFromVector :: (SingI r, SingI c) => v a -> Matrix r c v a Source #

flatten :: Matrix r c v a -> v a Source #

unsafeTakeRow :: Matrix r c v a -> Int -> v a Source #

unsafeTakeColumn :: Matrix r c v a -> Int -> v a Source #

takeDiag :: Matrix r c v a -> v a Source #

transpose :: (SingI r, SingI c) => Matrix r c v a -> Matrix c r v a Source #

thaw :: PrimMonad s => Matrix r c v a -> s (Mutable Matrix r c (Mutable v) (PrimState s) a) Source #

unsafeThaw :: PrimMonad s => Matrix r c v a -> s (Mutable Matrix r c (Mutable v) (PrimState s) a) Source #

freeze :: PrimMonad s => Mutable Matrix r c (Mutable v) (PrimState s) a -> s (Matrix r c v a) Source #

unsafeFreeze :: PrimMonad s => Mutable Matrix r c (Mutable v) (PrimState s) a -> s (Matrix r c v a) Source #

map :: Vector v b => (a -> b) -> Matrix r c v a -> Matrix r c v b Source #

imap :: Vector v b => ((Int, Int) -> a -> b) -> Matrix r c v a -> Matrix r c v b Source #

imapM_ :: (Monad monad, Matrix0 Matrix v a) => ((Int, Int) -> a -> monad b) -> Matrix r c v a -> monad () Source #

sequence :: (Vector v (monad a), Monad monad) => Matrix r c v (monad a) -> monad (Matrix r c v a) Source #

sequence_ :: (Vector v (monad a), Monad monad) => Matrix r c v (monad a) -> monad () Source #

(Vector v a, Zero a) => Matrix SparseMatrix v a Source # 
Instance details

Defined in Data.Matrix.Static.Sparse

Methods

dim :: SparseMatrix r c v a -> (Int, Int) Source #

unsafeIndex :: SparseMatrix r c v a -> (Int, Int) -> a Source #

unsafeFromVector :: (SingI r, SingI c) => v a -> SparseMatrix r c v a Source #

flatten :: SparseMatrix r c v a -> v a Source #

unsafeTakeRow :: SparseMatrix r c v a -> Int -> v a Source #

unsafeTakeColumn :: SparseMatrix r c v a -> Int -> v a Source #

takeDiag :: SparseMatrix r c v a -> v a Source #

transpose :: (SingI r, SingI c) => SparseMatrix r c v a -> SparseMatrix c r v a Source #

thaw :: PrimMonad s => SparseMatrix r c v a -> s (Mutable SparseMatrix r c (Mutable v) (PrimState s) a) Source #

unsafeThaw :: PrimMonad s => SparseMatrix r c v a -> s (Mutable SparseMatrix r c (Mutable v) (PrimState s) a) Source #

freeze :: PrimMonad s => Mutable SparseMatrix r c (Mutable v) (PrimState s) a -> s (SparseMatrix r c v a) Source #

unsafeFreeze :: PrimMonad s => Mutable SparseMatrix r c (Mutable v) (PrimState s) a -> s (SparseMatrix r c v a) Source #

map :: Vector v b => (a -> b) -> SparseMatrix r c v a -> SparseMatrix r c v b Source #

imap :: Vector v b => ((Int, Int) -> a -> b) -> SparseMatrix r c v a -> SparseMatrix r c v b Source #

imapM_ :: (Monad monad, Matrix SparseMatrix v a) => ((Int, Int) -> a -> monad b) -> SparseMatrix r c v a -> monad () Source #

sequence :: (Vector v (monad a), Monad monad) => SparseMatrix r c v (monad a) -> monad (SparseMatrix r c v a) Source #

sequence_ :: (Vector v (monad a), Monad monad) => SparseMatrix r c v (monad a) -> monad () Source #

type MatrixKind = Nat -> Nat -> (Type -> Type) -> Type -> Type Source #

Matrix query

rows :: Matrix m v a => m r c v a -> Int Source #

Derived methods

Return the number of rows

cols :: Matrix m v a => m r c v a -> Int Source #

Return the number of columns

(!) :: forall m r c v a i j. (Matrix m v a, i <= r, j <= c) => m r c v a -> (Sing i, Sing j) -> a Source #

Indexing

takeColumn :: forall m r c v a j. (j <= c, SingI j, Matrix m v a) => m r c v a -> Sing j -> v a Source #

Extract a row.

takeRow :: forall m r c v a i. (i <= r, SingI i, Matrix m v a) => m r c v a -> Sing i -> v a Source #

Extract a row.

toRows :: Matrix m v a => m r c v a -> [v a] Source #

O(m) Return the rows

toColumns :: Matrix m v a => m r c v a -> [v a] Source #

O(m*n) Return the columns

Matrix Construction

empty :: Matrix m v a => m 0 0 v a Source #

matrix :: (SingI r, SingI c, Matrix m v a) => [[a]] -> m r c v a Source #

fromRows :: (Matrix m v a, SingI r, SingI c) => [v a] -> m r c v a Source #

O(m*n) Create matrix from rows

fromColumns :: (Matrix m v a, SingI r, SingI c) => [v a] -> m r c v a Source #

O(m*n) Create matrix from columns

fromVector :: forall m r c v a. (SingI r, SingI c, Matrix m v a) => v a -> m r c v a Source #

Construct matrix from a vector containg columns.

fromList :: (SingI r, SingI c, Matrix m v a) => [a] -> m r c v a Source #

Construct matrix from a list containg columns.

toList :: Matrix m v a => m r c v a -> [a] Source #

O(m*n) Create a list by concatenating columns

create :: Matrix m v a => (forall s. ST s (Mutable m r c (Mutable v) s a)) -> m r c v a Source #

convertAny :: (Matrix m1 v1 a, Matrix m2 v2 a, SingI r, SingI c) => m1 r c v1 a -> m2 r c v2 a Source #

O(m*n) Convert to any type of matrix.

mapM :: (Vector v (monad b), Monad monad, Matrix mat v a, Matrix mat v b) => (a -> monad b) -> mat r c v a -> monad (mat r c v b) Source #

imapM :: (Vector v (monad b), Monad monad, Matrix mat v a, Matrix mat v b) => ((Int, Int) -> a -> monad b) -> mat r c v a -> monad (mat r c v b) Source #