module Data.Matrix.SmithNormalForm
( smithNormalForm
, invariantFactors
) where
import qualified Data.Matrix as M
import qualified Data.Vector as V
import qualified Data.Matrix.SmithNormalForm.Internal
smithNormalForm :: Integral a => M.Matrix a -> M.Matrix a
smithNormalForm :: Matrix a -> Matrix a
smithNormalForm = Matrix a -> Matrix a
forall a. Integral a => Matrix a -> Matrix a
Data.Matrix.SmithNormalForm.Internal.smithNF
invariantFactors :: Integral a => M.Matrix a -> [a]
invariantFactors :: Matrix a -> [a]
invariantFactors = Vector a -> [a]
forall a. Vector a -> [a]
V.toList (Vector a -> [a]) -> (Matrix a -> Vector a) -> Matrix a -> [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Matrix a -> Vector a
forall a. Matrix a -> Vector a
M.getDiag (Matrix a -> Vector a)
-> (Matrix a -> Matrix a) -> Matrix a -> Vector a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Matrix a -> Matrix a
forall a. Integral a => Matrix a -> Matrix a
smithNormalForm