{-# LANGUAGE CPP #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
#if MIN_VERSION_base(4,12,0)
{-# LANGUAGE NoStarIsType #-}
#endif
module Numeric.LinearAlgebra.Static.Vector (
rVec
, vecR
, cVec
, vecC
, lRows
, rowsL
, lCols
, colsL
, lVec
, vecL
, mRows
, rowsM
, mCols
, colsM
, mVec
, vecM
) where
import Data.Foldable
import Data.Proxy
import GHC.TypeLits
import Unsafe.Coerce
import qualified Data.Vector as UV
import qualified Data.Vector.Sized as V
import qualified Data.Vector.Storable.Sized as VS
import qualified Numeric.LinearAlgebra as HU
import qualified Numeric.LinearAlgebra.Static as H
rVec :: H.R n -> VS.Vector n H.ℝ
rVec = unsafeCoerce
vecR :: VS.Vector n H.ℝ -> H.R n
vecR = unsafeCoerce
cVec :: H.C n -> VS.Vector n H.ℂ
cVec = unsafeCoerce
vecC :: VS.Vector n H.ℂ -> H.C n
vecC = unsafeCoerce
lRows
:: forall m n. ()
=> H.L m n
-> V.Vector m (H.R n)
lRows = unsafeCoerce
. UV.fromList
. HU.toRows
. (unsafeCoerce :: H.L m n -> HU.Matrix Double)
rowsL
:: forall m n. ()
=> V.Vector m (H.R n)
-> H.L m n
rowsL = (unsafeCoerce :: HU.Matrix Double -> H.L m n)
. HU.fromRows
. map (unsafeCoerce :: H.R n -> HU.Vector Double)
. toList
lCols
:: forall m n. ()
=> H.L m n
-> V.Vector n (H.R m)
lCols = unsafeCoerce
. UV.fromList
. HU.toColumns
. (unsafeCoerce :: H.L m n -> HU.Matrix Double)
colsL
:: forall m n. ()
=> V.Vector n (H.R m)
-> H.L m n
colsL = (unsafeCoerce :: HU.Matrix Double -> H.L m n)
. HU.fromColumns
. map (unsafeCoerce :: H.R m -> HU.Vector Double)
. toList
mRows
:: forall m n. ()
=> H.M m n
-> V.Vector m (H.C n)
mRows = unsafeCoerce
. UV.fromList
. HU.toRows
. (unsafeCoerce :: H.M m n -> HU.Matrix H.ℂ)
rowsM
:: forall m n. ()
=> V.Vector m (H.C n)
-> H.M m n
rowsM = (unsafeCoerce :: HU.Matrix H.ℂ -> H.M m n)
. HU.fromRows
. map (unsafeCoerce :: H.C n -> HU.Vector H.ℂ)
. toList
mCols
:: forall m n. ()
=> H.M m n
-> V.Vector n (H.C m)
mCols = unsafeCoerce
. UV.fromList
. HU.toColumns
. (unsafeCoerce :: H.M m n -> HU.Matrix H.ℂ)
colsM
:: forall m n. ()
=> V.Vector n (H.C m)
-> H.M m n
colsM = (unsafeCoerce :: HU.Matrix H.ℂ -> H.M m n)
. HU.fromColumns
. map (unsafeCoerce :: H.C m -> HU.Vector H.ℂ)
. toList
vecL
:: forall m n. KnownNat n
=> VS.Vector (m * n) H.ℝ
-> H.L m n
vecL = (unsafeCoerce :: HU.Matrix H.ℝ -> H.L m n)
. HU.reshape (fromIntegral (natVal (Proxy @n)))
. unsafeCoerce
lVec
:: forall m n. ()
=> H.L m n
-> VS.Vector (m * n) H.ℝ
lVec = unsafeCoerce
. HU.flatten
. (unsafeCoerce :: H.L m n -> HU.Matrix H.ℝ)
vecM
:: forall m n. KnownNat n
=> VS.Vector (m * n) H.ℂ
-> H.M m n
vecM = (unsafeCoerce :: HU.Matrix H.ℂ -> H.M m n)
. HU.reshape (fromIntegral (natVal (Proxy @n)))
. unsafeCoerce
mVec
:: forall m n. ()
=> H.M m n
-> VS.Vector (m * n) H.ℂ
mVec = unsafeCoerce
. HU.flatten
. (unsafeCoerce :: H.M m n -> HU.Matrix H.ℂ)