packages feed

moonlight-linalg-0.1.0.0: src-dense/Moonlight/LinAlg/Pure/Dense/Field.hs

module Moonlight.LinAlg.Pure.Dense.Field
  ( DenseRankBackend,
    PLU (..),
    KernelBasis (..),
    pluDecompFullRank,
    rank,
    kernel,
  )
where

import GHC.TypeNats (KnownNat)
import Moonlight.Core (Field, MoonlightError)
import Moonlight.LinAlg.Internal.Backend.Core (DenseRankBackend, runKernel, runPluDecomp, runRank)
import Moonlight.LinAlg.Internal.Backend.PLU (PLU (..))
import Moonlight.LinAlg.Internal.Backend.RREF (KernelBasis (..))
import Moonlight.LinAlg.Pure.Dense.Types (Matrix)

pluDecompFullRank ::
  forall r c a.
  (KnownNat r, KnownNat c, Field a) =>
  Matrix r c a ->
  Either MoonlightError (PLU r c a)
pluDecompFullRank = runPluDecomp

rank ::
  forall r c a.
  (KnownNat r, KnownNat c, Eq a, Field a, DenseRankBackend a) =>
  Matrix r c a ->
  Either MoonlightError Int
rank = runRank

kernel ::
  forall r c a.
  (KnownNat r, KnownNat c, Eq a, Field a) =>
  Matrix r c a ->
  Either MoonlightError (KernelBasis c a)
kernel = runKernel