module LevMar.Utils
( LinearConstraints
, noLinearConstraints
, Matrix
, CovarMatrix
, convertLinearConstraints
, convertResult
) where
import qualified LevMar.Intermediate as LMA_I
import TypeLevelNat ( Nat, Z )
import SizedList ( SizedList, toList, unsafeFromList )
type LinearConstraints k n r = (Matrix k n r, SizedList k r)
noLinearConstraints :: Nat n => Maybe (LinearConstraints Z n r)
noLinearConstraints = Nothing
type Matrix n m r = SizedList n (SizedList m r)
type CovarMatrix n r = Matrix n n r
convertLinearConstraints :: (Nat k, Nat n) => LinearConstraints k n r -> LMA_I.LinearConstraints r
convertLinearConstraints (cMat, rhcVec) = ( map toList $ toList cMat
, toList rhcVec
)
convertResult :: (Nat n)
=> ([r], LMA_I.Info r, LMA_I.CovarMatrix r)
-> (SizedList n r, LMA_I.Info r, CovarMatrix n r)
convertResult (psResult, info, covar) = ( unsafeFromList psResult
, info
, unsafeFromList $ map unsafeFromList covar
)