{-# LANGUAGE TypeFamilies #-} module Numeric.LAPACK.Matrix.Symmetric.Linear ( determinant, ) where import qualified Numeric.LAPACK.Matrix.Symmetric.Unified as Symmetric import qualified Numeric.LAPACK.Matrix.Layout.Private as Layout import Numeric.LAPACK.Matrix.Symmetric.Basic (SymmetricP) import qualified Numeric.Netlib.Class as Class import qualified Data.Array.Comfort.Shape as Shape import Foreign.Ptr (Ptr) import Foreign.Storable (peek) determinant :: (Layout.Packing pack, Shape.C sh, Class.Floating a) => SymmetricP pack sh a -> a determinant :: SymmetricP pack sh a -> a determinant = ((Ptr a, Maybe (Ptr a, Ptr a)) -> IO a) -> SymmetricP pack sh a -> a forall mirror uplo sh a ar pack. (Mirror mirror, UpLo uplo, C sh, Floating a, Floating ar) => ((Ptr a, Maybe (Ptr a, Ptr a)) -> IO ar) -> Mosaic pack mirror uplo sh a -> ar Symmetric.determinant (Ptr a, Maybe (Ptr a, Ptr a)) -> IO a forall a. Floating a => (Ptr a, Maybe (Ptr a, Ptr a)) -> IO a peekBlockDeterminant peekBlockDeterminant :: (Class.Floating a) => (Ptr a, Maybe (Ptr a, Ptr a)) -> IO a peekBlockDeterminant :: (Ptr a, Maybe (Ptr a, Ptr a)) -> IO a peekBlockDeterminant (Ptr a a0Ptr,Maybe (Ptr a, Ptr a) ext) = do a a0 <- Ptr a -> IO a forall a. Storable a => Ptr a -> IO a peek Ptr a a0Ptr case Maybe (Ptr a, Ptr a) ext of Maybe (Ptr a, Ptr a) Nothing -> a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return a a0 Just (Ptr a a1Ptr,Ptr a bPtr) -> do a a1 <- Ptr a -> IO a forall a. Storable a => Ptr a -> IO a peek Ptr a a1Ptr a b <- Ptr a -> IO a forall a. Storable a => Ptr a -> IO a peek Ptr a bPtr a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return (a a0a -> a -> a forall a. Num a => a -> a -> a *a a1 a -> a -> a forall a. Num a => a -> a -> a - a ba -> a -> a forall a. Num a => a -> a -> a *a b)