module Numeric.LAPACK.ComfortArray.Example where import qualified Numeric.LAPACK.FFI.Real as Lapack import qualified Numeric.Netlib.Class as Class import qualified Numeric.Netlib.ComfortArray.Utility as Call import Numeric.Netlib.ComfortArray.Utility (ZeroInt) import qualified Data.Array.Comfort.Storable.Mutable as MutArray import qualified Data.Array.Comfort.Storable as Array import qualified Data.Array.Comfort.Shape as Shape import Data.Array.Comfort.Storable.Mutable (IOArray) import Data.Array.Comfort.Storable (Array) import qualified Foreign.C.Types as C import Foreign.Storable (peek) import Foreign.Ptr (Ptr, FunPtr) import Control.Monad.Trans.Cont (evalContT) import Control.Monad.IO.Class (liftIO) import Control.Applicative (pure, (<*>)) choleskyDecompose :: (Class.Real a) => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IO () choleskyDecompose :: Char -> Int -> IOArray (ZeroInt, ZeroInt) a -> IO () choleskyDecompose Char uplo Int kd IOArray (ZeroInt, ZeroInt) a ab = do let (ZeroInt n,ZeroInt ldab) = IOArray (ZeroInt, ZeroInt) a -> (ZeroInt, ZeroInt) forall (m :: * -> *) sh a. Array m sh a -> sh MutArray.shape IOArray (ZeroInt, ZeroInt) a ab ContT () IO () -> IO () forall (m :: * -> *) r. Monad m => ContT r m r -> m r evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO () forall a b. (a -> b) -> a -> b $ String -> FortranIO () (Ptr CInt -> IO ()) -> ContT () IO () forall r a. String -> FortranIO r (Ptr CInt -> IO a) -> FortranIO r a Call.runChecked String "Banded.choleskyDecompose" (FortranIO () (Ptr CInt -> IO ()) -> ContT () IO ()) -> FortranIO () (Ptr CInt -> IO ()) -> ContT () IO () forall a b. (a -> b) -> a -> b $ (Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a. Applicative f => a -> f a pure Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO () forall a. Real a => Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO () Lapack.pbtrf ContT () IO (Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CChar) -> ContT () IO (Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Char -> ContT () IO (Ptr CChar) forall r. Char -> FortranIO r (Ptr CChar) Call.char Char uplo ContT () IO (Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> ContT () IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ZeroInt -> ContT () IO (Ptr CInt) forall sh r. C sh => sh -> FortranIO r (Ptr CInt) Call.shapeSize ZeroInt n ContT () IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> ContT () IO (Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Int -> ContT () IO (Ptr CInt) forall r. Int -> FortranIO r (Ptr CInt) Call.cint Int kd ContT () IO (Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr a) -> ContT () IO (Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> IOArray (ZeroInt, ZeroInt) a -> ContT () IO (Ptr a) forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a) Call.ioarray IOArray (ZeroInt, ZeroInt) a ab ContT () IO (Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> FortranIO () (Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ZeroInt -> ContT () IO (Ptr CInt) forall sh r. C sh => sh -> FortranIO r (Ptr CInt) Call.shapeSize ZeroInt ldab choleskySolve :: (Class.Real a) => Char -> Int -> Array (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> IO () choleskySolve :: Char -> Int -> Array (ZeroInt, ZeroInt) a -> IOArray (ZeroInt, ZeroInt) a -> IO () choleskySolve Char uplo Int kd Array (ZeroInt, ZeroInt) a ab IOArray (ZeroInt, ZeroInt) a b = do let (ZeroInt n,ZeroInt ldab) = Array (ZeroInt, ZeroInt) a -> (ZeroInt, ZeroInt) forall sh a. Array sh a -> sh Array.shape Array (ZeroInt, ZeroInt) a ab let (ZeroInt nrhs,ZeroInt ldb) = IOArray (ZeroInt, ZeroInt) a -> (ZeroInt, ZeroInt) forall (m :: * -> *) sh a. Array m sh a -> sh MutArray.shape IOArray (ZeroInt, ZeroInt) a b ContT () IO () -> IO () forall (m :: * -> *) r. Monad m => ContT r m r -> m r evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO () forall a b. (a -> b) -> a -> b $ String -> FortranIO () (Ptr CInt -> IO ()) -> ContT () IO () forall r a. String -> FortranIO r (Ptr CInt -> IO a) -> FortranIO r a Call.runChecked String "Banded.choleskySolve" (FortranIO () (Ptr CInt -> IO ()) -> ContT () IO ()) -> FortranIO () (Ptr CInt -> IO ()) -> ContT () IO () forall a b. (a -> b) -> a -> b $ (Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a. Applicative f => a -> f a pure Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO () forall a. Real a => Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO () Lapack.pbtrs ContT () IO (Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CChar) -> ContT () IO (Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Char -> ContT () IO (Ptr CChar) forall r. Char -> FortranIO r (Ptr CChar) Call.char Char uplo ContT () IO (Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> ContT () IO (Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ZeroInt -> ContT () IO (Ptr CInt) forall sh r. C sh => sh -> FortranIO r (Ptr CInt) Call.shapeSize ZeroInt n ContT () IO (Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> ContT () IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Int -> ContT () IO (Ptr CInt) forall r. Int -> FortranIO r (Ptr CInt) Call.cint Int kd ContT () IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> ContT () IO (Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ZeroInt -> ContT () IO (Ptr CInt) forall sh r. C sh => sh -> FortranIO r (Ptr CInt) Call.shapeSize ZeroInt nrhs ContT () IO (Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr a) -> ContT () IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Array (ZeroInt, ZeroInt) a -> ContT () IO (Ptr a) forall a i r. Storable a => Array i a -> FortranIO r (Ptr a) Call.array Array (ZeroInt, ZeroInt) a ab ContT () IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> ContT () IO (Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ZeroInt -> ContT () IO (Ptr CInt) forall sh r. C sh => sh -> FortranIO r (Ptr CInt) Call.shapeSize ZeroInt ldab ContT () IO (Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr a) -> ContT () IO (Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> IOArray (ZeroInt, ZeroInt) a -> ContT () IO (Ptr a) forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a) Call.ioarray IOArray (ZeroInt, ZeroInt) a b ContT () IO (Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> FortranIO () (Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ZeroInt -> ContT () IO (Ptr CInt) forall sh r. C sh => sh -> FortranIO r (Ptr CInt) Call.shapeSize ZeroInt ldb leastSquares :: (Class.Real a) => Char -> Int -> IOArray (ZeroInt,ZeroInt) a -> IOArray (ZeroInt,ZeroInt) a -> Int -> IO () leastSquares :: Char -> Int -> IOArray (ZeroInt, ZeroInt) a -> IOArray (ZeroInt, ZeroInt) a -> Int -> IO () leastSquares Char trans Int m IOArray (ZeroInt, ZeroInt) a a IOArray (ZeroInt, ZeroInt) a b Int lwork = do let (ZeroInt n,ZeroInt lda) = IOArray (ZeroInt, ZeroInt) a -> (ZeroInt, ZeroInt) forall (m :: * -> *) sh a. Array m sh a -> sh MutArray.shape IOArray (ZeroInt, ZeroInt) a a let (ZeroInt nrhs,ZeroInt ldb) = IOArray (ZeroInt, ZeroInt) a -> (ZeroInt, ZeroInt) forall (m :: * -> *) sh a. Array m sh a -> sh MutArray.shape IOArray (ZeroInt, ZeroInt) a b ContT () IO () -> IO () forall (m :: * -> *) r. Monad m => ContT r m r -> m r evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO () forall a b. (a -> b) -> a -> b $ String -> FortranIO () (Ptr CInt -> IO ()) -> ContT () IO () forall r a. String -> FortranIO r (Ptr CInt -> IO a) -> FortranIO r a Call.runChecked String "Dense.leastSquares" (FortranIO () (Ptr CInt -> IO ()) -> ContT () IO ()) -> FortranIO () (Ptr CInt -> IO ()) -> ContT () IO () forall a b. (a -> b) -> a -> b $ (Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a. Applicative f => a -> f a pure Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO () forall a. Real a => Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO () Lapack.gels ContT () IO (Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CChar) -> ContT () IO (Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Char -> ContT () IO (Ptr CChar) forall r. Char -> FortranIO r (Ptr CChar) Call.char Char trans ContT () IO (Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> ContT () IO (Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Int -> ContT () IO (Ptr CInt) forall r. Int -> FortranIO r (Ptr CInt) Call.cint Int m ContT () IO (Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> ContT () IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ZeroInt -> ContT () IO (Ptr CInt) forall sh r. C sh => sh -> FortranIO r (Ptr CInt) Call.shapeSize ZeroInt n ContT () IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> ContT () IO (Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ZeroInt -> ContT () IO (Ptr CInt) forall sh r. C sh => sh -> FortranIO r (Ptr CInt) Call.shapeSize ZeroInt nrhs ContT () IO (Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr a) -> ContT () IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> IOArray (ZeroInt, ZeroInt) a -> ContT () IO (Ptr a) forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a) Call.ioarray IOArray (ZeroInt, ZeroInt) a a ContT () IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> ContT () IO (Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ZeroInt -> ContT () IO (Ptr CInt) forall sh r. C sh => sh -> FortranIO r (Ptr CInt) Call.shapeSize ZeroInt lda ContT () IO (Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr a) -> ContT () IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> IOArray (ZeroInt, ZeroInt) a -> ContT () IO (Ptr a) forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a) Call.ioarray IOArray (ZeroInt, ZeroInt) a b ContT () IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> ContT () IO (Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ZeroInt -> ContT () IO (Ptr CInt) forall sh r. C sh => sh -> FortranIO r (Ptr CInt) Call.shapeSize ZeroInt ldb ContT () IO (Ptr a -> Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr a) -> ContT () IO (Ptr CInt -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Int -> ContT () IO (Ptr a) forall a r. Storable a => Int -> FortranIO r (Ptr a) Call.allocaArray Int lwork ContT () IO (Ptr CInt -> Ptr CInt -> IO ()) -> ContT () IO (Ptr CInt) -> FortranIO () (Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Int -> ContT () IO (Ptr CInt) forall r. Int -> FortranIO r (Ptr CInt) Call.cint Int lwork eigenvalues :: Class.Real a => Char -> Char -> FunPtr (Ptr a -> Ptr a -> IO Bool) -> IOArray (ZeroInt,ZeroInt) a -> ZeroInt -> Int -> IO (C.CInt, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt,ZeroInt) a) eigenvalues :: Char -> Char -> FunPtr (Ptr a -> Ptr a -> IO Bool) -> IOArray (ZeroInt, ZeroInt) a -> ZeroInt -> Int -> IO (CInt, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt, ZeroInt) a) eigenvalues Char jobvs Char sort FunPtr (Ptr a -> Ptr a -> IO Bool) select IOArray (ZeroInt, ZeroInt) a a ZeroInt ldvs Int lwork = do let (ZeroInt n,ZeroInt lda) = IOArray (ZeroInt, ZeroInt) a -> (ZeroInt, ZeroInt) forall (m :: * -> *) sh a. Array m sh a -> sh MutArray.shape IOArray (ZeroInt, ZeroInt) a a IOArray ZeroInt a wr <- ZeroInt -> IO (IOArray ZeroInt a) forall sh e. (C sh, Storable e) => sh -> IO (IOArray sh e) Call.newArray ZeroInt n IOArray ZeroInt a wi <- ZeroInt -> IO (IOArray ZeroInt a) forall sh e. (C sh, Storable e) => sh -> IO (IOArray sh e) Call.newArray ZeroInt n IOArray (ZeroInt, ZeroInt) a vs <- (ZeroInt, ZeroInt) -> IO (IOArray (ZeroInt, ZeroInt) a) forall sh e. (C sh, Storable e) => sh -> IO (IOArray sh e) Call.newArray (ZeroInt n,ZeroInt ldvs) CInt sdim <- ContT CInt IO CInt -> IO CInt forall (m :: * -> *) r. Monad m => ContT r m r -> m r evalContT (ContT CInt IO CInt -> IO CInt) -> ContT CInt IO CInt -> IO CInt forall a b. (a -> b) -> a -> b $ do Ptr CInt sdimPtr <- FortranIO CInt (Ptr CInt) forall a r. Storable a => FortranIO r (Ptr a) Call.alloca String -> FortranIO CInt (Ptr CInt -> IO ()) -> FortranIO CInt () forall r a. String -> FortranIO r (Ptr CInt -> IO a) -> FortranIO r a Call.runChecked String "Dense.eigenvalues" (FortranIO CInt (Ptr CInt -> IO ()) -> FortranIO CInt ()) -> FortranIO CInt (Ptr CInt -> IO ()) -> FortranIO CInt () forall a b. (a -> b) -> a -> b $ (Ptr CChar -> Ptr CChar -> FunPtr (Ptr a -> Ptr a -> IO Bool) -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> ContT CInt IO (Ptr CChar -> Ptr CChar -> FunPtr (Ptr a -> Ptr a -> IO Bool) -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a. Applicative f => a -> f a pure Ptr CChar -> Ptr CChar -> FunPtr (Ptr a -> Ptr a -> IO Bool) -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO () forall a. Real a => Ptr CChar -> Ptr CChar -> FunPtr (Ptr a -> Ptr a -> IO Bool) -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO () Lapack.gees ContT CInt IO (Ptr CChar -> Ptr CChar -> FunPtr (Ptr a -> Ptr a -> IO Bool) -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> ContT CInt IO (Ptr CChar) -> ContT CInt IO (Ptr CChar -> FunPtr (Ptr a -> Ptr a -> IO Bool) -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Char -> ContT CInt IO (Ptr CChar) forall r. Char -> FortranIO r (Ptr CChar) Call.char Char jobvs ContT CInt IO (Ptr CChar -> FunPtr (Ptr a -> Ptr a -> IO Bool) -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> ContT CInt IO (Ptr CChar) -> ContT CInt IO (FunPtr (Ptr a -> Ptr a -> IO Bool) -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Char -> ContT CInt IO (Ptr CChar) forall r. Char -> FortranIO r (Ptr CChar) Call.char Char sort ContT CInt IO (FunPtr (Ptr a -> Ptr a -> IO Bool) -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> ContT CInt IO (FunPtr (Ptr a -> Ptr a -> IO Bool)) -> ContT CInt IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> FunPtr (Ptr a -> Ptr a -> IO Bool) -> ContT CInt IO (FunPtr (Ptr a -> Ptr a -> IO Bool)) forall (f :: * -> *) a. Applicative f => a -> f a pure FunPtr (Ptr a -> Ptr a -> IO Bool) select ContT CInt IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> FortranIO CInt (Ptr CInt) -> ContT CInt IO (Ptr a -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ZeroInt -> FortranIO CInt (Ptr CInt) forall sh r. C sh => sh -> FortranIO r (Ptr CInt) Call.shapeSize ZeroInt n ContT CInt IO (Ptr a -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> ContT CInt IO (Ptr a) -> ContT CInt IO (Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> IOArray (ZeroInt, ZeroInt) a -> ContT CInt IO (Ptr a) forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a) Call.ioarray IOArray (ZeroInt, ZeroInt) a a ContT CInt IO (Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> FortranIO CInt (Ptr CInt) -> ContT CInt IO (Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ZeroInt -> FortranIO CInt (Ptr CInt) forall sh r. C sh => sh -> FortranIO r (Ptr CInt) Call.shapeSize ZeroInt lda ContT CInt IO (Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> FortranIO CInt (Ptr CInt) -> ContT CInt IO (Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Ptr CInt -> FortranIO CInt (Ptr CInt) forall (f :: * -> *) a. Applicative f => a -> f a pure Ptr CInt sdimPtr ContT CInt IO (Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> ContT CInt IO (Ptr a) -> ContT CInt IO (Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> IOArray ZeroInt a -> ContT CInt IO (Ptr a) forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a) Call.ioarray IOArray ZeroInt a wr ContT CInt IO (Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> ContT CInt IO (Ptr a) -> ContT CInt IO (Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> IOArray ZeroInt a -> ContT CInt IO (Ptr a) forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a) Call.ioarray IOArray ZeroInt a wi ContT CInt IO (Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> ContT CInt IO (Ptr a) -> ContT CInt IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> IOArray (ZeroInt, ZeroInt) a -> ContT CInt IO (Ptr a) forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a) Call.ioarray IOArray (ZeroInt, ZeroInt) a vs ContT CInt IO (Ptr CInt -> Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> FortranIO CInt (Ptr CInt) -> ContT CInt IO (Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ZeroInt -> FortranIO CInt (Ptr CInt) forall sh r. C sh => sh -> FortranIO r (Ptr CInt) Call.shapeSize ZeroInt ldvs ContT CInt IO (Ptr a -> Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> ContT CInt IO (Ptr a) -> ContT CInt IO (Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Int -> ContT CInt IO (Ptr a) forall a r. Storable a => Int -> FortranIO r (Ptr a) Call.allocaArray Int lwork ContT CInt IO (Ptr CInt -> Ptr Bool -> Ptr CInt -> IO ()) -> FortranIO CInt (Ptr CInt) -> ContT CInt IO (Ptr Bool -> Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Int -> FortranIO CInt (Ptr CInt) forall r. Int -> FortranIO r (Ptr CInt) Call.cint Int lwork ContT CInt IO (Ptr Bool -> Ptr CInt -> IO ()) -> ContT CInt IO (Ptr Bool) -> FortranIO CInt (Ptr CInt -> IO ()) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Int -> ContT CInt IO (Ptr Bool) forall a r. Storable a => Int -> FortranIO r (Ptr a) Call.allocaArray (ZeroInt -> Int forall sh. C sh => sh -> Int Shape.size ZeroInt n) IO CInt -> ContT CInt IO CInt forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO CInt -> ContT CInt IO CInt) -> IO CInt -> ContT CInt IO CInt forall a b. (a -> b) -> a -> b $ Ptr CInt -> IO CInt forall a. Storable a => Ptr a -> IO a peek Ptr CInt sdimPtr (CInt -> Array ZeroInt a -> Array ZeroInt a -> Array (ZeroInt, ZeroInt) a -> (CInt, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt, ZeroInt) a)) -> IO (CInt -> Array ZeroInt a -> Array ZeroInt a -> Array (ZeroInt, ZeroInt) a -> (CInt, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt, ZeroInt) a)) forall (f :: * -> *) a. Applicative f => a -> f a pure (,,,) IO (CInt -> Array ZeroInt a -> Array ZeroInt a -> Array (ZeroInt, ZeroInt) a -> (CInt, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt, ZeroInt) a)) -> IO CInt -> IO (Array ZeroInt a -> Array ZeroInt a -> Array (ZeroInt, ZeroInt) a -> (CInt, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt, ZeroInt) a)) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> CInt -> IO CInt forall (f :: * -> *) a. Applicative f => a -> f a pure CInt sdim IO (Array ZeroInt a -> Array ZeroInt a -> Array (ZeroInt, ZeroInt) a -> (CInt, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt, ZeroInt) a)) -> IO (Array ZeroInt a) -> IO (Array ZeroInt a -> Array (ZeroInt, ZeroInt) a -> (CInt, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt, ZeroInt) a)) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> IOArray ZeroInt a -> IO (Array ZeroInt a) forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e) Call.freezeArray IOArray ZeroInt a wr IO (Array ZeroInt a -> Array (ZeroInt, ZeroInt) a -> (CInt, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt, ZeroInt) a)) -> IO (Array ZeroInt a) -> IO (Array (ZeroInt, ZeroInt) a -> (CInt, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt, ZeroInt) a)) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> IOArray ZeroInt a -> IO (Array ZeroInt a) forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e) Call.freezeArray IOArray ZeroInt a wi IO (Array (ZeroInt, ZeroInt) a -> (CInt, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt, ZeroInt) a)) -> IO (Array (ZeroInt, ZeroInt) a) -> IO (CInt, Array ZeroInt a, Array ZeroInt a, Array (ZeroInt, ZeroInt) a) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> IOArray (ZeroInt, ZeroInt) a -> IO (Array (ZeroInt, ZeroInt) a) forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e) Call.freezeArray IOArray (ZeroInt, ZeroInt) a vs